From 83bbe89e471c61d00868c2143165dfb3acc33809 Mon Sep 17 00:00:00 2001 From: barry <91018388+barry166@users.noreply.github.com> Date: Sat, 27 Jun 2026 10:50:43 +0800 Subject: [PATCH] Enable TypeScript parser generation for feature search The client-side search validation work needs a generated TypeScript ANTLR workspace. This adds the workspace metadata, wires antlr-gen to emit TypeScript output alongside the existing Go parser, and keeps generated parser artifacts out of git while retaining a package-level smoke test for generated files. Constraint: Existing generation target keeps parser output generated rather than checked in Rejected: Commit generated TypeScript parser files | existing lib/gen ignore policy keeps generated parser output out of source control Confidence: high Scope-risk: narrow Directive: Keep FeatureSearch generated source out of git unless the repository changes its generated-code policy Tested: ANTLR_JAR=/tmp/webstatus-antlr/antlr-4.13.2-complete.jar make antlr-gen Tested: npm run test -w @webstatus.dev/feature-search-antlr Tested: npx prettier --check package.json package-lock.json lib/gen/antlrv4/ts-antlrv4/package.json Tested: git diff --check Not-tested: Full frontend test suite --- .gitignore | 2 ++ Makefile | 7 ++++++- lib/gen/antlrv4/ts-antlrv4/package.json | 12 ++++++++++++ package-lock.json | 22 ++++++++++++++++++++++ package.json | 1 + 5 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 lib/gen/antlrv4/ts-antlrv4/package.json diff --git a/.gitignore b/.gitignore index d186421c6..b56e022f4 100644 --- a/.gitignore +++ b/.gitignore @@ -43,6 +43,8 @@ frontend/.postinstall *.gen.go lib/gen/*/*/*.go lib/gen/*/*/*.ts +lib/gen/antlrv4/ts-antlrv4/*.interp +lib/gen/antlrv4/ts-antlrv4/*.tokens lib/gen/featuresearch/** # Ignore coverage files diff --git a/Makefile b/Makefile index 086cf6b4a..7b9ee325f 100644 --- a/Makefile +++ b/Makefile @@ -311,11 +311,16 @@ node-test: playwright-install ################################ # ANTLR ################################ +ANTLR4_VERSION ?= 4.13.2 +ANTLR_JAR ?= /usr/local/lib/antlr-$(ANTLR4_VERSION)-complete.jar + antlr-gen: clean-antlr - java -jar /usr/local/lib/antlr-$${ANTLR4_VERSION}-complete.jar -Dlanguage=Go -o lib/gen/featuresearch/parser -visitor -no-listener antlr/FeatureSearch.g4 + java -jar $(ANTLR_JAR) -Dlanguage=Go -o lib/gen/featuresearch/parser -visitor -no-listener antlr/FeatureSearch.g4 + java -jar $(ANTLR_JAR) -Dlanguage=TypeScript -Xexact-output-dir -o lib/gen/antlrv4/ts-antlrv4 -visitor -no-listener antlr/FeatureSearch.g4 clean-antlr: rm -rf lib/gen/featuresearch/parser + find lib/gen/antlrv4/ts-antlrv4 -mindepth 1 -maxdepth 1 ! -name package.json -exec rm -rf {} + ################################ # License diff --git a/lib/gen/antlrv4/ts-antlrv4/package.json b/lib/gen/antlrv4/ts-antlrv4/package.json new file mode 100644 index 000000000..09ed39712 --- /dev/null +++ b/lib/gen/antlrv4/ts-antlrv4/package.json @@ -0,0 +1,12 @@ +{ + "name": "@webstatus.dev/feature-search-antlr", + "version": "1.0.0", + "license": "Apache-2.0", + "dependencies": { + "antlr4": "4.13.2" + }, + "scripts": { + "clean": "find . -mindepth 1 ! -name package.json -exec rm -rf {} +", + "test": "test -f FeatureSearchLexer.ts && test -f FeatureSearchParser.ts && test -f FeatureSearchVisitor.ts" + } +} diff --git a/package-lock.json b/package-lock.json index 80883668a..9efcb9440 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "license": "Apache-2.0", "workspaces": [ "frontend", + "lib/gen/antlrv4/ts-antlrv4", "lib/gen/jsonschema/web-platform-dx_web-features-mappings-ts", "lib/gen/openapi/ts-webstatus.dev-backend-types" ], @@ -615,6 +616,14 @@ "node": ">=14.17" } }, + "lib/gen/antlrv4/ts-antlrv4": { + "name": "@webstatus.dev/feature-search-antlr", + "version": "1.0.0", + "license": "Apache-2.0", + "dependencies": { + "antlr4": "4.13.2" + } + }, "lib/gen/jsonschema/web-platform-dx_web-features-mappings-ts": { "name": "@types/web-features-mappings", "version": "1.0.0", @@ -4997,6 +5006,10 @@ "node": ">=18.0.0" } }, + "node_modules/@webstatus.dev/feature-search-antlr": { + "resolved": "lib/gen/antlrv4/ts-antlrv4", + "link": true + }, "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -5150,6 +5163,15 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/antlr4": { + "version": "4.13.2", + "resolved": "https://registry.npmmirror.com/antlr4/-/antlr4-4.13.2.tgz", + "integrity": "sha512-QiVbZhyy4xAZ17UPEuG3YTOt8ZaoeOR1CvEAqrEsDBsOqINslaB147i9xqljZqoyf5S+EUlGStaj+t22LT9MOg==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=16" + } + }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", diff --git a/package.json b/package.json index cc89faec1..ad4d7404e 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "license": "Apache-2.0", "workspaces": [ "frontend", + "lib/gen/antlrv4/ts-antlrv4", "lib/gen/jsonschema/web-platform-dx_web-features-mappings-ts", "lib/gen/openapi/ts-webstatus.dev-backend-types" ],