From 5507209e8231ec16b671cc4ea8f0831964e04b5c Mon Sep 17 00:00:00 2001 From: Luni-4 Date: Thu, 11 Feb 2021 12:17:05 +0100 Subject: [PATCH] Generate mozcpp grammar automatically --- generate-moz-grammars/generate-mozcpp.sh | 73 ++++++++++++++++++++++++ tree-sitter-mozcpp/grammar.js | 2 +- 2 files changed, 74 insertions(+), 1 deletion(-) create mode 100755 generate-moz-grammars/generate-mozcpp.sh diff --git a/generate-moz-grammars/generate-mozcpp.sh b/generate-moz-grammars/generate-mozcpp.sh new file mode 100755 index 000000000..0e95c54b0 --- /dev/null +++ b/generate-moz-grammars/generate-mozcpp.sh @@ -0,0 +1,73 @@ +#!/bin/bash + +# This script updates the mozcpp grammar automatically. +# +# Usage: ./generate-moz-grammars/generate-mozcpp.sh + +# FIXME we need to remove this line once we are going to use +# the tree-sitter-cpp bindings +# Get the tree-sitter-cpp submodule version +TS_CPP_VERSION=`git submodule status tree-sitter-cpp | awk '{ print $1 }'` + +# Enter the mozcpp directory +pushd tree-sitter-mozcpp + +# Download tree-sitter-cpp +git clone https://github.com/tree-sitter/tree-sitter-cpp.git + +# Download tree-sitter-c inside the tree-sitter-cpp repository +pushd tree-sitter-cpp + +# Checkout the tree-sitter-cpp submodule version +git checkout $TS_CPP_VERSION + +# Clone tree-sitter-c repository +git clone https://github.com/tree-sitter/tree-sitter-c + +# Update the path to the tree-sitter-c repository contained in +# the grammar.js file +NO_FIRST_LINE=`sed '1d' grammar.js` +echo "const C = require(\"./tree-sitter-c/grammar\")$NO_FIRST_LINE" > grammar.js + +# Exit tree-sitter-cpp directory +popd + +# Init npm +npm init -y + +# Install a small module that lets the parser be used from Node +npm install --save nan + +# Install the Tree-sitter CLI +npm install --save-dev tree-sitter-cli + +# Generate moz-cpp grammar +./node_modules/.bin/tree-sitter generate + +# Delete node_modules +rm -rf node_modules + +# Delete package files +rm -rf package-lock.json package.json + +# Delete tree-sitter-cpp directory, and consequently tree-sitter-c directory +rm -rf tree-sitter-cpp + +# Exit tree-sitter-mozcpp directory +popd + +# Enter enums directory +pushd enums + +# Recreate the grammar for rust-code-analysis +cargo clean && cargo run -- -lrust -o ../src/languages + +# Exit enums directory +popd + +# Format the produced grammars +cargo fmt + +# Run rust code-analysis to verify if everything works correctly and to +# update the Cargo.lock +cargo test --workspace diff --git a/tree-sitter-mozcpp/grammar.js b/tree-sitter-mozcpp/grammar.js index cd7f87c5d..b918464ab 100644 --- a/tree-sitter-mozcpp/grammar.js +++ b/tree-sitter-mozcpp/grammar.js @@ -1,4 +1,4 @@ -const CPP = require("../tree-sitter-cpp/grammar.js") +const CPP = require("./tree-sitter-cpp/grammar.js") module.exports = grammar(CPP, { name: 'cpp',