First Commit
This commit is contained in:
		
							
								
								
									
										39
									
								
								.editorconfig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								.editorconfig
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,39 @@ | ||||
| root = true | ||||
|  | ||||
| [*] | ||||
| charset = utf-8 | ||||
|  | ||||
| [*.{json,toml,yml,gyp}] | ||||
| indent_style = space | ||||
| indent_size = 2 | ||||
|  | ||||
| [*.js] | ||||
| indent_style = space | ||||
| indent_size = 2 | ||||
|  | ||||
| [*.{c,cc,h}] | ||||
| indent_style = space | ||||
| indent_size = 4 | ||||
|  | ||||
| [*.rs] | ||||
| indent_style = space | ||||
| indent_size = 4 | ||||
|  | ||||
| [*.{py,pyi}] | ||||
| indent_style = space | ||||
| indent_size = 4 | ||||
|  | ||||
| [*.swift] | ||||
| indent_style = space | ||||
| indent_size = 4 | ||||
|  | ||||
| [*.go] | ||||
| indent_style = tab | ||||
| indent_size = 8 | ||||
|  | ||||
| [Makefile] | ||||
| indent_style = tab | ||||
| indent_size = 8 | ||||
|  | ||||
| [parser.c] | ||||
| indent_size = 2 | ||||
							
								
								
									
										11
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | ||||
| * text=auto eol=lf | ||||
|  | ||||
| src/*.json linguist-generated | ||||
| src/parser.c linguist-generated | ||||
| src/tree_sitter/* linguist-generated | ||||
|  | ||||
| bindings/** linguist-generated | ||||
| binding.gyp linguist-generated | ||||
| setup.py linguist-generated | ||||
| Makefile linguist-generated | ||||
| Package.swift linguist-generated | ||||
							
								
								
									
										39
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,39 @@ | ||||
| # Rust artifacts | ||||
| Cargo.lock | ||||
| target/ | ||||
|  | ||||
| # Node artifacts | ||||
| build/ | ||||
| prebuilds/ | ||||
| node_modules/ | ||||
| *.tgz | ||||
|  | ||||
| # Swift artifacts | ||||
| .build/ | ||||
| Package.resolved | ||||
|  | ||||
| # Go artifacts | ||||
| go.sum | ||||
| _obj/ | ||||
|  | ||||
| # Python artifacts | ||||
| .venv/ | ||||
| dist/ | ||||
| *.egg-info | ||||
| *.whl | ||||
|  | ||||
| # C artifacts | ||||
| *.a | ||||
| *.so | ||||
| *.so.* | ||||
| *.dylib | ||||
| *.dll | ||||
| *.pc | ||||
|  | ||||
| # Example dirs | ||||
| /examples/*/ | ||||
|  | ||||
| # Grammar volatiles | ||||
| *.wasm | ||||
| *.obj | ||||
| *.o | ||||
							
								
								
									
										26
									
								
								Cargo.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								Cargo.toml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,26 @@ | ||||
| [package] | ||||
| name = "tree-sitter-jrpc" | ||||
| description = "Jrpc grammar for tree-sitter" | ||||
| version = "0.0.1" | ||||
| license = "MIT" | ||||
| readme = "README.md" | ||||
| keywords = ["incremental", "parsing", "tree-sitter", "jrpc"] | ||||
| categories = ["parsing", "text-editors"] | ||||
| repository = "https://git.hibas.dev/hibas123/tree-sitter-jrpc" | ||||
| edition = "2021" | ||||
| autoexamples = false | ||||
|  | ||||
| build = "bindings/rust/build.rs" | ||||
| include = ["bindings/rust/*", "grammar.js", "queries/*", "src/*"] | ||||
|  | ||||
| [lib] | ||||
| path = "bindings/rust/lib.rs" | ||||
|  | ||||
| [dependencies] | ||||
| tree-sitter-language = "0.1" | ||||
|  | ||||
| [dev-dependencies] | ||||
| tree-sitter = { version = "0.22" } | ||||
|  | ||||
| [build-dependencies] | ||||
| cc = "1.0.87" | ||||
							
								
								
									
										114
									
								
								Makefile
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								Makefile
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,114 @@ | ||||
| ifeq ($(OS),Windows_NT) | ||||
| $(error Windows is not supported) | ||||
| endif | ||||
|  | ||||
| VERSION := 0.0.1 | ||||
|  | ||||
| LANGUAGE_NAME := tree-sitter-jrpc | ||||
|  | ||||
| # repository | ||||
| SRC_DIR := src | ||||
|  | ||||
| PARSER_REPO_URL := $(shell git -C $(SRC_DIR) remote get-url origin 2>/dev/null) | ||||
|  | ||||
| ifeq ($(PARSER_URL),) | ||||
| 	PARSER_URL := $(subst .git,,$(PARSER_REPO_URL)) | ||||
| ifeq ($(shell echo $(PARSER_URL) | grep '^[a-z][-+.0-9a-z]*://'),) | ||||
| 	PARSER_URL := $(subst :,/,$(PARSER_URL)) | ||||
| 	PARSER_URL := $(subst git@,https://,$(PARSER_URL)) | ||||
| endif | ||||
| endif | ||||
|  | ||||
| TS ?= tree-sitter | ||||
|  | ||||
| # install directory layout | ||||
| PREFIX ?= /usr/local | ||||
| INCLUDEDIR ?= $(PREFIX)/include | ||||
| LIBDIR ?= $(PREFIX)/lib | ||||
| PCLIBDIR ?= $(LIBDIR)/pkgconfig | ||||
|  | ||||
| # source/object files | ||||
| PARSER := $(SRC_DIR)/parser.c | ||||
| EXTRAS := $(filter-out $(PARSER),$(wildcard $(SRC_DIR)/*.c)) | ||||
| OBJS := $(patsubst %.c,%.o,$(PARSER) $(EXTRAS)) | ||||
|  | ||||
| # flags | ||||
| ARFLAGS ?= rcs | ||||
| override CFLAGS += -I$(SRC_DIR) -std=c11 -fPIC | ||||
|  | ||||
| # ABI versioning | ||||
| SONAME_MAJOR := $(word 1,$(subst ., ,$(VERSION))) | ||||
| SONAME_MINOR := $(shell sed -n 's/#define LANGUAGE_VERSION //p' $(PARSER)) | ||||
|  | ||||
| # OS-specific bits | ||||
| ifeq ($(shell uname),Darwin) | ||||
| 	SOEXT = dylib | ||||
| 	SOEXTVER_MAJOR = $(SONAME_MAJOR).$(SOEXT) | ||||
| 	SOEXTVER = $(SONAME_MAJOR).$(SONAME_MINOR).$(SOEXT) | ||||
| 	LINKSHARED := $(LINKSHARED)-dynamiclib -Wl, | ||||
| 	ifneq ($(ADDITIONAL_LIBS),) | ||||
| 	LINKSHARED := $(LINKSHARED)$(ADDITIONAL_LIBS), | ||||
| 	endif | ||||
| 	LINKSHARED := $(LINKSHARED)-install_name,$(LIBDIR)/lib$(LANGUAGE_NAME).$(SOEXTVER),-rpath,@executable_path/../Frameworks | ||||
| else | ||||
| 	SOEXT = so | ||||
| 	SOEXTVER_MAJOR = $(SOEXT).$(SONAME_MAJOR) | ||||
| 	SOEXTVER = $(SOEXT).$(SONAME_MAJOR).$(SONAME_MINOR) | ||||
| 	LINKSHARED := $(LINKSHARED)-shared -Wl, | ||||
| 	ifneq ($(ADDITIONAL_LIBS),) | ||||
| 	LINKSHARED := $(LINKSHARED)$(ADDITIONAL_LIBS) | ||||
| 	endif | ||||
| 	LINKSHARED := $(LINKSHARED)-soname,lib$(LANGUAGE_NAME).$(SOEXTVER) | ||||
| endif | ||||
| ifneq ($(filter $(shell uname),FreeBSD NetBSD DragonFly),) | ||||
| 	PCLIBDIR := $(PREFIX)/libdata/pkgconfig | ||||
| endif | ||||
|  | ||||
| all: lib$(LANGUAGE_NAME).a lib$(LANGUAGE_NAME).$(SOEXT) $(LANGUAGE_NAME).pc | ||||
|  | ||||
| lib$(LANGUAGE_NAME).a: $(OBJS) | ||||
| 	$(AR) $(ARFLAGS) $@ $^ | ||||
|  | ||||
| lib$(LANGUAGE_NAME).$(SOEXT): $(OBJS) | ||||
| 	$(CC) $(LDFLAGS) $(LINKSHARED) $^ $(LDLIBS) -o $@ | ||||
| ifneq ($(STRIP),) | ||||
| 	$(STRIP) $@ | ||||
| endif | ||||
|  | ||||
| $(LANGUAGE_NAME).pc: bindings/c/$(LANGUAGE_NAME).pc.in | ||||
| 	sed  -e 's|@URL@|$(PARSER_URL)|' \ | ||||
| 		-e 's|@VERSION@|$(VERSION)|' \ | ||||
| 		-e 's|@LIBDIR@|$(LIBDIR)|' \ | ||||
| 		-e 's|@INCLUDEDIR@|$(INCLUDEDIR)|' \ | ||||
| 		-e 's|@REQUIRES@|$(REQUIRES)|' \ | ||||
| 		-e 's|@ADDITIONAL_LIBS@|$(ADDITIONAL_LIBS)|' \ | ||||
| 		-e 's|=$(PREFIX)|=$${prefix}|' \ | ||||
| 		-e 's|@PREFIX@|$(PREFIX)|' $< > $@ | ||||
|  | ||||
| $(PARSER): $(SRC_DIR)/grammar.json | ||||
| 	$(TS) generate --no-bindings $^ | ||||
|  | ||||
| install: all | ||||
| 	install -d '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter '$(DESTDIR)$(PCLIBDIR)' '$(DESTDIR)$(LIBDIR)' | ||||
| 	install -m644 bindings/c/$(LANGUAGE_NAME).h '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter/$(LANGUAGE_NAME).h | ||||
| 	install -m644 $(LANGUAGE_NAME).pc '$(DESTDIR)$(PCLIBDIR)'/$(LANGUAGE_NAME).pc | ||||
| 	install -m644 lib$(LANGUAGE_NAME).a '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).a | ||||
| 	install -m755 lib$(LANGUAGE_NAME).$(SOEXT) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER) | ||||
| 	ln -sf lib$(LANGUAGE_NAME).$(SOEXTVER) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER_MAJOR) | ||||
| 	ln -sf lib$(LANGUAGE_NAME).$(SOEXTVER_MAJOR) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXT) | ||||
|  | ||||
| uninstall: | ||||
| 	$(RM) '$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).a \ | ||||
| 		'$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER) \ | ||||
| 		'$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXTVER_MAJOR) \ | ||||
| 		'$(DESTDIR)$(LIBDIR)'/lib$(LANGUAGE_NAME).$(SOEXT) \ | ||||
| 		'$(DESTDIR)$(INCLUDEDIR)'/tree_sitter/$(LANGUAGE_NAME).h \ | ||||
| 		'$(DESTDIR)$(PCLIBDIR)'/$(LANGUAGE_NAME).pc | ||||
|  | ||||
| clean: | ||||
| 	$(RM) $(OBJS) $(LANGUAGE_NAME).pc lib$(LANGUAGE_NAME).a lib$(LANGUAGE_NAME).$(SOEXT) | ||||
|  | ||||
| test: | ||||
| 	$(TS) test | ||||
|  | ||||
| .PHONY: all install uninstall clean test | ||||
							
								
								
									
										60
									
								
								Package.swift
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								Package.swift
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,60 @@ | ||||
| // swift-tools-version:5.3 | ||||
| import PackageDescription | ||||
|  | ||||
| let package = Package( | ||||
|     name: "TreeSitterJrpc", | ||||
|     products: [ | ||||
|         .library(name: "TreeSitterJrpc", targets: ["TreeSitterJrpc"]), | ||||
|     ], | ||||
|     dependencies: [ | ||||
|         .package(url: "https://github.com/ChimeHQ/SwiftTreeSitter", from: "0.8.0"), | ||||
|     ], | ||||
|     targets: [ | ||||
|         .target( | ||||
|             name: "TreeSitterJrpc", | ||||
|             dependencies: [], | ||||
|             path: ".", | ||||
|             exclude: [ | ||||
|                 "Cargo.toml", | ||||
|                 "Makefile", | ||||
|                 "binding.gyp", | ||||
|                 "bindings/c", | ||||
|                 "bindings/go", | ||||
|                 "bindings/node", | ||||
|                 "bindings/python", | ||||
|                 "bindings/rust", | ||||
|                 "prebuilds", | ||||
|                 "grammar.js", | ||||
|                 "package.json", | ||||
|                 "package-lock.json", | ||||
|                 "pyproject.toml", | ||||
|                 "setup.py", | ||||
|                 "test", | ||||
|                 "examples", | ||||
|                 ".editorconfig", | ||||
|                 ".github", | ||||
|                 ".gitignore", | ||||
|                 ".gitattributes", | ||||
|                 ".gitmodules", | ||||
|             ], | ||||
|             sources: [ | ||||
|                 "src/parser.c", | ||||
|                 // NOTE: if your language has an external scanner, add it here. | ||||
|             ], | ||||
|             resources: [ | ||||
|                 .copy("queries") | ||||
|             ], | ||||
|             publicHeadersPath: "bindings/swift", | ||||
|             cSettings: [.headerSearchPath("src")] | ||||
|         ), | ||||
|         .testTarget( | ||||
|             name: "TreeSitterJrpcTests", | ||||
|             dependencies: [ | ||||
|                 "SwiftTreeSitter", | ||||
|                 "TreeSitterJrpc", | ||||
|             ], | ||||
|             path: "bindings/swift/TreeSitterJrpcTests" | ||||
|         ) | ||||
|     ], | ||||
|     cLanguageStandard: .c11 | ||||
| ) | ||||
							
								
								
									
										30
									
								
								binding.gyp
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								binding.gyp
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,30 @@ | ||||
| { | ||||
|   "targets": [ | ||||
|     { | ||||
|       "target_name": "tree_sitter_jrpc_binding", | ||||
|       "dependencies": [ | ||||
|         "<!(node -p \"require('node-addon-api').targets\"):node_addon_api_except", | ||||
|       ], | ||||
|       "include_dirs": [ | ||||
|         "src", | ||||
|       ], | ||||
|       "sources": [ | ||||
|         "bindings/node/binding.cc", | ||||
|         "src/parser.c", | ||||
|         # NOTE: if your language has an external scanner, add it here. | ||||
|       ], | ||||
|       "conditions": [ | ||||
|         ["OS!='win'", { | ||||
|           "cflags_c": [ | ||||
|             "-std=c11", | ||||
|           ], | ||||
|         }, { # OS == "win" | ||||
|           "cflags_c": [ | ||||
|             "/std:c11", | ||||
|             "/utf-8", | ||||
|           ], | ||||
|         }], | ||||
|       ], | ||||
|     } | ||||
|   ] | ||||
| } | ||||
							
								
								
									
										16
									
								
								bindings/c/tree-sitter-jrpc.h
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								bindings/c/tree-sitter-jrpc.h
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | ||||
| #ifndef TREE_SITTER_JRPC_H_ | ||||
| #define TREE_SITTER_JRPC_H_ | ||||
|  | ||||
| typedef struct TSLanguage TSLanguage; | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| const TSLanguage *tree_sitter_jrpc(void); | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
|  | ||||
| #endif // TREE_SITTER_JRPC_H_ | ||||
							
								
								
									
										11
									
								
								bindings/c/tree-sitter-jrpc.pc.in
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								bindings/c/tree-sitter-jrpc.pc.in
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | ||||
| prefix=@PREFIX@ | ||||
| libdir=@LIBDIR@ | ||||
| includedir=@INCLUDEDIR@ | ||||
|  | ||||
| Name: tree-sitter-jrpc | ||||
| Description: Jrpc grammar for tree-sitter | ||||
| URL: @URL@ | ||||
| Version: @VERSION@ | ||||
| Requires: @REQUIRES@ | ||||
| Libs: -L${libdir} @ADDITIONAL_LIBS@ -ltree-sitter-jrpc | ||||
| Cflags: -I${includedir} | ||||
							
								
								
									
										13
									
								
								bindings/go/binding.go
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								bindings/go/binding.go
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | ||||
| package tree_sitter_jrpc | ||||
|  | ||||
| // #cgo CFLAGS: -std=c11 -fPIC | ||||
| // #include "../../src/parser.c" | ||||
| // // NOTE: if your language has an external scanner, add it here. | ||||
| import "C" | ||||
|  | ||||
| import "unsafe" | ||||
|  | ||||
| // Get the tree-sitter Language for this grammar. | ||||
| func Language() unsafe.Pointer { | ||||
| 	return unsafe.Pointer(C.tree_sitter_jrpc()) | ||||
| } | ||||
							
								
								
									
										15
									
								
								bindings/go/binding_test.go
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								bindings/go/binding_test.go
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | ||||
| package tree_sitter_jrpc_test | ||||
|  | ||||
| import ( | ||||
| 	"testing" | ||||
|  | ||||
| 	tree_sitter "github.com/tree-sitter/go-tree-sitter" | ||||
| 	tree_sitter_jrpc "github.com/tree-sitter/tree-sitter-jrpc/bindings/go" | ||||
| ) | ||||
|  | ||||
| func TestCanLoadGrammar(t *testing.T) { | ||||
| 	language := tree_sitter.NewLanguage(tree_sitter_jrpc.Language()) | ||||
| 	if language == nil { | ||||
| 		t.Errorf("Error loading Jrpc grammar") | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										20
									
								
								bindings/node/binding.cc
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								bindings/node/binding.cc
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | ||||
| #include <napi.h> | ||||
|  | ||||
| typedef struct TSLanguage TSLanguage; | ||||
|  | ||||
| extern "C" TSLanguage *tree_sitter_jrpc(); | ||||
|  | ||||
| // "tree-sitter", "language" hashed with BLAKE2 | ||||
| const napi_type_tag LANGUAGE_TYPE_TAG = { | ||||
|     0x8AF2E5212AD58ABF, 0xD5006CAD83ABBA16 | ||||
| }; | ||||
|  | ||||
| Napi::Object Init(Napi::Env env, Napi::Object exports) { | ||||
|     exports["name"] = Napi::String::New(env, "jrpc"); | ||||
|     auto language = Napi::External<TSLanguage>::New(env, tree_sitter_jrpc()); | ||||
|     language.TypeTag(&LANGUAGE_TYPE_TAG); | ||||
|     exports["language"] = language; | ||||
|     return exports; | ||||
| } | ||||
|  | ||||
| NODE_API_MODULE(tree_sitter_jrpc_binding, Init) | ||||
							
								
								
									
										9
									
								
								bindings/node/binding_test.js
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								bindings/node/binding_test.js
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | ||||
| /// <reference types="node" /> | ||||
|  | ||||
| const assert = require("node:assert"); | ||||
| const { test } = require("node:test"); | ||||
|  | ||||
| test("can load grammar", () => { | ||||
|   const parser = new (require("tree-sitter"))(); | ||||
|   assert.doesNotThrow(() => parser.setLanguage(require("."))); | ||||
| }); | ||||
							
								
								
									
										28
									
								
								bindings/node/index.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								bindings/node/index.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,28 @@ | ||||
| type BaseNode = { | ||||
|   type: string; | ||||
|   named: boolean; | ||||
| }; | ||||
|  | ||||
| type ChildNode = { | ||||
|   multiple: boolean; | ||||
|   required: boolean; | ||||
|   types: BaseNode[]; | ||||
| }; | ||||
|  | ||||
| type NodeInfo = | ||||
|   | (BaseNode & { | ||||
|       subtypes: BaseNode[]; | ||||
|     }) | ||||
|   | (BaseNode & { | ||||
|       fields: { [name: string]: ChildNode }; | ||||
|       children: ChildNode[]; | ||||
|     }); | ||||
|  | ||||
| type Language = { | ||||
|   name: string; | ||||
|   language: unknown; | ||||
|   nodeTypeInfo: NodeInfo[]; | ||||
| }; | ||||
|  | ||||
| declare const language: Language; | ||||
| export = language; | ||||
							
								
								
									
										7
									
								
								bindings/node/index.js
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								bindings/node/index.js
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | ||||
| const root = require("path").join(__dirname, "..", ".."); | ||||
|  | ||||
| module.exports = require("node-gyp-build")(root); | ||||
|  | ||||
| try { | ||||
|   module.exports.nodeTypeInfo = require("../../src/node-types.json"); | ||||
| } catch (_) {} | ||||
							
								
								
									
										11
									
								
								bindings/python/tests/test_binding.py
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								bindings/python/tests/test_binding.py
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,11 @@ | ||||
| from unittest import TestCase | ||||
|  | ||||
| import tree_sitter, tree_sitter_jrpc | ||||
|  | ||||
|  | ||||
| class TestLanguage(TestCase): | ||||
|     def test_can_load_grammar(self): | ||||
|         try: | ||||
|             tree_sitter.Language(tree_sitter_jrpc.language()) | ||||
|         except Exception: | ||||
|             self.fail("Error loading Jrpc grammar") | ||||
							
								
								
									
										42
									
								
								bindings/python/tree_sitter_jrpc/__init__.py
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								bindings/python/tree_sitter_jrpc/__init__.py
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,42 @@ | ||||
| """Jrpc grammar for tree-sitter""" | ||||
|  | ||||
| from importlib.resources import files as _files | ||||
|  | ||||
| from ._binding import language | ||||
|  | ||||
|  | ||||
| def _get_query(name, file): | ||||
|     query = _files(f"{__package__}.queries") / file | ||||
|     globals()[name] = query.read_text() | ||||
|     return globals()[name] | ||||
|  | ||||
|  | ||||
| def __getattr__(name): | ||||
|     # NOTE: uncomment these to include any queries that this grammar contains: | ||||
|  | ||||
|     # if name == "HIGHLIGHTS_QUERY": | ||||
|     #     return _get_query("HIGHLIGHTS_QUERY", "highlights.scm") | ||||
|     # if name == "INJECTIONS_QUERY": | ||||
|     #     return _get_query("INJECTIONS_QUERY", "injections.scm") | ||||
|     # if name == "LOCALS_QUERY": | ||||
|     #     return _get_query("LOCALS_QUERY", "locals.scm") | ||||
|     # if name == "TAGS_QUERY": | ||||
|     #     return _get_query("TAGS_QUERY", "tags.scm") | ||||
|  | ||||
|     raise AttributeError(f"module {__name__!r} has no attribute {name!r}") | ||||
|  | ||||
|  | ||||
| __all__ = [ | ||||
|     "language", | ||||
|     # "HIGHLIGHTS_QUERY", | ||||
|     # "INJECTIONS_QUERY", | ||||
|     # "LOCALS_QUERY", | ||||
|     # "TAGS_QUERY", | ||||
| ] | ||||
|  | ||||
|  | ||||
| def __dir__(): | ||||
|     return sorted(__all__ + [ | ||||
|         "__all__", "__builtins__", "__cached__", "__doc__", "__file__", | ||||
|         "__loader__", "__name__", "__package__", "__path__", "__spec__", | ||||
|     ]) | ||||
							
								
								
									
										10
									
								
								bindings/python/tree_sitter_jrpc/__init__.pyi
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								bindings/python/tree_sitter_jrpc/__init__.pyi
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | ||||
| from typing import Final | ||||
|  | ||||
| # NOTE: uncomment these to include any queries that this grammar contains: | ||||
|  | ||||
| # HIGHLIGHTS_QUERY: Final[str] | ||||
| # INJECTIONS_QUERY: Final[str] | ||||
| # LOCALS_QUERY: Final[str] | ||||
| # TAGS_QUERY: Final[str] | ||||
|  | ||||
| def language() -> object: ... | ||||
							
								
								
									
										27
									
								
								bindings/python/tree_sitter_jrpc/binding.c
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								bindings/python/tree_sitter_jrpc/binding.c
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | ||||
| #include <Python.h> | ||||
|  | ||||
| typedef struct TSLanguage TSLanguage; | ||||
|  | ||||
| TSLanguage *tree_sitter_jrpc(void); | ||||
|  | ||||
| static PyObject* _binding_language(PyObject *Py_UNUSED(self), PyObject *Py_UNUSED(args)) { | ||||
|     return PyCapsule_New(tree_sitter_jrpc(), "tree_sitter.Language", NULL); | ||||
| } | ||||
|  | ||||
| static PyMethodDef methods[] = { | ||||
|     {"language", _binding_language, METH_NOARGS, | ||||
|      "Get the tree-sitter language for this grammar."}, | ||||
|     {NULL, NULL, 0, NULL} | ||||
| }; | ||||
|  | ||||
| static struct PyModuleDef module = { | ||||
|     .m_base = PyModuleDef_HEAD_INIT, | ||||
|     .m_name = "_binding", | ||||
|     .m_doc = NULL, | ||||
|     .m_size = -1, | ||||
|     .m_methods = methods | ||||
| }; | ||||
|  | ||||
| PyMODINIT_FUNC PyInit__binding(void) { | ||||
|     return PyModule_Create(&module); | ||||
| } | ||||
							
								
								
									
										0
									
								
								bindings/python/tree_sitter_jrpc/py.typed
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								bindings/python/tree_sitter_jrpc/py.typed
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
								
								
									
										22
									
								
								bindings/rust/build.rs
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								bindings/rust/build.rs
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | ||||
| fn main() { | ||||
|     let src_dir = std::path::Path::new("src"); | ||||
|  | ||||
|     let mut c_config = cc::Build::new(); | ||||
|     c_config.std("c11").include(src_dir); | ||||
|  | ||||
|     #[cfg(target_env = "msvc")] | ||||
|     c_config.flag("-utf-8"); | ||||
|  | ||||
|     let parser_path = src_dir.join("parser.c"); | ||||
|     c_config.file(&parser_path); | ||||
|     println!("cargo:rerun-if-changed={}", parser_path.to_str().unwrap()); | ||||
|  | ||||
|     // NOTE: if your language uses an external scanner, uncomment this block: | ||||
|     /* | ||||
|     let scanner_path = src_dir.join("scanner.c"); | ||||
|     c_config.file(&scanner_path); | ||||
|     println!("cargo:rerun-if-changed={}", scanner_path.to_str().unwrap()); | ||||
|     */ | ||||
|  | ||||
|     c_config.compile("tree-sitter-jrpc"); | ||||
| } | ||||
							
								
								
									
										53
									
								
								bindings/rust/lib.rs
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								bindings/rust/lib.rs
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,53 @@ | ||||
| //! This crate provides Jrpc language support for the [tree-sitter][] parsing library. | ||||
| //! | ||||
| //! Typically, you will use the [language][language func] function to add this language to a | ||||
| //! tree-sitter [Parser][], and then use the parser to parse some code: | ||||
| //! | ||||
| //! ``` | ||||
| //! let code = r#" | ||||
| //! "#; | ||||
| //! let mut parser = tree_sitter::Parser::new(); | ||||
| //! let language = tree_sitter_jrpc::LANGUAGE; | ||||
| //! parser | ||||
| //!     .set_language(&language.into()) | ||||
| //!     .expect("Error loading Jrpc parser"); | ||||
| //! let tree = parser.parse(code, None).unwrap(); | ||||
| //! assert!(!tree.root_node().has_error()); | ||||
| //! ``` | ||||
| //! | ||||
| //! [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html | ||||
| //! [language func]: fn.language.html | ||||
| //! [Parser]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Parser.html | ||||
| //! [tree-sitter]: https://tree-sitter.github.io/ | ||||
|  | ||||
| use tree_sitter_language::LanguageFn; | ||||
|  | ||||
| extern "C" { | ||||
|     fn tree_sitter_jrpc() -> *const (); | ||||
| } | ||||
|  | ||||
| /// The tree-sitter [`LanguageFn`] for this grammar. | ||||
| pub const LANGUAGE: LanguageFn = unsafe { LanguageFn::from_raw(tree_sitter_jrpc) }; | ||||
|  | ||||
| /// The content of the [`node-types.json`][] file for this grammar. | ||||
| /// | ||||
| /// [`node-types.json`]: https://tree-sitter.github.io/tree-sitter/using-parsers#static-node-types | ||||
| pub const NODE_TYPES: &str = include_str!("../../src/node-types.json"); | ||||
|  | ||||
| // NOTE: uncomment these to include any queries that this grammar contains: | ||||
|  | ||||
| // pub const HIGHLIGHTS_QUERY: &str = include_str!("../../queries/highlights.scm"); | ||||
| // pub const INJECTIONS_QUERY: &str = include_str!("../../queries/injections.scm"); | ||||
| // pub const LOCALS_QUERY: &str = include_str!("../../queries/locals.scm"); | ||||
| // pub const TAGS_QUERY: &str = include_str!("../../queries/tags.scm"); | ||||
|  | ||||
| #[cfg(test)] | ||||
| mod tests { | ||||
|     #[test] | ||||
|     fn test_can_load_grammar() { | ||||
|         let mut parser = tree_sitter::Parser::new(); | ||||
|         parser | ||||
|             .set_language(&super::LANGUAGE.into()) | ||||
|             .expect("Error loading Jrpc parser"); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										16
									
								
								bindings/swift/TreeSitterJrpc/jrpc.h
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								bindings/swift/TreeSitterJrpc/jrpc.h
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | ||||
| #ifndef TREE_SITTER_JRPC_H_ | ||||
| #define TREE_SITTER_JRPC_H_ | ||||
|  | ||||
| typedef struct TSLanguage TSLanguage; | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| const TSLanguage *tree_sitter_jrpc(void); | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
|  | ||||
| #endif // TREE_SITTER_JRPC_H_ | ||||
							
								
								
									
										12
									
								
								bindings/swift/TreeSitterJrpcTests/TreeSitterJrpcTests.swift
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								bindings/swift/TreeSitterJrpcTests/TreeSitterJrpcTests.swift
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | ||||
| import XCTest | ||||
| import SwiftTreeSitter | ||||
| import TreeSitterJrpc | ||||
|  | ||||
| final class TreeSitterJrpcTests: XCTestCase { | ||||
|     func testCanLoadGrammar() throws { | ||||
|         let parser = Parser() | ||||
|         let language = Language(language: tree_sitter_jrpc()) | ||||
|         XCTAssertNoThrow(try parser.setLanguage(language), | ||||
|                          "Error loading Jrpc grammar") | ||||
|     } | ||||
| } | ||||
							
								
								
									
										74
									
								
								example-file
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								example-file
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,74 @@ | ||||
| import "./import"; | ||||
|  | ||||
| define csharp_namespace Example; | ||||
| define rust_crate example; | ||||
| define dart_library_name example; | ||||
|  | ||||
| enum TestEnum { | ||||
|    VAL1, | ||||
|    VAL2, | ||||
|    VAL10 = 10, | ||||
|    VAL11, | ||||
|    VAL12 | ||||
| } | ||||
|  | ||||
| type Test { | ||||
|    atom: TestAtom; | ||||
|    array: TestAtom[]; | ||||
|    enumValue: TestEnum; | ||||
|    map: {int, TestAtom}; | ||||
| } | ||||
|  | ||||
|  | ||||
| type AddValueRequest { | ||||
|    value1: float; | ||||
|    value2: float; | ||||
| } | ||||
|  | ||||
| type AddValueResponse { | ||||
|    value: float; | ||||
| } | ||||
|  | ||||
| service TestService { | ||||
|    @Description("Add two numbers") | ||||
|    @Param("request", "Parameter containing the two numbers") | ||||
|    @Returns("") | ||||
|    AddValuesSingleParam(request: AddValueRequest): AddValueResponse; | ||||
|  | ||||
|    @Description("Add two numbers") | ||||
|    @Param("value1", "The first value") | ||||
|    @Param("value2", "The second value") | ||||
|    AddValuesMultipleParams(value1: float, value2: float): float; | ||||
|  | ||||
|    @Description("Does literaly nothing") | ||||
|    @Param("param1", "Some number") | ||||
|    ReturningVoid(param1: float): void; | ||||
|  | ||||
|    @Description("Just sends an Event with a String") | ||||
|    @Param("param1", "Parameter with some string for event") | ||||
|    notification OnEvent(param1: string); | ||||
|  | ||||
|    ThrowingError(): void; | ||||
|  | ||||
|  | ||||
|    FunctionWithArrayAsParamAndReturn(values1: float[], values2: float[]): float[]; | ||||
|  | ||||
|    FunctionWithKeywords(type: float, static: float, event: float): float; | ||||
| } | ||||
|  | ||||
| type Test2 { | ||||
|    name: string; | ||||
|    age:  int; | ||||
| } | ||||
|  | ||||
| type TestKeywords { | ||||
|    type: float; | ||||
|    static: float; | ||||
|    event: float; | ||||
| } | ||||
|  | ||||
| service SimpleTestService { | ||||
|    @Description("asdasdasd") | ||||
|    GetTest(name: string, age: int): Test2; | ||||
|    notification TestNot(); | ||||
| } | ||||
							
								
								
									
										5
									
								
								go.mod
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								go.mod
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | ||||
| module github.com/tree-sitter/tree-sitter-jrpc | ||||
|  | ||||
| go 1.23 | ||||
|  | ||||
| require github.com/tree-sitter/go-tree-sitter v0.23 | ||||
							
								
								
									
										115
									
								
								grammar.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								grammar.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,115 @@ | ||||
| /// <reference types="tree-sitter-cli/dsl" /> | ||||
| // @ts-check | ||||
|  | ||||
| module.exports = grammar({ | ||||
|   name: "jrpc", | ||||
|  | ||||
|   rules: { | ||||
|     // TODO: add the actual grammar rules | ||||
|     document: ($) => repeat($._statement), | ||||
|     _statement: ($) => | ||||
|       choice( | ||||
|         $.type_declaration, | ||||
|         $.define_declaration, | ||||
|         $.import_declaration, | ||||
|         $.service_declaration, | ||||
|         $.enum_declaration, | ||||
|       ), | ||||
|     type_declaration: ($) => seq("type", $.identifier, optional($.attributes)), | ||||
|     attributes: ($) => | ||||
|       seq("{", optional(seq($.attribute, repeat($.attribute))), "}"), | ||||
|     attribute: ($) => seq($.pair, ";"), | ||||
|  | ||||
|     enum_declaration: ($) => seq("enum", $.identifier, $.enum_values), | ||||
|     enum_values: ($) => | ||||
|       seq( | ||||
|         "{", | ||||
|         optional(seq($.enum_value, repeat(seq(",", $.enum_value)))), | ||||
|         "}", | ||||
|       ), | ||||
|     enum_value: ($) => | ||||
|       choice($.enum_value_declaration, $.enum_value_assignment), | ||||
|     enum_value_assignment: ($) => seq($.identifier, "=", $.number), | ||||
|     enum_value_declaration: ($) => seq($.identifier), | ||||
|  | ||||
|     define_declaration: ($) => | ||||
|       seq("define", $.identifier, choice($.string, $.identifier), ";"), | ||||
|  | ||||
|     import_declaration: ($) => seq("import", $.string, ";"), | ||||
|  | ||||
|     service_declaration: ($) => | ||||
|       seq("service", $.identifier, $.service_functions), | ||||
|  | ||||
|     service_functions: ($) => | ||||
|       seq( | ||||
|         "{", | ||||
|         optional( | ||||
|           repeat( | ||||
|             seq( | ||||
|               repeat($.function_decorator), | ||||
|               choice($.service_function, $.service_notification), | ||||
|             ), | ||||
|           ), | ||||
|         ), | ||||
|         "}", | ||||
|       ), | ||||
|  | ||||
|     function_decorator: ($) => seq("@", $.identifier, $.decorator_arguments), | ||||
|     decorator_arguments: ($) => | ||||
|       seq( | ||||
|         "(", | ||||
|         optional(seq($.string, optional(repeat(seq(",", $.string))))), | ||||
|         ")", | ||||
|       ), | ||||
|     service_notification: ($) => | ||||
|       seq( | ||||
|         "notification", | ||||
|         field("name", $.identifier), | ||||
|         field("parameters", $.function_arguments), | ||||
|         ";", | ||||
|       ), | ||||
|     service_function: ($) => | ||||
|       seq( | ||||
|         field("name", $.identifier), | ||||
|         field("parameters", $.function_arguments), | ||||
|         ":", | ||||
|         field("return_type", $.type), | ||||
|         ";", | ||||
|       ), | ||||
|     function_arguments: ($) => | ||||
|       seq( | ||||
|         "(", | ||||
|         optional( | ||||
|           seq($.function_argument, repeat(seq(",", $.function_argument))), | ||||
|         ), | ||||
|         ")", | ||||
|       ), | ||||
|     function_argument: ($) => seq($.identifier, ":", $.type), | ||||
|  | ||||
|     pair: ($) => | ||||
|       seq( | ||||
|         field("key", $.identifier), | ||||
|         optional("?"), | ||||
|         ":", | ||||
|         field("value", $.type), | ||||
|       ), | ||||
|  | ||||
|     type: ($) => | ||||
|       choice($.map_type, $.array_type, $.primitive_type, $.identifier), | ||||
|     primitive_type: ($) => choice("int", "string", "float", "boolean", "void"), | ||||
|     array_type: ($) => seq(choice($.primitive_type, $.identifier), "[]"), | ||||
|     map_type: ($) => seq("{", $.map_key_type, ",", $.type, "}"), | ||||
|     map_key_type: ($) => choice("int", "string"), | ||||
|  | ||||
|     identifier: ($) => /[a-zA-Z_][a-zA-Z_0-9]*/, | ||||
|  | ||||
|     string: ($) => choice(seq('"', '"'), seq('"', $._string_content, '"')), | ||||
|     _string_content: ($) => | ||||
|       repeat1(choice($.string_content, $.escape_sequence)), | ||||
|     string_content: (_) => token.immediate(prec(1, /[^\\"\n]+/)), | ||||
|     escape_sequence: (_) => | ||||
|       token.immediate(seq("\\", /(\"|\\|\/|b|f|n|r|t|u)/)), | ||||
|  | ||||
|     number: ($) => /[0-9]+/, | ||||
|   }, | ||||
| }); | ||||
							
								
								
									
										369
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										369
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,369 @@ | ||||
| { | ||||
|   "name": "tree-sitter-jrpc", | ||||
|   "version": "0.0.1", | ||||
|   "lockfileVersion": 3, | ||||
|   "requires": true, | ||||
|   "packages": { | ||||
|     "": { | ||||
|       "name": "tree-sitter-jrpc", | ||||
|       "version": "0.0.1", | ||||
|       "hasInstallScript": true, | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "node-addon-api": "^8.0.0", | ||||
|         "node-gyp-build": "^4.8.1" | ||||
|       }, | ||||
|       "devDependencies": { | ||||
|         "prebuildify": "^6.0.1", | ||||
|         "tree-sitter-cli": "^0.23.0" | ||||
|       }, | ||||
|       "peerDependencies": { | ||||
|         "tree-sitter": "^0.21.1" | ||||
|       }, | ||||
|       "peerDependenciesMeta": { | ||||
|         "tree-sitter": { | ||||
|           "optional": true | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/base64-js": { | ||||
|       "version": "1.5.1", | ||||
|       "resolved": "https://npm.hibas123.de/base64-js/-/base64-js-1.5.1.tgz", | ||||
|       "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", | ||||
|       "dev": true, | ||||
|       "funding": [ | ||||
|         { | ||||
|           "type": "github", | ||||
|           "url": "https://github.com/sponsors/feross" | ||||
|         }, | ||||
|         { | ||||
|           "type": "patreon", | ||||
|           "url": "https://www.patreon.com/feross" | ||||
|         }, | ||||
|         { | ||||
|           "type": "consulting", | ||||
|           "url": "https://feross.org/support" | ||||
|         } | ||||
|       ], | ||||
|       "license": "MIT" | ||||
|     }, | ||||
|     "node_modules/bl": { | ||||
|       "version": "4.1.0", | ||||
|       "resolved": "https://npm.hibas123.de/bl/-/bl-4.1.0.tgz", | ||||
|       "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", | ||||
|       "dev": true, | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "buffer": "^5.5.0", | ||||
|         "inherits": "^2.0.4", | ||||
|         "readable-stream": "^3.4.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/buffer": { | ||||
|       "version": "5.7.1", | ||||
|       "resolved": "https://npm.hibas123.de/buffer/-/buffer-5.7.1.tgz", | ||||
|       "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", | ||||
|       "dev": true, | ||||
|       "funding": [ | ||||
|         { | ||||
|           "type": "github", | ||||
|           "url": "https://github.com/sponsors/feross" | ||||
|         }, | ||||
|         { | ||||
|           "type": "patreon", | ||||
|           "url": "https://www.patreon.com/feross" | ||||
|         }, | ||||
|         { | ||||
|           "type": "consulting", | ||||
|           "url": "https://feross.org/support" | ||||
|         } | ||||
|       ], | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "base64-js": "^1.3.1", | ||||
|         "ieee754": "^1.1.13" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/chownr": { | ||||
|       "version": "1.1.4", | ||||
|       "resolved": "https://npm.hibas123.de/chownr/-/chownr-1.1.4.tgz", | ||||
|       "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", | ||||
|       "dev": true, | ||||
|       "license": "ISC" | ||||
|     }, | ||||
|     "node_modules/end-of-stream": { | ||||
|       "version": "1.4.4", | ||||
|       "resolved": "https://npm.hibas123.de/end-of-stream/-/end-of-stream-1.4.4.tgz", | ||||
|       "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", | ||||
|       "dev": true, | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "once": "^1.4.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/fs-constants": { | ||||
|       "version": "1.0.0", | ||||
|       "resolved": "https://npm.hibas123.de/fs-constants/-/fs-constants-1.0.0.tgz", | ||||
|       "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", | ||||
|       "dev": true, | ||||
|       "license": "MIT" | ||||
|     }, | ||||
|     "node_modules/ieee754": { | ||||
|       "version": "1.2.1", | ||||
|       "resolved": "https://npm.hibas123.de/ieee754/-/ieee754-1.2.1.tgz", | ||||
|       "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", | ||||
|       "dev": true, | ||||
|       "funding": [ | ||||
|         { | ||||
|           "type": "github", | ||||
|           "url": "https://github.com/sponsors/feross" | ||||
|         }, | ||||
|         { | ||||
|           "type": "patreon", | ||||
|           "url": "https://www.patreon.com/feross" | ||||
|         }, | ||||
|         { | ||||
|           "type": "consulting", | ||||
|           "url": "https://feross.org/support" | ||||
|         } | ||||
|       ], | ||||
|       "license": "BSD-3-Clause" | ||||
|     }, | ||||
|     "node_modules/inherits": { | ||||
|       "version": "2.0.4", | ||||
|       "resolved": "https://npm.hibas123.de/inherits/-/inherits-2.0.4.tgz", | ||||
|       "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", | ||||
|       "dev": true, | ||||
|       "license": "ISC" | ||||
|     }, | ||||
|     "node_modules/minimist": { | ||||
|       "version": "1.2.8", | ||||
|       "resolved": "https://npm.hibas123.de/minimist/-/minimist-1.2.8.tgz", | ||||
|       "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", | ||||
|       "dev": true, | ||||
|       "license": "MIT", | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/ljharb" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/mkdirp-classic": { | ||||
|       "version": "0.5.3", | ||||
|       "resolved": "https://npm.hibas123.de/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", | ||||
|       "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", | ||||
|       "dev": true, | ||||
|       "license": "MIT" | ||||
|     }, | ||||
|     "node_modules/node-abi": { | ||||
|       "version": "3.68.0", | ||||
|       "resolved": "https://npm.hibas123.de/node-abi/-/node-abi-3.68.0.tgz", | ||||
|       "integrity": "sha512-7vbj10trelExNjFSBm5kTvZXXa7pZyKWx9RCKIyqe6I9Ev3IzGpQoqBP3a+cOdxY+pWj6VkP28n/2wWysBHD/A==", | ||||
|       "dev": true, | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "semver": "^7.3.5" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=10" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/node-addon-api": { | ||||
|       "version": "8.2.0", | ||||
|       "resolved": "https://npm.hibas123.de/node-addon-api/-/node-addon-api-8.2.0.tgz", | ||||
|       "integrity": "sha512-qnyuI2ROiCkye42n9Tj5aX1ns7rzj6n7zW1XReSnLSL9v/vbLeR6fJq6PU27YU/ICfYw6W7Ouk/N7cysWu/hlw==", | ||||
|       "license": "MIT", | ||||
|       "engines": { | ||||
|         "node": "^18 || ^20 || >= 21" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/node-gyp-build": { | ||||
|       "version": "4.8.2", | ||||
|       "resolved": "https://npm.hibas123.de/node-gyp-build/-/node-gyp-build-4.8.2.tgz", | ||||
|       "integrity": "sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==", | ||||
|       "license": "MIT", | ||||
|       "bin": { | ||||
|         "node-gyp-build": "bin.js", | ||||
|         "node-gyp-build-optional": "optional.js", | ||||
|         "node-gyp-build-test": "build-test.js" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/npm-run-path": { | ||||
|       "version": "3.1.0", | ||||
|       "resolved": "https://npm.hibas123.de/npm-run-path/-/npm-run-path-3.1.0.tgz", | ||||
|       "integrity": "sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==", | ||||
|       "dev": true, | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "path-key": "^3.0.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/once": { | ||||
|       "version": "1.4.0", | ||||
|       "resolved": "https://npm.hibas123.de/once/-/once-1.4.0.tgz", | ||||
|       "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", | ||||
|       "dev": true, | ||||
|       "license": "ISC", | ||||
|       "dependencies": { | ||||
|         "wrappy": "1" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/path-key": { | ||||
|       "version": "3.1.1", | ||||
|       "resolved": "https://npm.hibas123.de/path-key/-/path-key-3.1.1.tgz", | ||||
|       "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", | ||||
|       "dev": true, | ||||
|       "license": "MIT", | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/prebuildify": { | ||||
|       "version": "6.0.1", | ||||
|       "resolved": "https://npm.hibas123.de/prebuildify/-/prebuildify-6.0.1.tgz", | ||||
|       "integrity": "sha512-8Y2oOOateom/s8dNBsGIcnm6AxPmLH4/nanQzL5lQMU+sC0CMhzARZHizwr36pUPLdvBnOkCNQzxg4djuFSgIw==", | ||||
|       "dev": true, | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "minimist": "^1.2.5", | ||||
|         "mkdirp-classic": "^0.5.3", | ||||
|         "node-abi": "^3.3.0", | ||||
|         "npm-run-path": "^3.1.0", | ||||
|         "pump": "^3.0.0", | ||||
|         "tar-fs": "^2.1.0" | ||||
|       }, | ||||
|       "bin": { | ||||
|         "prebuildify": "bin.js" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/pump": { | ||||
|       "version": "3.0.2", | ||||
|       "resolved": "https://npm.hibas123.de/pump/-/pump-3.0.2.tgz", | ||||
|       "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", | ||||
|       "dev": true, | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "end-of-stream": "^1.1.0", | ||||
|         "once": "^1.3.1" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/readable-stream": { | ||||
|       "version": "3.6.2", | ||||
|       "resolved": "https://npm.hibas123.de/readable-stream/-/readable-stream-3.6.2.tgz", | ||||
|       "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", | ||||
|       "dev": true, | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "inherits": "^2.0.3", | ||||
|         "string_decoder": "^1.1.1", | ||||
|         "util-deprecate": "^1.0.1" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">= 6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/safe-buffer": { | ||||
|       "version": "5.2.1", | ||||
|       "resolved": "https://npm.hibas123.de/safe-buffer/-/safe-buffer-5.2.1.tgz", | ||||
|       "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", | ||||
|       "dev": true, | ||||
|       "funding": [ | ||||
|         { | ||||
|           "type": "github", | ||||
|           "url": "https://github.com/sponsors/feross" | ||||
|         }, | ||||
|         { | ||||
|           "type": "patreon", | ||||
|           "url": "https://www.patreon.com/feross" | ||||
|         }, | ||||
|         { | ||||
|           "type": "consulting", | ||||
|           "url": "https://feross.org/support" | ||||
|         } | ||||
|       ], | ||||
|       "license": "MIT" | ||||
|     }, | ||||
|     "node_modules/semver": { | ||||
|       "version": "7.6.3", | ||||
|       "resolved": "https://npm.hibas123.de/semver/-/semver-7.6.3.tgz", | ||||
|       "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", | ||||
|       "dev": true, | ||||
|       "license": "ISC", | ||||
|       "bin": { | ||||
|         "semver": "bin/semver.js" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=10" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/string_decoder": { | ||||
|       "version": "1.3.0", | ||||
|       "resolved": "https://npm.hibas123.de/string_decoder/-/string_decoder-1.3.0.tgz", | ||||
|       "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", | ||||
|       "dev": true, | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "safe-buffer": "~5.2.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/tar-fs": { | ||||
|       "version": "2.1.1", | ||||
|       "resolved": "https://npm.hibas123.de/tar-fs/-/tar-fs-2.1.1.tgz", | ||||
|       "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", | ||||
|       "dev": true, | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "chownr": "^1.1.1", | ||||
|         "mkdirp-classic": "^0.5.2", | ||||
|         "pump": "^3.0.0", | ||||
|         "tar-stream": "^2.1.4" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/tar-stream": { | ||||
|       "version": "2.2.0", | ||||
|       "resolved": "https://npm.hibas123.de/tar-stream/-/tar-stream-2.2.0.tgz", | ||||
|       "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", | ||||
|       "dev": true, | ||||
|       "license": "MIT", | ||||
|       "dependencies": { | ||||
|         "bl": "^4.0.3", | ||||
|         "end-of-stream": "^1.4.1", | ||||
|         "fs-constants": "^1.0.0", | ||||
|         "inherits": "^2.0.3", | ||||
|         "readable-stream": "^3.1.1" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/tree-sitter-cli": { | ||||
|       "version": "0.23.2", | ||||
|       "resolved": "https://npm.hibas123.de/tree-sitter-cli/-/tree-sitter-cli-0.23.2.tgz", | ||||
|       "integrity": "sha512-kPPXprOqREX+C/FgUp2Qpt9jd0vSwn+hOgjzVv/7hapdoWpa+VeWId53rf4oNNd29ikheF12BYtGD/W90feMbA==", | ||||
|       "dev": true, | ||||
|       "hasInstallScript": true, | ||||
|       "license": "MIT", | ||||
|       "bin": { | ||||
|         "tree-sitter": "cli.js" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=12.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/util-deprecate": { | ||||
|       "version": "1.0.2", | ||||
|       "resolved": "https://npm.hibas123.de/util-deprecate/-/util-deprecate-1.0.2.tgz", | ||||
|       "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", | ||||
|       "dev": true, | ||||
|       "license": "MIT" | ||||
|     }, | ||||
|     "node_modules/wrappy": { | ||||
|       "version": "1.0.2", | ||||
|       "resolved": "https://npm.hibas123.de/wrappy/-/wrappy-1.0.2.tgz", | ||||
|       "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", | ||||
|       "dev": true, | ||||
|       "license": "ISC" | ||||
|     } | ||||
|   } | ||||
| } | ||||
							
								
								
									
										52
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,52 @@ | ||||
| { | ||||
|   "name": "tree-sitter-jrpc", | ||||
|   "version": "0.0.1", | ||||
|   "description": "Jrpc grammar for tree-sitter", | ||||
|   "repository": "https://git.hibas.dev/hibas123/tree-sitter-jrpc", | ||||
|   "license": "MIT", | ||||
|   "main": "bindings/node", | ||||
|   "types": "bindings/node", | ||||
|   "keywords": [ | ||||
|     "incremental", | ||||
|     "parsing", | ||||
|     "tree-sitter", | ||||
|     "jrpc" | ||||
|   ], | ||||
|   "files": [ | ||||
|     "grammar.js", | ||||
|     "binding.gyp", | ||||
|     "prebuilds/**", | ||||
|     "bindings/node/*", | ||||
|     "queries/*", | ||||
|     "src/**", | ||||
|     "*.wasm" | ||||
|   ], | ||||
|   "dependencies": { | ||||
|     "node-addon-api": "^8.0.0", | ||||
|     "node-gyp-build": "^4.8.1" | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "prebuildify": "^6.0.1", | ||||
|     "tree-sitter-cli": "^0.23.0" | ||||
|   }, | ||||
|   "peerDependencies": { | ||||
|     "tree-sitter": "^0.21.1" | ||||
|   }, | ||||
|   "peerDependenciesMeta": { | ||||
|     "tree-sitter": { | ||||
|       "optional": true | ||||
|     } | ||||
|   }, | ||||
|   "scripts": { | ||||
|     "install": "node-gyp-build", | ||||
|     "prestart": "tree-sitter build --wasm", | ||||
|     "start": "tree-sitter playground", | ||||
|     "test": "node --test bindings/node/*_test.js" | ||||
|   }, | ||||
|   "tree-sitter": [ | ||||
|     { | ||||
|       "scope": "source.jrpc", | ||||
|       "injection-regex": "^jrpc$" | ||||
|     } | ||||
|   ] | ||||
| } | ||||
							
								
								
									
										29
									
								
								pyproject.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								pyproject.toml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | ||||
| [build-system] | ||||
| requires = ["setuptools>=42", "wheel"] | ||||
| build-backend = "setuptools.build_meta" | ||||
|  | ||||
| [project] | ||||
| name = "tree-sitter-jrpc" | ||||
| description = "Jrpc grammar for tree-sitter" | ||||
| version = "0.0.1" | ||||
| keywords = ["incremental", "parsing", "tree-sitter", "jrpc"] | ||||
| classifiers = [ | ||||
|     "Intended Audience :: Developers", | ||||
|     "License :: OSI Approved :: MIT License", | ||||
|     "Topic :: Software Development :: Compilers", | ||||
|     "Topic :: Text Processing :: Linguistic", | ||||
|     "Typing :: Typed", | ||||
| ] | ||||
| requires-python = ">=3.9" | ||||
| license.text = "MIT" | ||||
| readme = "README.md" | ||||
|  | ||||
| [project.urls] | ||||
| Homepage = "https://git.hibas.dev/hibas123/tree-sitter-jrpc" | ||||
|  | ||||
| [project.optional-dependencies] | ||||
| core = ["tree-sitter~=0.22"] | ||||
|  | ||||
| [tool.cibuildwheel] | ||||
| build = "cp39-*" | ||||
| build-frontend = "build" | ||||
							
								
								
									
										62
									
								
								setup.py
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								setup.py
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,62 @@ | ||||
| from os.path import isdir, join | ||||
| from platform import system | ||||
|  | ||||
| from setuptools import Extension, find_packages, setup | ||||
| from setuptools.command.build import build | ||||
| from wheel.bdist_wheel import bdist_wheel | ||||
|  | ||||
|  | ||||
| class Build(build): | ||||
|     def run(self): | ||||
|         if isdir("queries"): | ||||
|             dest = join(self.build_lib, "tree_sitter_jrpc", "queries") | ||||
|             self.copy_tree("queries", dest) | ||||
|         super().run() | ||||
|  | ||||
|  | ||||
| class BdistWheel(bdist_wheel): | ||||
|     def get_tag(self): | ||||
|         python, abi, platform = super().get_tag() | ||||
|         if python.startswith("cp"): | ||||
|             python, abi = "cp39", "abi3" | ||||
|         return python, abi, platform | ||||
|  | ||||
|  | ||||
| setup( | ||||
|     packages=find_packages("bindings/python"), | ||||
|     package_dir={"": "bindings/python"}, | ||||
|     package_data={ | ||||
|         "tree_sitter_jrpc": ["*.pyi", "py.typed"], | ||||
|         "tree_sitter_jrpc.queries": ["*.scm"], | ||||
|     }, | ||||
|     ext_package="tree_sitter_jrpc", | ||||
|     ext_modules=[ | ||||
|         Extension( | ||||
|             name="_binding", | ||||
|             sources=[ | ||||
|                 "bindings/python/tree_sitter_jrpc/binding.c", | ||||
|                 "src/parser.c", | ||||
|                 # NOTE: if your language uses an external scanner, add it here. | ||||
|             ], | ||||
|             extra_compile_args=[ | ||||
|                 "-std=c11", | ||||
|                 "-fvisibility=hidden", | ||||
|             ] if system() != "Windows" else [ | ||||
|                 "/std:c11", | ||||
|                 "/utf-8", | ||||
|             ], | ||||
|             define_macros=[ | ||||
|                 ("Py_LIMITED_API", "0x03090000"), | ||||
|                 ("PY_SSIZE_T_CLEAN", None), | ||||
|                 ("TREE_SITTER_HIDE_SYMBOLS", None), | ||||
|             ], | ||||
|             include_dirs=["src"], | ||||
|             py_limited_api=True, | ||||
|         ) | ||||
|     ], | ||||
|     cmdclass={ | ||||
|         "build": Build, | ||||
|         "bdist_wheel": BdistWheel | ||||
|     }, | ||||
|     zip_safe=False | ||||
| ) | ||||
							
								
								
									
										767
									
								
								src/grammar.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										767
									
								
								src/grammar.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,767 @@ | ||||
| { | ||||
|   "name": "jrpc", | ||||
|   "rules": { | ||||
|     "document": { | ||||
|       "type": "REPEAT", | ||||
|       "content": { | ||||
|         "type": "SYMBOL", | ||||
|         "name": "_statement" | ||||
|       } | ||||
|     }, | ||||
|     "_statement": { | ||||
|       "type": "CHOICE", | ||||
|       "members": [ | ||||
|         { | ||||
|           "type": "SYMBOL", | ||||
|           "name": "type_declaration" | ||||
|         }, | ||||
|         { | ||||
|           "type": "SYMBOL", | ||||
|           "name": "define_declaration" | ||||
|         }, | ||||
|         { | ||||
|           "type": "SYMBOL", | ||||
|           "name": "import_declaration" | ||||
|         }, | ||||
|         { | ||||
|           "type": "SYMBOL", | ||||
|           "name": "service_declaration" | ||||
|         }, | ||||
|         { | ||||
|           "type": "SYMBOL", | ||||
|           "name": "enum_declaration" | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "type_declaration": { | ||||
|       "type": "SEQ", | ||||
|       "members": [ | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": "type" | ||||
|         }, | ||||
|         { | ||||
|           "type": "SYMBOL", | ||||
|           "name": "identifier" | ||||
|         }, | ||||
|         { | ||||
|           "type": "CHOICE", | ||||
|           "members": [ | ||||
|             { | ||||
|               "type": "SYMBOL", | ||||
|               "name": "attributes" | ||||
|             }, | ||||
|             { | ||||
|               "type": "BLANK" | ||||
|             } | ||||
|           ] | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "attributes": { | ||||
|       "type": "SEQ", | ||||
|       "members": [ | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": "{" | ||||
|         }, | ||||
|         { | ||||
|           "type": "CHOICE", | ||||
|           "members": [ | ||||
|             { | ||||
|               "type": "SEQ", | ||||
|               "members": [ | ||||
|                 { | ||||
|                   "type": "SYMBOL", | ||||
|                   "name": "attribute" | ||||
|                 }, | ||||
|                 { | ||||
|                   "type": "REPEAT", | ||||
|                   "content": { | ||||
|                     "type": "SYMBOL", | ||||
|                     "name": "attribute" | ||||
|                   } | ||||
|                 } | ||||
|               ] | ||||
|             }, | ||||
|             { | ||||
|               "type": "BLANK" | ||||
|             } | ||||
|           ] | ||||
|         }, | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": "}" | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "attribute": { | ||||
|       "type": "SEQ", | ||||
|       "members": [ | ||||
|         { | ||||
|           "type": "SYMBOL", | ||||
|           "name": "pair" | ||||
|         }, | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": ";" | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "enum_declaration": { | ||||
|       "type": "SEQ", | ||||
|       "members": [ | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": "enum" | ||||
|         }, | ||||
|         { | ||||
|           "type": "SYMBOL", | ||||
|           "name": "identifier" | ||||
|         }, | ||||
|         { | ||||
|           "type": "SYMBOL", | ||||
|           "name": "enum_values" | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "enum_values": { | ||||
|       "type": "SEQ", | ||||
|       "members": [ | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": "{" | ||||
|         }, | ||||
|         { | ||||
|           "type": "CHOICE", | ||||
|           "members": [ | ||||
|             { | ||||
|               "type": "SEQ", | ||||
|               "members": [ | ||||
|                 { | ||||
|                   "type": "SYMBOL", | ||||
|                   "name": "enum_value" | ||||
|                 }, | ||||
|                 { | ||||
|                   "type": "REPEAT", | ||||
|                   "content": { | ||||
|                     "type": "SEQ", | ||||
|                     "members": [ | ||||
|                       { | ||||
|                         "type": "STRING", | ||||
|                         "value": "," | ||||
|                       }, | ||||
|                       { | ||||
|                         "type": "SYMBOL", | ||||
|                         "name": "enum_value" | ||||
|                       } | ||||
|                     ] | ||||
|                   } | ||||
|                 } | ||||
|               ] | ||||
|             }, | ||||
|             { | ||||
|               "type": "BLANK" | ||||
|             } | ||||
|           ] | ||||
|         }, | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": "}" | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "enum_value": { | ||||
|       "type": "CHOICE", | ||||
|       "members": [ | ||||
|         { | ||||
|           "type": "SYMBOL", | ||||
|           "name": "enum_value_declaration" | ||||
|         }, | ||||
|         { | ||||
|           "type": "SYMBOL", | ||||
|           "name": "enum_value_assignment" | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "enum_value_assignment": { | ||||
|       "type": "SEQ", | ||||
|       "members": [ | ||||
|         { | ||||
|           "type": "SYMBOL", | ||||
|           "name": "identifier" | ||||
|         }, | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": "=" | ||||
|         }, | ||||
|         { | ||||
|           "type": "SYMBOL", | ||||
|           "name": "number" | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "enum_value_declaration": { | ||||
|       "type": "SEQ", | ||||
|       "members": [ | ||||
|         { | ||||
|           "type": "SYMBOL", | ||||
|           "name": "identifier" | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "define_declaration": { | ||||
|       "type": "SEQ", | ||||
|       "members": [ | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": "define" | ||||
|         }, | ||||
|         { | ||||
|           "type": "SYMBOL", | ||||
|           "name": "identifier" | ||||
|         }, | ||||
|         { | ||||
|           "type": "CHOICE", | ||||
|           "members": [ | ||||
|             { | ||||
|               "type": "SYMBOL", | ||||
|               "name": "string" | ||||
|             }, | ||||
|             { | ||||
|               "type": "SYMBOL", | ||||
|               "name": "identifier" | ||||
|             } | ||||
|           ] | ||||
|         }, | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": ";" | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "import_declaration": { | ||||
|       "type": "SEQ", | ||||
|       "members": [ | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": "import" | ||||
|         }, | ||||
|         { | ||||
|           "type": "SYMBOL", | ||||
|           "name": "string" | ||||
|         }, | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": ";" | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "service_declaration": { | ||||
|       "type": "SEQ", | ||||
|       "members": [ | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": "service" | ||||
|         }, | ||||
|         { | ||||
|           "type": "SYMBOL", | ||||
|           "name": "identifier" | ||||
|         }, | ||||
|         { | ||||
|           "type": "SYMBOL", | ||||
|           "name": "service_functions" | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "service_functions": { | ||||
|       "type": "SEQ", | ||||
|       "members": [ | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": "{" | ||||
|         }, | ||||
|         { | ||||
|           "type": "CHOICE", | ||||
|           "members": [ | ||||
|             { | ||||
|               "type": "REPEAT", | ||||
|               "content": { | ||||
|                 "type": "SEQ", | ||||
|                 "members": [ | ||||
|                   { | ||||
|                     "type": "REPEAT", | ||||
|                     "content": { | ||||
|                       "type": "SYMBOL", | ||||
|                       "name": "function_decorator" | ||||
|                     } | ||||
|                   }, | ||||
|                   { | ||||
|                     "type": "CHOICE", | ||||
|                     "members": [ | ||||
|                       { | ||||
|                         "type": "SYMBOL", | ||||
|                         "name": "service_function" | ||||
|                       }, | ||||
|                       { | ||||
|                         "type": "SYMBOL", | ||||
|                         "name": "service_notification" | ||||
|                       } | ||||
|                     ] | ||||
|                   } | ||||
|                 ] | ||||
|               } | ||||
|             }, | ||||
|             { | ||||
|               "type": "BLANK" | ||||
|             } | ||||
|           ] | ||||
|         }, | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": "}" | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "function_decorator": { | ||||
|       "type": "SEQ", | ||||
|       "members": [ | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": "@" | ||||
|         }, | ||||
|         { | ||||
|           "type": "SYMBOL", | ||||
|           "name": "identifier" | ||||
|         }, | ||||
|         { | ||||
|           "type": "SYMBOL", | ||||
|           "name": "decorator_arguments" | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "decorator_arguments": { | ||||
|       "type": "SEQ", | ||||
|       "members": [ | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": "(" | ||||
|         }, | ||||
|         { | ||||
|           "type": "CHOICE", | ||||
|           "members": [ | ||||
|             { | ||||
|               "type": "SEQ", | ||||
|               "members": [ | ||||
|                 { | ||||
|                   "type": "SYMBOL", | ||||
|                   "name": "string" | ||||
|                 }, | ||||
|                 { | ||||
|                   "type": "CHOICE", | ||||
|                   "members": [ | ||||
|                     { | ||||
|                       "type": "REPEAT", | ||||
|                       "content": { | ||||
|                         "type": "SEQ", | ||||
|                         "members": [ | ||||
|                           { | ||||
|                             "type": "STRING", | ||||
|                             "value": "," | ||||
|                           }, | ||||
|                           { | ||||
|                             "type": "SYMBOL", | ||||
|                             "name": "string" | ||||
|                           } | ||||
|                         ] | ||||
|                       } | ||||
|                     }, | ||||
|                     { | ||||
|                       "type": "BLANK" | ||||
|                     } | ||||
|                   ] | ||||
|                 } | ||||
|               ] | ||||
|             }, | ||||
|             { | ||||
|               "type": "BLANK" | ||||
|             } | ||||
|           ] | ||||
|         }, | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": ")" | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "service_notification": { | ||||
|       "type": "SEQ", | ||||
|       "members": [ | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": "notification" | ||||
|         }, | ||||
|         { | ||||
|           "type": "FIELD", | ||||
|           "name": "name", | ||||
|           "content": { | ||||
|             "type": "SYMBOL", | ||||
|             "name": "identifier" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|           "type": "FIELD", | ||||
|           "name": "parameters", | ||||
|           "content": { | ||||
|             "type": "SYMBOL", | ||||
|             "name": "function_arguments" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": ";" | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "service_function": { | ||||
|       "type": "SEQ", | ||||
|       "members": [ | ||||
|         { | ||||
|           "type": "FIELD", | ||||
|           "name": "name", | ||||
|           "content": { | ||||
|             "type": "SYMBOL", | ||||
|             "name": "identifier" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|           "type": "FIELD", | ||||
|           "name": "parameters", | ||||
|           "content": { | ||||
|             "type": "SYMBOL", | ||||
|             "name": "function_arguments" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": ":" | ||||
|         }, | ||||
|         { | ||||
|           "type": "FIELD", | ||||
|           "name": "return_type", | ||||
|           "content": { | ||||
|             "type": "SYMBOL", | ||||
|             "name": "type" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": ";" | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "function_arguments": { | ||||
|       "type": "SEQ", | ||||
|       "members": [ | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": "(" | ||||
|         }, | ||||
|         { | ||||
|           "type": "CHOICE", | ||||
|           "members": [ | ||||
|             { | ||||
|               "type": "SEQ", | ||||
|               "members": [ | ||||
|                 { | ||||
|                   "type": "SYMBOL", | ||||
|                   "name": "function_argument" | ||||
|                 }, | ||||
|                 { | ||||
|                   "type": "REPEAT", | ||||
|                   "content": { | ||||
|                     "type": "SEQ", | ||||
|                     "members": [ | ||||
|                       { | ||||
|                         "type": "STRING", | ||||
|                         "value": "," | ||||
|                       }, | ||||
|                       { | ||||
|                         "type": "SYMBOL", | ||||
|                         "name": "function_argument" | ||||
|                       } | ||||
|                     ] | ||||
|                   } | ||||
|                 } | ||||
|               ] | ||||
|             }, | ||||
|             { | ||||
|               "type": "BLANK" | ||||
|             } | ||||
|           ] | ||||
|         }, | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": ")" | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "function_argument": { | ||||
|       "type": "SEQ", | ||||
|       "members": [ | ||||
|         { | ||||
|           "type": "SYMBOL", | ||||
|           "name": "identifier" | ||||
|         }, | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": ":" | ||||
|         }, | ||||
|         { | ||||
|           "type": "SYMBOL", | ||||
|           "name": "type" | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "pair": { | ||||
|       "type": "SEQ", | ||||
|       "members": [ | ||||
|         { | ||||
|           "type": "FIELD", | ||||
|           "name": "key", | ||||
|           "content": { | ||||
|             "type": "SYMBOL", | ||||
|             "name": "identifier" | ||||
|           } | ||||
|         }, | ||||
|         { | ||||
|           "type": "CHOICE", | ||||
|           "members": [ | ||||
|             { | ||||
|               "type": "STRING", | ||||
|               "value": "?" | ||||
|             }, | ||||
|             { | ||||
|               "type": "BLANK" | ||||
|             } | ||||
|           ] | ||||
|         }, | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": ":" | ||||
|         }, | ||||
|         { | ||||
|           "type": "FIELD", | ||||
|           "name": "value", | ||||
|           "content": { | ||||
|             "type": "SYMBOL", | ||||
|             "name": "type" | ||||
|           } | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "type": { | ||||
|       "type": "CHOICE", | ||||
|       "members": [ | ||||
|         { | ||||
|           "type": "SYMBOL", | ||||
|           "name": "map_type" | ||||
|         }, | ||||
|         { | ||||
|           "type": "SYMBOL", | ||||
|           "name": "array_type" | ||||
|         }, | ||||
|         { | ||||
|           "type": "SYMBOL", | ||||
|           "name": "primitive_type" | ||||
|         }, | ||||
|         { | ||||
|           "type": "SYMBOL", | ||||
|           "name": "identifier" | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "primitive_type": { | ||||
|       "type": "CHOICE", | ||||
|       "members": [ | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": "int" | ||||
|         }, | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": "string" | ||||
|         }, | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": "float" | ||||
|         }, | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": "boolean" | ||||
|         }, | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": "void" | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "array_type": { | ||||
|       "type": "SEQ", | ||||
|       "members": [ | ||||
|         { | ||||
|           "type": "CHOICE", | ||||
|           "members": [ | ||||
|             { | ||||
|               "type": "SYMBOL", | ||||
|               "name": "primitive_type" | ||||
|             }, | ||||
|             { | ||||
|               "type": "SYMBOL", | ||||
|               "name": "identifier" | ||||
|             } | ||||
|           ] | ||||
|         }, | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": "[]" | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "map_type": { | ||||
|       "type": "SEQ", | ||||
|       "members": [ | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": "{" | ||||
|         }, | ||||
|         { | ||||
|           "type": "SYMBOL", | ||||
|           "name": "map_key_type" | ||||
|         }, | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": "," | ||||
|         }, | ||||
|         { | ||||
|           "type": "SYMBOL", | ||||
|           "name": "type" | ||||
|         }, | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": "}" | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "map_key_type": { | ||||
|       "type": "CHOICE", | ||||
|       "members": [ | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": "int" | ||||
|         }, | ||||
|         { | ||||
|           "type": "STRING", | ||||
|           "value": "string" | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "identifier": { | ||||
|       "type": "PATTERN", | ||||
|       "value": "[a-zA-Z_][a-zA-Z_0-9]*" | ||||
|     }, | ||||
|     "string": { | ||||
|       "type": "CHOICE", | ||||
|       "members": [ | ||||
|         { | ||||
|           "type": "SEQ", | ||||
|           "members": [ | ||||
|             { | ||||
|               "type": "STRING", | ||||
|               "value": "\"" | ||||
|             }, | ||||
|             { | ||||
|               "type": "STRING", | ||||
|               "value": "\"" | ||||
|             } | ||||
|           ] | ||||
|         }, | ||||
|         { | ||||
|           "type": "SEQ", | ||||
|           "members": [ | ||||
|             { | ||||
|               "type": "STRING", | ||||
|               "value": "\"" | ||||
|             }, | ||||
|             { | ||||
|               "type": "SYMBOL", | ||||
|               "name": "_string_content" | ||||
|             }, | ||||
|             { | ||||
|               "type": "STRING", | ||||
|               "value": "\"" | ||||
|             } | ||||
|           ] | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "_string_content": { | ||||
|       "type": "REPEAT1", | ||||
|       "content": { | ||||
|         "type": "CHOICE", | ||||
|         "members": [ | ||||
|           { | ||||
|             "type": "SYMBOL", | ||||
|             "name": "string_content" | ||||
|           }, | ||||
|           { | ||||
|             "type": "SYMBOL", | ||||
|             "name": "escape_sequence" | ||||
|           } | ||||
|         ] | ||||
|       } | ||||
|     }, | ||||
|     "string_content": { | ||||
|       "type": "IMMEDIATE_TOKEN", | ||||
|       "content": { | ||||
|         "type": "PREC", | ||||
|         "value": 1, | ||||
|         "content": { | ||||
|           "type": "PATTERN", | ||||
|           "value": "[^\\\\\"\\n]+" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "escape_sequence": { | ||||
|       "type": "IMMEDIATE_TOKEN", | ||||
|       "content": { | ||||
|         "type": "SEQ", | ||||
|         "members": [ | ||||
|           { | ||||
|             "type": "STRING", | ||||
|             "value": "\\" | ||||
|           }, | ||||
|           { | ||||
|             "type": "PATTERN", | ||||
|             "value": "(\\\"|\\\\|\\/|b|f|n|r|t|u)" | ||||
|           } | ||||
|         ] | ||||
|       } | ||||
|     }, | ||||
|     "number": { | ||||
|       "type": "PATTERN", | ||||
|       "value": "[0-9]+" | ||||
|     } | ||||
|   }, | ||||
|   "extras": [ | ||||
|     { | ||||
|       "type": "PATTERN", | ||||
|       "value": "\\s" | ||||
|     } | ||||
|   ], | ||||
|   "conflicts": [], | ||||
|   "precedences": [], | ||||
|   "externals": [], | ||||
|   "inline": [], | ||||
|   "supertypes": [] | ||||
| } | ||||
							
								
								
									
										603
									
								
								src/node-types.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										603
									
								
								src/node-types.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,603 @@ | ||||
| [ | ||||
|   { | ||||
|     "type": "array_type", | ||||
|     "named": true, | ||||
|     "fields": {}, | ||||
|     "children": { | ||||
|       "multiple": false, | ||||
|       "required": true, | ||||
|       "types": [ | ||||
|         { | ||||
|           "type": "identifier", | ||||
|           "named": true | ||||
|         }, | ||||
|         { | ||||
|           "type": "primitive_type", | ||||
|           "named": true | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   }, | ||||
|   { | ||||
|     "type": "attribute", | ||||
|     "named": true, | ||||
|     "fields": {}, | ||||
|     "children": { | ||||
|       "multiple": false, | ||||
|       "required": true, | ||||
|       "types": [ | ||||
|         { | ||||
|           "type": "pair", | ||||
|           "named": true | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   }, | ||||
|   { | ||||
|     "type": "attributes", | ||||
|     "named": true, | ||||
|     "fields": {}, | ||||
|     "children": { | ||||
|       "multiple": true, | ||||
|       "required": false, | ||||
|       "types": [ | ||||
|         { | ||||
|           "type": "attribute", | ||||
|           "named": true | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   }, | ||||
|   { | ||||
|     "type": "decorator_arguments", | ||||
|     "named": true, | ||||
|     "fields": {}, | ||||
|     "children": { | ||||
|       "multiple": true, | ||||
|       "required": false, | ||||
|       "types": [ | ||||
|         { | ||||
|           "type": "string", | ||||
|           "named": true | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   }, | ||||
|   { | ||||
|     "type": "define_declaration", | ||||
|     "named": true, | ||||
|     "fields": {}, | ||||
|     "children": { | ||||
|       "multiple": true, | ||||
|       "required": true, | ||||
|       "types": [ | ||||
|         { | ||||
|           "type": "identifier", | ||||
|           "named": true | ||||
|         }, | ||||
|         { | ||||
|           "type": "string", | ||||
|           "named": true | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   }, | ||||
|   { | ||||
|     "type": "document", | ||||
|     "named": true, | ||||
|     "fields": {}, | ||||
|     "children": { | ||||
|       "multiple": true, | ||||
|       "required": false, | ||||
|       "types": [ | ||||
|         { | ||||
|           "type": "define_declaration", | ||||
|           "named": true | ||||
|         }, | ||||
|         { | ||||
|           "type": "enum_declaration", | ||||
|           "named": true | ||||
|         }, | ||||
|         { | ||||
|           "type": "import_declaration", | ||||
|           "named": true | ||||
|         }, | ||||
|         { | ||||
|           "type": "service_declaration", | ||||
|           "named": true | ||||
|         }, | ||||
|         { | ||||
|           "type": "type_declaration", | ||||
|           "named": true | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   }, | ||||
|   { | ||||
|     "type": "enum_declaration", | ||||
|     "named": true, | ||||
|     "fields": {}, | ||||
|     "children": { | ||||
|       "multiple": true, | ||||
|       "required": true, | ||||
|       "types": [ | ||||
|         { | ||||
|           "type": "enum_values", | ||||
|           "named": true | ||||
|         }, | ||||
|         { | ||||
|           "type": "identifier", | ||||
|           "named": true | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   }, | ||||
|   { | ||||
|     "type": "enum_value", | ||||
|     "named": true, | ||||
|     "fields": {}, | ||||
|     "children": { | ||||
|       "multiple": false, | ||||
|       "required": true, | ||||
|       "types": [ | ||||
|         { | ||||
|           "type": "enum_value_assignment", | ||||
|           "named": true | ||||
|         }, | ||||
|         { | ||||
|           "type": "enum_value_declaration", | ||||
|           "named": true | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   }, | ||||
|   { | ||||
|     "type": "enum_value_assignment", | ||||
|     "named": true, | ||||
|     "fields": {}, | ||||
|     "children": { | ||||
|       "multiple": true, | ||||
|       "required": true, | ||||
|       "types": [ | ||||
|         { | ||||
|           "type": "identifier", | ||||
|           "named": true | ||||
|         }, | ||||
|         { | ||||
|           "type": "number", | ||||
|           "named": true | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   }, | ||||
|   { | ||||
|     "type": "enum_value_declaration", | ||||
|     "named": true, | ||||
|     "fields": {}, | ||||
|     "children": { | ||||
|       "multiple": false, | ||||
|       "required": true, | ||||
|       "types": [ | ||||
|         { | ||||
|           "type": "identifier", | ||||
|           "named": true | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   }, | ||||
|   { | ||||
|     "type": "enum_values", | ||||
|     "named": true, | ||||
|     "fields": {}, | ||||
|     "children": { | ||||
|       "multiple": true, | ||||
|       "required": false, | ||||
|       "types": [ | ||||
|         { | ||||
|           "type": "enum_value", | ||||
|           "named": true | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   }, | ||||
|   { | ||||
|     "type": "function_argument", | ||||
|     "named": true, | ||||
|     "fields": {}, | ||||
|     "children": { | ||||
|       "multiple": true, | ||||
|       "required": true, | ||||
|       "types": [ | ||||
|         { | ||||
|           "type": "identifier", | ||||
|           "named": true | ||||
|         }, | ||||
|         { | ||||
|           "type": "type", | ||||
|           "named": true | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   }, | ||||
|   { | ||||
|     "type": "function_arguments", | ||||
|     "named": true, | ||||
|     "fields": {}, | ||||
|     "children": { | ||||
|       "multiple": true, | ||||
|       "required": false, | ||||
|       "types": [ | ||||
|         { | ||||
|           "type": "function_argument", | ||||
|           "named": true | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   }, | ||||
|   { | ||||
|     "type": "function_decorator", | ||||
|     "named": true, | ||||
|     "fields": {}, | ||||
|     "children": { | ||||
|       "multiple": true, | ||||
|       "required": true, | ||||
|       "types": [ | ||||
|         { | ||||
|           "type": "decorator_arguments", | ||||
|           "named": true | ||||
|         }, | ||||
|         { | ||||
|           "type": "identifier", | ||||
|           "named": true | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   }, | ||||
|   { | ||||
|     "type": "import_declaration", | ||||
|     "named": true, | ||||
|     "fields": {}, | ||||
|     "children": { | ||||
|       "multiple": false, | ||||
|       "required": true, | ||||
|       "types": [ | ||||
|         { | ||||
|           "type": "string", | ||||
|           "named": true | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   }, | ||||
|   { | ||||
|     "type": "map_key_type", | ||||
|     "named": true, | ||||
|     "fields": {} | ||||
|   }, | ||||
|   { | ||||
|     "type": "map_type", | ||||
|     "named": true, | ||||
|     "fields": {}, | ||||
|     "children": { | ||||
|       "multiple": true, | ||||
|       "required": true, | ||||
|       "types": [ | ||||
|         { | ||||
|           "type": "map_key_type", | ||||
|           "named": true | ||||
|         }, | ||||
|         { | ||||
|           "type": "type", | ||||
|           "named": true | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   }, | ||||
|   { | ||||
|     "type": "pair", | ||||
|     "named": true, | ||||
|     "fields": { | ||||
|       "key": { | ||||
|         "multiple": false, | ||||
|         "required": true, | ||||
|         "types": [ | ||||
|           { | ||||
|             "type": "identifier", | ||||
|             "named": true | ||||
|           } | ||||
|         ] | ||||
|       }, | ||||
|       "value": { | ||||
|         "multiple": false, | ||||
|         "required": true, | ||||
|         "types": [ | ||||
|           { | ||||
|             "type": "type", | ||||
|             "named": true | ||||
|           } | ||||
|         ] | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   { | ||||
|     "type": "primitive_type", | ||||
|     "named": true, | ||||
|     "fields": {} | ||||
|   }, | ||||
|   { | ||||
|     "type": "service_declaration", | ||||
|     "named": true, | ||||
|     "fields": {}, | ||||
|     "children": { | ||||
|       "multiple": true, | ||||
|       "required": true, | ||||
|       "types": [ | ||||
|         { | ||||
|           "type": "identifier", | ||||
|           "named": true | ||||
|         }, | ||||
|         { | ||||
|           "type": "service_functions", | ||||
|           "named": true | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   }, | ||||
|   { | ||||
|     "type": "service_function", | ||||
|     "named": true, | ||||
|     "fields": { | ||||
|       "name": { | ||||
|         "multiple": false, | ||||
|         "required": true, | ||||
|         "types": [ | ||||
|           { | ||||
|             "type": "identifier", | ||||
|             "named": true | ||||
|           } | ||||
|         ] | ||||
|       }, | ||||
|       "parameters": { | ||||
|         "multiple": false, | ||||
|         "required": true, | ||||
|         "types": [ | ||||
|           { | ||||
|             "type": "function_arguments", | ||||
|             "named": true | ||||
|           } | ||||
|         ] | ||||
|       }, | ||||
|       "return_type": { | ||||
|         "multiple": false, | ||||
|         "required": true, | ||||
|         "types": [ | ||||
|           { | ||||
|             "type": "type", | ||||
|             "named": true | ||||
|           } | ||||
|         ] | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   { | ||||
|     "type": "service_functions", | ||||
|     "named": true, | ||||
|     "fields": {}, | ||||
|     "children": { | ||||
|       "multiple": true, | ||||
|       "required": false, | ||||
|       "types": [ | ||||
|         { | ||||
|           "type": "function_decorator", | ||||
|           "named": true | ||||
|         }, | ||||
|         { | ||||
|           "type": "service_function", | ||||
|           "named": true | ||||
|         }, | ||||
|         { | ||||
|           "type": "service_notification", | ||||
|           "named": true | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   }, | ||||
|   { | ||||
|     "type": "service_notification", | ||||
|     "named": true, | ||||
|     "fields": { | ||||
|       "name": { | ||||
|         "multiple": false, | ||||
|         "required": true, | ||||
|         "types": [ | ||||
|           { | ||||
|             "type": "identifier", | ||||
|             "named": true | ||||
|           } | ||||
|         ] | ||||
|       }, | ||||
|       "parameters": { | ||||
|         "multiple": false, | ||||
|         "required": true, | ||||
|         "types": [ | ||||
|           { | ||||
|             "type": "function_arguments", | ||||
|             "named": true | ||||
|           } | ||||
|         ] | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   { | ||||
|     "type": "string", | ||||
|     "named": true, | ||||
|     "fields": {}, | ||||
|     "children": { | ||||
|       "multiple": true, | ||||
|       "required": false, | ||||
|       "types": [ | ||||
|         { | ||||
|           "type": "escape_sequence", | ||||
|           "named": true | ||||
|         }, | ||||
|         { | ||||
|           "type": "string_content", | ||||
|           "named": true | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   }, | ||||
|   { | ||||
|     "type": "type", | ||||
|     "named": true, | ||||
|     "fields": {}, | ||||
|     "children": { | ||||
|       "multiple": false, | ||||
|       "required": true, | ||||
|       "types": [ | ||||
|         { | ||||
|           "type": "array_type", | ||||
|           "named": true | ||||
|         }, | ||||
|         { | ||||
|           "type": "identifier", | ||||
|           "named": true | ||||
|         }, | ||||
|         { | ||||
|           "type": "map_type", | ||||
|           "named": true | ||||
|         }, | ||||
|         { | ||||
|           "type": "primitive_type", | ||||
|           "named": true | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   }, | ||||
|   { | ||||
|     "type": "type_declaration", | ||||
|     "named": true, | ||||
|     "fields": {}, | ||||
|     "children": { | ||||
|       "multiple": true, | ||||
|       "required": true, | ||||
|       "types": [ | ||||
|         { | ||||
|           "type": "attributes", | ||||
|           "named": true | ||||
|         }, | ||||
|         { | ||||
|           "type": "identifier", | ||||
|           "named": true | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   }, | ||||
|   { | ||||
|     "type": "\"", | ||||
|     "named": false | ||||
|   }, | ||||
|   { | ||||
|     "type": "(", | ||||
|     "named": false | ||||
|   }, | ||||
|   { | ||||
|     "type": ")", | ||||
|     "named": false | ||||
|   }, | ||||
|   { | ||||
|     "type": ",", | ||||
|     "named": false | ||||
|   }, | ||||
|   { | ||||
|     "type": ":", | ||||
|     "named": false | ||||
|   }, | ||||
|   { | ||||
|     "type": ";", | ||||
|     "named": false | ||||
|   }, | ||||
|   { | ||||
|     "type": "=", | ||||
|     "named": false | ||||
|   }, | ||||
|   { | ||||
|     "type": "?", | ||||
|     "named": false | ||||
|   }, | ||||
|   { | ||||
|     "type": "@", | ||||
|     "named": false | ||||
|   }, | ||||
|   { | ||||
|     "type": "[]", | ||||
|     "named": false | ||||
|   }, | ||||
|   { | ||||
|     "type": "boolean", | ||||
|     "named": false | ||||
|   }, | ||||
|   { | ||||
|     "type": "define", | ||||
|     "named": false | ||||
|   }, | ||||
|   { | ||||
|     "type": "enum", | ||||
|     "named": false | ||||
|   }, | ||||
|   { | ||||
|     "type": "escape_sequence", | ||||
|     "named": true | ||||
|   }, | ||||
|   { | ||||
|     "type": "float", | ||||
|     "named": false | ||||
|   }, | ||||
|   { | ||||
|     "type": "identifier", | ||||
|     "named": true | ||||
|   }, | ||||
|   { | ||||
|     "type": "import", | ||||
|     "named": false | ||||
|   }, | ||||
|   { | ||||
|     "type": "int", | ||||
|     "named": false | ||||
|   }, | ||||
|   { | ||||
|     "type": "notification", | ||||
|     "named": false | ||||
|   }, | ||||
|   { | ||||
|     "type": "number", | ||||
|     "named": true | ||||
|   }, | ||||
|   { | ||||
|     "type": "service", | ||||
|     "named": false | ||||
|   }, | ||||
|   { | ||||
|     "type": "string", | ||||
|     "named": false | ||||
|   }, | ||||
|   { | ||||
|     "type": "string_content", | ||||
|     "named": true | ||||
|   }, | ||||
|   { | ||||
|     "type": "type", | ||||
|     "named": false | ||||
|   }, | ||||
|   { | ||||
|     "type": "void", | ||||
|     "named": false | ||||
|   }, | ||||
|   { | ||||
|     "type": "{", | ||||
|     "named": false | ||||
|   }, | ||||
|   { | ||||
|     "type": "}", | ||||
|     "named": false | ||||
|   } | ||||
| ] | ||||
							
								
								
									
										2480
									
								
								src/parser.c
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										2480
									
								
								src/parser.c
									
									
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										54
									
								
								src/tree_sitter/alloc.h
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								src/tree_sitter/alloc.h
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,54 @@ | ||||
| #ifndef TREE_SITTER_ALLOC_H_ | ||||
| #define TREE_SITTER_ALLOC_H_ | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| #include <stdbool.h> | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
|  | ||||
| // Allow clients to override allocation functions | ||||
| #ifdef TREE_SITTER_REUSE_ALLOCATOR | ||||
|  | ||||
| extern void *(*ts_current_malloc)(size_t); | ||||
| extern void *(*ts_current_calloc)(size_t, size_t); | ||||
| extern void *(*ts_current_realloc)(void *, size_t); | ||||
| extern void (*ts_current_free)(void *); | ||||
|  | ||||
| #ifndef ts_malloc | ||||
| #define ts_malloc  ts_current_malloc | ||||
| #endif | ||||
| #ifndef ts_calloc | ||||
| #define ts_calloc  ts_current_calloc | ||||
| #endif | ||||
| #ifndef ts_realloc | ||||
| #define ts_realloc ts_current_realloc | ||||
| #endif | ||||
| #ifndef ts_free | ||||
| #define ts_free    ts_current_free | ||||
| #endif | ||||
|  | ||||
| #else | ||||
|  | ||||
| #ifndef ts_malloc | ||||
| #define ts_malloc  malloc | ||||
| #endif | ||||
| #ifndef ts_calloc | ||||
| #define ts_calloc  calloc | ||||
| #endif | ||||
| #ifndef ts_realloc | ||||
| #define ts_realloc realloc | ||||
| #endif | ||||
| #ifndef ts_free | ||||
| #define ts_free    free | ||||
| #endif | ||||
|  | ||||
| #endif | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
|  | ||||
| #endif // TREE_SITTER_ALLOC_H_ | ||||
							
								
								
									
										290
									
								
								src/tree_sitter/array.h
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										290
									
								
								src/tree_sitter/array.h
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,290 @@ | ||||
| #ifndef TREE_SITTER_ARRAY_H_ | ||||
| #define TREE_SITTER_ARRAY_H_ | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| #include "./alloc.h" | ||||
|  | ||||
| #include <assert.h> | ||||
| #include <stdbool.h> | ||||
| #include <stdint.h> | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
|  | ||||
| #ifdef _MSC_VER | ||||
| #pragma warning(disable : 4101) | ||||
| #elif defined(__GNUC__) || defined(__clang__) | ||||
| #pragma GCC diagnostic push | ||||
| #pragma GCC diagnostic ignored "-Wunused-variable" | ||||
| #endif | ||||
|  | ||||
| #define Array(T)       \ | ||||
|   struct {             \ | ||||
|     T *contents;       \ | ||||
|     uint32_t size;     \ | ||||
|     uint32_t capacity; \ | ||||
|   } | ||||
|  | ||||
| /// Initialize an array. | ||||
| #define array_init(self) \ | ||||
|   ((self)->size = 0, (self)->capacity = 0, (self)->contents = NULL) | ||||
|  | ||||
| /// Create an empty array. | ||||
| #define array_new() \ | ||||
|   { NULL, 0, 0 } | ||||
|  | ||||
| /// Get a pointer to the element at a given `index` in the array. | ||||
| #define array_get(self, _index) \ | ||||
|   (assert((uint32_t)(_index) < (self)->size), &(self)->contents[_index]) | ||||
|  | ||||
| /// Get a pointer to the first element in the array. | ||||
| #define array_front(self) array_get(self, 0) | ||||
|  | ||||
| /// Get a pointer to the last element in the array. | ||||
| #define array_back(self) array_get(self, (self)->size - 1) | ||||
|  | ||||
| /// Clear the array, setting its size to zero. Note that this does not free any | ||||
| /// memory allocated for the array's contents. | ||||
| #define array_clear(self) ((self)->size = 0) | ||||
|  | ||||
| /// Reserve `new_capacity` elements of space in the array. If `new_capacity` is | ||||
| /// less than the array's current capacity, this function has no effect. | ||||
| #define array_reserve(self, new_capacity) \ | ||||
|   _array__reserve((Array *)(self), array_elem_size(self), new_capacity) | ||||
|  | ||||
| /// Free any memory allocated for this array. Note that this does not free any | ||||
| /// memory allocated for the array's contents. | ||||
| #define array_delete(self) _array__delete((Array *)(self)) | ||||
|  | ||||
| /// Push a new `element` onto the end of the array. | ||||
| #define array_push(self, element)                            \ | ||||
|   (_array__grow((Array *)(self), 1, array_elem_size(self)), \ | ||||
|    (self)->contents[(self)->size++] = (element)) | ||||
|  | ||||
| /// Increase the array's size by `count` elements. | ||||
| /// New elements are zero-initialized. | ||||
| #define array_grow_by(self, count) \ | ||||
|   do { \ | ||||
|     if ((count) == 0) break; \ | ||||
|     _array__grow((Array *)(self), count, array_elem_size(self)); \ | ||||
|     memset((self)->contents + (self)->size, 0, (count) * array_elem_size(self)); \ | ||||
|     (self)->size += (count); \ | ||||
|   } while (0) | ||||
|  | ||||
| /// Append all elements from one array to the end of another. | ||||
| #define array_push_all(self, other)                                       \ | ||||
|   array_extend((self), (other)->size, (other)->contents) | ||||
|  | ||||
| /// Append `count` elements to the end of the array, reading their values from the | ||||
| /// `contents` pointer. | ||||
| #define array_extend(self, count, contents)                    \ | ||||
|   _array__splice(                                               \ | ||||
|     (Array *)(self), array_elem_size(self), (self)->size, \ | ||||
|     0, count,  contents                                        \ | ||||
|   ) | ||||
|  | ||||
| /// Remove `old_count` elements from the array starting at the given `index`. At | ||||
| /// the same index, insert `new_count` new elements, reading their values from the | ||||
| /// `new_contents` pointer. | ||||
| #define array_splice(self, _index, old_count, new_count, new_contents)  \ | ||||
|   _array__splice(                                                       \ | ||||
|     (Array *)(self), array_elem_size(self), _index,                \ | ||||
|     old_count, new_count, new_contents                                 \ | ||||
|   ) | ||||
|  | ||||
| /// Insert one `element` into the array at the given `index`. | ||||
| #define array_insert(self, _index, element) \ | ||||
|   _array__splice((Array *)(self), array_elem_size(self), _index, 0, 1, &(element)) | ||||
|  | ||||
| /// Remove one element from the array at the given `index`. | ||||
| #define array_erase(self, _index) \ | ||||
|   _array__erase((Array *)(self), array_elem_size(self), _index) | ||||
|  | ||||
| /// Pop the last element off the array, returning the element by value. | ||||
| #define array_pop(self) ((self)->contents[--(self)->size]) | ||||
|  | ||||
| /// Assign the contents of one array to another, reallocating if necessary. | ||||
| #define array_assign(self, other) \ | ||||
|   _array__assign((Array *)(self), (const Array *)(other), array_elem_size(self)) | ||||
|  | ||||
| /// Swap one array with another | ||||
| #define array_swap(self, other) \ | ||||
|   _array__swap((Array *)(self), (Array *)(other)) | ||||
|  | ||||
| /// Get the size of the array contents | ||||
| #define array_elem_size(self) (sizeof *(self)->contents) | ||||
|  | ||||
| /// Search a sorted array for a given `needle` value, using the given `compare` | ||||
| /// callback to determine the order. | ||||
| /// | ||||
| /// If an existing element is found to be equal to `needle`, then the `index` | ||||
| /// out-parameter is set to the existing value's index, and the `exists` | ||||
| /// out-parameter is set to true. Otherwise, `index` is set to an index where | ||||
| /// `needle` should be inserted in order to preserve the sorting, and `exists` | ||||
| /// is set to false. | ||||
| #define array_search_sorted_with(self, compare, needle, _index, _exists) \ | ||||
|   _array__search_sorted(self, 0, compare, , needle, _index, _exists) | ||||
|  | ||||
| /// Search a sorted array for a given `needle` value, using integer comparisons | ||||
| /// of a given struct field (specified with a leading dot) to determine the order. | ||||
| /// | ||||
| /// See also `array_search_sorted_with`. | ||||
| #define array_search_sorted_by(self, field, needle, _index, _exists) \ | ||||
|   _array__search_sorted(self, 0, _compare_int, field, needle, _index, _exists) | ||||
|  | ||||
| /// Insert a given `value` into a sorted array, using the given `compare` | ||||
| /// callback to determine the order. | ||||
| #define array_insert_sorted_with(self, compare, value) \ | ||||
|   do { \ | ||||
|     unsigned _index, _exists; \ | ||||
|     array_search_sorted_with(self, compare, &(value), &_index, &_exists); \ | ||||
|     if (!_exists) array_insert(self, _index, value); \ | ||||
|   } while (0) | ||||
|  | ||||
| /// Insert a given `value` into a sorted array, using integer comparisons of | ||||
| /// a given struct field (specified with a leading dot) to determine the order. | ||||
| /// | ||||
| /// See also `array_search_sorted_by`. | ||||
| #define array_insert_sorted_by(self, field, value) \ | ||||
|   do { \ | ||||
|     unsigned _index, _exists; \ | ||||
|     array_search_sorted_by(self, field, (value) field, &_index, &_exists); \ | ||||
|     if (!_exists) array_insert(self, _index, value); \ | ||||
|   } while (0) | ||||
|  | ||||
| // Private | ||||
|  | ||||
| typedef Array(void) Array; | ||||
|  | ||||
| /// This is not what you're looking for, see `array_delete`. | ||||
| static inline void _array__delete(Array *self) { | ||||
|   if (self->contents) { | ||||
|     ts_free(self->contents); | ||||
|     self->contents = NULL; | ||||
|     self->size = 0; | ||||
|     self->capacity = 0; | ||||
|   } | ||||
| } | ||||
|  | ||||
| /// This is not what you're looking for, see `array_erase`. | ||||
| static inline void _array__erase(Array *self, size_t element_size, | ||||
|                                 uint32_t index) { | ||||
|   assert(index < self->size); | ||||
|   char *contents = (char *)self->contents; | ||||
|   memmove(contents + index * element_size, contents + (index + 1) * element_size, | ||||
|           (self->size - index - 1) * element_size); | ||||
|   self->size--; | ||||
| } | ||||
|  | ||||
| /// This is not what you're looking for, see `array_reserve`. | ||||
| static inline void _array__reserve(Array *self, size_t element_size, uint32_t new_capacity) { | ||||
|   if (new_capacity > self->capacity) { | ||||
|     if (self->contents) { | ||||
|       self->contents = ts_realloc(self->contents, new_capacity * element_size); | ||||
|     } else { | ||||
|       self->contents = ts_malloc(new_capacity * element_size); | ||||
|     } | ||||
|     self->capacity = new_capacity; | ||||
|   } | ||||
| } | ||||
|  | ||||
| /// This is not what you're looking for, see `array_assign`. | ||||
| static inline void _array__assign(Array *self, const Array *other, size_t element_size) { | ||||
|   _array__reserve(self, element_size, other->size); | ||||
|   self->size = other->size; | ||||
|   memcpy(self->contents, other->contents, self->size * element_size); | ||||
| } | ||||
|  | ||||
| /// This is not what you're looking for, see `array_swap`. | ||||
| static inline void _array__swap(Array *self, Array *other) { | ||||
|   Array swap = *other; | ||||
|   *other = *self; | ||||
|   *self = swap; | ||||
| } | ||||
|  | ||||
| /// This is not what you're looking for, see `array_push` or `array_grow_by`. | ||||
| static inline void _array__grow(Array *self, uint32_t count, size_t element_size) { | ||||
|   uint32_t new_size = self->size + count; | ||||
|   if (new_size > self->capacity) { | ||||
|     uint32_t new_capacity = self->capacity * 2; | ||||
|     if (new_capacity < 8) new_capacity = 8; | ||||
|     if (new_capacity < new_size) new_capacity = new_size; | ||||
|     _array__reserve(self, element_size, new_capacity); | ||||
|   } | ||||
| } | ||||
|  | ||||
| /// This is not what you're looking for, see `array_splice`. | ||||
| static inline void _array__splice(Array *self, size_t element_size, | ||||
|                                  uint32_t index, uint32_t old_count, | ||||
|                                  uint32_t new_count, const void *elements) { | ||||
|   uint32_t new_size = self->size + new_count - old_count; | ||||
|   uint32_t old_end = index + old_count; | ||||
|   uint32_t new_end = index + new_count; | ||||
|   assert(old_end <= self->size); | ||||
|  | ||||
|   _array__reserve(self, element_size, new_size); | ||||
|  | ||||
|   char *contents = (char *)self->contents; | ||||
|   if (self->size > old_end) { | ||||
|     memmove( | ||||
|       contents + new_end * element_size, | ||||
|       contents + old_end * element_size, | ||||
|       (self->size - old_end) * element_size | ||||
|     ); | ||||
|   } | ||||
|   if (new_count > 0) { | ||||
|     if (elements) { | ||||
|       memcpy( | ||||
|         (contents + index * element_size), | ||||
|         elements, | ||||
|         new_count * element_size | ||||
|       ); | ||||
|     } else { | ||||
|       memset( | ||||
|         (contents + index * element_size), | ||||
|         0, | ||||
|         new_count * element_size | ||||
|       ); | ||||
|     } | ||||
|   } | ||||
|   self->size += new_count - old_count; | ||||
| } | ||||
|  | ||||
| /// A binary search routine, based on Rust's `std::slice::binary_search_by`. | ||||
| /// This is not what you're looking for, see `array_search_sorted_with` or `array_search_sorted_by`. | ||||
| #define _array__search_sorted(self, start, compare, suffix, needle, _index, _exists) \ | ||||
|   do { \ | ||||
|     *(_index) = start; \ | ||||
|     *(_exists) = false; \ | ||||
|     uint32_t size = (self)->size - *(_index); \ | ||||
|     if (size == 0) break; \ | ||||
|     int comparison; \ | ||||
|     while (size > 1) { \ | ||||
|       uint32_t half_size = size / 2; \ | ||||
|       uint32_t mid_index = *(_index) + half_size; \ | ||||
|       comparison = compare(&((self)->contents[mid_index] suffix), (needle)); \ | ||||
|       if (comparison <= 0) *(_index) = mid_index; \ | ||||
|       size -= half_size; \ | ||||
|     } \ | ||||
|     comparison = compare(&((self)->contents[*(_index)] suffix), (needle)); \ | ||||
|     if (comparison == 0) *(_exists) = true; \ | ||||
|     else if (comparison < 0) *(_index) += 1; \ | ||||
|   } while (0) | ||||
|  | ||||
| /// Helper macro for the `_sorted_by` routines below. This takes the left (existing) | ||||
| /// parameter by reference in order to work with the generic sorting function above. | ||||
| #define _compare_int(a, b) ((int)*(a) - (int)(b)) | ||||
|  | ||||
| #ifdef _MSC_VER | ||||
| #pragma warning(default : 4101) | ||||
| #elif defined(__GNUC__) || defined(__clang__) | ||||
| #pragma GCC diagnostic pop | ||||
| #endif | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
|  | ||||
| #endif  // TREE_SITTER_ARRAY_H_ | ||||
							
								
								
									
										266
									
								
								src/tree_sitter/parser.h
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										266
									
								
								src/tree_sitter/parser.h
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,266 @@ | ||||
| #ifndef TREE_SITTER_PARSER_H_ | ||||
| #define TREE_SITTER_PARSER_H_ | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | ||||
| #include <stdbool.h> | ||||
| #include <stdint.h> | ||||
| #include <stdlib.h> | ||||
|  | ||||
| #define ts_builtin_sym_error ((TSSymbol)-1) | ||||
| #define ts_builtin_sym_end 0 | ||||
| #define TREE_SITTER_SERIALIZATION_BUFFER_SIZE 1024 | ||||
|  | ||||
| #ifndef TREE_SITTER_API_H_ | ||||
| typedef uint16_t TSStateId; | ||||
| typedef uint16_t TSSymbol; | ||||
| typedef uint16_t TSFieldId; | ||||
| typedef struct TSLanguage TSLanguage; | ||||
| #endif | ||||
|  | ||||
| typedef struct { | ||||
|   TSFieldId field_id; | ||||
|   uint8_t child_index; | ||||
|   bool inherited; | ||||
| } TSFieldMapEntry; | ||||
|  | ||||
| typedef struct { | ||||
|   uint16_t index; | ||||
|   uint16_t length; | ||||
| } TSFieldMapSlice; | ||||
|  | ||||
| typedef struct { | ||||
|   bool visible; | ||||
|   bool named; | ||||
|   bool supertype; | ||||
| } TSSymbolMetadata; | ||||
|  | ||||
| typedef struct TSLexer TSLexer; | ||||
|  | ||||
| struct TSLexer { | ||||
|   int32_t lookahead; | ||||
|   TSSymbol result_symbol; | ||||
|   void (*advance)(TSLexer *, bool); | ||||
|   void (*mark_end)(TSLexer *); | ||||
|   uint32_t (*get_column)(TSLexer *); | ||||
|   bool (*is_at_included_range_start)(const TSLexer *); | ||||
|   bool (*eof)(const TSLexer *); | ||||
|   void (*log)(const TSLexer *, const char *, ...); | ||||
| }; | ||||
|  | ||||
| typedef enum { | ||||
|   TSParseActionTypeShift, | ||||
|   TSParseActionTypeReduce, | ||||
|   TSParseActionTypeAccept, | ||||
|   TSParseActionTypeRecover, | ||||
| } TSParseActionType; | ||||
|  | ||||
| typedef union { | ||||
|   struct { | ||||
|     uint8_t type; | ||||
|     TSStateId state; | ||||
|     bool extra; | ||||
|     bool repetition; | ||||
|   } shift; | ||||
|   struct { | ||||
|     uint8_t type; | ||||
|     uint8_t child_count; | ||||
|     TSSymbol symbol; | ||||
|     int16_t dynamic_precedence; | ||||
|     uint16_t production_id; | ||||
|   } reduce; | ||||
|   uint8_t type; | ||||
| } TSParseAction; | ||||
|  | ||||
| typedef struct { | ||||
|   uint16_t lex_state; | ||||
|   uint16_t external_lex_state; | ||||
| } TSLexMode; | ||||
|  | ||||
| typedef union { | ||||
|   TSParseAction action; | ||||
|   struct { | ||||
|     uint8_t count; | ||||
|     bool reusable; | ||||
|   } entry; | ||||
| } TSParseActionEntry; | ||||
|  | ||||
| typedef struct { | ||||
|   int32_t start; | ||||
|   int32_t end; | ||||
| } TSCharacterRange; | ||||
|  | ||||
| struct TSLanguage { | ||||
|   uint32_t version; | ||||
|   uint32_t symbol_count; | ||||
|   uint32_t alias_count; | ||||
|   uint32_t token_count; | ||||
|   uint32_t external_token_count; | ||||
|   uint32_t state_count; | ||||
|   uint32_t large_state_count; | ||||
|   uint32_t production_id_count; | ||||
|   uint32_t field_count; | ||||
|   uint16_t max_alias_sequence_length; | ||||
|   const uint16_t *parse_table; | ||||
|   const uint16_t *small_parse_table; | ||||
|   const uint32_t *small_parse_table_map; | ||||
|   const TSParseActionEntry *parse_actions; | ||||
|   const char * const *symbol_names; | ||||
|   const char * const *field_names; | ||||
|   const TSFieldMapSlice *field_map_slices; | ||||
|   const TSFieldMapEntry *field_map_entries; | ||||
|   const TSSymbolMetadata *symbol_metadata; | ||||
|   const TSSymbol *public_symbol_map; | ||||
|   const uint16_t *alias_map; | ||||
|   const TSSymbol *alias_sequences; | ||||
|   const TSLexMode *lex_modes; | ||||
|   bool (*lex_fn)(TSLexer *, TSStateId); | ||||
|   bool (*keyword_lex_fn)(TSLexer *, TSStateId); | ||||
|   TSSymbol keyword_capture_token; | ||||
|   struct { | ||||
|     const bool *states; | ||||
|     const TSSymbol *symbol_map; | ||||
|     void *(*create)(void); | ||||
|     void (*destroy)(void *); | ||||
|     bool (*scan)(void *, TSLexer *, const bool *symbol_whitelist); | ||||
|     unsigned (*serialize)(void *, char *); | ||||
|     void (*deserialize)(void *, const char *, unsigned); | ||||
|   } external_scanner; | ||||
|   const TSStateId *primary_state_ids; | ||||
| }; | ||||
|  | ||||
| static inline bool set_contains(TSCharacterRange *ranges, uint32_t len, int32_t lookahead) { | ||||
|   uint32_t index = 0; | ||||
|   uint32_t size = len - index; | ||||
|   while (size > 1) { | ||||
|     uint32_t half_size = size / 2; | ||||
|     uint32_t mid_index = index + half_size; | ||||
|     TSCharacterRange *range = &ranges[mid_index]; | ||||
|     if (lookahead >= range->start && lookahead <= range->end) { | ||||
|       return true; | ||||
|     } else if (lookahead > range->end) { | ||||
|       index = mid_index; | ||||
|     } | ||||
|     size -= half_size; | ||||
|   } | ||||
|   TSCharacterRange *range = &ranges[index]; | ||||
|   return (lookahead >= range->start && lookahead <= range->end); | ||||
| } | ||||
|  | ||||
| /* | ||||
|  *  Lexer Macros | ||||
|  */ | ||||
|  | ||||
| #ifdef _MSC_VER | ||||
| #define UNUSED __pragma(warning(suppress : 4101)) | ||||
| #else | ||||
| #define UNUSED __attribute__((unused)) | ||||
| #endif | ||||
|  | ||||
| #define START_LEXER()           \ | ||||
|   bool result = false;          \ | ||||
|   bool skip = false;            \ | ||||
|   UNUSED                        \ | ||||
|   bool eof = false;             \ | ||||
|   int32_t lookahead;            \ | ||||
|   goto start;                   \ | ||||
|   next_state:                   \ | ||||
|   lexer->advance(lexer, skip);  \ | ||||
|   start:                        \ | ||||
|   skip = false;                 \ | ||||
|   lookahead = lexer->lookahead; | ||||
|  | ||||
| #define ADVANCE(state_value) \ | ||||
|   {                          \ | ||||
|     state = state_value;     \ | ||||
|     goto next_state;         \ | ||||
|   } | ||||
|  | ||||
| #define ADVANCE_MAP(...)                                              \ | ||||
|   {                                                                   \ | ||||
|     static const uint16_t map[] = { __VA_ARGS__ };                    \ | ||||
|     for (uint32_t i = 0; i < sizeof(map) / sizeof(map[0]); i += 2) {  \ | ||||
|       if (map[i] == lookahead) {                                      \ | ||||
|         state = map[i + 1];                                           \ | ||||
|         goto next_state;                                              \ | ||||
|       }                                                               \ | ||||
|     }                                                                 \ | ||||
|   } | ||||
|  | ||||
| #define SKIP(state_value) \ | ||||
|   {                       \ | ||||
|     skip = true;          \ | ||||
|     state = state_value;  \ | ||||
|     goto next_state;      \ | ||||
|   } | ||||
|  | ||||
| #define ACCEPT_TOKEN(symbol_value)     \ | ||||
|   result = true;                       \ | ||||
|   lexer->result_symbol = symbol_value; \ | ||||
|   lexer->mark_end(lexer); | ||||
|  | ||||
| #define END_STATE() return result; | ||||
|  | ||||
| /* | ||||
|  *  Parse Table Macros | ||||
|  */ | ||||
|  | ||||
| #define SMALL_STATE(id) ((id) - LARGE_STATE_COUNT) | ||||
|  | ||||
| #define STATE(id) id | ||||
|  | ||||
| #define ACTIONS(id) id | ||||
|  | ||||
| #define SHIFT(state_value)            \ | ||||
|   {{                                  \ | ||||
|     .shift = {                        \ | ||||
|       .type = TSParseActionTypeShift, \ | ||||
|       .state = (state_value)          \ | ||||
|     }                                 \ | ||||
|   }} | ||||
|  | ||||
| #define SHIFT_REPEAT(state_value)     \ | ||||
|   {{                                  \ | ||||
|     .shift = {                        \ | ||||
|       .type = TSParseActionTypeShift, \ | ||||
|       .state = (state_value),         \ | ||||
|       .repetition = true              \ | ||||
|     }                                 \ | ||||
|   }} | ||||
|  | ||||
| #define SHIFT_EXTRA()                 \ | ||||
|   {{                                  \ | ||||
|     .shift = {                        \ | ||||
|       .type = TSParseActionTypeShift, \ | ||||
|       .extra = true                   \ | ||||
|     }                                 \ | ||||
|   }} | ||||
|  | ||||
| #define REDUCE(symbol_name, children, precedence, prod_id) \ | ||||
|   {{                                                       \ | ||||
|     .reduce = {                                            \ | ||||
|       .type = TSParseActionTypeReduce,                     \ | ||||
|       .symbol = symbol_name,                               \ | ||||
|       .child_count = children,                             \ | ||||
|       .dynamic_precedence = precedence,                    \ | ||||
|       .production_id = prod_id                             \ | ||||
|     },                                                     \ | ||||
|   }} | ||||
|  | ||||
| #define RECOVER()                    \ | ||||
|   {{                                 \ | ||||
|     .type = TSParseActionTypeRecover \ | ||||
|   }} | ||||
|  | ||||
| #define ACCEPT_INPUT()              \ | ||||
|   {{                                \ | ||||
|     .type = TSParseActionTypeAccept \ | ||||
|   }} | ||||
|  | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
|  | ||||
| #endif  // TREE_SITTER_PARSER_H_ | ||||
		Reference in New Issue
	
	Block a user
	 Fabian Stamm
					Fabian Stamm