@untangle-code/parser-registry 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/NOTICE +90 -0
- package/README.md +352 -2
- package/THIRD_PARTY_LICENSES.md +91 -0
- package/dist/boundaries/expression.d.ts +10 -0
- package/dist/boundaries/expression.d.ts.map +1 -0
- package/dist/boundaries/expression.js +95 -0
- package/dist/boundaries/expression.js.map +1 -0
- package/dist/boundaries/extract.d.ts +12 -0
- package/dist/boundaries/extract.d.ts.map +1 -0
- package/dist/boundaries/extract.js +259 -0
- package/dist/boundaries/extract.js.map +1 -0
- package/dist/boundaries/python.d.ts +6 -0
- package/dist/boundaries/python.d.ts.map +1 -0
- package/dist/boundaries/python.js +154 -0
- package/dist/boundaries/python.js.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/languages/astgrep-backend/adapter.d.ts +101 -0
- package/dist/languages/astgrep-backend/adapter.d.ts.map +1 -0
- package/dist/languages/astgrep-backend/adapter.js +130 -0
- package/dist/languages/astgrep-backend/adapter.js.map +1 -0
- package/dist/languages/astgrep-backend/index.d.ts +29 -0
- package/dist/languages/astgrep-backend/index.d.ts.map +1 -0
- package/dist/languages/astgrep-backend/index.js +28 -0
- package/dist/languages/astgrep-backend/index.js.map +1 -0
- package/dist/languages/astgrep-backend/lang/bash.d.ts +38 -0
- package/dist/languages/astgrep-backend/lang/bash.d.ts.map +1 -0
- package/dist/languages/astgrep-backend/lang/bash.js +42 -0
- package/dist/languages/astgrep-backend/lang/bash.js.map +1 -0
- package/dist/languages/astgrep-backend/lang/c.d.ts +33 -0
- package/dist/languages/astgrep-backend/lang/c.d.ts.map +1 -0
- package/dist/languages/astgrep-backend/lang/c.js +85 -0
- package/dist/languages/astgrep-backend/lang/c.js.map +1 -0
- package/dist/languages/astgrep-backend/lang/cpp.d.ts +27 -0
- package/dist/languages/astgrep-backend/lang/cpp.d.ts.map +1 -0
- package/dist/languages/astgrep-backend/lang/cpp.js +38 -0
- package/dist/languages/astgrep-backend/lang/cpp.js.map +1 -0
- package/dist/languages/astgrep-backend/lang/csharp.d.ts +24 -0
- package/dist/languages/astgrep-backend/lang/csharp.d.ts.map +1 -0
- package/dist/languages/astgrep-backend/lang/csharp.js +102 -0
- package/dist/languages/astgrep-backend/lang/csharp.js.map +1 -0
- package/dist/languages/astgrep-backend/lang/index.d.ts +29 -0
- package/dist/languages/astgrep-backend/lang/index.d.ts.map +1 -0
- package/dist/languages/astgrep-backend/lang/index.js +22 -0
- package/dist/languages/astgrep-backend/lang/index.js.map +1 -0
- package/dist/languages/astgrep-backend/lang/java.d.ts +26 -0
- package/dist/languages/astgrep-backend/lang/java.d.ts.map +1 -0
- package/dist/languages/astgrep-backend/lang/java.js +89 -0
- package/dist/languages/astgrep-backend/lang/java.js.map +1 -0
- package/dist/languages/astgrep-backend/lang/kotlin.d.ts +44 -0
- package/dist/languages/astgrep-backend/lang/kotlin.d.ts.map +1 -0
- package/dist/languages/astgrep-backend/lang/kotlin.js +94 -0
- package/dist/languages/astgrep-backend/lang/kotlin.js.map +1 -0
- package/dist/languages/astgrep-backend/lang/php.d.ts +23 -0
- package/dist/languages/astgrep-backend/lang/php.d.ts.map +1 -0
- package/dist/languages/astgrep-backend/lang/php.js +80 -0
- package/dist/languages/astgrep-backend/lang/php.js.map +1 -0
- package/dist/languages/astgrep-backend/lang/ruby.d.ts +37 -0
- package/dist/languages/astgrep-backend/lang/ruby.d.ts.map +1 -0
- package/dist/languages/astgrep-backend/lang/ruby.js +70 -0
- package/dist/languages/astgrep-backend/lang/ruby.js.map +1 -0
- package/dist/languages/astgrep-backend/lang/swift.d.ts +34 -0
- package/dist/languages/astgrep-backend/lang/swift.d.ts.map +1 -0
- package/dist/languages/astgrep-backend/lang/swift.js +86 -0
- package/dist/languages/astgrep-backend/lang/swift.js.map +1 -0
- package/dist/languages/astgrep-backend/languages.d.ts +55 -0
- package/dist/languages/astgrep-backend/languages.d.ts.map +1 -0
- package/dist/languages/astgrep-backend/languages.js +214 -0
- package/dist/languages/astgrep-backend/languages.js.map +1 -0
- package/dist/languages/astgrep-backend/napi.d.ts +71 -0
- package/dist/languages/astgrep-backend/napi.d.ts.map +1 -0
- package/dist/languages/astgrep-backend/napi.js +176 -0
- package/dist/languages/astgrep-backend/napi.js.map +1 -0
- package/dist/languages/astgrep-backend/syntax.d.ts +88 -0
- package/dist/languages/astgrep-backend/syntax.d.ts.map +1 -0
- package/dist/languages/astgrep-backend/syntax.js +180 -0
- package/dist/languages/astgrep-backend/syntax.js.map +1 -0
- package/dist/languages/index.d.ts +14 -0
- package/dist/languages/index.d.ts.map +1 -0
- package/dist/languages/index.js +37 -0
- package/dist/languages/index.js.map +1 -0
- package/dist/languages/javascript/index.d.ts +4 -0
- package/dist/languages/javascript/index.d.ts.map +1 -0
- package/dist/languages/javascript/index.js +7 -0
- package/dist/languages/javascript/index.js.map +1 -0
- package/dist/languages/jsx/index.d.ts +4 -0
- package/dist/languages/jsx/index.d.ts.map +1 -0
- package/dist/languages/jsx/index.js +7 -0
- package/dist/languages/jsx/index.js.map +1 -0
- package/dist/languages/prose/index.d.ts +53 -0
- package/dist/languages/prose/index.d.ts.map +1 -0
- package/dist/languages/prose/index.js +172 -0
- package/dist/languages/prose/index.js.map +1 -0
- package/dist/languages/prose/line-bytes.d.ts +31 -0
- package/dist/languages/prose/line-bytes.d.ts.map +1 -0
- package/dist/languages/prose/line-bytes.js +39 -0
- package/dist/languages/prose/line-bytes.js.map +1 -0
- package/dist/languages/python/create-adapter.d.ts +20 -0
- package/dist/languages/python/create-adapter.d.ts.map +1 -0
- package/dist/languages/python/create-adapter.js +9 -0
- package/dist/languages/python/create-adapter.js.map +1 -0
- package/dist/languages/python/index.d.ts +4 -0
- package/dist/languages/python/index.d.ts.map +1 -0
- package/dist/languages/python/index.js +6 -0
- package/dist/languages/python/index.js.map +1 -0
- package/dist/languages/python/profile.d.ts +36 -0
- package/dist/languages/python/profile.d.ts.map +1 -0
- package/dist/languages/python/profile.js +282 -0
- package/dist/languages/python/profile.js.map +1 -0
- package/dist/languages/python/signature.d.ts +53 -0
- package/dist/languages/python/signature.d.ts.map +1 -0
- package/dist/languages/python/signature.js +188 -0
- package/dist/languages/python/signature.js.map +1 -0
- package/dist/languages/python/table.d.ts +46 -0
- package/dist/languages/python/table.d.ts.map +1 -0
- package/dist/languages/python/table.js +88 -0
- package/dist/languages/python/table.js.map +1 -0
- package/dist/languages/shared/call-detection.d.ts +17 -0
- package/dist/languages/shared/call-detection.d.ts.map +1 -0
- package/dist/languages/shared/call-detection.js +86 -0
- package/dist/languages/shared/call-detection.js.map +1 -0
- package/dist/languages/shared/chunks.d.ts +28 -0
- package/dist/languages/shared/chunks.d.ts.map +1 -0
- package/dist/languages/shared/chunks.js +181 -0
- package/dist/languages/shared/chunks.js.map +1 -0
- package/dist/languages/shared/create-adapter.d.ts +11 -0
- package/dist/languages/shared/create-adapter.d.ts.map +1 -0
- package/dist/languages/shared/create-adapter.js +90 -0
- package/dist/languages/shared/create-adapter.js.map +1 -0
- package/dist/languages/shared/decisions.d.ts +45 -0
- package/dist/languages/shared/decisions.d.ts.map +1 -0
- package/dist/languages/shared/decisions.js +141 -0
- package/dist/languages/shared/decisions.js.map +1 -0
- package/dist/languages/shared/dialect.d.ts +18 -0
- package/dist/languages/shared/dialect.d.ts.map +1 -0
- package/dist/languages/shared/dialect.js +37 -0
- package/dist/languages/shared/dialect.js.map +1 -0
- package/dist/languages/shared/doc-binding.d.ts +26 -0
- package/dist/languages/shared/doc-binding.d.ts.map +1 -0
- package/dist/languages/shared/doc-binding.js +50 -0
- package/dist/languages/shared/doc-binding.js.map +1 -0
- package/dist/languages/shared/engine.d.ts +49 -0
- package/dist/languages/shared/engine.d.ts.map +1 -0
- package/dist/languages/shared/engine.js +317 -0
- package/dist/languages/shared/engine.js.map +1 -0
- package/dist/languages/shared/extract-symbols.d.ts +5 -0
- package/dist/languages/shared/extract-symbols.d.ts.map +1 -0
- package/dist/languages/shared/extract-symbols.js +31 -0
- package/dist/languages/shared/extract-symbols.js.map +1 -0
- package/dist/languages/shared/fingerprint.d.ts +7 -0
- package/dist/languages/shared/fingerprint.d.ts.map +1 -0
- package/dist/languages/shared/fingerprint.js +95 -0
- package/dist/languages/shared/fingerprint.js.map +1 -0
- package/dist/languages/shared/grammar-loader.d.ts +15 -0
- package/dist/languages/shared/grammar-loader.d.ts.map +1 -0
- package/dist/languages/shared/grammar-loader.js +48 -0
- package/dist/languages/shared/grammar-loader.js.map +1 -0
- package/dist/languages/shared/import-detection.d.ts +24 -0
- package/dist/languages/shared/import-detection.d.ts.map +1 -0
- package/dist/languages/shared/import-detection.js +138 -0
- package/dist/languages/shared/import-detection.js.map +1 -0
- package/dist/languages/shared/js-family-profile.d.ts +5 -0
- package/dist/languages/shared/js-family-profile.d.ts.map +1 -0
- package/dist/languages/shared/js-family-profile.js +179 -0
- package/dist/languages/shared/js-family-profile.js.map +1 -0
- package/dist/languages/shared/node-kinds.d.ts +78 -0
- package/dist/languages/shared/node-kinds.d.ts.map +1 -0
- package/dist/languages/shared/node-kinds.js +141 -0
- package/dist/languages/shared/node-kinds.js.map +1 -0
- package/dist/languages/shared/node-utils.d.ts +31 -0
- package/dist/languages/shared/node-utils.d.ts.map +1 -0
- package/dist/languages/shared/node-utils.js +89 -0
- package/dist/languages/shared/node-utils.js.map +1 -0
- package/dist/languages/shared/parse-diagnostics.d.ts +44 -0
- package/dist/languages/shared/parse-diagnostics.d.ts.map +1 -0
- package/dist/languages/shared/parse-diagnostics.js +64 -0
- package/dist/languages/shared/parse-diagnostics.js.map +1 -0
- package/dist/languages/shared/parse-limits.d.ts +24 -0
- package/dist/languages/shared/parse-limits.d.ts.map +1 -0
- package/dist/languages/shared/parse-limits.js +134 -0
- package/dist/languages/shared/parse-limits.js.map +1 -0
- package/dist/languages/shared/profile.d.ts +149 -0
- package/dist/languages/shared/profile.d.ts.map +1 -0
- package/dist/languages/shared/profile.js +9 -0
- package/dist/languages/shared/profile.js.map +1 -0
- package/dist/languages/shared/scope-model.d.ts +32 -0
- package/dist/languages/shared/scope-model.d.ts.map +1 -0
- package/dist/languages/shared/scope-model.js +2 -0
- package/dist/languages/shared/scope-model.js.map +1 -0
- package/dist/languages/shared/scope-naming.d.ts +20 -0
- package/dist/languages/shared/scope-naming.d.ts.map +1 -0
- package/dist/languages/shared/scope-naming.js +118 -0
- package/dist/languages/shared/scope-naming.js.map +1 -0
- package/dist/languages/shared/scope-signature.d.ts +14 -0
- package/dist/languages/shared/scope-signature.d.ts.map +1 -0
- package/dist/languages/shared/scope-signature.js +82 -0
- package/dist/languages/shared/scope-signature.js.map +1 -0
- package/dist/languages/shared/signature.d.ts +55 -0
- package/dist/languages/shared/signature.d.ts.map +1 -0
- package/dist/languages/shared/signature.js +147 -0
- package/dist/languages/shared/signature.js.map +1 -0
- package/dist/languages/shared/syntax.d.ts +115 -0
- package/dist/languages/shared/syntax.d.ts.map +1 -0
- package/dist/languages/shared/syntax.js +2 -0
- package/dist/languages/shared/syntax.js.map +1 -0
- package/dist/languages/shared/table-profile-decisions.d.ts +54 -0
- package/dist/languages/shared/table-profile-decisions.d.ts.map +1 -0
- package/dist/languages/shared/table-profile-decisions.js +245 -0
- package/dist/languages/shared/table-profile-decisions.js.map +1 -0
- package/dist/languages/shared/table-profile-module-facts.d.ts +29 -0
- package/dist/languages/shared/table-profile-module-facts.d.ts.map +1 -0
- package/dist/languages/shared/table-profile-module-facts.js +139 -0
- package/dist/languages/shared/table-profile-module-facts.js.map +1 -0
- package/dist/languages/shared/table-profile-queries.d.ts +27 -0
- package/dist/languages/shared/table-profile-queries.d.ts.map +1 -0
- package/dist/languages/shared/table-profile-queries.js +70 -0
- package/dist/languages/shared/table-profile-queries.js.map +1 -0
- package/dist/languages/shared/table-profile-scopes.d.ts +46 -0
- package/dist/languages/shared/table-profile-scopes.d.ts.map +1 -0
- package/dist/languages/shared/table-profile-scopes.js +180 -0
- package/dist/languages/shared/table-profile-scopes.js.map +1 -0
- package/dist/languages/shared/table-profile.d.ts +302 -0
- package/dist/languages/shared/table-profile.d.ts.map +1 -0
- package/dist/languages/shared/table-profile.js +125 -0
- package/dist/languages/shared/table-profile.js.map +1 -0
- package/dist/languages/shared/tree-sitter-types.d.ts +44 -0
- package/dist/languages/shared/tree-sitter-types.d.ts.map +1 -0
- package/dist/languages/shared/tree-sitter-types.js +2 -0
- package/dist/languages/shared/tree-sitter-types.js.map +1 -0
- package/dist/languages/structured-text/index.d.ts +48 -0
- package/dist/languages/structured-text/index.d.ts.map +1 -0
- package/dist/languages/structured-text/index.js +120 -0
- package/dist/languages/structured-text/index.js.map +1 -0
- package/dist/languages/tsx/index.d.ts +4 -0
- package/dist/languages/tsx/index.d.ts.map +1 -0
- package/dist/languages/tsx/index.js +7 -0
- package/dist/languages/tsx/index.js.map +1 -0
- package/dist/languages/typescript/index.d.ts +4 -0
- package/dist/languages/typescript/index.d.ts.map +1 -0
- package/dist/languages/typescript/index.js +7 -0
- package/dist/languages/typescript/index.js.map +1 -0
- package/dist/languages/vue/index.d.ts +21 -0
- package/dist/languages/vue/index.d.ts.map +1 -0
- package/dist/languages/vue/index.js +234 -0
- package/dist/languages/vue/index.js.map +1 -0
- package/dist/languages/vue/mapping.d.ts +11 -0
- package/dist/languages/vue/mapping.d.ts.map +1 -0
- package/dist/languages/vue/mapping.js +77 -0
- package/dist/languages/vue/mapping.js.map +1 -0
- package/dist/registry.d.ts +24 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +42 -0
- package/dist/registry.js.map +1 -0
- package/dist/text/byte-offset-table.d.ts +27 -0
- package/dist/text/byte-offset-table.d.ts.map +1 -0
- package/dist/text/byte-offset-table.js +39 -0
- package/dist/text/byte-offset-table.js.map +1 -0
- package/package.json +125 -3
- package/src/boundaries/expression.ts +95 -0
- package/src/boundaries/extract.ts +307 -0
- package/src/boundaries/python.ts +181 -0
- package/src/index.ts +51 -0
- package/src/languages/__golden__/javascript-basic.json +32 -0
- package/src/languages/__golden__/tsx-basic.json +19 -0
- package/src/languages/__golden__/typescript-basic.json +37 -0
- package/src/languages/astgrep-backend/GRAMMARS.md +86 -0
- package/src/languages/astgrep-backend/README.md +112 -0
- package/src/languages/astgrep-backend/__golden__/bash-basic.sh +53 -0
- package/src/languages/astgrep-backend/__golden__/c-basic.c +64 -0
- package/src/languages/astgrep-backend/__golden__/cpp-basic.cpp +65 -0
- package/src/languages/astgrep-backend/__golden__/csharp-basic.cs +73 -0
- package/src/languages/astgrep-backend/__golden__/go-basic.go +93 -0
- package/src/languages/astgrep-backend/__golden__/java-basic.java +62 -0
- package/src/languages/astgrep-backend/__golden__/kotlin-basic.kt +58 -0
- package/src/languages/astgrep-backend/__golden__/php-basic.php +72 -0
- package/src/languages/astgrep-backend/__golden__/ruby-basic.rb +62 -0
- package/src/languages/astgrep-backend/__golden__/rust-basic.rs +82 -0
- package/src/languages/astgrep-backend/__golden__/swift-basic.swift +73 -0
- package/src/languages/astgrep-backend/adapter.ts +240 -0
- package/src/languages/astgrep-backend/index.ts +44 -0
- package/src/languages/astgrep-backend/lang/README.md +115 -0
- package/src/languages/astgrep-backend/lang/bash.ts +78 -0
- package/src/languages/astgrep-backend/lang/c.ts +119 -0
- package/src/languages/astgrep-backend/lang/cpp.ts +65 -0
- package/src/languages/astgrep-backend/lang/csharp.ts +125 -0
- package/src/languages/astgrep-backend/lang/index.ts +61 -0
- package/src/languages/astgrep-backend/lang/java.ts +115 -0
- package/src/languages/astgrep-backend/lang/kotlin.ts +136 -0
- package/src/languages/astgrep-backend/lang/php.ts +105 -0
- package/src/languages/astgrep-backend/lang/ruby.ts +105 -0
- package/src/languages/astgrep-backend/lang/swift.ts +118 -0
- package/src/languages/astgrep-backend/languages.ts +238 -0
- package/src/languages/astgrep-backend/napi.ts +261 -0
- package/src/languages/astgrep-backend/syntax.ts +242 -0
- package/src/languages/index.ts +53 -0
- package/src/languages/javascript/index.ts +9 -0
- package/src/languages/jsx/index.ts +9 -0
- package/src/languages/prose/index.ts +270 -0
- package/src/languages/prose/line-bytes.ts +52 -0
- package/src/languages/python/README.md +246 -0
- package/src/languages/python/__golden__/python-basic.json +44 -0
- package/src/languages/python/create-adapter.ts +29 -0
- package/src/languages/python/index.ts +8 -0
- package/src/languages/python/profile.ts +341 -0
- package/src/languages/python/signature.ts +183 -0
- package/src/languages/python/table.ts +135 -0
- package/src/languages/shared/__fixtures__/large-over-32kib.ts.txt +1207 -0
- package/src/languages/shared/call-detection.ts +112 -0
- package/src/languages/shared/chunks.ts +255 -0
- package/src/languages/shared/create-adapter.ts +136 -0
- package/src/languages/shared/decisions.ts +204 -0
- package/src/languages/shared/dialect.ts +55 -0
- package/src/languages/shared/doc-binding.ts +78 -0
- package/src/languages/shared/engine.ts +461 -0
- package/src/languages/shared/extract-symbols.ts +35 -0
- package/src/languages/shared/fingerprint.ts +99 -0
- package/src/languages/shared/grammar-loader.ts +67 -0
- package/src/languages/shared/import-detection.ts +154 -0
- package/src/languages/shared/js-family-profile.ts +246 -0
- package/src/languages/shared/node-kinds.ts +153 -0
- package/src/languages/shared/node-utils.ts +120 -0
- package/src/languages/shared/parse-diagnostics.ts +125 -0
- package/src/languages/shared/parse-limits.ts +147 -0
- package/src/languages/shared/profile.ts +184 -0
- package/src/languages/shared/scope-model.ts +43 -0
- package/src/languages/shared/scope-naming.ts +124 -0
- package/src/languages/shared/scope-signature.ts +108 -0
- package/src/languages/shared/signature.ts +149 -0
- package/src/languages/shared/syntax.ts +116 -0
- package/src/languages/shared/table-profile-decisions.ts +251 -0
- package/src/languages/shared/table-profile-module-facts.ts +177 -0
- package/src/languages/shared/table-profile-queries.ts +85 -0
- package/src/languages/shared/table-profile-scopes.ts +198 -0
- package/src/languages/shared/table-profile.ts +427 -0
- package/src/languages/shared/tree-sitter-types.ts +46 -0
- package/src/languages/structured-text/index.ts +192 -0
- package/src/languages/tsx/index.ts +9 -0
- package/src/languages/typescript/index.ts +9 -0
- package/src/languages/vue/index.ts +312 -0
- package/src/languages/vue/mapping.ts +93 -0
- package/src/registry.ts +61 -0
- package/src/text/byte-offset-table.ts +63 -0
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Der Zugang zu `@ast-grep/napi` — traege geladen, EINMAL registriert, und
|
|
3
|
+
* ohne stillen Ausfall.
|
|
4
|
+
*
|
|
5
|
+
* DREI EIGENHEITEN DIESER BIBLIOTHEK BESTIMMEN DIESE DATEI:
|
|
6
|
+
*
|
|
7
|
+
* 1. `registerDynamicLanguage` WIRKT GENAU EINMAL. Der zweite Aufruf wirft
|
|
8
|
+
* nicht — er registriert schweigend nichts, und jeder spaetere
|
|
9
|
+
* `parse("<sprache>", ...)` scheitert dann mit "not supported in napi".
|
|
10
|
+
* Also: EINE Registrierung, aufgeschoben bis zum ersten Parse einer
|
|
11
|
+
* dynamischen Sprache, mit ALLEN Sprachen, deren Adapter bis dahin
|
|
12
|
+
* angemeldet wurden. Wer danach noch eine Sprache anmeldet, bekommt einen
|
|
13
|
+
* Fehler statt einer stillen Wirkungslosigkeit ({@link registerAstGrepLanguage}).
|
|
14
|
+
*
|
|
15
|
+
* 2. EIN FEHLENDER PREBUILD SCHEITERT BEI DER INSTALLATION STILL. Die
|
|
16
|
+
* `postinstall` der `@ast-grep/lang-*`-Pakete faengt den Baufehler und
|
|
17
|
+
* endet mit Exit 0; npm/pnpm melden Erfolg. Erst `require("<paket>")
|
|
18
|
+
* .libraryPath` wirft — ein Getter. Die Sprachpakete liefern Prebuilds nur
|
|
19
|
+
* fuer macOS x64/arm64, Linux x64/arm64 (glibc) und Windows x64: auf
|
|
20
|
+
* Alpine (musl), Windows ARM64 und Windows ia32 gibt es KEINEN. Deshalb
|
|
21
|
+
* wird jede Sprache einzeln geprueft, der Ausfall benannt festgehalten
|
|
22
|
+
* ({@link astGrepLanguageStatus}) und beim Parsen als
|
|
23
|
+
* `grammar_unavailable` gemeldet — woraus der Aufrufer einen
|
|
24
|
+
* Skip-Ledger-Eintrag mit Grund baut (E4). Kein Adapter tut so, als haette
|
|
25
|
+
* er geparst.
|
|
26
|
+
*
|
|
27
|
+
* 3. `SgNode#id()` IST ADRESSABGELEITET. Innerhalb eines Prozesses taugt es
|
|
28
|
+
* zum Vergleich zweier Knoten, ueber Prozesse hinweg zu gar nichts. Es
|
|
29
|
+
* darf deshalb NIE in Ergebnisdaten stehen; genutzt wird es einzig in
|
|
30
|
+
* `syntax.ts`, um den Feldnamen des aktuellen Knotens zu bestimmen.
|
|
31
|
+
*
|
|
32
|
+
* Der Kern (`@ast-grep/napi`) bringt TypeScript, TSX, JavaScript, HTML und CSS
|
|
33
|
+
* fest eingebaut mit. Wir benutzen davon NICHTS: die JS/TS-Familie laeuft
|
|
34
|
+
* weiter ueber tree-sitter (Begruendung in `README.md` dieses Verzeichnisses).
|
|
35
|
+
*/
|
|
36
|
+
import { createRequire } from "node:module";
|
|
37
|
+
import { AdapterParseError } from "@untangle-code/domain";
|
|
38
|
+
const require = createRequire(import.meta.url);
|
|
39
|
+
const pending = new Map();
|
|
40
|
+
const status = new Map();
|
|
41
|
+
let registrationDone = false;
|
|
42
|
+
let cachedModule;
|
|
43
|
+
/**
|
|
44
|
+
* Meldet eine Sprache fuer die EINE spaetere Registrierung an. Kostet nichts:
|
|
45
|
+
* kein `require`, kein Laden einer Grammatik — genau wie die traege
|
|
46
|
+
* Registrierung der tree-sitter-Adapter (`registry.ts`).
|
|
47
|
+
*/
|
|
48
|
+
export function registerAstGrepLanguage(languageName, moduleName) {
|
|
49
|
+
const already = pending.get(languageName);
|
|
50
|
+
if (already !== undefined && already.moduleName === moduleName) {
|
|
51
|
+
// DIESELBE Sprache aus DEMSELBEN Paket ein zweites Mal anzumelden ist
|
|
52
|
+
// harmlos und passiert im Normalbetrieb: `createParserRegistry()` baut
|
|
53
|
+
// jedes Mal frische Adapter, und ein Prozess darf mehr als eine Registry
|
|
54
|
+
// haben (die CLI tut es je Befehl). Der Eintrag ist bereits da, die
|
|
55
|
+
// Registrierung enthaelt die Sprache also — hier ist NICHTS zu tun und
|
|
56
|
+
// nichts zu melden. Ohne diese Ausnahme warf die zweite Registry, obwohl
|
|
57
|
+
// ihre Sprachen samt und sonders verfuegbar waren (WP-86).
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
if (registrationDone) {
|
|
61
|
+
// Nach der Registrierung ist die Liste unveraenderlich (Eigenheit 1 im
|
|
62
|
+
// Modulkopf). Ein spaeterer Eintrag waere wirkungslos — und wirkungslos
|
|
63
|
+
// und unbemerkt ist genau das, was E4 verbietet.
|
|
64
|
+
throw new AdapterParseError("grammar_unavailable", `Sprache "${languageName}" was registered after the one-time ast-grep registration. ` +
|
|
65
|
+
`registerDynamicLanguage only takes effect on its first call; the language would silently remain unavailable.`);
|
|
66
|
+
}
|
|
67
|
+
pending.set(languageName, { languageName, moduleName });
|
|
68
|
+
status.set(languageName, { state: "pending" });
|
|
69
|
+
}
|
|
70
|
+
function loadModule() {
|
|
71
|
+
if (cachedModule === undefined) {
|
|
72
|
+
cachedModule = require("@ast-grep/napi");
|
|
73
|
+
}
|
|
74
|
+
return cachedModule;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Fuehrt die EINE Registrierung aus (idempotent). Jede Sprache, deren Paket
|
|
78
|
+
* fehlt oder deren Prebuild nicht gebaut wurde, faellt hier mit BENANNTEM
|
|
79
|
+
* Grund heraus, statt erst beim Parsen unverstaendlich zu scheitern.
|
|
80
|
+
*/
|
|
81
|
+
function ensureRegistered() {
|
|
82
|
+
const napi = loadModule();
|
|
83
|
+
if (registrationDone)
|
|
84
|
+
return napi;
|
|
85
|
+
registrationDone = true;
|
|
86
|
+
const registrations = {};
|
|
87
|
+
for (const language of pending.values()) {
|
|
88
|
+
try {
|
|
89
|
+
const registration = require(language.moduleName);
|
|
90
|
+
// `libraryPath` ist ein GETTER, der genau dann wirft, wenn weder ein
|
|
91
|
+
// Prebuild noch ein selbst gebauter Parser da ist. Der Zugriff hier ist
|
|
92
|
+
// die Pruefung, nicht ein beilaeufiges Lesen.
|
|
93
|
+
const libraryPath = registration.libraryPath;
|
|
94
|
+
registrations[language.languageName] = { ...registration, libraryPath };
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
status.set(language.languageName, {
|
|
98
|
+
state: "unavailable",
|
|
99
|
+
reason: `Package "${language.moduleName}" could not be loaded or has no built parser for ${process.platform}/${process.arch}: ${errorText(error)}`,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (Object.keys(registrations).length > 0) {
|
|
104
|
+
try {
|
|
105
|
+
napi.registerDynamicLanguage(registrations);
|
|
106
|
+
for (const name of Object.keys(registrations)) {
|
|
107
|
+
status.set(name, { state: "available" });
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
for (const name of Object.keys(registrations)) {
|
|
112
|
+
status.set(name, {
|
|
113
|
+
state: "unavailable",
|
|
114
|
+
reason: `registerDynamicLanguage failed: ${errorText(error)}`,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return napi;
|
|
120
|
+
}
|
|
121
|
+
function errorText(error) {
|
|
122
|
+
return error instanceof Error ? error.message : String(error);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Zustand einer angemeldeten Sprache — fuer `doctor` und fuer Tests. Loest die
|
|
126
|
+
* Registrierung NICHT aus: wer nur fragt, soll keine Grammatik laden.
|
|
127
|
+
*/
|
|
128
|
+
export function astGrepLanguageStatus(languageName) {
|
|
129
|
+
return status.get(languageName) ?? null;
|
|
130
|
+
}
|
|
131
|
+
/** Alle angemeldeten Sprachen mit ihrem Zustand (Reihenfolge der Anmeldung). */
|
|
132
|
+
export function astGrepLanguageStates() {
|
|
133
|
+
return [...pending.keys()].map((languageName) => ({
|
|
134
|
+
languageName,
|
|
135
|
+
status: status.get(languageName) ?? { state: "pending" },
|
|
136
|
+
}));
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Parst Quelltext mit ast-grep. Loest beim ERSTEN Aufruf die einmalige
|
|
140
|
+
* Registrierung aus (siehe Modulkopf) und wirft einen benannten
|
|
141
|
+
* `AdapterParseError`, wenn genau diese Sprache nicht verfuegbar ist.
|
|
142
|
+
*/
|
|
143
|
+
export function astGrepParse(languageName, source) {
|
|
144
|
+
let napi;
|
|
145
|
+
try {
|
|
146
|
+
napi = ensureRegistered();
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
throw new AdapterParseError("grammar_unavailable", `Could not load @ast-grep/napi: ${errorText(error)}`, { cause: error });
|
|
150
|
+
}
|
|
151
|
+
const languageStatus = status.get(languageName);
|
|
152
|
+
if (languageStatus === undefined) {
|
|
153
|
+
throw new AdapterParseError("grammar_unavailable", `Sprache "${languageName}" is not registered with this ast-grep backend.`);
|
|
154
|
+
}
|
|
155
|
+
if (languageStatus.state === "unavailable") {
|
|
156
|
+
throw new AdapterParseError("grammar_unavailable", `Sprache "${languageName}" is unavailable: ${languageStatus.reason}`);
|
|
157
|
+
}
|
|
158
|
+
try {
|
|
159
|
+
return napi.parse(languageName, source).root();
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
throw new AdapterParseError("parser_internal_error", `ast-grep could not parse "${languageName}" could not be parsed: ${errorText(error)}`, { cause: error });
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Nur fuer Tests: setzt Anmeldungen und Registrierungszustand zurueck. Der
|
|
167
|
+
* NATIVE Zustand laesst sich damit NICHT zuruecksetzen — `registerDynamicLanguage`
|
|
168
|
+
* bleibt im Prozess wirksam. Ein Test, der eine zweite, andere Registrierung
|
|
169
|
+
* erzwingen will, braucht einen eigenen Prozess.
|
|
170
|
+
*/
|
|
171
|
+
export function resetAstGrepRegistrationForTests() {
|
|
172
|
+
pending.clear();
|
|
173
|
+
status.clear();
|
|
174
|
+
registrationDone = false;
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=napi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"napi.js","sourceRoot":"","sources":["../../../src/languages/astgrep-backend/napi.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Der backend-neutrale Baumvertrag (`shared/syntax.ts`), nachgebaut ueber
|
|
3
|
+
* `SgNode`.
|
|
4
|
+
*
|
|
5
|
+
* WARUM DAS HIER TEURER IST ALS DER ANDERE WEG, und warum wir es trotzdem so
|
|
6
|
+
* bauen: ast-grep hat KEINE Cursor-API. Es gibt kein Gegenstueck zu
|
|
7
|
+
* `gotoFirstChild`/`gotoNextSibling`/`gotoParent`; jeder Abstieg geht ueber
|
|
8
|
+
* `children()`, und jedes `children()` baut ein frisches JS-Array aus
|
|
9
|
+
* Knotenwrappern. Gemessen an diesem Repositorium (721 Dateien, 1.143.212
|
|
10
|
+
* Knoten): tree-sitter-Cursor 1.703.642 Knoten/s gegen ast-grep 455.329
|
|
11
|
+
* Knoten/s — Faktor 3,74, Mehrkosten 1,61 us je Knoten. Das ist das Niveau des
|
|
12
|
+
* `.children`-Weges, den WP-95 abgeschafft hat.
|
|
13
|
+
*
|
|
14
|
+
* Deshalb: die JS/TS-Familie bleibt bei tree-sitter, und dieser Cursor ist der
|
|
15
|
+
* Weg fuer Sprachen, die es sonst GAR NICHT gaebe. Fuer sie ist der Aufpreis
|
|
16
|
+
* kein Rueckschritt — er ist der Eintrittspreis.
|
|
17
|
+
*
|
|
18
|
+
* WAS DIESER CURSOR TROTZDEM RICHTIG MACHT:
|
|
19
|
+
* - Er ist ITERATIV. Ein Baum kann zehntausende Ebenen tief sein (eine lange
|
|
20
|
+
* `a || b || c`-Kette genuegt); ein rekursiver Walk zerbricht daran mit
|
|
21
|
+
* `RangeError: Maximum call stack size exceeded`, nachgemessen an 50.000
|
|
22
|
+
* Gliedern.
|
|
23
|
+
* - Er materialisiert die Kindliste je Ebene EINMAL, nicht je Zugriff.
|
|
24
|
+
* - Er merkt sich den Bereich (`range()`) des aktuellen Knotens, weil
|
|
25
|
+
* `rangeOfCursor` vier Werte daraus liest und ast-grep bei jedem Aufruf ein
|
|
26
|
+
* verschachteltes Objekt neu baut.
|
|
27
|
+
*
|
|
28
|
+
* WAS ER NICHT KANN — und was der Adapter deshalb ehrlich sagen muss:
|
|
29
|
+
* - `nodeIsMissing` gibt es bei ast-grep nicht. Hier steht eine HEURISTIK:
|
|
30
|
+
* ein Blatt der Breite null. An diesem Repositorium war sie exakt (3 von 3
|
|
31
|
+
* MISSING-Knoten), sie bleibt aber eine Heuristik. `create-adapter.ts`
|
|
32
|
+
* schreibt das in JEDE davon erzeugte Diagnose.
|
|
33
|
+
* - `currentFieldName` gibt es nicht als Rueckrichtung. Wir fragen die
|
|
34
|
+
* Felder ab, die das Sprachprofil nennt, und vergleichen ueber `id()` —
|
|
35
|
+
* prozesslokal gueltig, nie in Ergebnisdaten (siehe `napi.ts`).
|
|
36
|
+
*/
|
|
37
|
+
import type { SyntaxCursor, SyntaxNode, SyntaxPoint } from "../shared/syntax.js";
|
|
38
|
+
import type { SgNode } from "./napi.js";
|
|
39
|
+
/** Ein `SgNode` in der Form, die `shared/` erwartet. */
|
|
40
|
+
export declare class AstGrepSyntaxNode implements SyntaxNode {
|
|
41
|
+
/** Der rohe ast-grep-Knoten. Nur `syntax.ts` fasst ihn an. */
|
|
42
|
+
readonly sg: SgNode;
|
|
43
|
+
private readonly fieldNames;
|
|
44
|
+
constructor(
|
|
45
|
+
/** Der rohe ast-grep-Knoten. Nur `syntax.ts` fasst ihn an. */
|
|
46
|
+
sg: SgNode, fieldNames: readonly string[]);
|
|
47
|
+
get type(): string;
|
|
48
|
+
get text(): string;
|
|
49
|
+
get isNamed(): boolean;
|
|
50
|
+
get startIndex(): number;
|
|
51
|
+
get endIndex(): number;
|
|
52
|
+
get startPosition(): SyntaxPoint;
|
|
53
|
+
get endPosition(): SyntaxPoint;
|
|
54
|
+
get parent(): SyntaxNode | null;
|
|
55
|
+
get previousSibling(): SyntaxNode | null;
|
|
56
|
+
get children(): readonly SyntaxNode[];
|
|
57
|
+
get namedChildCount(): number;
|
|
58
|
+
namedChild(index: number): SyntaxNode | null;
|
|
59
|
+
childForFieldName(fieldName: string): SyntaxNode | null;
|
|
60
|
+
walk(): SyntaxCursor;
|
|
61
|
+
}
|
|
62
|
+
export declare class AstGrepCursor implements SyntaxCursor {
|
|
63
|
+
private readonly rootNode;
|
|
64
|
+
private readonly fieldNames;
|
|
65
|
+
private readonly levels;
|
|
66
|
+
private rangeCacheNode;
|
|
67
|
+
private rangeCacheValue;
|
|
68
|
+
constructor(rootNode: SgNode, fieldNames: readonly string[]);
|
|
69
|
+
private get node();
|
|
70
|
+
private get range();
|
|
71
|
+
get nodeType(): string;
|
|
72
|
+
get nodeText(): string;
|
|
73
|
+
get nodeIsMissing(): boolean;
|
|
74
|
+
get currentFieldName(): string | undefined;
|
|
75
|
+
/** Der Elternknoten der aktuellen Position, oder `null` auf der Wurzel. */
|
|
76
|
+
private parentNode;
|
|
77
|
+
get currentNode(): SyntaxNode;
|
|
78
|
+
get startPosition(): SyntaxPoint;
|
|
79
|
+
get endPosition(): SyntaxPoint;
|
|
80
|
+
get startIndex(): number;
|
|
81
|
+
get endIndex(): number;
|
|
82
|
+
gotoParent(): boolean;
|
|
83
|
+
gotoFirstChild(): boolean;
|
|
84
|
+
gotoLastChild(): boolean;
|
|
85
|
+
gotoNextSibling(): boolean;
|
|
86
|
+
gotoPreviousSibling(): boolean;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=syntax.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syntax.d.ts","sourceRoot":"","sources":["../../../src/languages/astgrep-backend/syntax.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEjF,OAAO,KAAK,EAAE,MAAM,EAAS,MAAM,WAAW,CAAC;AAM/C,wDAAwD;AACxD,qBAAa,iBAAkB,YAAW,UAAU;IAEhD,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,EAAE,MAAM;IACnB,OAAO,CAAC,QAAQ,CAAC,UAAU;;IAF3B,8DAA8D;IACrD,EAAE,EAAE,MAAM,EACF,UAAU,EAAE,SAAS,MAAM,EAAE;IAGhD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,aAAa,IAAI,WAAW,CAE/B;IAED,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED,IAAI,MAAM,IAAI,UAAU,GAAG,IAAI,CAG9B;IAED,IAAI,eAAe,IAAI,UAAU,GAAG,IAAI,CAOvC;IAED,IAAI,QAAQ,IAAI,SAAS,UAAU,EAAE,CAEpC;IAED,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAK5C,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAQvD,IAAI,IAAI,YAAY;CAGrB;AAQD,qBAAa,aAAc,YAAW,YAAY;IAM9C,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAN7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,eAAe,CAA6C;gBAGjD,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,SAAS,MAAM,EAAE;IAGhD,OAAO,KAAK,IAAI,GAIf;IAED,OAAO,KAAK,KAAK,GAOhB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,aAAa,IAAI,OAAO,CAQ3B;IAED,IAAI,gBAAgB,IAAI,MAAM,GAAG,SAAS,CASzC;IAED,2EAA2E;IAC3E,OAAO,CAAC,UAAU;IAOlB,IAAI,WAAW,IAAI,UAAU,CAE5B;IAED,IAAI,aAAa,IAAI,WAAW,CAE/B;IAED,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,UAAU,IAAI,OAAO;IAMrB,cAAc,IAAI,OAAO;IAOzB,aAAa,IAAI,OAAO;IAOxB,eAAe,IAAI,OAAO;IAO1B,mBAAmB,IAAI,OAAO;CAM/B"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
function pointOf(pos) {
|
|
2
|
+
return { row: pos.line, column: pos.column };
|
|
3
|
+
}
|
|
4
|
+
/** Ein `SgNode` in der Form, die `shared/` erwartet. */
|
|
5
|
+
export class AstGrepSyntaxNode {
|
|
6
|
+
sg;
|
|
7
|
+
fieldNames;
|
|
8
|
+
constructor(
|
|
9
|
+
/** Der rohe ast-grep-Knoten. Nur `syntax.ts` fasst ihn an. */
|
|
10
|
+
sg, fieldNames) {
|
|
11
|
+
this.sg = sg;
|
|
12
|
+
this.fieldNames = fieldNames;
|
|
13
|
+
}
|
|
14
|
+
get type() {
|
|
15
|
+
return this.sg.kind();
|
|
16
|
+
}
|
|
17
|
+
get text() {
|
|
18
|
+
return this.sg.text();
|
|
19
|
+
}
|
|
20
|
+
get isNamed() {
|
|
21
|
+
return this.sg.isNamed();
|
|
22
|
+
}
|
|
23
|
+
get startIndex() {
|
|
24
|
+
return this.sg.range().start.index;
|
|
25
|
+
}
|
|
26
|
+
get endIndex() {
|
|
27
|
+
return this.sg.range().end.index;
|
|
28
|
+
}
|
|
29
|
+
get startPosition() {
|
|
30
|
+
return pointOf(this.sg.range().start);
|
|
31
|
+
}
|
|
32
|
+
get endPosition() {
|
|
33
|
+
return pointOf(this.sg.range().end);
|
|
34
|
+
}
|
|
35
|
+
get parent() {
|
|
36
|
+
const parent = this.sg.parent();
|
|
37
|
+
return parent === null ? null : new AstGrepSyntaxNode(parent, this.fieldNames);
|
|
38
|
+
}
|
|
39
|
+
get previousSibling() {
|
|
40
|
+
// Geprueft: ast-grep `prev()` liefert auch ANONYME Geschwister (das
|
|
41
|
+
// vorangehende `{` einer Blockklammer ebenso wie einen Kommentar). Waere
|
|
42
|
+
// es nur das vorherige benannte Geschwister, verschoebe sich die
|
|
43
|
+
// Doc-Bindung stillschweigend.
|
|
44
|
+
const previous = this.sg.prev();
|
|
45
|
+
return previous === null ? null : new AstGrepSyntaxNode(previous, this.fieldNames);
|
|
46
|
+
}
|
|
47
|
+
get children() {
|
|
48
|
+
return this.sg.children().map((child) => new AstGrepSyntaxNode(child, this.fieldNames));
|
|
49
|
+
}
|
|
50
|
+
get namedChildCount() {
|
|
51
|
+
return this.sg.namedChildren().length;
|
|
52
|
+
}
|
|
53
|
+
namedChild(index) {
|
|
54
|
+
const child = this.sg.namedChildren()[index];
|
|
55
|
+
return child === undefined ? null : new AstGrepSyntaxNode(child, this.fieldNames);
|
|
56
|
+
}
|
|
57
|
+
childForFieldName(fieldName) {
|
|
58
|
+
// Ein unbekannter Feldname liefert bei ast-grep `null` (geprueft), wirft
|
|
59
|
+
// also nicht — ein Profil darf nach Feldern fragen, die es in dieser
|
|
60
|
+
// Grammatik nicht gibt.
|
|
61
|
+
const field = this.sg.field(fieldName);
|
|
62
|
+
return field === null ? null : new AstGrepSyntaxNode(field, this.fieldNames);
|
|
63
|
+
}
|
|
64
|
+
walk() {
|
|
65
|
+
return new AstGrepCursor(this.sg, this.fieldNames);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
export class AstGrepCursor {
|
|
69
|
+
rootNode;
|
|
70
|
+
fieldNames;
|
|
71
|
+
levels = [];
|
|
72
|
+
rangeCacheNode = null;
|
|
73
|
+
rangeCacheValue = null;
|
|
74
|
+
constructor(rootNode, fieldNames) {
|
|
75
|
+
this.rootNode = rootNode;
|
|
76
|
+
this.fieldNames = fieldNames;
|
|
77
|
+
}
|
|
78
|
+
get node() {
|
|
79
|
+
const level = this.levels[this.levels.length - 1];
|
|
80
|
+
if (level === undefined)
|
|
81
|
+
return this.rootNode;
|
|
82
|
+
return level.siblings[level.index];
|
|
83
|
+
}
|
|
84
|
+
get range() {
|
|
85
|
+
const node = this.node;
|
|
86
|
+
if (this.rangeCacheNode === node && this.rangeCacheValue !== null)
|
|
87
|
+
return this.rangeCacheValue;
|
|
88
|
+
const value = node.range();
|
|
89
|
+
this.rangeCacheNode = node;
|
|
90
|
+
this.rangeCacheValue = value;
|
|
91
|
+
return value;
|
|
92
|
+
}
|
|
93
|
+
get nodeType() {
|
|
94
|
+
return this.node.kind();
|
|
95
|
+
}
|
|
96
|
+
get nodeText() {
|
|
97
|
+
return this.node.text();
|
|
98
|
+
}
|
|
99
|
+
get nodeIsMissing() {
|
|
100
|
+
// HEURISTIK, kein Messwert: ast-grep kennt `ts_node_is_missing` nicht.
|
|
101
|
+
// Ein von der Fehlerkorrektur eingefuegter Knoten hat die Breite null und
|
|
102
|
+
// keine Kinder; die Wurzel ist ausgenommen (eine leere Datei ist kein
|
|
103
|
+
// fehlender Knoten).
|
|
104
|
+
if (this.levels.length === 0)
|
|
105
|
+
return false;
|
|
106
|
+
const range = this.range;
|
|
107
|
+
return range.start.index === range.end.index && this.node.isLeaf();
|
|
108
|
+
}
|
|
109
|
+
get currentFieldName() {
|
|
110
|
+
const parent = this.parentNode();
|
|
111
|
+
if (parent === null)
|
|
112
|
+
return undefined;
|
|
113
|
+
const nodeId = this.node.id();
|
|
114
|
+
for (const fieldName of this.fieldNames) {
|
|
115
|
+
const field = parent.field(fieldName);
|
|
116
|
+
if (field !== null && field.id() === nodeId)
|
|
117
|
+
return fieldName;
|
|
118
|
+
}
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
/** Der Elternknoten der aktuellen Position, oder `null` auf der Wurzel. */
|
|
122
|
+
parentNode() {
|
|
123
|
+
if (this.levels.length === 0)
|
|
124
|
+
return null;
|
|
125
|
+
if (this.levels.length === 1)
|
|
126
|
+
return this.rootNode;
|
|
127
|
+
const level = this.levels[this.levels.length - 2];
|
|
128
|
+
return level.siblings[level.index];
|
|
129
|
+
}
|
|
130
|
+
get currentNode() {
|
|
131
|
+
return new AstGrepSyntaxNode(this.node, this.fieldNames);
|
|
132
|
+
}
|
|
133
|
+
get startPosition() {
|
|
134
|
+
return pointOf(this.range.start);
|
|
135
|
+
}
|
|
136
|
+
get endPosition() {
|
|
137
|
+
return pointOf(this.range.end);
|
|
138
|
+
}
|
|
139
|
+
get startIndex() {
|
|
140
|
+
return this.range.start.index;
|
|
141
|
+
}
|
|
142
|
+
get endIndex() {
|
|
143
|
+
return this.range.end.index;
|
|
144
|
+
}
|
|
145
|
+
gotoParent() {
|
|
146
|
+
if (this.levels.length === 0)
|
|
147
|
+
return false;
|
|
148
|
+
this.levels.pop();
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
gotoFirstChild() {
|
|
152
|
+
const children = this.node.children();
|
|
153
|
+
if (children.length === 0)
|
|
154
|
+
return false;
|
|
155
|
+
this.levels.push({ siblings: children, index: 0 });
|
|
156
|
+
return true;
|
|
157
|
+
}
|
|
158
|
+
gotoLastChild() {
|
|
159
|
+
const children = this.node.children();
|
|
160
|
+
if (children.length === 0)
|
|
161
|
+
return false;
|
|
162
|
+
this.levels.push({ siblings: children, index: children.length - 1 });
|
|
163
|
+
return true;
|
|
164
|
+
}
|
|
165
|
+
gotoNextSibling() {
|
|
166
|
+
const level = this.levels[this.levels.length - 1];
|
|
167
|
+
if (level === undefined || level.index + 1 >= level.siblings.length)
|
|
168
|
+
return false;
|
|
169
|
+
level.index += 1;
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
172
|
+
gotoPreviousSibling() {
|
|
173
|
+
const level = this.levels[this.levels.length - 1];
|
|
174
|
+
if (level === undefined || level.index === 0)
|
|
175
|
+
return false;
|
|
176
|
+
level.index -= 1;
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=syntax.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syntax.js","sourceRoot":"","sources":["../../../src/languages/astgrep-backend/syntax.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Central builtin-language registration point.
|
|
3
|
+
*
|
|
4
|
+
* Dateibesitz (BUILD_PLAN §4): every path under `packages/parser-registry/`
|
|
5
|
+
* belongs to WP-06, EXCEPT `src/languages/python/**` and "the registration
|
|
6
|
+
* line" in this file, both owned by WP-09 (a later wave). WP-09 adds its
|
|
7
|
+
* import and ONE `registry.register(createPythonAdapter());` line below,
|
|
8
|
+
* without touching any line above it — that is the whole contract for
|
|
9
|
+
* adding a language without editing existing files/lines.
|
|
10
|
+
*/
|
|
11
|
+
import type { LazyParserRegistry } from "../registry.js";
|
|
12
|
+
/** Registers every builtin language adapter. Registration is cheap and lazy — see `registry.ts`'s doc comment. */
|
|
13
|
+
export declare function registerBuiltinLanguages(registry: LazyParserRegistry): void;
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/languages/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAgBzD,kHAAkH;AAClH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAyB3E"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { createBreadthAdapters, createGoAdapter, createRustAdapter, } from "./astgrep-backend/index.js";
|
|
2
|
+
import { createJavaScriptAdapter } from "./javascript/index.js";
|
|
3
|
+
import { createJsxAdapter } from "./jsx/index.js";
|
|
4
|
+
import { createProseAdapter } from "./prose/index.js";
|
|
5
|
+
import { createPythonAdapter } from "./python/index.js";
|
|
6
|
+
import { createStructuredTextAdapter } from "./structured-text/index.js";
|
|
7
|
+
import { createTsxAdapter } from "./tsx/index.js";
|
|
8
|
+
import { createTypeScriptAdapter } from "./typescript/index.js";
|
|
9
|
+
import { createVueAdapter } from "./vue/index.js";
|
|
10
|
+
/** Registers every builtin language adapter. Registration is cheap and lazy — see `registry.ts`'s doc comment. */
|
|
11
|
+
export function registerBuiltinLanguages(registry) {
|
|
12
|
+
registry.register(createTypeScriptAdapter());
|
|
13
|
+
registry.register(createJavaScriptAdapter());
|
|
14
|
+
registry.register(createTsxAdapter());
|
|
15
|
+
registry.register(createJsxAdapter());
|
|
16
|
+
registry.register(createVueAdapter());
|
|
17
|
+
registry.register(createPythonAdapter());
|
|
18
|
+
// WP-110/WP-217: Prosa und strukturierte Daten sind Stufe `text`, nicht
|
|
19
|
+
// `unsupported_language` (vision.md §1c, spec.md §7.2). Beide Adapter
|
|
20
|
+
// laden keine Grammatik und kosten bei der Registrierung nichts.
|
|
21
|
+
registry.register(createProseAdapter());
|
|
22
|
+
registry.register(createStructuredTextAdapter());
|
|
23
|
+
// WP-220: Go und Rust laufen ueber das ast-grep-Backend
|
|
24
|
+
// (`languages/astgrep-backend/README.md` sagt, warum GENAU diese Sprachen
|
|
25
|
+
// dort laufen und die JS/TS-Familie nicht). Die Anmeldung kostet nichts:
|
|
26
|
+
// weder `@ast-grep/napi` noch eine Grammatik wird dabei geladen — das
|
|
27
|
+
// passiert erst beim ersten Parse einer dieser Sprachen.
|
|
28
|
+
registry.register(createGoAdapter());
|
|
29
|
+
registry.register(createRustAdapter());
|
|
30
|
+
// WP-86: neun weitere Sprachen ueber DASSELBE Backend und DIESELBE
|
|
31
|
+
// Tabellenform — Java, C#, Ruby, PHP, Kotlin, C, C++, Swift, Bash. Auch sie
|
|
32
|
+
// laden beim Registrieren nichts.
|
|
33
|
+
for (const adapter of createBreadthAdapters()) {
|
|
34
|
+
registry.register(adapter);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/languages/index.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,kHAAkH;AAClH,MAAM,UAAU,wBAAwB,CAAC,QAA4B;IACnE,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAC7C,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,EAAE,CAAC,CAAC;IAC7C,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC;IACzC,wEAAwE;IACxE,sEAAsE;IACtE,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACxC,QAAQ,CAAC,QAAQ,CAAC,2BAA2B,EAAE,CAAC,CAAC;IACjD,wDAAwD;IACxD,0EAA0E;IAC1E,yEAAyE;IACzE,sEAAsE;IACtE,yDAAyD;IACzD,QAAQ,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACvC,mEAAmE;IACnE,4EAA4E;IAC5E,kCAAkC;IAClC,KAAK,MAAM,OAAO,IAAI,qBAAqB,EAAE,EAAE,CAAC;QAC9C,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/languages/javascript/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAK7D,iGAAiG;AACjG,wBAAgB,uBAAuB,IAAI,eAAe,CAEzD"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createTreeSitterAdapter } from "../shared/create-adapter.js";
|
|
2
|
+
import { JAVASCRIPT_DIALECT } from "../shared/dialect.js";
|
|
3
|
+
/** JavaScript `LanguageAdapter` (`.js`, `.mjs`, `.cjs`), support level "deep" (spec.md §7.2). */
|
|
4
|
+
export function createJavaScriptAdapter() {
|
|
5
|
+
return createTreeSitterAdapter(JAVASCRIPT_DIALECT);
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/languages/javascript/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,iGAAiG;AACjG,MAAM,UAAU,uBAAuB;IACrC,OAAO,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/languages/jsx/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAK7D,2EAA2E;AAC3E,wBAAgB,gBAAgB,IAAI,eAAe,CAElD"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createTreeSitterAdapter } from "../shared/create-adapter.js";
|
|
2
|
+
import { JSX_DIALECT } from "../shared/dialect.js";
|
|
3
|
+
/** JSX `LanguageAdapter` (`.jsx`), support level "deep" (spec.md §7.2). */
|
|
4
|
+
export function createJsxAdapter() {
|
|
5
|
+
return createTreeSitterAdapter(JSX_DIALECT);
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/languages/jsx/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,2EAA2E;AAC3E,MAAM,UAAU,gBAAgB;IAC9B,OAAO,uBAAuB,CAAC,WAAW,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prosa-`LanguageAdapter` (vision.md §1c, WP-110/WP-217).
|
|
3
|
+
*
|
|
4
|
+
* WAS ER LOEST
|
|
5
|
+
*
|
|
6
|
+
* Vor ihm kannte `getAdapterForPath("spec.md")` nur `null`. Jede Stelle, die
|
|
7
|
+
* das fragt — `untangle complexity`, der Watcher, der Selbstanalyse-Report —
|
|
8
|
+
* schrieb daraufhin `unsupported_language` ins Skip-Ledger. Bei der ersten
|
|
9
|
+
* Selbstanalyse dieses Repositories waren das allein 35 Markdown-Dateien,
|
|
10
|
+
* bei 654 KB Markdown gegen 2.006 KB TypeScript. vision.md §1c sagt genau
|
|
11
|
+
* das Gegenteil: Prosa ist erstklassiger Inhalt, und `text` ist kein
|
|
12
|
+
* abgeschwaechtes `deep`.
|
|
13
|
+
*
|
|
14
|
+
* WAS ER LIEFERT — UND WAS BEWUSST NICHT
|
|
15
|
+
*
|
|
16
|
+
* - `extractChunks` liefert ueberschriftenbewusste Abschnitte mit
|
|
17
|
+
* Breadcrumb. Die Gliederung ist NICHT neu gebaut: es ist dieselbe
|
|
18
|
+
* `outlineMarkdown()`, die `@untangle-code/context-artifacts` schon fuer
|
|
19
|
+
* konfigurierte Markdown-Artefakte benutzt hat (WP-110 hat sie nach
|
|
20
|
+
* domain gehoben). Damit bekommt eine gewoehnliche `.md`-Datei im Chunker
|
|
21
|
+
* die AST-Strategie statt `line_fallback` — statt willkuerlicher
|
|
22
|
+
* Zeilenfenster also dieselben semantischen Einheiten wie eine
|
|
23
|
+
* konfigurierte.
|
|
24
|
+
* - `extractSymbols` liefert je Abschnitt ein Symbol der Art `"section"`.
|
|
25
|
+
* Das ist die Zuordnung, ueber die der Chunker `symbolId`/`symbolFqn` an
|
|
26
|
+
* jeden Abschnitt und an jedes Fragment eines zu grossen Abschnitts
|
|
27
|
+
* haengt (spec.md §8.5).
|
|
28
|
+
* - `extractImports` liefert relative Dateiverweise. Ein Verweis von
|
|
29
|
+
* `vision.md` auf `spec.md` IST eine Kante im Dateigraphen; sie zu
|
|
30
|
+
* verschweigen waere derselbe Verlust wie ein verschwiegener Import.
|
|
31
|
+
* - `extractCalls` liefert NICHTS. Prosa hat keine Aufrufe.
|
|
32
|
+
* - `computeComplexity` liefert LEERE Facts: keine `symbolScopes`, keine
|
|
33
|
+
* `decisions`. Das ist der Kern von WP-217 und keine Nachlaessigkeit —
|
|
34
|
+
* zyklomatische Komplexitaet ueber ein Dokument ist keine schlechte Zahl,
|
|
35
|
+
* sondern gar keine. Wer Prosa messen will, nimmt die Prosa-Metriken aus
|
|
36
|
+
* `@untangle-code/complexity` (`computeProseMetrics`), die als eigene
|
|
37
|
+
* Metrikfamilie (`ProseNumberV1`) gefuehrt werden und deshalb strukturell
|
|
38
|
+
* nie in eine Code-Summe geraten koennen.
|
|
39
|
+
* - `tokenizeForHalstead` liefert NICHTS: Halstead zaehlt Operatoren und
|
|
40
|
+
* Operanden; in Prosa gibt es beides nicht.
|
|
41
|
+
*
|
|
42
|
+
* `parse()` kann nicht scheitern. Markdown hat keine Syntaxfehler — jeder
|
|
43
|
+
* Text ist gueltiges Markdown —, deshalb ist `parseQuality` immer
|
|
44
|
+
* `"complete"` und `ast` nie `null`. Das ist eine Aussage ueber das Format,
|
|
45
|
+
* keine Beschoenigung.
|
|
46
|
+
*/
|
|
47
|
+
import type { LanguageAdapter } from "@untangle-code/domain";
|
|
48
|
+
/** Sprachkennung dieses Adapters; identisch mit der Scanner-Klassifikation fuer `.md`. */
|
|
49
|
+
export declare const PROSE_LANGUAGE_ID = "markdown";
|
|
50
|
+
/** Symbolart eines Prosa-Abschnitts. Ein Abschnitt ist keine Funktion und heisst auch nicht so. */
|
|
51
|
+
export declare const PROSE_SYMBOL_KIND = "section";
|
|
52
|
+
export declare function createProseAdapter(): LanguageAdapter;
|
|
53
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/languages/prose/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,OAAO,KAAK,EAKV,eAAe,EAQhB,MAAM,uBAAuB,CAAC;AAW/B,0FAA0F;AAC1F,eAAO,MAAM,iBAAiB,aAAa,CAAC;AAE5C,mGAAmG;AACnG,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAkF3C,wBAAgB,kBAAkB,IAAI,eAAe,CAiHpD"}
|