changelog shortlog graph tags branches changeset files revisions annotate raw help

Mercurial > infra / scripts/tree-sitter-langs.sh

changeset 298: 4b7478f58f15
author: Richard Westhaver <ellis@rwest.io>
date: Wed, 19 Jun 2024 19:45:37 -0400
permissions: -rwxr-xr-x
description: edit tree-sitter-langs
1 #!/usr/bin/env bash
2 
3 # based on https://github.com/GrammaTech/sel/blob/master/tools/tree-sitter-install.sh
4 set -eux
5 
6 declare -ar default_langs=(
7  commonlisp bash c cpp css go html java javascript jsdoc json python regex rust
8  typescript/tsx typescript/typescript yaml
9 )
10 # see https://tree-sitter.github.io/tree-sitter/#parsers for a
11 # complete list of parsers available
12 TARGETDIR="${1:-.stash/src/tree-sitter-langs}"
13 
14 PREFIX=$(realpath "${PREFIX:-/usr/local}")
15 CC=${CC:-clang}
16 CXX=${CXX:-clang++}
17 if [ $(uname) == "Darwin" ];then
18  EXT=dylib;
19 else
20  EXT=so
21 fi
22 
23 declare -A repos
24 repos[commonlisp]=https://github.com/theHamsta/tree-sitter-commonlisp.git
25 repos[yaml]=https://github.com/ikatyang/tree-sitter-yaml.git
26 repos[cpp]=https://github.com/ruricolist/tree-sitter-cpp.git
27 
28 declare -a langs
29 if [ -z "${2:-}" ]; then
30  langs=(${default_langs[@]})
31 else
32  langs=($@)
33 fi
34 
35 mkdir -pv $TARGETDIR
36 cd $TARGETDIR
37 for lang in "${langs[@]}";do
38  [ -d "tree-sitter-${lang%/*}" ] || git clone ${repos[$lang]:-https://github.com/tree-sitter/tree-sitter-${lang%/*}};
39  # subshell
40  (
41  cd "tree-sitter-${lang}/src";
42  if test -f "scanner.cc"; then
43  ${CXX} -I. -fPIC scanner.cc -c -lstdc++;
44  ${CC} -I. -std=c99 -fPIC parser.c -c;
45  ${CXX} -shared scanner.o parser.o -o ${PREFIX}/lib/libtree-sitter-"${lang//\//-}.${EXT}";
46  elif test -f "scanner.c"; then
47  ${CC} -I. -std=c99 -fPIC scanner.c -c;
48  ${CC} -I. -std=c99 -fPIC parser.c -c;
49  ${CC} -shared scanner.o parser.o -o ${PREFIX}/lib/libtree-sitter-"${lang//\//-}.${EXT}";
50  else
51  ${CC} -I. -std=c99 -fPIC parser.c -c;
52  ${CC} -shared parser.o -o ${PREFIX}/lib/libtree-sitter-"${lang//\//-}.${EXT}";
53  fi;
54  mkdir -p "${PREFIX}/share/tree-sitter/${lang}/";
55  cp grammar.json node-types.json "${PREFIX}/share/tree-sitter/${lang}";
56  )
57 done