@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,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Die Adapterfabrik des ast-grep-Backends.
|
|
3
|
+
*
|
|
4
|
+
* Sie baut aus einer Sprachtabelle (`shared/table-profile.ts`) einen
|
|
5
|
+
* vollstaendigen `LanguageAdapter` (domain `analysis.ts`) — mit DEMSELBEN
|
|
6
|
+
* Walk, DENSELBEN Diagnosen, DENSELBEN Fingerabdruecken und DEMSELBEN
|
|
7
|
+
* Regionenbau wie der tree-sitter-Weg. `chunker`, `complexity`, `file-graph`
|
|
8
|
+
* und `symbol-graph` koennen nicht erkennen, welches Backend gelaufen ist;
|
|
9
|
+
* genau das ist die Zusage.
|
|
10
|
+
*
|
|
11
|
+
* WAS SICH ZWISCHEN DEN BACKENDS UNTERSCHEIDET, und wo es steht:
|
|
12
|
+
*
|
|
13
|
+
* 1. GROESSENGRENZE. Die 32-KiB-Puffergrenze der nativen tree-sitter-Bindung
|
|
14
|
+
* (`shared/parse-limits.ts`, WP-215) gibt es hier NICHT: ast-grep nimmt
|
|
15
|
+
* 84 KB, 167 KB, 1 MB und 4 MB ohne jede Option. Dafuer kostet der Walk
|
|
16
|
+
* mehr Speicher, also gilt eine EIGENE, niedrigere Obergrenze
|
|
17
|
+
* ({@link MAX_ASTGREP_SOURCE_BYTES}) — begruendet unten.
|
|
18
|
+
*
|
|
19
|
+
* 2. FEHLENDE KNOTEN. tree-sitter misst sie (`nodeIsMissing`), ast-grep hat
|
|
20
|
+
* dafuer nichts. Der Cursor liefert hier eine Heuristik, und JEDE daraus
|
|
21
|
+
* entstehende Diagnose sagt das in ihrem Text
|
|
22
|
+
* (`collectParseDiagnostics(..., "heuristic")`). `missingNodeCount` bleibt
|
|
23
|
+
* eine Zahl — aber eine, deren Herkunft in der Ausgabe steht (E4).
|
|
24
|
+
*
|
|
25
|
+
* 3. VERSIONIERUNG. Ein anderer Parser erzeugt eine andere AST-Form und damit
|
|
26
|
+
* andere Chunk-IDs und Fingerabdruecke. Sichtbar wird das ueber
|
|
27
|
+
* `parserVersionForLanguage` (domain `versions.ts`), das fuer jede
|
|
28
|
+
* ast-grep-Sprache eine eigene `parser_version` liefert. Ohne sie lieferten
|
|
29
|
+
* die inhaltsadressierten Caches aus WP-100 stillschweigend Altes.
|
|
30
|
+
*/
|
|
31
|
+
import type { LanguageAdapter, SourceFile } from "@untangle-code/domain";
|
|
32
|
+
import type { LanguageProfile } from "../shared/profile.js";
|
|
33
|
+
import type { SyntaxNode } from "../shared/syntax.js";
|
|
34
|
+
import type { LanguageKindTable } from "../shared/table-profile.js";
|
|
35
|
+
/**
|
|
36
|
+
* Obergrenze fuer eine einzelne Quelldatei, in Bytes — 5 MiB.
|
|
37
|
+
*
|
|
38
|
+
* WARUM NIEDRIGER ALS BEIM TREE-SITTER-WEG (8 MiB, `shared/parse-limits.ts`):
|
|
39
|
+
* der Walk kostet hier mehr Speicher, weil jeder Abstieg ueber `children()`
|
|
40
|
+
* geht und dabei je Knoten JS-Wrapper entstehen. SELBST GEMESSEN ueber diesen
|
|
41
|
+
* Adapter (`parse()` + `computeComplexity()`, generierter Go-Quelltext, je
|
|
42
|
+
* Groesse ein EIGENER Prozess, `maxRSS` aus `process.resourceUsage()`,
|
|
43
|
+
* darwin/arm64, Node 26.7.0):
|
|
44
|
+
*
|
|
45
|
+
* Bytes Knoten parse walk Spitzen-RSS
|
|
46
|
+
* 1 MiB 490.959 1.897 ms 12.289 ms 1.048 MiB
|
|
47
|
+
* 2 MiB 976.521 3.087 ms 11.699 ms 2.719 MiB
|
|
48
|
+
* 4 MiB 1.937.712 5.803 ms 45.863 ms 2.098 MiB
|
|
49
|
+
*
|
|
50
|
+
* Die RSS-Spalte ist ERKENNBAR VERRAUSCHT (4 MiB unter 2 MiB), weil die
|
|
51
|
+
* napi-Finalisierer auf der Ereignisschleife laufen und ein synchroner Lauf
|
|
52
|
+
* sie nicht drankommen laesst — dieselbe Beobachtung machte die Erkundung.
|
|
53
|
+
* Verlaesslich ist nur die Groessenordnung: rund ein Gigabyte je Megabyte
|
|
54
|
+
* Quelltext, und damit rund das Vierfache des tree-sitter-Weges.
|
|
55
|
+
*
|
|
56
|
+
* DIE GRENZE IST DESHALB DIE SCANNERGRENZE: 5 MiB, genau die Vorgabe aus
|
|
57
|
+
* `packages/scanner/src/discovery.ts`. Damit ist der Parser bei
|
|
58
|
+
* Standardkonfiguration NIE die engere, unausgesprochene Grenze — jede Datei,
|
|
59
|
+
* die der Scanner durchlaesst, nimmt er auch an —, und zugleich bleibt der
|
|
60
|
+
* Speicherbedarf im messbaren Bereich. Wer die Scannergrenze bewusst anhebt,
|
|
61
|
+
* bekommt hier einen benannten Grund (`file_too_large`) statt eines Absturzes.
|
|
62
|
+
*
|
|
63
|
+
* NICHT GELOEST, und hier ausdruecklich vermerkt: 12 bis 46 Sekunden Walk je
|
|
64
|
+
* Megabyte sind ein eigener Leistungsdefekt dieses Weges (der tree-sitter-Weg
|
|
65
|
+
* misst an vergleichbarer Stelle rund sechs Sekunden je Megabyte). Diese
|
|
66
|
+
* Grenze verhindert nur, dass er in einen Speicherabsturz umschlaegt.
|
|
67
|
+
*/
|
|
68
|
+
export declare const MAX_ASTGREP_SOURCE_BYTES: number;
|
|
69
|
+
/** Welches npm-Paket die Grammatik einer Sprache liefert. */
|
|
70
|
+
export interface AstGrepLanguageSource {
|
|
71
|
+
/** Name, unter dem ast-grep die Sprache fuehrt (`parse(name, ...)`). */
|
|
72
|
+
languageName: string;
|
|
73
|
+
/** Sprachpaket, EINZELN aufgenommen — nie eine Sammelabhaengigkeit (450 MB fuer 22 Sprachen). */
|
|
74
|
+
moduleName: string;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Haken fuer eine Sprache, deren Regeln eine Tabelle NICHT ausdrueckt.
|
|
78
|
+
*
|
|
79
|
+
* WOFUER, an einem echten Fall: Python bindet den Doc-Kommentar nicht an ein
|
|
80
|
+
* Kommentarzeichen, sondern an die erste Anweisung des Rumpfes; seine
|
|
81
|
+
* Sichtbarkeit steht in einer Namenskonvention statt in einem Modifikator;
|
|
82
|
+
* und `__all__` gilt je DATEI, nicht je Knoten. Das erste und zweite koennte
|
|
83
|
+
* eine Tabelle notfalls noch beschreiben, das dritte nicht: es braucht einen
|
|
84
|
+
* Zustand, den es erst gibt, wenn die Datei geparst ist.
|
|
85
|
+
*
|
|
86
|
+
* Deshalb DIESER Zuschnitt und kein anderer: der Haken bekommt das fertige
|
|
87
|
+
* Tabellenprofil, den Wurzelknoten und die Datei und darf daraus ein
|
|
88
|
+
* VERFEINERTES Profil bauen. Er laeuft genau einmal je Parse — nicht je
|
|
89
|
+
* Knoten —, und wer ihn nicht setzt, bezahlt nichts.
|
|
90
|
+
*/
|
|
91
|
+
export interface AstGrepAdapterHooks {
|
|
92
|
+
readonly profileForFile?: (base: LanguageProfile, root: SyntaxNode, file: SourceFile) => LanguageProfile;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Baut einen `LanguageAdapter` ueber ast-grep. Die Anmeldung der Sprache
|
|
96
|
+
* kostet hier nichts: kein `require`, keine Grammatik, kein natives Modul —
|
|
97
|
+
* das passiert erst beim ersten `parse()` einer ast-grep-Sprache, und dann
|
|
98
|
+
* fuer alle angemeldeten auf einmal (`napi.ts`, Eigenheit 1).
|
|
99
|
+
*/
|
|
100
|
+
export declare function createAstGrepAdapter(table: LanguageKindTable, source: AstGrepLanguageSource, hooks?: AstGrepAdapterHooks): LanguageAdapter;
|
|
101
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/languages/astgrep-backend/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,OAAO,KAAK,EAIV,eAAe,EAKf,UAAU,EACX,MAAM,uBAAuB,CAAC;AAU/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAMpE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,wBAAwB,QAAkB,CAAC;AA+BxD,6DAA6D;AAC7D,MAAM,WAAW,qBAAqB;IACpC,wEAAwE;IACxE,YAAY,EAAE,MAAM,CAAC;IACrB,iGAAiG;IACjG,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,cAAc,CAAC,EAAE,CACxB,IAAI,EAAE,eAAe,EACrB,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,UAAU,KACb,eAAe,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,qBAAqB,EAC7B,KAAK,GAAE,mBAAwB,GAC9B,eAAe,CA4EjB"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { AdapterParseError } from "@untangle-code/domain";
|
|
2
|
+
import { buildByteOffsetTable } from "../../text/byte-offset-table.js";
|
|
3
|
+
import { buildFileRegion } from "../shared/chunks.js";
|
|
4
|
+
import { analyzeTree } from "../shared/engine.js";
|
|
5
|
+
import { extractedSymbolsOf } from "../shared/extract-symbols.js";
|
|
6
|
+
import { collectParseDiagnostics } from "../shared/parse-diagnostics.js";
|
|
7
|
+
import { createTableProfile, fieldNamesOf } from "../shared/table-profile.js";
|
|
8
|
+
import { astGrepParse, registerAstGrepLanguage } from "./napi.js";
|
|
9
|
+
import { AstGrepSyntaxNode } from "./syntax.js";
|
|
10
|
+
/**
|
|
11
|
+
* Obergrenze fuer eine einzelne Quelldatei, in Bytes — 5 MiB.
|
|
12
|
+
*
|
|
13
|
+
* WARUM NIEDRIGER ALS BEIM TREE-SITTER-WEG (8 MiB, `shared/parse-limits.ts`):
|
|
14
|
+
* der Walk kostet hier mehr Speicher, weil jeder Abstieg ueber `children()`
|
|
15
|
+
* geht und dabei je Knoten JS-Wrapper entstehen. SELBST GEMESSEN ueber diesen
|
|
16
|
+
* Adapter (`parse()` + `computeComplexity()`, generierter Go-Quelltext, je
|
|
17
|
+
* Groesse ein EIGENER Prozess, `maxRSS` aus `process.resourceUsage()`,
|
|
18
|
+
* darwin/arm64, Node 26.7.0):
|
|
19
|
+
*
|
|
20
|
+
* Bytes Knoten parse walk Spitzen-RSS
|
|
21
|
+
* 1 MiB 490.959 1.897 ms 12.289 ms 1.048 MiB
|
|
22
|
+
* 2 MiB 976.521 3.087 ms 11.699 ms 2.719 MiB
|
|
23
|
+
* 4 MiB 1.937.712 5.803 ms 45.863 ms 2.098 MiB
|
|
24
|
+
*
|
|
25
|
+
* Die RSS-Spalte ist ERKENNBAR VERRAUSCHT (4 MiB unter 2 MiB), weil die
|
|
26
|
+
* napi-Finalisierer auf der Ereignisschleife laufen und ein synchroner Lauf
|
|
27
|
+
* sie nicht drankommen laesst — dieselbe Beobachtung machte die Erkundung.
|
|
28
|
+
* Verlaesslich ist nur die Groessenordnung: rund ein Gigabyte je Megabyte
|
|
29
|
+
* Quelltext, und damit rund das Vierfache des tree-sitter-Weges.
|
|
30
|
+
*
|
|
31
|
+
* DIE GRENZE IST DESHALB DIE SCANNERGRENZE: 5 MiB, genau die Vorgabe aus
|
|
32
|
+
* `packages/scanner/src/discovery.ts`. Damit ist der Parser bei
|
|
33
|
+
* Standardkonfiguration NIE die engere, unausgesprochene Grenze — jede Datei,
|
|
34
|
+
* die der Scanner durchlaesst, nimmt er auch an —, und zugleich bleibt der
|
|
35
|
+
* Speicherbedarf im messbaren Bereich. Wer die Scannergrenze bewusst anhebt,
|
|
36
|
+
* bekommt hier einen benannten Grund (`file_too_large`) statt eines Absturzes.
|
|
37
|
+
*
|
|
38
|
+
* NICHT GELOEST, und hier ausdruecklich vermerkt: 12 bis 46 Sekunden Walk je
|
|
39
|
+
* Megabyte sind ein eigener Leistungsdefekt dieses Weges (der tree-sitter-Weg
|
|
40
|
+
* misst an vergleichbarer Stelle rund sechs Sekunden je Megabyte). Diese
|
|
41
|
+
* Grenze verhindert nur, dass er in einen Speicherabsturz umschlaegt.
|
|
42
|
+
*/
|
|
43
|
+
export const MAX_ASTGREP_SOURCE_BYTES = 5 * 1024 * 1024;
|
|
44
|
+
const analysisCache = new WeakMap();
|
|
45
|
+
/**
|
|
46
|
+
* Wie in `shared/create-adapter.ts`: `ComplexityFacts.parseDiagnostics` ist der
|
|
47
|
+
* EINZIGE Kanal, ueber den nachgelagerte Rechnungen von einem beschaedigten
|
|
48
|
+
* Baum erfahren. `analyzeTree` sieht die Diagnosen nicht — sie entstehen in
|
|
49
|
+
* `parse()` und haengen am `ParsedAst`.
|
|
50
|
+
*/
|
|
51
|
+
function getAnalysis(ast) {
|
|
52
|
+
const cached = analysisCache.get(ast);
|
|
53
|
+
if (cached !== undefined)
|
|
54
|
+
return cached;
|
|
55
|
+
const root = ast.root;
|
|
56
|
+
const analyzed = analyzeTree(root.root, root.ctx, root.fileId, root.profile);
|
|
57
|
+
const result = {
|
|
58
|
+
...analyzed,
|
|
59
|
+
facts: { ...analyzed.facts, parseDiagnostics: ast.diagnostics },
|
|
60
|
+
};
|
|
61
|
+
analysisCache.set(ast, result);
|
|
62
|
+
return result;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Baut einen `LanguageAdapter` ueber ast-grep. Die Anmeldung der Sprache
|
|
66
|
+
* kostet hier nichts: kein `require`, keine Grammatik, kein natives Modul —
|
|
67
|
+
* das passiert erst beim ersten `parse()` einer ast-grep-Sprache, und dann
|
|
68
|
+
* fuer alle angemeldeten auf einmal (`napi.ts`, Eigenheit 1).
|
|
69
|
+
*/
|
|
70
|
+
export function createAstGrepAdapter(table, source, hooks = {}) {
|
|
71
|
+
const profile = createTableProfile(table);
|
|
72
|
+
const fieldNames = fieldNamesOf(table);
|
|
73
|
+
registerAstGrepLanguage(source.languageName, source.moduleName);
|
|
74
|
+
return {
|
|
75
|
+
languageId: table.languageId,
|
|
76
|
+
extensions: [...table.extensions],
|
|
77
|
+
supportLevel: table.supportLevel,
|
|
78
|
+
parse(file) {
|
|
79
|
+
const byteLength = Buffer.byteLength(file.content, "utf8");
|
|
80
|
+
if (byteLength > MAX_ASTGREP_SOURCE_BYTES) {
|
|
81
|
+
throw new AdapterParseError("file_too_large", `Source text with ${String(byteLength)} bytes exceeds the ast-grep parser limit of ` +
|
|
82
|
+
`${String(MAX_ASTGREP_SOURCE_BYTES)} Bytes.`, {
|
|
83
|
+
measurements: { sizeBytes: byteLength, limitBytes: MAX_ASTGREP_SOURCE_BYTES },
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
// KEIN `bufferSize` und keine 32-KiB-Grenze: die gibt es nur in der
|
|
87
|
+
// nativen tree-sitter-Bindung (`shared/parse-limits.ts`). Nachgeprueft
|
|
88
|
+
// an 84 KB, 167 KB, 1 MB und 4 MB — ast-grep nimmt sie ohne Option an.
|
|
89
|
+
const rootNode = astGrepParse(source.languageName, file.content);
|
|
90
|
+
const root = new AstGrepSyntaxNode(rootNode, fieldNames);
|
|
91
|
+
const byteTable = buildByteOffsetTable(file.content);
|
|
92
|
+
const ctx = { sourceText: file.content, byteTable };
|
|
93
|
+
const { parseQuality, diagnostics, errorNodeCount, missingNodeCount } = collectParseDiagnostics(root, ctx, "heuristic");
|
|
94
|
+
if (parseQuality === "failed") {
|
|
95
|
+
return { parseQuality, ast: null, diagnostics, errorNodeCount, missingNodeCount };
|
|
96
|
+
}
|
|
97
|
+
const fileProfile = hooks.profileForFile?.(profile, root, file) ?? profile;
|
|
98
|
+
const astRoot = { root, ctx, fileId: file.fileId, profile: fileProfile };
|
|
99
|
+
return {
|
|
100
|
+
parseQuality,
|
|
101
|
+
ast: { languageId: table.languageId, parseQuality, root: astRoot, diagnostics },
|
|
102
|
+
diagnostics,
|
|
103
|
+
errorNodeCount,
|
|
104
|
+
missingNodeCount,
|
|
105
|
+
};
|
|
106
|
+
},
|
|
107
|
+
extractChunks(ast) {
|
|
108
|
+
const { scopeTree } = getAnalysis(ast);
|
|
109
|
+
const root = ast.root;
|
|
110
|
+
return [buildFileRegion(scopeTree, root.ctx, root.profile)];
|
|
111
|
+
},
|
|
112
|
+
extractSymbols(ast) {
|
|
113
|
+
return extractedSymbolsOf(getAnalysis(ast).scopeTree);
|
|
114
|
+
},
|
|
115
|
+
extractImports(ast) {
|
|
116
|
+
return getAnalysis(ast).imports;
|
|
117
|
+
},
|
|
118
|
+
extractCalls(ast) {
|
|
119
|
+
return getAnalysis(ast).calls;
|
|
120
|
+
},
|
|
121
|
+
computeComplexity(ast) {
|
|
122
|
+
return getAnalysis(ast).facts;
|
|
123
|
+
},
|
|
124
|
+
tokenizeForHalstead(ast) {
|
|
125
|
+
const { facts } = getAnalysis(ast);
|
|
126
|
+
return { operators: facts.operators, operands: facts.operands };
|
|
127
|
+
},
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/languages/astgrep-backend/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Oeffentliche Einstiegspunkte des ast-grep-Backends.
|
|
3
|
+
*
|
|
4
|
+
* WELCHE SPRACHE UEBER WELCHEN WEG LAEUFT, steht in `README.md` neben dieser
|
|
5
|
+
* Datei — mit der Messung, auf der die Aufteilung beruht.
|
|
6
|
+
*/
|
|
7
|
+
import type { LanguageAdapter } from "@untangle-code/domain";
|
|
8
|
+
export { createAstGrepAdapter, MAX_ASTGREP_SOURCE_BYTES } from "./adapter.js";
|
|
9
|
+
export type { AstGrepAdapterHooks, AstGrepLanguageSource } from "./adapter.js";
|
|
10
|
+
export { GO_SOURCE, GO_TABLE, RUST_SOURCE, RUST_TABLE } from "./languages.js";
|
|
11
|
+
export { AST_GREP_LANGUAGES } from "./lang/index.js";
|
|
12
|
+
export type { AstGrepLanguage } from "./lang/index.js";
|
|
13
|
+
export { astGrepLanguageStates, astGrepLanguageStatus } from "./napi.js";
|
|
14
|
+
export type { AstGrepLanguageStatus } from "./napi.js";
|
|
15
|
+
/** Go-Adapter ueber ast-grep (`@ast-grep/lang-go`). */
|
|
16
|
+
export declare function createGoAdapter(): LanguageAdapter;
|
|
17
|
+
/** Rust-Adapter ueber ast-grep (`@ast-grep/lang-rust`). */
|
|
18
|
+
export declare function createRustAdapter(): LanguageAdapter;
|
|
19
|
+
/**
|
|
20
|
+
* Die WEITEREN Sprachen aus WP-86 (Java, C#, Ruby, PHP, Kotlin, C, C++, Swift,
|
|
21
|
+
* Bash) — je eine Tabelle unter `lang/`, kein Motor.
|
|
22
|
+
*
|
|
23
|
+
* Sie kommen als LISTE und nicht als neun einzelne Fabriken, damit
|
|
24
|
+
* `languages/index.ts` mit EINER Schleife auskommt: wer die zehnte Sprache
|
|
25
|
+
* aufnimmt, schreibt eine Tabelle und eine Zeile in `lang/index.ts` — und
|
|
26
|
+
* faesst weder diese Datei noch die Registrierung an.
|
|
27
|
+
*/
|
|
28
|
+
export declare function createBreadthAdapters(): LanguageAdapter[];
|
|
29
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/languages/astgrep-backend/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAM7D,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAC9E,YAAY,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AACzE,YAAY,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAEvD,uDAAuD;AACvD,wBAAgB,eAAe,IAAI,eAAe,CAEjD;AAED,2DAA2D;AAC3D,wBAAgB,iBAAiB,IAAI,eAAe,CAEnD;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,EAAE,CAIzD"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { createAstGrepAdapter } from "./adapter.js";
|
|
2
|
+
import { AST_GREP_LANGUAGES } from "./lang/index.js";
|
|
3
|
+
import { GO_SOURCE, GO_TABLE, RUST_SOURCE, RUST_TABLE } from "./languages.js";
|
|
4
|
+
export { createAstGrepAdapter, MAX_ASTGREP_SOURCE_BYTES } from "./adapter.js";
|
|
5
|
+
export { GO_SOURCE, GO_TABLE, RUST_SOURCE, RUST_TABLE } from "./languages.js";
|
|
6
|
+
export { AST_GREP_LANGUAGES } from "./lang/index.js";
|
|
7
|
+
export { astGrepLanguageStates, astGrepLanguageStatus } from "./napi.js";
|
|
8
|
+
/** Go-Adapter ueber ast-grep (`@ast-grep/lang-go`). */
|
|
9
|
+
export function createGoAdapter() {
|
|
10
|
+
return createAstGrepAdapter(GO_TABLE, GO_SOURCE);
|
|
11
|
+
}
|
|
12
|
+
/** Rust-Adapter ueber ast-grep (`@ast-grep/lang-rust`). */
|
|
13
|
+
export function createRustAdapter() {
|
|
14
|
+
return createAstGrepAdapter(RUST_TABLE, RUST_SOURCE);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Die WEITEREN Sprachen aus WP-86 (Java, C#, Ruby, PHP, Kotlin, C, C++, Swift,
|
|
18
|
+
* Bash) — je eine Tabelle unter `lang/`, kein Motor.
|
|
19
|
+
*
|
|
20
|
+
* Sie kommen als LISTE und nicht als neun einzelne Fabriken, damit
|
|
21
|
+
* `languages/index.ts` mit EINER Schleife auskommt: wer die zehnte Sprache
|
|
22
|
+
* aufnimmt, schreibt eine Tabelle und eine Zeile in `lang/index.ts` — und
|
|
23
|
+
* faesst weder diese Datei noch die Registrierung an.
|
|
24
|
+
*/
|
|
25
|
+
export function createBreadthAdapters() {
|
|
26
|
+
return AST_GREP_LANGUAGES.map((language) => createAstGrepAdapter(language.table, language.source));
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/languages/astgrep-backend/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE9E,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAE9E,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAGzE,uDAAuD;AACvD,MAAM,UAAU,eAAe;IAC7B,OAAO,oBAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACnD,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,iBAAiB;IAC/B,OAAO,oBAAoB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AACvD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CACzC,oBAAoB,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CACtD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bash (WP-86).
|
|
3
|
+
*
|
|
4
|
+
* WAS EINE SHELL AN SYMBOLEN HAT: Funktionen. Mehr nicht — keine Klassen,
|
|
5
|
+
* keine Typen, keine Namensraeume. Das ist kein Mangel des Adapters, sondern
|
|
6
|
+
* der Sprache, und deshalb steht hier eine kurze Tabelle statt einer
|
|
7
|
+
* erfundenen Struktur.
|
|
8
|
+
*
|
|
9
|
+
* VARIABLENZUWEISUNGEN AUF OBERSTER EBENE SIND KEINE SYMBOLE. In einer Shell
|
|
10
|
+
* ist jede Zuweisung eine Anweisung; die Grenze zwischen "Konstante" und
|
|
11
|
+
* "Zwischenwert" steht nicht im Syntaxbaum. `MAX_RETRIES=3` und
|
|
12
|
+
* `attempt=$((attempt + 1))` als gleichrangige Symbole zu fuehren waere eine
|
|
13
|
+
* falsche Aussage ueber die Datei.
|
|
14
|
+
*
|
|
15
|
+
* ENTSCHEIDUNGSPUNKTE (spec.md §16.2/§16.3):
|
|
16
|
+
* - `while_statement` deckt AUCH `until` ab — dieselbe Knotenart mit anderem
|
|
17
|
+
* Schluesselwort.
|
|
18
|
+
* - `elif_clause` ist eine eigene Knotenart und damit direkt ein `else_if`.
|
|
19
|
+
* - `case_item` zaehlt als `case`. Der Auffangzweig `*)` zaehlt NICHT: sein
|
|
20
|
+
* Muster ist genau `*` (`caseExcludeFirstChildText`).
|
|
21
|
+
* - `&&`/`||` zwischen Kommandos stehen in einem `list`-Knoten und tragen
|
|
22
|
+
* den Operator als anonymes Kind (`anonymousOperatorKinds`). Sie zaehlen
|
|
23
|
+
* nur ERWEITERT. In der Shell ist `cmd || exit 1` idiomatisch ein
|
|
24
|
+
* Fehlerpfad und kein reiner Kurzschluss; die konservative Auslegung haelt
|
|
25
|
+
* die Zahl mit den anderen zehn Sprachen vergleichbar.
|
|
26
|
+
* - PIPES (`|`) zaehlen NICHT: sie verketten, sie verzweigen nicht.
|
|
27
|
+
*
|
|
28
|
+
* IMPORTE: `source datei` und `. datei` sind gewoehnliche Kommandos, keine
|
|
29
|
+
* eigene Knotenart. Die Tabelle koennte sie nicht von einer selbstgeschriebenen
|
|
30
|
+
* Funktion gleichen Namens unterscheiden — dieser Adapter meldet deshalb KEINE
|
|
31
|
+
* Importe. Wer sie braucht, sieht sie in `extractCalls` als Aufruf von
|
|
32
|
+
* `source`.
|
|
33
|
+
*/
|
|
34
|
+
import type { LanguageKindTable } from "../../shared/table-profile.js";
|
|
35
|
+
import type { AstGrepLanguageSource } from "../adapter.js";
|
|
36
|
+
export declare const BASH_SOURCE: AstGrepLanguageSource;
|
|
37
|
+
export declare const BASH_TABLE: LanguageKindTable;
|
|
38
|
+
//# sourceMappingURL=bash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../../../src/languages/astgrep-backend/lang/bash.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAE3D,eAAO,MAAM,WAAW,EAAE,qBAGzB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,iBAoCxB,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export const BASH_SOURCE = {
|
|
2
|
+
languageName: "bash",
|
|
3
|
+
moduleName: "@ast-grep/lang-bash",
|
|
4
|
+
};
|
|
5
|
+
export const BASH_TABLE = {
|
|
6
|
+
languageId: "shell",
|
|
7
|
+
extensions: [".sh", ".bash", ".zsh", ".ksh"],
|
|
8
|
+
supportLevel: "deep",
|
|
9
|
+
commentKinds: ["comment"],
|
|
10
|
+
stringContainerKinds: ["string", "raw_string", "ansi_c_string", "heredoc_body"],
|
|
11
|
+
identifierLeafKinds: [
|
|
12
|
+
"variable_name",
|
|
13
|
+
"special_variable_name",
|
|
14
|
+
"word",
|
|
15
|
+
"extglob_pattern",
|
|
16
|
+
"simple_expansion",
|
|
17
|
+
],
|
|
18
|
+
numberLeafKinds: ["number"],
|
|
19
|
+
scopes: [{ kinds: ["function_definition"], scopeKind: "function", nameKinds: ["word"] }],
|
|
20
|
+
decisions: {
|
|
21
|
+
ifKinds: ["if_statement"],
|
|
22
|
+
elseIfKinds: ["elif_clause"],
|
|
23
|
+
loopKinds: ["while_statement", "for_statement", "c_style_for_statement"],
|
|
24
|
+
switchKinds: ["case_statement"],
|
|
25
|
+
caseKinds: ["case_item"],
|
|
26
|
+
caseExcludeFirstChildText: "*",
|
|
27
|
+
anonymousOperatorKinds: ["list"],
|
|
28
|
+
logicalAndOperators: ["&&"],
|
|
29
|
+
logicalOrOperators: ["||"],
|
|
30
|
+
jumpKinds: [],
|
|
31
|
+
blockKinds: ["compound_statement", "do_group"],
|
|
32
|
+
},
|
|
33
|
+
// Siehe Modulkopf: die Shell hat keine Importanweisung.
|
|
34
|
+
imports: { kinds: [] },
|
|
35
|
+
calls: {
|
|
36
|
+
kinds: ["command"],
|
|
37
|
+
functionField: "name",
|
|
38
|
+
},
|
|
39
|
+
declarationParentKinds: [],
|
|
40
|
+
fieldNames: ["name"],
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=bash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bash.js","sourceRoot":"","sources":["../../../../src/languages/astgrep-backend/lang/bash.ts"],"names":[],"mappings":"AAoCA,MAAM,CAAC,MAAM,WAAW,GAA0B;IAChD,YAAY,EAAE,MAAM;IACpB,UAAU,EAAE,qBAAqB;CAClC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAsB;IAC3C,UAAU,EAAE,OAAO;IACnB,UAAU,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC;IAC5C,YAAY,EAAE,MAAM;IACpB,YAAY,EAAE,CAAC,SAAS,CAAC;IACzB,oBAAoB,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,CAAC;IAC/E,mBAAmB,EAAE;QACnB,eAAe;QACf,uBAAuB;QACvB,MAAM;QACN,iBAAiB;QACjB,kBAAkB;KACnB;IACD,eAAe,EAAE,CAAC,QAAQ,CAAC;IAC3B,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,qBAAqB,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;IACxF,SAAS,EAAE;QACT,OAAO,EAAE,CAAC,cAAc,CAAC;QACzB,WAAW,EAAE,CAAC,aAAa,CAAC;QAC5B,SAAS,EAAE,CAAC,iBAAiB,EAAE,eAAe,EAAE,uBAAuB,CAAC;QACxE,WAAW,EAAE,CAAC,gBAAgB,CAAC;QAC/B,SAAS,EAAE,CAAC,WAAW,CAAC;QACxB,yBAAyB,EAAE,GAAG;QAC9B,sBAAsB,EAAE,CAAC,MAAM,CAAC;QAChC,mBAAmB,EAAE,CAAC,IAAI,CAAC;QAC3B,kBAAkB,EAAE,CAAC,IAAI,CAAC;QAC1B,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,CAAC,oBAAoB,EAAE,UAAU,CAAC;KAC/C;IACD,wDAAwD;IACxD,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;IACtB,KAAK,EAAE;QACL,KAAK,EAAE,CAAC,SAAS,CAAC;QAClB,aAAa,EAAE,MAAM;KACtB;IACD,sBAAsB,EAAE,EAAE;IAC1B,UAAU,EAAE,CAAC,MAAM,CAAC;CACrB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* C (WP-86).
|
|
3
|
+
*
|
|
4
|
+
* DER EINE BESONDERE PUNKT: C schreibt den Namen einer Funktion nicht in ein
|
|
5
|
+
* `name`-Feld, sondern in eine Kette von Deklaratoren.
|
|
6
|
+
* `ring_t *ring_new(size_t cap)` ergibt
|
|
7
|
+
* `function_definition.declarator` -> `pointer_declarator.declarator`
|
|
8
|
+
* -> `function_declarator.declarator` -> `identifier`. Dafuer gibt es
|
|
9
|
+
* `nameDescend`: demselben Feld folgen, solange es weiterfuehrt. Ohne das
|
|
10
|
+
* hiesse jede zeigerwertige Funktion `*ring_new(size_t cap)`.
|
|
11
|
+
*
|
|
12
|
+
* ABBILDUNGEN: `struct`/`union` -> `class`, `typedef` -> `type`.
|
|
13
|
+
*
|
|
14
|
+
* ENTSCHEIDUNGSPUNKTE (spec.md §16.2/§16.3):
|
|
15
|
+
* - `case_statement` traegt `case X:` UND `default:` — nur die `case`-Form
|
|
16
|
+
* zaehlt (`caseExcludeChildKinds`).
|
|
17
|
+
* - C hat kein `try`/`catch`; die Art `catch` entsteht in C-Dateien nie.
|
|
18
|
+
* - PRAEPROZESSORZWEIGE (`#ifdef`, `#if`) zaehlen NICHT. Sie sind
|
|
19
|
+
* Uebersetzungs-, nicht Laufzeitverzweigungen: die uebersetzte Datei
|
|
20
|
+
* enthaelt genau EINEN der Zweige. Beide zu zaehlen ergaebe eine Zahl, die
|
|
21
|
+
* kein ausgefuehrter Pfad je erreicht. Das ist die konservative Auslegung;
|
|
22
|
+
* sie UNTERSCHAETZT Dateien, die schwer per `#ifdef` verzweigen, und das
|
|
23
|
+
* steht hier, damit niemand es aus der Zahl erraten muss.
|
|
24
|
+
* - Es gibt keine Sichtbarkeit im Baum: `static` ist eine Speicherklasse,
|
|
25
|
+
* kein Zugriffsmodifikator. `exportedNames` bleibt deshalb leer, ausser
|
|
26
|
+
* bei einer Funktion OHNE `static` — die ist aus der Uebersetzungseinheit
|
|
27
|
+
* heraus sichtbar, und das ist die einzige Aussage, die der Baum hergibt.
|
|
28
|
+
*/
|
|
29
|
+
import type { LanguageKindTable } from "../../shared/table-profile.js";
|
|
30
|
+
import type { AstGrepLanguageSource } from "../adapter.js";
|
|
31
|
+
export declare const C_SOURCE: AstGrepLanguageSource;
|
|
32
|
+
export declare const C_TABLE: LanguageKindTable;
|
|
33
|
+
//# sourceMappingURL=c.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"c.d.ts","sourceRoot":"","sources":["../../../../src/languages/astgrep-backend/lang/c.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAE3D,eAAO,MAAM,QAAQ,EAAE,qBAGtB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,iBAkFrB,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
export const C_SOURCE = {
|
|
2
|
+
languageName: "c",
|
|
3
|
+
moduleName: "@ast-grep/lang-c",
|
|
4
|
+
};
|
|
5
|
+
export const C_TABLE = {
|
|
6
|
+
languageId: "c",
|
|
7
|
+
extensions: [".c", ".h"],
|
|
8
|
+
supportLevel: "deep",
|
|
9
|
+
commentKinds: ["comment"],
|
|
10
|
+
stringContainerKinds: ["string_literal", "char_literal", "system_lib_string"],
|
|
11
|
+
identifierLeafKinds: [
|
|
12
|
+
"identifier",
|
|
13
|
+
"field_identifier",
|
|
14
|
+
"type_identifier",
|
|
15
|
+
"primitive_type",
|
|
16
|
+
"statement_identifier",
|
|
17
|
+
],
|
|
18
|
+
numberLeafKinds: ["number_literal"],
|
|
19
|
+
booleanLeafKinds: ["true", "false"],
|
|
20
|
+
nullLeafKinds: ["null"],
|
|
21
|
+
scopes: [
|
|
22
|
+
{
|
|
23
|
+
kinds: ["function_definition"],
|
|
24
|
+
scopeKind: "function",
|
|
25
|
+
nameField: "declarator",
|
|
26
|
+
nameDescend: true,
|
|
27
|
+
},
|
|
28
|
+
{ kinds: ["struct_specifier", "union_specifier"], scopeKind: "class" },
|
|
29
|
+
{ kinds: ["enum_specifier"], scopeKind: "enum" },
|
|
30
|
+
{
|
|
31
|
+
kinds: ["type_definition"],
|
|
32
|
+
scopeKind: "type",
|
|
33
|
+
nameField: "declarator",
|
|
34
|
+
nameDescend: true,
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
kinds: ["field_declaration"],
|
|
38
|
+
scopeKind: "property",
|
|
39
|
+
nameField: "declarator",
|
|
40
|
+
nameDescend: true,
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
decisions: {
|
|
44
|
+
ifKinds: ["if_statement"],
|
|
45
|
+
elseIfParentKinds: ["else_clause"],
|
|
46
|
+
loopKinds: ["for_statement", "while_statement", "do_statement"],
|
|
47
|
+
ternaryKinds: ["conditional_expression"],
|
|
48
|
+
switchKinds: ["switch_statement"],
|
|
49
|
+
caseKinds: ["case_statement"],
|
|
50
|
+
caseExcludeChildKinds: ["default"],
|
|
51
|
+
binaryKinds: ["binary_expression"],
|
|
52
|
+
operatorField: "operator",
|
|
53
|
+
logicalAndOperators: ["&&"],
|
|
54
|
+
logicalOrOperators: ["||"],
|
|
55
|
+
jumpKinds: ["return_statement", "break_statement", "continue_statement", "goto_statement"],
|
|
56
|
+
blockKinds: ["compound_statement"],
|
|
57
|
+
consequenceField: "consequence",
|
|
58
|
+
alternativeField: "alternative",
|
|
59
|
+
},
|
|
60
|
+
imports: {
|
|
61
|
+
kinds: ["preproc_include"],
|
|
62
|
+
// Der Spezifizierer behaelt seine SPITZEN KLAMMERN: `<stdlib.h>` ist eine
|
|
63
|
+
// Systemeinbindung, `"ring.h"` eine im Projekt. Die Klammern hier zu
|
|
64
|
+
// entfernen wuerde die beiden Faelle ununterscheidbar machen — und die
|
|
65
|
+
// Aufloesung im `file-graph` haengt genau daran.
|
|
66
|
+
pathField: "path",
|
|
67
|
+
},
|
|
68
|
+
calls: {
|
|
69
|
+
kinds: ["call_expression"],
|
|
70
|
+
functionField: "function",
|
|
71
|
+
argumentsField: "arguments",
|
|
72
|
+
memberKinds: ["field_expression"],
|
|
73
|
+
},
|
|
74
|
+
declarationParentKinds: [
|
|
75
|
+
"struct_specifier",
|
|
76
|
+
"union_specifier",
|
|
77
|
+
"enum_specifier",
|
|
78
|
+
"enumerator",
|
|
79
|
+
"function_declarator",
|
|
80
|
+
],
|
|
81
|
+
bodyField: "body",
|
|
82
|
+
isExported: (_name, node) => !node.children.some((child) => child.type === "storage_class_specifier" && child.text === "static"),
|
|
83
|
+
fieldNames: ["name", "declarator"],
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=c.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"c.js","sourceRoot":"","sources":["../../../../src/languages/astgrep-backend/lang/c.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* C++ (WP-86) — DER BELEG FUER DIE RATSCHE.
|
|
3
|
+
*
|
|
4
|
+
* Die C++-Grammatik ist eine ERWEITERUNG der C-Grammatik: jede Knotenart aus
|
|
5
|
+
* `c.ts` kommt in C++ genauso vor. Deshalb steht hier keine zweite Tabelle,
|
|
6
|
+
* sondern die DIFFERENZ — Klassen, Namensraeume, `try`/`catch`, Lambdas,
|
|
7
|
+
* bereichsbasierte `for`-Schleifen. Elf Sprachen ergaenzen heisst nicht elfmal
|
|
8
|
+
* dieselbe Arbeit; wo zwei Sprachen verwandt sind, muss die zweite billiger
|
|
9
|
+
* sein als die erste, sonst haben wir nichts gewonnen.
|
|
10
|
+
*
|
|
11
|
+
* ABBILDUNGEN ZUSAETZLICH ZU C: `class` -> `class`, `namespace` ->
|
|
12
|
+
* `namespace`. `template_declaration` ist KEIN eigenes Symbol: es umhuellt
|
|
13
|
+
* die Funktion oder Klasse, die es parametrisiert, und die ist der Scope.
|
|
14
|
+
*
|
|
15
|
+
* ENTSCHEIDUNGSPUNKTE ZUSAETZLICH ZU C: `catch_clause` zaehlt als `catch`,
|
|
16
|
+
* `for_range_loop` als Schleife. `co_await`/`co_yield` zaehlen NICHT — sie
|
|
17
|
+
* unterbrechen den Ablauf, verzweigen ihn aber nicht.
|
|
18
|
+
*
|
|
19
|
+
* SICHTBARKEIT: C++ fuehrt sie als ABSCHNITTSMARKE (`access_specifier`
|
|
20
|
+
* `public:`), nicht am Mitglied. Sie ist damit ohne Positionsvergleich nicht
|
|
21
|
+
* am Symbol ablesbar — der Adapter meldet deshalb keine, statt eine zu raten.
|
|
22
|
+
*/
|
|
23
|
+
import type { LanguageKindTable } from "../../shared/table-profile.js";
|
|
24
|
+
import type { AstGrepLanguageSource } from "../adapter.js";
|
|
25
|
+
export declare const CPP_SOURCE: AstGrepLanguageSource;
|
|
26
|
+
export declare const CPP_TABLE: LanguageKindTable;
|
|
27
|
+
//# sourceMappingURL=cpp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cpp.d.ts","sourceRoot":"","sources":["../../../../src/languages/astgrep-backend/lang/cpp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAI3D,eAAO,MAAM,UAAU,EAAE,qBAGxB,CAAC;AAIF,eAAO,MAAM,SAAS,EAAE,iBA8BvB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { C_TABLE } from "./c.js";
|
|
2
|
+
export const CPP_SOURCE = {
|
|
3
|
+
languageName: "cpp",
|
|
4
|
+
moduleName: "@ast-grep/lang-cpp",
|
|
5
|
+
};
|
|
6
|
+
const { isExported: _cIsExported, ...C_TABLE_WITHOUT_EXPORT } = C_TABLE;
|
|
7
|
+
export const CPP_TABLE = {
|
|
8
|
+
...C_TABLE_WITHOUT_EXPORT,
|
|
9
|
+
languageId: "cpp",
|
|
10
|
+
extensions: [".cpp", ".cc", ".cxx", ".hpp", ".hh", ".hxx"],
|
|
11
|
+
identifierLeafKinds: [
|
|
12
|
+
...C_TABLE.identifierLeafKinds,
|
|
13
|
+
"namespace_identifier",
|
|
14
|
+
"qualified_identifier",
|
|
15
|
+
"this",
|
|
16
|
+
"destructor_name",
|
|
17
|
+
"operator_name",
|
|
18
|
+
],
|
|
19
|
+
nullLeafKinds: [...(C_TABLE.nullLeafKinds ?? []), "nullptr"],
|
|
20
|
+
scopes: [
|
|
21
|
+
...C_TABLE.scopes,
|
|
22
|
+
{ kinds: ["class_specifier"], scopeKind: "class" },
|
|
23
|
+
{ kinds: ["namespace_definition"], scopeKind: "namespace" },
|
|
24
|
+
],
|
|
25
|
+
decisions: {
|
|
26
|
+
...C_TABLE.decisions,
|
|
27
|
+
catchKinds: ["catch_clause"],
|
|
28
|
+
loopKinds: [...C_TABLE.decisions.loopKinds, "for_range_loop"],
|
|
29
|
+
jumpKinds: [...(C_TABLE.decisions.jumpKinds ?? []), "throw_statement"],
|
|
30
|
+
},
|
|
31
|
+
declarationParentKinds: [
|
|
32
|
+
...C_TABLE.declarationParentKinds,
|
|
33
|
+
"class_specifier",
|
|
34
|
+
"namespace_definition",
|
|
35
|
+
"type_parameter_declaration",
|
|
36
|
+
],
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=cpp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cpp.js","sourceRoot":"","sources":["../../../../src/languages/astgrep-backend/lang/cpp.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEjC,MAAM,CAAC,MAAM,UAAU,GAA0B;IAC/C,YAAY,EAAE,KAAK;IACnB,UAAU,EAAE,oBAAoB;CACjC,CAAC;AAEF,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,sBAAsB,EAAE,GAAG,OAAO,CAAC;AAExE,MAAM,CAAC,MAAM,SAAS,GAAsB;IAC1C,GAAG,sBAAsB;IACzB,UAAU,EAAE,KAAK;IACjB,UAAU,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;IAC1D,mBAAmB,EAAE;QACnB,GAAG,OAAO,CAAC,mBAAmB;QAC9B,sBAAsB;QACtB,sBAAsB;QACtB,MAAM;QACN,iBAAiB;QACjB,eAAe;KAChB;IACD,aAAa,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC;IAC5D,MAAM,EAAE;QACN,GAAG,OAAO,CAAC,MAAM;QACjB,EAAE,KAAK,EAAE,CAAC,iBAAiB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE;QAClD,EAAE,KAAK,EAAE,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE;KAC5D;IACD,SAAS,EAAE;QACT,GAAG,OAAO,CAAC,SAAS;QACpB,UAAU,EAAE,CAAC,cAAc,CAAC;QAC5B,SAAS,EAAE,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,gBAAgB,CAAC;QAC7D,SAAS,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,iBAAiB,CAAC;KACvE;IACD,sBAAsB,EAAE;QACtB,GAAG,OAAO,CAAC,sBAAsB;QACjC,iBAAiB;QACjB,sBAAsB;QACtB,4BAA4B;KAC7B;CACF,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* C# (WP-86).
|
|
3
|
+
*
|
|
4
|
+
* ABBILDUNGEN: `struct` und `record` -> `class`, `namespace` -> `namespace`.
|
|
5
|
+
* Eine `property_declaration` (`public string Name { get; set; }`) ist eine
|
|
6
|
+
* `property`, keine Methode — die Zugriffsmethoden gehoeren zu ihr.
|
|
7
|
+
*
|
|
8
|
+
* ENTSCHEIDUNGSPUNKTE (spec.md §16.2/§16.3):
|
|
9
|
+
* - `case_switch_label` zaehlt; `default_switch_label` ist eine EIGENE
|
|
10
|
+
* Knotenart und steht deshalb gar nicht erst in `caseKinds`.
|
|
11
|
+
* - `switch_expression_arm` (C# 8, `x switch { ... }`) zaehlt ebenfalls als
|
|
12
|
+
* `case`.
|
|
13
|
+
* - `catch_clause` zaehlt, `finally_clause` nicht.
|
|
14
|
+
* - `??` zaehlt als `short_circuit`, also NUR erweitert.
|
|
15
|
+
* - `?.` (`conditional_access_expression`) zaehlt NICHT. Es verzweigt zwar,
|
|
16
|
+
* ist aber in idiomatischem C# die normale Null-Absicherung; klassisch
|
|
17
|
+
* mitgezaehlt bekaeme jede defensive Kette dieselbe Zahl wie eine echte
|
|
18
|
+
* Fallunterscheidung. Konservative Auslegung, hier benannt.
|
|
19
|
+
*/
|
|
20
|
+
import type { LanguageKindTable } from "../../shared/table-profile.js";
|
|
21
|
+
import type { AstGrepLanguageSource } from "../adapter.js";
|
|
22
|
+
export declare const CSHARP_SOURCE: AstGrepLanguageSource;
|
|
23
|
+
export declare const CSHARP_TABLE: LanguageKindTable;
|
|
24
|
+
//# sourceMappingURL=csharp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csharp.d.ts","sourceRoot":"","sources":["../../../../src/languages/astgrep-backend/lang/csharp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAE3D,eAAO,MAAM,aAAa,EAAE,qBAG3B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,iBAiG1B,CAAC"}
|