tree-sitter-sh 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CMakeLists.txt +87 -0
- package/Makefile +125 -0
- package/bindings/c/tree-sitter-sh.pc.in +10 -0
- package/bindings/c/tree_sitter/tree-sitter-sh.h +16 -0
- package/grammar.js +17 -31
- package/package.json +7 -3
- package/src/grammar.json +6 -24
- package/src/parser.c +1 -1
- package/src/scanner.c +497 -502
- package/test/binding.test.c +6 -0
- package/tree-sitter.json +2 -2
package/CMakeLists.txt
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
cmake_minimum_required(VERSION 3.13)
|
|
2
|
+
|
|
3
|
+
project(tree-sitter-sh
|
|
4
|
+
VERSION "0.4.0"
|
|
5
|
+
DESCRIPTION "Tree-sitter grammar for POSIX sh."
|
|
6
|
+
HOMEPAGE_URL "https://github.com/konomanoasa/tree-sitter-sh"
|
|
7
|
+
LANGUAGES C)
|
|
8
|
+
|
|
9
|
+
option(BUILD_SHARED_LIBS "Build using shared libraries" ON)
|
|
10
|
+
option(TREE_SITTER_REUSE_ALLOCATOR "Reuse the library allocator" OFF)
|
|
11
|
+
|
|
12
|
+
set(TREE_SITTER_ABI_VERSION 15 CACHE STRING "Tree-sitter ABI version")
|
|
13
|
+
if(NOT ${TREE_SITTER_ABI_VERSION} MATCHES "^[0-9]+$")
|
|
14
|
+
unset(TREE_SITTER_ABI_VERSION CACHE)
|
|
15
|
+
message(FATAL_ERROR "TREE_SITTER_ABI_VERSION must be an integer")
|
|
16
|
+
endif()
|
|
17
|
+
|
|
18
|
+
include(GNUInstallDirs)
|
|
19
|
+
if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
|
|
20
|
+
include(CTest)
|
|
21
|
+
endif()
|
|
22
|
+
|
|
23
|
+
find_program(TREE_SITTER_CLI tree-sitter DOC "Tree-sitter CLI")
|
|
24
|
+
|
|
25
|
+
add_custom_command(OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/src/grammar.json"
|
|
26
|
+
"${CMAKE_CURRENT_SOURCE_DIR}/src/node-types.json"
|
|
27
|
+
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/grammar.js"
|
|
28
|
+
COMMAND "${TREE_SITTER_CLI}" generate grammar.js --no-parser
|
|
29
|
+
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
30
|
+
COMMENT "Generating grammar.json")
|
|
31
|
+
|
|
32
|
+
add_custom_command(OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/src/parser.c"
|
|
33
|
+
BYPRODUCTS "${CMAKE_CURRENT_SOURCE_DIR}/src/tree_sitter/parser.h"
|
|
34
|
+
"${CMAKE_CURRENT_SOURCE_DIR}/src/tree_sitter/alloc.h"
|
|
35
|
+
"${CMAKE_CURRENT_SOURCE_DIR}/src/tree_sitter/array.h"
|
|
36
|
+
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/src/grammar.json"
|
|
37
|
+
COMMAND "${TREE_SITTER_CLI}" generate src/grammar.json
|
|
38
|
+
--abi=${TREE_SITTER_ABI_VERSION}
|
|
39
|
+
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
40
|
+
COMMENT "Generating parser.c")
|
|
41
|
+
|
|
42
|
+
add_library(tree-sitter-sh src/parser.c)
|
|
43
|
+
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/src/scanner.c)
|
|
44
|
+
target_sources(tree-sitter-sh PRIVATE src/scanner.c)
|
|
45
|
+
endif()
|
|
46
|
+
target_include_directories(tree-sitter-sh
|
|
47
|
+
PRIVATE src
|
|
48
|
+
INTERFACE $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/bindings/c>
|
|
49
|
+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
|
|
50
|
+
|
|
51
|
+
target_compile_definitions(tree-sitter-sh PRIVATE
|
|
52
|
+
$<$<BOOL:${TREE_SITTER_REUSE_ALLOCATOR}>:TREE_SITTER_REUSE_ALLOCATOR>
|
|
53
|
+
$<$<CONFIG:Debug>:TREE_SITTER_DEBUG>)
|
|
54
|
+
|
|
55
|
+
set_target_properties(tree-sitter-sh
|
|
56
|
+
PROPERTIES
|
|
57
|
+
C_STANDARD 11
|
|
58
|
+
POSITION_INDEPENDENT_CODE ON
|
|
59
|
+
SOVERSION "${TREE_SITTER_ABI_VERSION}.${PROJECT_VERSION_MAJOR}"
|
|
60
|
+
DEFINE_SYMBOL "")
|
|
61
|
+
|
|
62
|
+
if(BUILD_TESTING AND CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
|
|
63
|
+
add_executable(tree-sitter-sh-binding-test test/binding.test.c)
|
|
64
|
+
target_link_libraries(tree-sitter-sh-binding-test PRIVATE tree-sitter-sh)
|
|
65
|
+
add_test(NAME tree-sitter-sh-binding COMMAND tree-sitter-sh-binding-test)
|
|
66
|
+
endif()
|
|
67
|
+
|
|
68
|
+
configure_file(bindings/c/tree-sitter-sh.pc.in
|
|
69
|
+
"${CMAKE_CURRENT_BINARY_DIR}/tree-sitter-sh.pc" @ONLY)
|
|
70
|
+
|
|
71
|
+
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bindings/c/tree_sitter"
|
|
72
|
+
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
|
|
73
|
+
FILES_MATCHING PATTERN "*.h")
|
|
74
|
+
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/tree-sitter-sh.pc"
|
|
75
|
+
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
|
|
76
|
+
install(TARGETS tree-sitter-sh
|
|
77
|
+
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
|
78
|
+
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
|
79
|
+
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}")
|
|
80
|
+
|
|
81
|
+
file(GLOB QUERIES queries/*.scm)
|
|
82
|
+
install(FILES ${QUERIES}
|
|
83
|
+
DESTINATION "${CMAKE_INSTALL_DATADIR}/tree-sitter/queries/sh")
|
|
84
|
+
|
|
85
|
+
add_custom_target(ts-test "${TREE_SITTER_CLI}" test
|
|
86
|
+
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
|
87
|
+
COMMENT "tree-sitter test")
|
package/Makefile
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
LANGUAGE_NAME := tree-sitter-sh
|
|
2
|
+
HOMEPAGE_URL := https://github.com/konomanoasa/tree-sitter-sh
|
|
3
|
+
VERSION := 0.4.0
|
|
4
|
+
DESCRIPTION := Tree-sitter grammar for POSIX sh.
|
|
5
|
+
|
|
6
|
+
# repository
|
|
7
|
+
SRC_DIR := src
|
|
8
|
+
|
|
9
|
+
TS ?= tree-sitter
|
|
10
|
+
|
|
11
|
+
# install directory layout
|
|
12
|
+
PREFIX ?= /usr/local
|
|
13
|
+
DATADIR ?= $(PREFIX)/share
|
|
14
|
+
INCLUDEDIR ?= $(PREFIX)/include
|
|
15
|
+
LIBDIR ?= $(PREFIX)/lib
|
|
16
|
+
BINDIR ?= $(PREFIX)/bin
|
|
17
|
+
PCLIBDIR ?= $(LIBDIR)/pkgconfig
|
|
18
|
+
|
|
19
|
+
# source/object files
|
|
20
|
+
PARSER := $(SRC_DIR)/parser.c
|
|
21
|
+
EXTRAS := $(filter-out $(PARSER),$(wildcard $(SRC_DIR)/*.c))
|
|
22
|
+
OBJS := $(patsubst %.c,%.o,$(PARSER) $(EXTRAS))
|
|
23
|
+
MAKE_BUILD_DIR := build/make
|
|
24
|
+
TEST := $(MAKE_BUILD_DIR)/binding.test
|
|
25
|
+
|
|
26
|
+
# flags
|
|
27
|
+
ARFLAGS ?= rcs
|
|
28
|
+
override CFLAGS += -I$(SRC_DIR) -std=c11 -fPIC
|
|
29
|
+
|
|
30
|
+
# ABI versioning
|
|
31
|
+
SONAME_MAJOR = $(shell sed -n 's/\#define LANGUAGE_VERSION //p' $(PARSER))
|
|
32
|
+
SONAME_MINOR = $(word 1,$(subst ., ,$(VERSION)))
|
|
33
|
+
|
|
34
|
+
# OS-specific bits
|
|
35
|
+
MACHINE := $(shell $(CC) -dumpmachine)
|
|
36
|
+
|
|
37
|
+
ifneq ($(findstring darwin,$(MACHINE)),)
|
|
38
|
+
SOEXT = dylib
|
|
39
|
+
SOEXTVER_MAJOR = $(SONAME_MAJOR).$(SOEXT)
|
|
40
|
+
SOEXTVER = $(SONAME_MAJOR).$(SONAME_MINOR).$(SOEXT)
|
|
41
|
+
LINKSHARED = -dynamiclib -Wl,-install_name,$(LIBDIR)/lib$(LANGUAGE_NAME).$(SOEXTVER),-rpath,@executable_path/../Frameworks
|
|
42
|
+
else ifneq ($(findstring mingw32,$(MACHINE)),)
|
|
43
|
+
SOEXT = dll
|
|
44
|
+
LINKSHARED += -s -shared -Wl,--out-implib,lib$(LANGUAGE_NAME).dll.a
|
|
45
|
+
TEST := $(MAKE_BUILD_DIR)/binding.test.exe
|
|
46
|
+
else
|
|
47
|
+
SOEXT = so
|
|
48
|
+
SOEXTVER_MAJOR = $(SOEXT).$(SONAME_MAJOR)
|
|
49
|
+
SOEXTVER = $(SOEXT).$(SONAME_MAJOR).$(SONAME_MINOR)
|
|
50
|
+
LINKSHARED = -shared -Wl,-soname,lib$(LANGUAGE_NAME).$(SOEXTVER)
|
|
51
|
+
ifneq ($(filter $(shell uname),FreeBSD NetBSD DragonFly),)
|
|
52
|
+
PCLIBDIR := $(PREFIX)/libdata/pkgconfig
|
|
53
|
+
endif
|
|
54
|
+
endif
|
|
55
|
+
|
|
56
|
+
all: lib$(LANGUAGE_NAME).a lib$(LANGUAGE_NAME).$(SOEXT) $(LANGUAGE_NAME).pc
|
|
57
|
+
|
|
58
|
+
lib$(LANGUAGE_NAME).a: $(OBJS)
|
|
59
|
+
$(AR) $(ARFLAGS) $@ $^
|
|
60
|
+
|
|
61
|
+
lib$(LANGUAGE_NAME).$(SOEXT): $(OBJS)
|
|
62
|
+
$(CC) $(LDFLAGS) $(LINKSHARED) $^ $(LDLIBS) -o $@
|
|
63
|
+
ifneq ($(STRIP),)
|
|
64
|
+
$(STRIP) $@
|
|
65
|
+
endif
|
|
66
|
+
|
|
67
|
+
ifneq ($(findstring mingw32,$(MACHINE)),)
|
|
68
|
+
lib$(LANGUAGE_NAME).dll.a: lib$(LANGUAGE_NAME).$(SOEXT)
|
|
69
|
+
endif
|
|
70
|
+
|
|
71
|
+
$(LANGUAGE_NAME).pc: bindings/c/$(LANGUAGE_NAME).pc.in
|
|
72
|
+
sed -e 's|@PROJECT_VERSION@|$(VERSION)|' \
|
|
73
|
+
-e 's|@CMAKE_INSTALL_LIBDIR@|$(LIBDIR:$(PREFIX)/%=%)|' \
|
|
74
|
+
-e 's|@CMAKE_INSTALL_INCLUDEDIR@|$(INCLUDEDIR:$(PREFIX)/%=%)|' \
|
|
75
|
+
-e 's|@PROJECT_DESCRIPTION@|$(DESCRIPTION)|' \
|
|
76
|
+
-e 's|@PROJECT_HOMEPAGE_URL@|$(HOMEPAGE_URL)|' \
|
|
77
|
+
-e 's|@CMAKE_INSTALL_PREFIX@|$(PREFIX)|' $< > $@
|
|
78
|
+
|
|
79
|
+
$(SRC_DIR)/grammar.json: grammar.js
|
|
80
|
+
$(TS) generate --no-parser $^
|
|
81
|
+
|
|
82
|
+
$(PARSER): $(SRC_DIR)/grammar.json
|
|
83
|
+
$(TS) generate $^
|
|
84
|
+
|
|
85
|
+
$(MAKE_BUILD_DIR):
|
|
86
|
+
mkdir -p $@
|
|
87
|
+
|
|
88
|
+
$(TEST): test/binding.test.c lib$(LANGUAGE_NAME).a | $(MAKE_BUILD_DIR)
|
|
89
|
+
$(CC) $(CPPFLAGS) $(CFLAGS) -Ibindings/c $< lib$(LANGUAGE_NAME).a $(LDFLAGS) $(LDLIBS) -o $@
|
|
90
|
+
|
|
91
|
+
install: all
|
|
92
|
+
install -d '$(DESTDIR)$(DATADIR)'/tree-sitter/queries/sh '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter '$(DESTDIR)$(PCLIBDIR)' '$(DESTDIR)$(LIBDIR)'
|
|
93
|
+
install -m644 bindings/c/tree_sitter/$(LANGUAGE_NAME).h '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter/$(LANGUAGE_NAME).h
|
|
94
|
+
install -m644 $(LANGUAGE_NAME).pc '$(DESTDIR)$(PCLIBDIR)'/$(LANGUAGE_NAME).pc
|
|
95
|
+
install -m644 lib$(LANGUAGE_NAME).a '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).a
|
|
96
|
+
ifneq ($(findstring mingw32,$(MACHINE)),)
|
|
97
|
+
install -d '$(DESTDIR)$(BINDIR)'
|
|
98
|
+
install -m755 lib$(LANGUAGE_NAME).dll '$(DESTDIR)$(BINDIR)'/lib$(LANGUAGE_NAME).dll
|
|
99
|
+
install -m755 lib$(LANGUAGE_NAME).dll.a '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).dll.a
|
|
100
|
+
else
|
|
101
|
+
install -m755 lib$(LANGUAGE_NAME).$(SOEXT) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER)
|
|
102
|
+
cd '$(DESTDIR)$(LIBDIR)' && ln -sf lib$(LANGUAGE_NAME).$(SOEXTVER) lib$(LANGUAGE_NAME).$(SOEXTVER_MAJOR)
|
|
103
|
+
cd '$(DESTDIR)$(LIBDIR)' && ln -sf lib$(LANGUAGE_NAME).$(SOEXTVER_MAJOR) lib$(LANGUAGE_NAME).$(SOEXT)
|
|
104
|
+
endif
|
|
105
|
+
ifneq ($(wildcard queries/*.scm),)
|
|
106
|
+
install -m644 queries/*.scm '$(DESTDIR)$(DATADIR)'/tree-sitter/queries/sh
|
|
107
|
+
endif
|
|
108
|
+
|
|
109
|
+
uninstall:
|
|
110
|
+
$(RM) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).a \
|
|
111
|
+
'$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER) \
|
|
112
|
+
'$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER_MAJOR) \
|
|
113
|
+
'$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXT) \
|
|
114
|
+
'$(DESTDIR)$(INCLUDEDIR)'/tree_sitter/$(LANGUAGE_NAME).h \
|
|
115
|
+
'$(DESTDIR)$(PCLIBDIR)'/$(LANGUAGE_NAME).pc
|
|
116
|
+
$(RM) -r '$(DESTDIR)$(DATADIR)'/tree-sitter/queries/sh
|
|
117
|
+
|
|
118
|
+
clean:
|
|
119
|
+
$(RM) $(OBJS) $(LANGUAGE_NAME).pc lib$(LANGUAGE_NAME).a lib$(LANGUAGE_NAME).$(SOEXT) lib$(LANGUAGE_NAME).dll.a
|
|
120
|
+
$(RM) -r $(MAKE_BUILD_DIR)
|
|
121
|
+
|
|
122
|
+
test: $(TEST)
|
|
123
|
+
./$(TEST)
|
|
124
|
+
|
|
125
|
+
.PHONY: all install uninstall clean test
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
prefix=@CMAKE_INSTALL_PREFIX@
|
|
2
|
+
libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
|
|
3
|
+
includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
|
|
4
|
+
|
|
5
|
+
Name: tree-sitter-sh
|
|
6
|
+
Description: @PROJECT_DESCRIPTION@
|
|
7
|
+
URL: @PROJECT_HOMEPAGE_URL@
|
|
8
|
+
Version: @PROJECT_VERSION@
|
|
9
|
+
Libs: -L${libdir} -ltree-sitter-sh
|
|
10
|
+
Cflags: -I${includedir}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#ifndef TREE_SITTER_SH_H_
|
|
2
|
+
#define TREE_SITTER_SH_H_
|
|
3
|
+
|
|
4
|
+
typedef struct TSLanguage TSLanguage;
|
|
5
|
+
|
|
6
|
+
#ifdef __cplusplus
|
|
7
|
+
extern "C" {
|
|
8
|
+
#endif
|
|
9
|
+
|
|
10
|
+
const TSLanguage *tree_sitter_sh(void);
|
|
11
|
+
|
|
12
|
+
#ifdef __cplusplus
|
|
13
|
+
}
|
|
14
|
+
#endif
|
|
15
|
+
|
|
16
|
+
#endif // TREE_SITTER_SH_H_
|
package/grammar.js
CHANGED
|
@@ -95,27 +95,24 @@ const wordPatternSpecialSources = ($) => [
|
|
|
95
95
|
$.pattern_equivalence_class_source,
|
|
96
96
|
];
|
|
97
97
|
|
|
98
|
+
const parameterPatternCollatingSymbolSource = ($) =>
|
|
99
|
+
alias(
|
|
100
|
+
$._parameter_pattern_collating_symbol_source,
|
|
101
|
+
$.pattern_collating_symbol_source,
|
|
102
|
+
);
|
|
103
|
+
|
|
98
104
|
const parameterPatternSpecialSources = ($) => [
|
|
99
105
|
alias(
|
|
100
106
|
$._parameter_pattern_character_class_source,
|
|
101
107
|
$.pattern_character_class_source,
|
|
102
108
|
),
|
|
103
|
-
|
|
104
|
-
$._parameter_pattern_collating_symbol_source,
|
|
105
|
-
$.pattern_collating_symbol_source,
|
|
106
|
-
),
|
|
109
|
+
parameterPatternCollatingSymbolSource($),
|
|
107
110
|
alias(
|
|
108
111
|
$._parameter_pattern_equivalence_class_source,
|
|
109
112
|
$.pattern_equivalence_class_source,
|
|
110
113
|
),
|
|
111
114
|
];
|
|
112
115
|
|
|
113
|
-
const parameterPatternCollatingSymbolSource = ($) =>
|
|
114
|
-
alias(
|
|
115
|
-
$._parameter_pattern_collating_symbol_source,
|
|
116
|
-
$.pattern_collating_symbol_source,
|
|
117
|
-
);
|
|
118
|
-
|
|
119
116
|
const patternSpecialContentCharacters = ($, plain) => [
|
|
120
117
|
plain,
|
|
121
118
|
$._pattern_special_marker_character,
|
|
@@ -257,12 +254,6 @@ const lineContinuationRun = ($) => prec.right(1, repeat1($.line_continuation));
|
|
|
257
254
|
|
|
258
255
|
const parameterBraceClose = ($) => choice("}", $._here_document_boundary);
|
|
259
256
|
|
|
260
|
-
const postOperatorLayout = ($) =>
|
|
261
|
-
choice(
|
|
262
|
-
seq($.linebreak, optional($._horizontal_layout)),
|
|
263
|
-
optional($._horizontal_layout),
|
|
264
|
-
);
|
|
265
|
-
|
|
266
257
|
const arithmeticBinaryExpression = ($, left, right, operatorSegment) =>
|
|
267
258
|
prec.left(
|
|
268
259
|
seq(
|
|
@@ -707,6 +698,12 @@ const parameterOperatorTail = ($, word, wordTrailingContinuations) =>
|
|
|
707
698
|
const parameterExpansionTail = ($, operatorTail) =>
|
|
708
699
|
choice(parameterBraceClose($), operatorTail);
|
|
709
700
|
|
|
701
|
+
const parameterPatternSource = ($) =>
|
|
702
|
+
choice(
|
|
703
|
+
$._parameter_tilde_source,
|
|
704
|
+
seq($._parameter_pattern_part, optional($._parameter_source_tail)),
|
|
705
|
+
);
|
|
706
|
+
|
|
710
707
|
const caseClauseItems = ($) =>
|
|
711
708
|
choice(
|
|
712
709
|
$.esac_keyword,
|
|
@@ -1237,7 +1234,7 @@ module.exports = grammar({
|
|
|
1237
1234
|
$._and_or_continuation,
|
|
1238
1235
|
optional($._horizontal_layout),
|
|
1239
1236
|
field("operator", choice($.and_if, $.or_if)),
|
|
1240
|
-
|
|
1237
|
+
linebreakLayout($),
|
|
1241
1238
|
field("pipeline", $.pipeline),
|
|
1242
1239
|
),
|
|
1243
1240
|
),
|
|
@@ -1259,7 +1256,7 @@ module.exports = grammar({
|
|
|
1259
1256
|
$._pipe_continuation,
|
|
1260
1257
|
optional($._horizontal_layout),
|
|
1261
1258
|
"|",
|
|
1262
|
-
|
|
1259
|
+
linebreakLayout($),
|
|
1263
1260
|
field("command", $.command),
|
|
1264
1261
|
),
|
|
1265
1262
|
),
|
|
@@ -2406,11 +2403,7 @@ module.exports = grammar({
|
|
|
2406
2403
|
|
|
2407
2404
|
parameter_pattern_operator: (_) => prec(2, choice("%%", "##", "%", "#")),
|
|
2408
2405
|
|
|
2409
|
-
parameter_word: ($) =>
|
|
2410
|
-
choice(
|
|
2411
|
-
$._parameter_tilde_source,
|
|
2412
|
-
seq($._parameter_pattern_part, optional($._parameter_source_tail)),
|
|
2413
|
-
),
|
|
2406
|
+
parameter_word: ($) => parameterPatternSource($),
|
|
2414
2407
|
|
|
2415
2408
|
_double_quoted_parameter_word: ($) =>
|
|
2416
2409
|
seq(
|
|
@@ -2435,14 +2428,7 @@ module.exports = grammar({
|
|
|
2435
2428
|
_double_quoted_parameter_word_part: ($) =>
|
|
2436
2429
|
choice($._double_quoted_parameter_word_lead_part, $.line_continuation),
|
|
2437
2430
|
|
|
2438
|
-
parameter_pattern: ($) =>
|
|
2439
|
-
prec.right(
|
|
2440
|
-
1,
|
|
2441
|
-
choice(
|
|
2442
|
-
$._parameter_tilde_source,
|
|
2443
|
-
seq($._parameter_pattern_part, optional($._parameter_source_tail)),
|
|
2444
|
-
),
|
|
2445
|
-
),
|
|
2431
|
+
parameter_pattern: ($) => prec.right(1, parameterPatternSource($)),
|
|
2446
2432
|
|
|
2447
2433
|
_parameter_source_tail: ($) => repeat1($._parameter_pattern_part),
|
|
2448
2434
|
|
package/package.json
CHANGED
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tree-sitter-sh",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Tree-sitter grammar for POSIX sh.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": "git+https://github.com/konomanoasa/tree-sitter-sh.git",
|
|
7
7
|
"files": [
|
|
8
|
+
"bindings/c",
|
|
9
|
+
"CMakeLists.txt",
|
|
8
10
|
"grammar.js",
|
|
11
|
+
"Makefile",
|
|
9
12
|
"queries/*.scm",
|
|
10
13
|
"src/*.c",
|
|
11
14
|
"src/*.json",
|
|
12
15
|
"src/tree_sitter/*.h",
|
|
16
|
+
"test/binding.test.c",
|
|
13
17
|
"tree-sitter.json"
|
|
14
18
|
],
|
|
15
19
|
"scripts": {
|
|
16
|
-
"check": "biome check . && node scripts/check-
|
|
17
|
-
"format": "biome check --write . && node scripts/check-
|
|
20
|
+
"check": "biome check . && node scripts/check-c.js && node scripts/check-generated.js && npm test",
|
|
21
|
+
"format": "biome check --write . && node scripts/check-c.js --write",
|
|
18
22
|
"generate": "npm run tree-sitter -- generate",
|
|
19
23
|
"test": "npm run tree-sitter -- test --rebuild && node --test",
|
|
20
24
|
"test:fuzz": "npm run tree-sitter -- fuzz --rebuild --iterations 100 --edits 5",
|
package/src/grammar.json
CHANGED
|
@@ -401,26 +401,17 @@
|
|
|
401
401
|
}
|
|
402
402
|
},
|
|
403
403
|
{
|
|
404
|
-
"type": "
|
|
404
|
+
"type": "SEQ",
|
|
405
405
|
"members": [
|
|
406
406
|
{
|
|
407
|
-
"type": "
|
|
407
|
+
"type": "CHOICE",
|
|
408
408
|
"members": [
|
|
409
409
|
{
|
|
410
410
|
"type": "SYMBOL",
|
|
411
411
|
"name": "linebreak"
|
|
412
412
|
},
|
|
413
413
|
{
|
|
414
|
-
"type": "
|
|
415
|
-
"members": [
|
|
416
|
-
{
|
|
417
|
-
"type": "SYMBOL",
|
|
418
|
-
"name": "_horizontal_layout"
|
|
419
|
-
},
|
|
420
|
-
{
|
|
421
|
-
"type": "BLANK"
|
|
422
|
-
}
|
|
423
|
-
]
|
|
414
|
+
"type": "BLANK"
|
|
424
415
|
}
|
|
425
416
|
]
|
|
426
417
|
},
|
|
@@ -534,26 +525,17 @@
|
|
|
534
525
|
"value": "|"
|
|
535
526
|
},
|
|
536
527
|
{
|
|
537
|
-
"type": "
|
|
528
|
+
"type": "SEQ",
|
|
538
529
|
"members": [
|
|
539
530
|
{
|
|
540
|
-
"type": "
|
|
531
|
+
"type": "CHOICE",
|
|
541
532
|
"members": [
|
|
542
533
|
{
|
|
543
534
|
"type": "SYMBOL",
|
|
544
535
|
"name": "linebreak"
|
|
545
536
|
},
|
|
546
537
|
{
|
|
547
|
-
"type": "
|
|
548
|
-
"members": [
|
|
549
|
-
{
|
|
550
|
-
"type": "SYMBOL",
|
|
551
|
-
"name": "_horizontal_layout"
|
|
552
|
-
},
|
|
553
|
-
{
|
|
554
|
-
"type": "BLANK"
|
|
555
|
-
}
|
|
556
|
-
]
|
|
538
|
+
"type": "BLANK"
|
|
557
539
|
}
|
|
558
540
|
]
|
|
559
541
|
},
|
package/src/parser.c
CHANGED
|
@@ -932412,7 +932412,7 @@ TS_PUBLIC const TSLanguage *tree_sitter_sh(void) {
|
|
|
932412
932412
|
.max_reserved_word_set_size = 0,
|
|
932413
932413
|
.metadata = {
|
|
932414
932414
|
.major_version = 0,
|
|
932415
|
-
.minor_version =
|
|
932415
|
+
.minor_version = 4,
|
|
932416
932416
|
.patch_version = 0,
|
|
932417
932417
|
},
|
|
932418
932418
|
};
|