From f741f66c1e8ffdce0292f433fa0026d1c1d6b252 Mon Sep 17 00:00:00 2001 From: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> Date: Mon, 19 Aug 2024 14:05:26 -0400 Subject: [PATCH 01/10] Updates --- .editorconfig | 39 +++ .gitattributes | 11 + Makefile | 109 ++++++ Package.swift | 48 +++ binding.gyp | 12 +- bindings/c/tree-sitter-glimmer.h | 16 + bindings/c/tree-sitter-glimmer.pc.in | 11 + bindings/go/binding.go | 13 + bindings/go/binding_test.go | 15 + bindings/go/go.mod | 5 + bindings/node/binding.cc | 36 +- bindings/node/index.d.ts | 28 ++ bindings/node/index.js | 18 +- .../python/tree_sitter_glimmer/__init__.py | 5 + .../python/tree_sitter_glimmer/__init__.pyi | 1 + bindings/python/tree_sitter_glimmer/binding.c | 27 ++ bindings/python/tree_sitter_glimmer/py.typed | 0 bindings/swift/TreeSitterGlimmer/glimmer.h | 16 + package.json | 30 +- parser/.gitkeep | 0 parser/glimmer.so | Bin 0 -> 64400 bytes pyproject.toml | 29 ++ queries/{ => glimmer}/folds.scm | 0 queries/{ => glimmer}/highlights.scm | 0 queries/{ => glimmer}/indents.scm | 0 queries/glimmer/injections.scm | 21 ++ queries/{ => glimmer}/locals.scm | 0 setup.py | 57 +++ src/grammar.json | 1 - src/parser.c | 330 ++++++++++-------- src/tree_sitter/alloc.h | 54 +++ src/tree_sitter/array.h | 287 +++++++++++++++ src/tree_sitter/parser.h | 16 +- test/highlight/highlights.hbs | 14 + yarn.lock | 195 ++++++++++- 35 files changed, 1238 insertions(+), 206 deletions(-) create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 Makefile create mode 100644 Package.swift create mode 100644 bindings/c/tree-sitter-glimmer.h create mode 100644 bindings/c/tree-sitter-glimmer.pc.in create mode 100644 bindings/go/binding.go create mode 100644 bindings/go/binding_test.go create mode 100644 bindings/go/go.mod create mode 100644 bindings/node/index.d.ts create mode 100644 bindings/python/tree_sitter_glimmer/__init__.py create mode 100644 bindings/python/tree_sitter_glimmer/__init__.pyi create mode 100644 bindings/python/tree_sitter_glimmer/binding.c create mode 100644 bindings/python/tree_sitter_glimmer/py.typed create mode 100644 bindings/swift/TreeSitterGlimmer/glimmer.h create mode 100644 parser/.gitkeep create mode 100755 parser/glimmer.so create mode 100644 pyproject.toml rename queries/{ => glimmer}/folds.scm (100%) rename queries/{ => glimmer}/highlights.scm (100%) rename queries/{ => glimmer}/indents.scm (100%) create mode 100644 queries/glimmer/injections.scm rename queries/{ => glimmer}/locals.scm (100%) create mode 100644 setup.py create mode 100644 src/tree_sitter/alloc.h create mode 100644 src/tree_sitter/array.h diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..d3a8b5b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,39 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.{json,toml,yml,gyp}] +indent_style = space +indent_size = 2 + +[*.js] +indent_style = space +indent_size = 2 + +[*.rs] +indent_style = space +indent_size = 4 + +[*.{c,cc,h}] +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 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..ffb52ab --- /dev/null +++ b/.gitattributes @@ -0,0 +1,11 @@ +* text 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 diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..1ba2ad6 --- /dev/null +++ b/Makefile @@ -0,0 +1,109 @@ +VERSION := 0.0.1 + +LANGUAGE_NAME := tree-sitter-glimmer + +# 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 + +# ABI versioning +SONAME_MAJOR := $(word 1,$(subst ., ,$(VERSION))) +SONAME_MINOR := $(word 2,$(subst ., ,$(VERSION))) + +# install directory layout +PREFIX ?= /usr/local +INCLUDEDIR ?= $(PREFIX)/include +LIBDIR ?= $(PREFIX)/lib +PCLIBDIR ?= $(LIBDIR)/pkgconfig + +# object files +OBJS := $(patsubst %.c,%.o,$(wildcard $(SRC_DIR)/*.c)) + +# flags +ARFLAGS := rcs +override CFLAGS += -I$(SRC_DIR) -std=c11 -fPIC + +# OS-specific bits +ifeq ($(OS),Windows_NT) + $(error "Windows is not supported") +else ifeq ($(shell uname),Darwin) + SOEXT = dylib + SOEXTVER_MAJOR = $(SONAME_MAJOR).dylib + SOEXTVER = $(SONAME_MAJOR).$(SONAME_MINOR).dylib + LINKSHARED := $(LINKSHARED)-dynamiclib -Wl, + ifneq ($(ADDITIONAL_LIBS),) + LINKSHARED := $(LINKSHARED)$(ADDITIONAL_LIBS), + endif + LINKSHARED := $(LINKSHARED)-install_name,$(LIBDIR)/lib$(LANGUAGE_NAME).$(SONAME_MAJOR).dylib,-rpath,@executable_path/../Frameworks +else + SOEXT = so + SOEXTVER_MAJOR = so.$(SONAME_MAJOR) + SOEXTVER = so.$(SONAME_MAJOR).$(SONAME_MINOR) + LINKSHARED := $(LINKSHARED)-shared -Wl, + ifneq ($(ADDITIONAL_LIBS),) + LINKSHARED := $(LINKSHARED)$(ADDITIONAL_LIBS) + endif + LINKSHARED := $(LINKSHARED)-soname,lib$(LANGUAGE_NAME).so.$(SONAME_MAJOR) +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)|' $< > $@ + +$(SRC_DIR)/parser.c: grammar.js + $(TS) generate --no-bindings + +install: all + install -Dm644 bindings/c/$(LANGUAGE_NAME).h '$(DESTDIR)$(INCLUDEDIR)'/tree_sitter/$(LANGUAGE_NAME).h + install -Dm644 $(LANGUAGE_NAME).pc '$(DESTDIR)$(PCLIBDIR)'/$(LANGUAGE_NAME).pc + install -Dm755 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 diff --git a/Package.swift b/Package.swift new file mode 100644 index 0000000..41c668a --- /dev/null +++ b/Package.swift @@ -0,0 +1,48 @@ +// swift-tools-version:5.3 +import PackageDescription + +let package = Package( + name: "TreeSitterGlimmer", + platforms: [.macOS(.v10_13), .iOS(.v11)], + products: [ + .library(name: "TreeSitterGlimmer", targets: ["TreeSitterGlimmer"]), + ], + dependencies: [], + targets: [ + .target(name: "TreeSitterGlimmer", + 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")]) + ], + cLanguageStandard: .c11 +) diff --git a/binding.gyp b/binding.gyp index 4bb80de..3f4f7e0 100644 --- a/binding.gyp +++ b/binding.gyp @@ -2,18 +2,20 @@ "targets": [ { "target_name": "tree_sitter_glimmer_binding", + "dependencies": [ + " -#include "nan.h" +#include -using namespace v8; +typedef struct TSLanguage TSLanguage; -extern "C" TSLanguage * tree_sitter_glimmer(); +extern "C" TSLanguage *tree_sitter_glimmer(); -namespace { +// "tree-sitter", "language" hashed with BLAKE2 +const napi_type_tag LANGUAGE_TYPE_TAG = { + 0x8AF2E5212AD58ABF, 0xD5006CAD83ABBA16 +}; -NAN_METHOD(New) {} - -void Init(Local exports, Local module) { - Local tpl = Nan::New(New); - tpl->SetClassName(Nan::New("Language").ToLocalChecked()); - tpl->InstanceTemplate()->SetInternalFieldCount(1); - - Local constructor = Nan::GetFunction(tpl).ToLocalChecked(); - Local instance = constructor->NewInstance(Nan::GetCurrentContext()).ToLocalChecked(); - Nan::SetInternalFieldPointer(instance, 0, tree_sitter_glimmer()); - - Nan::Set(instance, Nan::New("name").ToLocalChecked(), Nan::New("glimmer").ToLocalChecked()); - Nan::Set(module, Nan::New("exports").ToLocalChecked(), instance); +Napi::Object Init(Napi::Env env, Napi::Object exports) { + exports["name"] = Napi::String::New(env, "glimmer"); + auto language = Napi::External::New(env, tree_sitter_glimmer()); + language.TypeTag(&LANGUAGE_TYPE_TAG); + exports["language"] = language; + return exports; } -NODE_MODULE(tree_sitter_glimmer_binding, Init) - -} // namespace +NODE_API_MODULE(tree_sitter_glimmer_binding, Init) diff --git a/bindings/node/index.d.ts b/bindings/node/index.d.ts new file mode 100644 index 0000000..efe259e --- /dev/null +++ b/bindings/node/index.d.ts @@ -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; diff --git a/bindings/node/index.js b/bindings/node/index.js index 6e57439..6657bcf 100644 --- a/bindings/node/index.js +++ b/bindings/node/index.js @@ -1,18 +1,6 @@ -try { - module.exports = require("../../build/Release/tree_sitter_glimmer_binding"); -} catch (error1) { - if (error1.code !== "MODULE_NOT_FOUND") { - throw error1; - } - try { - module.exports = require("../../build/Debug/tree_sitter_glimmer_binding"); - } catch (error2) { - if (error2.code !== "MODULE_NOT_FOUND") { - throw error2; - } - throw error1; - } -} +const root = require("path").join(__dirname, "..", ".."); + +module.exports = require("node-gyp-build")(root); try { module.exports.nodeTypeInfo = require("../../src/node-types.json"); diff --git a/bindings/python/tree_sitter_glimmer/__init__.py b/bindings/python/tree_sitter_glimmer/__init__.py new file mode 100644 index 0000000..d2822b6 --- /dev/null +++ b/bindings/python/tree_sitter_glimmer/__init__.py @@ -0,0 +1,5 @@ +"Glimmer grammar for tree-sitter" + +from ._binding import language + +__all__ = ["language"] diff --git a/bindings/python/tree_sitter_glimmer/__init__.pyi b/bindings/python/tree_sitter_glimmer/__init__.pyi new file mode 100644 index 0000000..5416666 --- /dev/null +++ b/bindings/python/tree_sitter_glimmer/__init__.pyi @@ -0,0 +1 @@ +def language() -> int: ... diff --git a/bindings/python/tree_sitter_glimmer/binding.c b/bindings/python/tree_sitter_glimmer/binding.c new file mode 100644 index 0000000..fbee4c5 --- /dev/null +++ b/bindings/python/tree_sitter_glimmer/binding.c @@ -0,0 +1,27 @@ +#include + +typedef struct TSLanguage TSLanguage; + +TSLanguage *tree_sitter_glimmer(void); + +static PyObject* _binding_language(PyObject *self, PyObject *args) { + return PyLong_FromVoidPtr(tree_sitter_glimmer()); +} + +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); +} diff --git a/bindings/python/tree_sitter_glimmer/py.typed b/bindings/python/tree_sitter_glimmer/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/bindings/swift/TreeSitterGlimmer/glimmer.h b/bindings/swift/TreeSitterGlimmer/glimmer.h new file mode 100644 index 0000000..30fa862 --- /dev/null +++ b/bindings/swift/TreeSitterGlimmer/glimmer.h @@ -0,0 +1,16 @@ +#ifndef TREE_SITTER_GLIMMER_H_ +#define TREE_SITTER_GLIMMER_H_ + +typedef struct TSLanguage TSLanguage; + +#ifdef __cplusplus +extern "C" { +#endif + +const TSLanguage *tree_sitter_glimmer(void); + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_GLIMMER_H_ diff --git a/package.json b/package.json index 3fbffe7..c717988 100644 --- a/package.json +++ b/package.json @@ -2,21 +2,35 @@ "name": "tree-sitter-glimmer", "version": "1.3.0", "main": "bindings/node", + "types": "bindings/node", "license": "MIT", "scripts": { "generate": "tree-sitter generate", + "build:local": "tree-sitter build -o parser/glimmer.so", "parse": "tree-sitter parse", "test": "tree-sitter test", - "prepare": "husky install" + "prepare": "husky install", + "install": "node-gyp-build", + "prebuildify": "prebuildify --napi --strip" }, "dependencies": { - "nan": "^2.19.0" + "node-addon-api": "^7.1.0", + "node-gyp-build": "^4.8.0" + }, + "peerDependencies": { + "tree-sitter": "^0.21.0" + }, + "peerDependenciesMeta": { + "tree_sitter": { + "optional": true + } }, "devDependencies": { "husky": "^7.0.4", "lint-staged": "^15.2.2", + "prebuildify": "^6.0.0", "prettier": "^2.8.8", - "tree-sitter-cli": "^0.22.1" + "tree-sitter-cli": "^0.22.6" }, "tree-sitter": [ { @@ -34,5 +48,13 @@ "lint-staged": { "*.js": "prettier --write" }, - "packageManager": "yarn@3.6.4" + "packageManager": "yarn@3.6.4", + "files": [ + "grammar.js", + "binding.gyp", + "prebuilds/**", + "bindings/node/*", + "queries/*", + "src/**" + ] } diff --git a/parser/.gitkeep b/parser/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/parser/glimmer.so b/parser/glimmer.so new file mode 100755 index 0000000000000000000000000000000000000000..a231ea819cedbd15afd339f1c7e9f83dfadebd26 GIT binary patch literal 64400 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 Vdn>*_{ZIEFfADGkJWV)tn;({h@$diu literal 0 HcmV?d00001 diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..936ef5b --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,29 @@ +[build-system] +requires = ["setuptools>=42", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +name = "tree-sitter-glimmer" +description = "Glimmer grammar for tree-sitter" +version = "0.0.1" +keywords = ["incremental", "parsing", "tree-sitter", "glimmer"] +classifiers = [ + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Topic :: Software Development :: Compilers", + "Topic :: Text Processing :: Linguistic", + "Typing :: Typed" +] +requires-python = ">=3.8" +license.text = "MIT" +readme = "README.md" + +[project.urls] +Homepage = "https://github.com/tree-sitter/tree-sitter-glimmer" + +[project.optional-dependencies] +core = ["tree-sitter~=0.21"] + +[tool.cibuildwheel] +build = "cp38-*" +build-frontend = "build" diff --git a/queries/folds.scm b/queries/glimmer/folds.scm similarity index 100% rename from queries/folds.scm rename to queries/glimmer/folds.scm diff --git a/queries/highlights.scm b/queries/glimmer/highlights.scm similarity index 100% rename from queries/highlights.scm rename to queries/glimmer/highlights.scm diff --git a/queries/indents.scm b/queries/glimmer/indents.scm similarity index 100% rename from queries/indents.scm rename to queries/glimmer/indents.scm diff --git a/queries/glimmer/injections.scm b/queries/glimmer/injections.scm new file mode 100644 index 0000000..b19eb0e --- /dev/null +++ b/queries/glimmer/injections.scm @@ -0,0 +1,21 @@ +; + + {{!-- Primitives --}} diff --git a/yarn.lock b/yarn.lock index f49fd58..5d11aac 100644 --- a/yarn.lock +++ b/yarn.lock @@ -154,6 +154,24 @@ __metadata: languageName: node linkType: hard +"base64-js@npm:^1.3.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 + languageName: node + linkType: hard + +"bl@npm:^4.0.3": + version: 4.1.0 + resolution: "bl@npm:4.1.0" + dependencies: + buffer: ^5.5.0 + inherits: ^2.0.4 + readable-stream: ^3.4.0 + checksum: 9e8521fa7e83aa9427c6f8ccdcba6e8167ef30cc9a22df26effcc5ab682ef91d2cbc23a239f945d099289e4bbcfae7a192e9c28c84c6202e710a0dfec3722662 + languageName: node + linkType: hard + "brace-expansion@npm:^1.1.7": version: 1.1.11 resolution: "brace-expansion@npm:1.1.11" @@ -182,6 +200,16 @@ __metadata: languageName: node linkType: hard +"buffer@npm:^5.5.0": + version: 5.7.1 + resolution: "buffer@npm:5.7.1" + dependencies: + base64-js: ^1.3.1 + ieee754: ^1.1.13 + checksum: e2cf8429e1c4c7b8cbd30834ac09bd61da46ce35f5c22a78e6c2f04497d6d25541b16881e30a019c6fd3154150650ccee27a308eff3e26229d788bbdeb08ab84 + languageName: node + linkType: hard + "cacache@npm:^17.0.0": version: 17.1.4 resolution: "cacache@npm:17.1.4" @@ -209,6 +237,13 @@ __metadata: languageName: node linkType: hard +"chownr@npm:^1.1.1": + version: 1.1.4 + resolution: "chownr@npm:1.1.4" + checksum: 115648f8eb38bac5e41c3857f3e663f9c39ed6480d1349977c4d96c95a47266fcacc5a5aabf3cb6c481e22d72f41992827db47301851766c4fd77ac21a4f081d + languageName: node + linkType: hard + "chownr@npm:^2.0.0": version: 2.0.0 resolution: "chownr@npm:2.0.0" @@ -362,6 +397,15 @@ __metadata: languageName: node linkType: hard +"end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": + version: 1.4.4 + resolution: "end-of-stream@npm:1.4.4" + dependencies: + once: ^1.4.0 + checksum: 530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b + languageName: node + linkType: hard + "env-paths@npm:^2.2.0": version: 2.2.1 resolution: "env-paths@npm:2.2.1" @@ -426,6 +470,13 @@ __metadata: languageName: node linkType: hard +"fs-constants@npm:^1.0.0": + version: 1.0.0 + resolution: "fs-constants@npm:1.0.0" + checksum: 18f5b718371816155849475ac36c7d0b24d39a11d91348cfcb308b4494824413e03572c403c86d3a260e049465518c4f0d5bd00f0371cdfcad6d4f30a85b350d + languageName: node + linkType: hard + "fs-minipass@npm:^2.0.0": version: 2.1.0 resolution: "fs-minipass@npm:2.1.0" @@ -586,6 +637,13 @@ __metadata: languageName: node linkType: hard +"ieee754@npm:^1.1.13": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e + languageName: node + linkType: hard + "imurmurhash@npm:^0.1.4": version: 0.1.4 resolution: "imurmurhash@npm:0.1.4" @@ -610,7 +668,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:^2.0.3": +"inherits@npm:2, inherits@npm:^2.0.3, inherits@npm:^2.0.4": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 @@ -837,6 +895,13 @@ __metadata: languageName: node linkType: hard +"minimist@npm:^1.2.5": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 + languageName: node + linkType: hard + "minipass-collect@npm:^1.0.2": version: 1.0.2 resolution: "minipass-collect@npm:1.0.2" @@ -921,6 +986,13 @@ __metadata: languageName: node linkType: hard +"mkdirp-classic@npm:^0.5.2, mkdirp-classic@npm:^0.5.3": + version: 0.5.3 + resolution: "mkdirp-classic@npm:0.5.3" + checksum: 3f4e088208270bbcc148d53b73e9a5bd9eef05ad2cbf3b3d0ff8795278d50dd1d11a8ef1875ff5aea3fa888931f95bfcb2ad5b7c1061cfefd6284d199e6776ac + languageName: node + linkType: hard + "mkdirp@npm:^1.0.3": version: 1.0.4 resolution: "mkdirp@npm:1.0.4" @@ -944,19 +1016,39 @@ __metadata: languageName: node linkType: hard -"nan@npm:^2.19.0": - version: 2.19.0 - resolution: "nan@npm:2.19.0" +"negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 + languageName: node + linkType: hard + +"node-abi@npm:^3.3.0": + version: 3.65.0 + resolution: "node-abi@npm:3.65.0" + dependencies: + semver: ^7.3.5 + checksum: 5a60f2b0c73fe0a1123e581bd99e43729f4aa3f4b9b19f1915567128d52540e8f812474410a446cd77d708a3a1139e0b2abf1d0823ba6b5f5d47aa4345931706 + languageName: node + linkType: hard + +"node-addon-api@npm:^7.1.0": + version: 7.1.1 + resolution: "node-addon-api@npm:7.1.1" dependencies: node-gyp: latest - checksum: 29a894a003c1954c250d690768c30e69cd91017e2e5eb21b294380f7cace425559508f5ffe3e329a751307140b0bd02f83af040740fa4def1a3869be6af39600 + checksum: 46051999e3289f205799dfaf6bcb017055d7569090f0004811110312e2db94cb4f8654602c7eb77a60a1a05142cc2b96e1b5c56ca4622c41a5c6370787faaf30 languageName: node linkType: hard -"negotiator@npm:^0.6.3": - version: 0.6.3 - resolution: "negotiator@npm:0.6.3" - checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 +"node-gyp-build@npm:^4.8.0": + version: 4.8.1 + resolution: "node-gyp-build@npm:4.8.1" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: fe6e95da6f4608c1a98655f6bf2fe4e8dd9c877cd13256056a8acaf585cc7f98718823fe9366be11b78c2f332d5a184b00cf07a4af96c9d8fea45f640c019f98 languageName: node linkType: hard @@ -992,6 +1084,15 @@ __metadata: languageName: node linkType: hard +"npm-run-path@npm:^3.1.0": + version: 3.1.0 + resolution: "npm-run-path@npm:3.1.0" + dependencies: + path-key: ^3.0.0 + checksum: 141e0b8f0e3b137347a2896572c9a84701754dda0670d3ceb8c56a87702ee03c26227e4517ab93f2904acfc836547315e740b8289bb24ca0cd8ba2b198043b0f + languageName: node + linkType: hard + "npm-run-path@npm:^5.1.0": version: 5.3.0 resolution: "npm-run-path@npm:5.3.0" @@ -1013,7 +1114,7 @@ __metadata: languageName: node linkType: hard -"once@npm:^1.3.0": +"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": version: 1.4.0 resolution: "once@npm:1.4.0" dependencies: @@ -1056,7 +1157,7 @@ __metadata: languageName: node linkType: hard -"path-key@npm:^3.1.0": +"path-key@npm:^3.0.0, path-key@npm:^3.1.0": version: 3.1.1 resolution: "path-key@npm:3.1.1" checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 @@ -1096,6 +1197,22 @@ __metadata: languageName: node linkType: hard +"prebuildify@npm:^6.0.0": + version: 6.0.1 + resolution: "prebuildify@npm:6.0.1" + 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 + checksum: 33b7ba29134d518ddfef7698434ecd0ac816b13ba603d7a5acf8590e04d7f736b24584e63da50e87c25b4a1e35588d54848d57cdf4cf09e625e843d1a583d930 + languageName: node + linkType: hard + "prettier@npm:^2.8.8": version: 2.8.8 resolution: "prettier@npm:2.8.8" @@ -1115,7 +1232,17 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^3.6.0": +"pump@npm:^3.0.0": + version: 3.0.0 + resolution: "pump@npm:3.0.0" + dependencies: + end-of-stream: ^1.1.0 + once: ^1.3.1 + checksum: e42e9229fba14732593a718b04cb5e1cfef8254544870997e0ecd9732b189a48e1256e4e5478148ecb47c8511dca2b09eae56b4d0aad8009e6fac8072923cfc9 + languageName: node + linkType: hard + +"readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" dependencies: @@ -1390,6 +1517,31 @@ __metadata: languageName: node linkType: hard +"tar-fs@npm:^2.1.0": + version: 2.1.1 + resolution: "tar-fs@npm:2.1.1" + dependencies: + chownr: ^1.1.1 + mkdirp-classic: ^0.5.2 + pump: ^3.0.0 + tar-stream: ^2.1.4 + checksum: f5b9a70059f5b2969e65f037b4e4da2daf0fa762d3d232ffd96e819e3f94665dbbbe62f76f084f1acb4dbdcce16c6e4dac08d12ffc6d24b8d76720f4d9cf032d + languageName: node + linkType: hard + +"tar-stream@npm:^2.1.4": + version: 2.2.0 + resolution: "tar-stream@npm:2.2.0" + 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 + checksum: 699831a8b97666ef50021c767f84924cfee21c142c2eb0e79c63254e140e6408d6d55a065a2992548e72b06de39237ef2b802b99e3ece93ca3904a37622a66f3 + languageName: node + linkType: hard + "tar@npm:^6.1.11, tar@npm:^6.1.2": version: 6.2.0 resolution: "tar@npm:6.2.0" @@ -1413,12 +1565,12 @@ __metadata: languageName: node linkType: hard -"tree-sitter-cli@npm:^0.22.1": - version: 0.22.1 - resolution: "tree-sitter-cli@npm:0.22.1" +"tree-sitter-cli@npm:^0.22.6": + version: 0.22.6 + resolution: "tree-sitter-cli@npm:0.22.6" bin: tree-sitter: cli.js - checksum: 9c69bc3ced901b8374869865806244a2768b31e0d1209ea4f0f5c4303c8faa467ceaba4f9810529430df9a08a255bbb0ffc084158f448c67a83b312bc808e33e + checksum: 69c424260d7f0c11654b563464793e287bb6a228c4dbb2f1d8c4d97e09a4605a0639991525d6ff0b2764619f073258af0dd362af9c509f8844097114d86d59c9 languageName: node linkType: hard @@ -1428,9 +1580,16 @@ __metadata: dependencies: husky: ^7.0.4 lint-staged: ^15.2.2 - nan: ^2.19.0 + node-addon-api: ^7.1.0 + node-gyp-build: ^4.8.0 + prebuildify: ^6.0.0 prettier: ^2.8.8 - tree-sitter-cli: ^0.22.1 + tree-sitter-cli: ^0.22.6 + peerDependencies: + tree-sitter: ^0.21.0 + peerDependenciesMeta: + tree_sitter: + optional: true languageName: unknown linkType: soft From 26c8557fc8cc6e80f5cc350be50eb7a78a4ae17c Mon Sep 17 00:00:00 2001 From: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> Date: Mon, 19 Aug 2024 19:08:53 -0400 Subject: [PATCH 02/10] How is this CSS injection going to work? --- bindings/rust/build.rs | 3 + package.json | 25 ++ parser/glimmer.so | Bin 64400 -> 59896 bytes queries/glimmer/injections.scm | 35 ++- src/parser.c | 523 +++++++++++++++++---------------- src/tree_sitter/array.h | 9 +- src/tree_sitter/parser.h | 51 +++- test/highlight/highlights.hbs | 6 +- 8 files changed, 366 insertions(+), 286 deletions(-) diff --git a/bindings/rust/build.rs b/bindings/rust/build.rs index 2dd4a7a..6c34779 100644 --- a/bindings/rust/build.rs +++ b/bindings/rust/build.rs @@ -7,6 +7,9 @@ fn main() { .flag_if_supported("-Wno-unused-parameter") .flag_if_supported("-Wno-unused-but-set-variable") .flag_if_supported("-Wno-trigraphs"); + #[cfg(target_env = "msvc")] + c_config.flag("-utf-8"); + let parser_path = src_dir.join("parser.c"); c_config.file(&parser_path); diff --git a/package.json b/package.json index c717988..4e691fc 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,31 @@ "lint-staged": { "*.js": "prettier --write" }, + "tree-sitter": [ + { + "scope": "source.hbs", + "file-types": [ + "hbs", + "handlebars", + "html.handlebars", + "glimmer" + ], + "path": "./", + "highlights": [ + "queries/glimmer/highlights.scm" + ], + "locals": [ + "queries/glimmer/locals.scm" + ], + "tags": [ + "queries/glimmer/tags.scm" + ], + "injections": [ + "queries/glimmer/injections.scm" + ] + "injection-regex": "^(hbs|glimmer|handlebars)$" + } + ], "packageManager": "yarn@3.6.4", "files": [ "grammar.js", diff --git a/parser/glimmer.so b/parser/glimmer.so index a231ea819cedbd15afd339f1c7e9f83dfadebd26..9083f504506785f8e07f3e5309c4eca619953aeb 100755 GIT binary patch delta 20672 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 RtLW?%!7IPxxu>Y~{{WPMT&w^9 delta 22427 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 diff --git a/queries/glimmer/injections.scm b/queries/glimmer/injections.scm index b19eb0e..b31c281 100644 --- a/queries/glimmer/injections.scm +++ b/queries/glimmer/injections.scm @@ -1,21 +1,34 @@ ; From 0ff324097e4f543b1c22e4856cc62c09112c6712 Mon Sep 17 00:00:00 2001 From: NullVoxPopuli <199018+NullVoxPopuli@users.noreply.github.com> Date: Tue, 20 Aug 2024 08:17:49 -0400 Subject: [PATCH 03/10] Update Queries --- queries/glimmer/injections.scm | 27 +++++++++------------------ test/highlight/highlights.hbs | 4 +--- 2 files changed, 10 insertions(+), 21 deletions(-) diff --git a/queries/glimmer/injections.scm b/queries/glimmer/injections.scm index b31c281..41d0c0e 100644 --- a/queries/glimmer/injections.scm +++ b/queries/glimmer/injections.scm @@ -6,29 +6,20 @@ ) ) @injection.content + (#offset! @injection.content 0 7 0 -8) (#set! injection.language "css") (#set! injection.include-children) - (#set! injection.self) - ; (#set! injection.parent) - (#offset! @injection.content 0 6 0 -7) ) -; ((element_node) @injection.content -; (#set! injection.language "css") -; (#set! injection.include-children) -; (#set! injection.self) -; (#set! injection.parent) -; ) - ;