@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,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Signature text normalization for the JS/TS grammar family.
|
|
3
|
+
*
|
|
4
|
+
* Normative requirement (WP-06 task, spec.md §5.5): `normalizedSignature`
|
|
5
|
+
* feeds `buildSymbolId`, so it MUST be stable across:
|
|
6
|
+
*
|
|
7
|
+
* 1. Whitespace — any run of spaces/tabs/newlines collapses to a single
|
|
8
|
+
* space; spacing around `,`, `:`, `(`, `)`, `<`, `>`, `?:` is
|
|
9
|
+
* canonicalized rather than preserved verbatim.
|
|
10
|
+
* 2. Default values — `= <expr>` parameter/type-parameter initializers are
|
|
11
|
+
* STRIPPED. Rationale: giving a parameter a default value is (mostly) a
|
|
12
|
+
* call-site convenience, not a new overload; keeping it in the identity
|
|
13
|
+
* signature would needlessly change a symbol's id on a body-only-feeling
|
|
14
|
+
* edit. The optional marker (see next point) already captures "callers
|
|
15
|
+
* may omit this argument".
|
|
16
|
+
* 3. Optional markers — TypeScript's trailing `?` on a parameter name is
|
|
17
|
+
* KEPT and canonicalized to sit directly against the following `:`
|
|
18
|
+
* (`a ?:string` and `a?: string` both become `a?: string`) because it
|
|
19
|
+
* changes the call contract independent of any default value.
|
|
20
|
+
* 4. Type annotations — kept verbatim (modulo the same whitespace rules)
|
|
21
|
+
* because they are part of the observable contract.
|
|
22
|
+
*
|
|
23
|
+
* Known limitation (documented, not a defect): default-value stripping and
|
|
24
|
+
* top-level-comma splitting use a bracket-DEPTH scanner, not a full
|
|
25
|
+
* expression parser. A `<` used as a less-than operator inside a default
|
|
26
|
+
* expression (e.g. `(a = b < c ? 1 : 2)`) is misread as a generic open
|
|
27
|
+
* bracket and can throw off depth tracking for the rest of that one
|
|
28
|
+
* parameter. This is vanishingly rare in default-value position and is
|
|
29
|
+
* accepted as a WP-06 scoping decision (see README "Entscheidungen").
|
|
30
|
+
*/
|
|
31
|
+
const OPEN_BRACKETS = new Set(["(", "[", "{", "<"]);
|
|
32
|
+
const CLOSE_BRACKETS = new Set([")", "]", "}", ">"]);
|
|
33
|
+
/** Collapses whitespace and canonicalizes spacing around common punctuation. */
|
|
34
|
+
export function normalizeSpacing(text) {
|
|
35
|
+
return text
|
|
36
|
+
.replace(/\s+/g, " ")
|
|
37
|
+
.replace(/\s*\?\s*:/g, "?:")
|
|
38
|
+
.replace(/\s*:\s*/g, ": ")
|
|
39
|
+
.replace(/\s*,\s*/g, ", ")
|
|
40
|
+
.replace(/\(\s+/g, "(")
|
|
41
|
+
.replace(/\s+\)/g, ")")
|
|
42
|
+
.replace(/<\s+/g, "<")
|
|
43
|
+
.replace(/\s+>/g, ">")
|
|
44
|
+
.replace(/\.\.\.\s+/g, "...")
|
|
45
|
+
.replace(/\s{2,}/g, " ")
|
|
46
|
+
.trim();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Splits `content` on top-level occurrences of `separator` (depth 0 with
|
|
50
|
+
* respect to `(`, `[`, `{`, `<`/`>`). Used to split parameter lists and
|
|
51
|
+
* type-parameter lists without being confused by nested generics/objects.
|
|
52
|
+
*/
|
|
53
|
+
export function splitTopLevel(content, separator) {
|
|
54
|
+
const parts = [];
|
|
55
|
+
let depth = 0;
|
|
56
|
+
let current = "";
|
|
57
|
+
for (const ch of content) {
|
|
58
|
+
if (OPEN_BRACKETS.has(ch))
|
|
59
|
+
depth += 1;
|
|
60
|
+
else if (CLOSE_BRACKETS.has(ch))
|
|
61
|
+
depth = Math.max(0, depth - 1);
|
|
62
|
+
if (ch === separator && depth === 0) {
|
|
63
|
+
parts.push(current);
|
|
64
|
+
current = "";
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
current += ch;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
parts.push(current);
|
|
71
|
+
return parts;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Index of the top-level `=` that introduces a default value, or -1.
|
|
75
|
+
* Excludes `=>`, `==`, `===`, `!=`, `!==`, `<=`, `>=`.
|
|
76
|
+
*/
|
|
77
|
+
function findTopLevelDefaultEquals(text) {
|
|
78
|
+
let depth = 0;
|
|
79
|
+
for (let i = 0; i < text.length; i += 1) {
|
|
80
|
+
const ch = text[i];
|
|
81
|
+
if (OPEN_BRACKETS.has(ch)) {
|
|
82
|
+
depth += 1;
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
if (CLOSE_BRACKETS.has(ch)) {
|
|
86
|
+
depth = Math.max(0, depth - 1);
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
if (ch === "=" && depth === 0) {
|
|
90
|
+
const prev = i > 0 ? text[i - 1] : "";
|
|
91
|
+
const next = i + 1 < text.length ? text[i + 1] : "";
|
|
92
|
+
const isCompoundOperator = next === "=" || next === ">" || prev === "!" || prev === "<" || prev === ">";
|
|
93
|
+
if (!isCompoundOperator)
|
|
94
|
+
return i;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return -1;
|
|
98
|
+
}
|
|
99
|
+
/** Strips a single parameter's/type-parameter's default value (`= <expr>`), keeping any `?`/type annotation before it. */
|
|
100
|
+
export function stripDefaultValue(entry) {
|
|
101
|
+
const eqIndex = findTopLevelDefaultEquals(entry);
|
|
102
|
+
return eqIndex === -1 ? entry : entry.slice(0, eqIndex).trimEnd();
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Normalizes a formal-parameter-list text (including its outer parens),
|
|
106
|
+
* e.g. `(a: number = 1, b ?: string)` -> `(a: number, b?: string)`.
|
|
107
|
+
*/
|
|
108
|
+
export function normalizeParameterList(paramsText) {
|
|
109
|
+
const trimmed = paramsText.trim();
|
|
110
|
+
const hasParens = trimmed.startsWith("(") && trimmed.endsWith(")");
|
|
111
|
+
const inner = hasParens ? trimmed.slice(1, -1) : trimmed;
|
|
112
|
+
const entries = splitTopLevel(inner, ",")
|
|
113
|
+
.map((entry) => entry.trim())
|
|
114
|
+
.filter((entry) => entry.length > 0);
|
|
115
|
+
const normalizedEntries = entries.map((entry) => normalizeSpacing(stripDefaultValue(entry)));
|
|
116
|
+
return `(${normalizedEntries.join(", ")})`;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Normalizes a type-parameter list text (including its outer `<>`), e.g.
|
|
120
|
+
* `<T extends object = {}, U>` -> `<T extends object, U>`.
|
|
121
|
+
*/
|
|
122
|
+
export function normalizeTypeParameterList(typeParamsText) {
|
|
123
|
+
if (typeParamsText === undefined || typeParamsText.trim().length === 0)
|
|
124
|
+
return "";
|
|
125
|
+
const trimmed = typeParamsText.trim();
|
|
126
|
+
const hasBrackets = trimmed.startsWith("<") && trimmed.endsWith(">");
|
|
127
|
+
const inner = hasBrackets ? trimmed.slice(1, -1) : trimmed;
|
|
128
|
+
const entries = splitTopLevel(inner, ",")
|
|
129
|
+
.map((entry) => entry.trim())
|
|
130
|
+
.filter((entry) => entry.length > 0);
|
|
131
|
+
if (entries.length === 0)
|
|
132
|
+
return "";
|
|
133
|
+
const normalizedEntries = entries.map((entry) => normalizeSpacing(stripDefaultValue(entry)));
|
|
134
|
+
return `<${normalizedEntries.join(", ")}>`;
|
|
135
|
+
}
|
|
136
|
+
/** Normalizes a return-type annotation text (e.g. ` : Promise<void> ` -> `: Promise<void>`). */
|
|
137
|
+
export function normalizeReturnType(returnTypeText) {
|
|
138
|
+
if (returnTypeText === undefined || returnTypeText.trim().length === 0)
|
|
139
|
+
return "";
|
|
140
|
+
const normalized = normalizeSpacing(returnTypeText);
|
|
141
|
+
return normalized.startsWith(":") ? normalized : `: ${normalized}`;
|
|
142
|
+
}
|
|
143
|
+
/** Normalizes an arbitrary header text (class/interface/type/enum declarations). */
|
|
144
|
+
export function normalizeHeaderText(headerText) {
|
|
145
|
+
return normalizeSpacing(headerText.replace(/;\s*$/, ""));
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=signature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signature.js","sourceRoot":"","sources":["../../../src/languages/shared/signature.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Der backend-neutrale Baumvertrag dieses Pakets.
|
|
3
|
+
*
|
|
4
|
+
* WARUM ES IHN GIBT: seit WP-220 laufen ZWEI Parser-Backends unter demselben
|
|
5
|
+
* `LanguageAdapter` (domain `analysis.ts`) — `tree-sitter` fuer die
|
|
6
|
+
* JS/TS-Familie und `@ast-grep/napi` fuer die Sprachen, fuer die wir keine
|
|
7
|
+
* eigene Grammatik pflegen wollen. Der vereinheitlichte Walk (`engine.ts`),
|
|
8
|
+
* die Parse-Diagnosen (`parse-diagnostics.ts`), die Fingerabdruecke
|
|
9
|
+
* (`fingerprint.ts`) und der Regionenbaum (`chunks.ts`) sind fuer BEIDE
|
|
10
|
+
* dieselben Zeilen. Sie sprechen deshalb nicht mehr ueber
|
|
11
|
+
* `Parser.SyntaxNode`/`Parser.TreeCursor`, sondern ueber die zwei Formen hier.
|
|
12
|
+
*
|
|
13
|
+
* DIE FORMEN SIND ABSICHTLICH DIE VON TREE-SITTER. `Parser.SyntaxNode` und
|
|
14
|
+
* `Parser.TreeCursor` erfuellen sie STRUKTURELL, ohne einen einzigen Wrapper:
|
|
15
|
+
* der tree-sitter-Weg zahlt fuer diese Abstraktion nichts, kein Objekt, kein
|
|
16
|
+
* Aufruf mehr als vorher (`languages/shared/tree-sitter-types.ts` haelt die
|
|
17
|
+
* Zusage mit einer Zuweisungspruefung fest). Die Kosten traegt der neue Weg:
|
|
18
|
+
* `languages/astgrep-backend/syntax.ts` baut die Form ueber `SgNode` nach, weil
|
|
19
|
+
* ast-grep KEINE Cursor-API hat (gemessen: Faktor 3,74 auf dem Walk). Diese
|
|
20
|
+
* Richtung ist gewollt — der gemessen schnellere Weg bleibt der billige.
|
|
21
|
+
*
|
|
22
|
+
* ZWEI EIGENSCHAFTEN, DIE JEDES BACKEND EINHALTEN MUSS:
|
|
23
|
+
*
|
|
24
|
+
* 1. `startIndex`/`endIndex` und `startPosition.column` sind UTF-16-Offsets,
|
|
25
|
+
* NICHT Bytes — bei tree-sitter ebenso wie bei ast-grep, dessen
|
|
26
|
+
* Typdefinition `Pos.index` faelschlich als "byte offset" beschreibt
|
|
27
|
+
* (nachgemessen an Umlauten und Emoji). Bytes entstehen ausschliesslich
|
|
28
|
+
* in `node-utils.ts#rangeOf`/`rangeOfCursor` ueber die `ByteOffsetTable`.
|
|
29
|
+
*
|
|
30
|
+
* 2. Ein Cursor wird IMMER an der Ausgangsposition zurueckgegeben. Jede
|
|
31
|
+
* Hilfsfunktion, die ihn bewegt, bewegt ihn zurueck.
|
|
32
|
+
*/
|
|
33
|
+
/** Zeile/Spalte eines Knotens; `row` und `column` sind 0-basiert. */
|
|
34
|
+
export interface SyntaxPoint {
|
|
35
|
+
readonly row: number;
|
|
36
|
+
readonly column: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Ein Knoten des Syntaxbaums — die Teilmenge der tree-sitter-Knotenform, die
|
|
40
|
+
* dieses Paket wirklich benutzt. Wer hier etwas hinzufuegt, verpflichtet
|
|
41
|
+
* BEIDE Backends dazu; `languages/astgrep-backend/syntax.ts` muss es dann nachbauen.
|
|
42
|
+
*/
|
|
43
|
+
export interface SyntaxNode {
|
|
44
|
+
readonly type: string;
|
|
45
|
+
readonly text: string;
|
|
46
|
+
/**
|
|
47
|
+
* Benannter Knoten der Grammatik (kein reines Satzzeichen-/Schluesselwort-
|
|
48
|
+
* Token). Beide Backends liefern das ohne Umweg (tree-sitter `isNamed`,
|
|
49
|
+
* ast-grep `isNamed()`); gebraucht wird es dort, wo ein Operator KEIN
|
|
50
|
+
* eigenes Feld hat und nur ueber "das anonyme Kind" zu finden ist.
|
|
51
|
+
*/
|
|
52
|
+
readonly isNamed: boolean;
|
|
53
|
+
/** UTF-16-Offset des ersten Zeichens (siehe Modulkopf, Punkt 1). */
|
|
54
|
+
readonly startIndex: number;
|
|
55
|
+
/** UTF-16-Offset hinter dem letzten Zeichen. */
|
|
56
|
+
readonly endIndex: number;
|
|
57
|
+
readonly startPosition: SyntaxPoint;
|
|
58
|
+
readonly endPosition: SyntaxPoint;
|
|
59
|
+
readonly parent: SyntaxNode | null;
|
|
60
|
+
/**
|
|
61
|
+
* Vorheriges Geschwister — auch ein anonymes. `doc-binding.ts` laeuft
|
|
62
|
+
* darueber rueckwaerts zu Dekoratoren und Doc-Kommentaren; wuerde ein
|
|
63
|
+
* Backend hier nur BENANNTE Geschwister liefern, veraenderte das die
|
|
64
|
+
* Doc-Bindung stillschweigend (ast-grep `prev()` ist deshalb geprueft).
|
|
65
|
+
*/
|
|
66
|
+
readonly previousSibling: SyntaxNode | null;
|
|
67
|
+
readonly children: readonly SyntaxNode[];
|
|
68
|
+
readonly namedChildCount: number;
|
|
69
|
+
namedChild(index: number): SyntaxNode | null;
|
|
70
|
+
childForFieldName(fieldName: string): SyntaxNode | null;
|
|
71
|
+
/** Ein Cursor, der auf DIESEM Knoten steht. */
|
|
72
|
+
walk(): SyntaxCursor;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Der Traversierungszeiger. Bei tree-sitter haelt er die Position nativ und
|
|
76
|
+
* baut je Knoten KEINEN Wrapper (WP-95); bei ast-grep bildet ihn ein
|
|
77
|
+
* expliziter Stapel nach. Der Vertrag ist in beiden Faellen derselbe, und die
|
|
78
|
+
* Besuchsreihenfolge ebenfalls: Vorordnung ueber `gotoFirstChild` /
|
|
79
|
+
* `gotoNextSibling` / `gotoParent`, Rueckordnung ueber `gotoLastChild` /
|
|
80
|
+
* `gotoPreviousSibling` (die Parse-Diagnosen laufen rueckwaerts, siehe
|
|
81
|
+
* `parse-diagnostics.ts`).
|
|
82
|
+
*/
|
|
83
|
+
export interface SyntaxCursor {
|
|
84
|
+
readonly nodeType: string;
|
|
85
|
+
readonly nodeText: string;
|
|
86
|
+
/**
|
|
87
|
+
* Fehlender Knoten der Fehlerkorrektur (tree-sitter `ts_node_is_missing`).
|
|
88
|
+
*
|
|
89
|
+
* ast-grep hat dazu KEIN Gegenstueck. Sein Cursor liefert an dieser Stelle
|
|
90
|
+
* eine HEURISTIK (Knoten der Breite null), und der Adapter sagt das in der
|
|
91
|
+
* Diagnose auch — `languages/astgrep-backend/syntax.ts` und
|
|
92
|
+
* `languages/astgrep-backend/create-adapter.ts`. Wer den Wert liest, muss wissen,
|
|
93
|
+
* dass er je nach Backend gemessen oder geschaetzt ist.
|
|
94
|
+
*/
|
|
95
|
+
readonly nodeIsMissing: boolean;
|
|
96
|
+
/**
|
|
97
|
+
* Feldname, unter dem der aktuelle Knoten in seinem Elternknoten steht,
|
|
98
|
+
* oder `undefined`. tree-sitter liefert ihn ohne Zusatzkosten; der
|
|
99
|
+
* ast-grep-Cursor muss ihn ueber die Felder des Elternknotens suchen und
|
|
100
|
+
* kennt deshalb nur die Feldnamen, die das Sprachprofil nennt
|
|
101
|
+
* (`profile.ts#LanguageProfile.fieldNames`).
|
|
102
|
+
*/
|
|
103
|
+
readonly currentFieldName: string | undefined;
|
|
104
|
+
readonly currentNode: SyntaxNode;
|
|
105
|
+
readonly startPosition: SyntaxPoint;
|
|
106
|
+
readonly endPosition: SyntaxPoint;
|
|
107
|
+
readonly startIndex: number;
|
|
108
|
+
readonly endIndex: number;
|
|
109
|
+
gotoParent(): boolean;
|
|
110
|
+
gotoFirstChild(): boolean;
|
|
111
|
+
gotoLastChild(): boolean;
|
|
112
|
+
gotoNextSibling(): boolean;
|
|
113
|
+
gotoPreviousSibling(): boolean;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=syntax.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syntax.d.ts","sourceRoot":"","sources":["../../../src/languages/shared/syntax.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,qEAAqE;AACrE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,oEAAoE;IACpE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,gDAAgD;IAChD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IACnC;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,EAAE,UAAU,GAAG,IAAI,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,SAAS,UAAU,EAAE,CAAC;IACzC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;IAC7C,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;IACxD,+CAA+C;IAC/C,IAAI,IAAI,YAAY,CAAC;CACtB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B;;;;;;;;OAQG;IACH,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC;;;;;;OAMG;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,UAAU,IAAI,OAAO,CAAC;IACtB,cAAc,IAAI,OAAO,CAAC;IAC1B,aAAa,IAAI,OAAO,CAAC;IACzB,eAAe,IAAI,OAAO,CAAC;IAC3B,mBAAmB,IAAI,OAAO,CAAC;CAChC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syntax.js","sourceRoot":"","sources":["../../../src/languages/shared/syntax.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { DecisionDetectionResult } from "./decisions.js";
|
|
2
|
+
import type { SyntaxNode } from "./syntax.js";
|
|
3
|
+
import type { DecisionRules } from "./table-profile.js";
|
|
4
|
+
/** Kompiliert ausschliesslich Kontrollflussregeln einer Sprachtabelle. */
|
|
5
|
+
export declare class TableDecisionDetector {
|
|
6
|
+
private readonly rules;
|
|
7
|
+
private readonly triviaKinds;
|
|
8
|
+
readonly nodeKinds: ReadonlySet<string>;
|
|
9
|
+
private readonly ifKinds;
|
|
10
|
+
private readonly elseIfParentKinds;
|
|
11
|
+
private readonly elseIfWrapperKinds;
|
|
12
|
+
private readonly elseIfKinds;
|
|
13
|
+
private readonly loopKinds;
|
|
14
|
+
private readonly catchKinds;
|
|
15
|
+
private readonly ternaryKinds;
|
|
16
|
+
private readonly switchKinds;
|
|
17
|
+
private readonly caseKinds;
|
|
18
|
+
private readonly caseExcludeChildKinds;
|
|
19
|
+
private readonly guardKinds;
|
|
20
|
+
private readonly patternAlternativeKinds;
|
|
21
|
+
private readonly shortCircuitKinds;
|
|
22
|
+
private readonly anonymousOperatorKinds;
|
|
23
|
+
private readonly binaryKinds;
|
|
24
|
+
private readonly jumpKinds;
|
|
25
|
+
private readonly blockKinds;
|
|
26
|
+
private readonly logicalKinds;
|
|
27
|
+
private readonly operatorField;
|
|
28
|
+
constructor(rules: DecisionRules, triviaKinds: ReadonlySet<string>);
|
|
29
|
+
private registerLogicalKinds;
|
|
30
|
+
detect(node: SyntaxNode): DecisionDetectionResult;
|
|
31
|
+
private detectIf;
|
|
32
|
+
private isElseIf;
|
|
33
|
+
/**
|
|
34
|
+
* Kotlin 0.0.7 verliert in `else /* ... *\/ if` das `else` als Baumknoten
|
|
35
|
+
* und beendet das erste `if_expression` vor dem Blockkommentar. Die
|
|
36
|
+
* Korrektur bleibt an AST-Grenzen gebunden: links muss ein mit `if` endender
|
|
37
|
+
* Geschwisterteilbaum stehen, dazwischen mindestens ein echter
|
|
38
|
+
* Kommentarknoten, und nur der exakte Keyword-Spalt `else` darf fehlen.
|
|
39
|
+
*/
|
|
40
|
+
private isDetachedElseIfAfterComments;
|
|
41
|
+
private isWhitespaceGap;
|
|
42
|
+
private textBetween;
|
|
43
|
+
/** Ob `node` an seiner rechten AST-Grenze in einem `if` endet. */
|
|
44
|
+
private endsWithIf;
|
|
45
|
+
private isGuardClause;
|
|
46
|
+
private soleStatementOf;
|
|
47
|
+
private detectCase;
|
|
48
|
+
private detectLogical;
|
|
49
|
+
private operatorOf;
|
|
50
|
+
/** Stabile, positionsbasierte Kennung einer maximalen Operatorkette. */
|
|
51
|
+
private logicalGroupIdFor;
|
|
52
|
+
private isLogicalExpression;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=table-profile-decisions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-profile-decisions.d.ts","sourceRoot":"","sources":["../../../src/languages/shared/table-profile-decisions.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,uBAAuB,EAAoB,MAAM,gBAAgB,CAAC;AAChF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAuBxD,0EAA0E;AAC1E,qBAAa,qBAAqB;IAwB9B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAxB9B,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAExC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAsB;IACxD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAsB;IACzD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsB;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsB;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAsB;IAC5D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAsB;IAC9D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAsB;IACxD,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAsB;IAC7D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsB;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmC;IAChE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;gBAGpB,KAAK,EAAE,aAAa,EACpB,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC;IAuCnD,OAAO,CAAC,oBAAoB;IAI5B,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,uBAAuB;IAqBjD,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,QAAQ;IAchB;;;;;;OAMG;IACH,OAAO,CAAC,6BAA6B;IAkBrC,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,WAAW;IAOnB,kEAAkE;IAClE,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,UAAU;IAWlB,wEAAwE;IACxE,OAAO,CAAC,iBAAiB;IAUzB,OAAO,CAAC,mBAAmB;CAG5B"}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import { firstChildOfKinds, setOf } from "./table-profile-queries.js";
|
|
2
|
+
function branching(kind, construct, continuation) {
|
|
3
|
+
return {
|
|
4
|
+
decision: { kind, countsForClassic: true, countsForExtended: true },
|
|
5
|
+
nesting: { construct, continuation },
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
function extendedOnly(kind, logicalGroupId) {
|
|
9
|
+
const decision = {
|
|
10
|
+
kind,
|
|
11
|
+
countsForClassic: false,
|
|
12
|
+
countsForExtended: true,
|
|
13
|
+
...(logicalGroupId === undefined ? {} : { logicalGroupId }),
|
|
14
|
+
};
|
|
15
|
+
return { decision };
|
|
16
|
+
}
|
|
17
|
+
/** Kompiliert ausschliesslich Kontrollflussregeln einer Sprachtabelle. */
|
|
18
|
+
export class TableDecisionDetector {
|
|
19
|
+
rules;
|
|
20
|
+
triviaKinds;
|
|
21
|
+
nodeKinds;
|
|
22
|
+
ifKinds;
|
|
23
|
+
elseIfParentKinds;
|
|
24
|
+
elseIfWrapperKinds;
|
|
25
|
+
elseIfKinds;
|
|
26
|
+
loopKinds;
|
|
27
|
+
catchKinds;
|
|
28
|
+
ternaryKinds;
|
|
29
|
+
switchKinds;
|
|
30
|
+
caseKinds;
|
|
31
|
+
caseExcludeChildKinds;
|
|
32
|
+
guardKinds;
|
|
33
|
+
patternAlternativeKinds;
|
|
34
|
+
shortCircuitKinds;
|
|
35
|
+
anonymousOperatorKinds;
|
|
36
|
+
binaryKinds;
|
|
37
|
+
jumpKinds;
|
|
38
|
+
blockKinds;
|
|
39
|
+
logicalKinds = new Map();
|
|
40
|
+
operatorField;
|
|
41
|
+
constructor(rules, triviaKinds) {
|
|
42
|
+
this.rules = rules;
|
|
43
|
+
this.triviaKinds = triviaKinds;
|
|
44
|
+
this.ifKinds = setOf(rules.ifKinds);
|
|
45
|
+
this.elseIfParentKinds = setOf(rules.elseIfParentKinds);
|
|
46
|
+
this.elseIfWrapperKinds = setOf(rules.elseIfWrapperKinds);
|
|
47
|
+
this.elseIfKinds = setOf(rules.elseIfKinds);
|
|
48
|
+
this.loopKinds = setOf(rules.loopKinds);
|
|
49
|
+
this.catchKinds = setOf(rules.catchKinds);
|
|
50
|
+
this.ternaryKinds = setOf(rules.ternaryKinds);
|
|
51
|
+
this.switchKinds = setOf(rules.switchKinds);
|
|
52
|
+
this.caseKinds = setOf(rules.caseKinds);
|
|
53
|
+
this.caseExcludeChildKinds = setOf(rules.caseExcludeChildKinds);
|
|
54
|
+
this.guardKinds = setOf(rules.guardKinds);
|
|
55
|
+
this.patternAlternativeKinds = setOf(rules.patternAlternativeKinds);
|
|
56
|
+
this.shortCircuitKinds = setOf(rules.shortCircuitKinds);
|
|
57
|
+
this.anonymousOperatorKinds = setOf(rules.anonymousOperatorKinds);
|
|
58
|
+
this.binaryKinds = setOf(rules.binaryKinds);
|
|
59
|
+
this.jumpKinds = setOf(rules.jumpKinds);
|
|
60
|
+
this.blockKinds = setOf(rules.blockKinds);
|
|
61
|
+
this.operatorField = rules.operatorField ?? "operator";
|
|
62
|
+
this.registerLogicalKinds(rules.logicalAndOperators, "logical_and");
|
|
63
|
+
this.registerLogicalKinds(rules.logicalOrOperators, "logical_or");
|
|
64
|
+
this.registerLogicalKinds(rules.shortCircuitOperators, "short_circuit");
|
|
65
|
+
this.nodeKinds = new Set([
|
|
66
|
+
...this.ifKinds,
|
|
67
|
+
...this.loopKinds,
|
|
68
|
+
...this.catchKinds,
|
|
69
|
+
...this.ternaryKinds,
|
|
70
|
+
...this.switchKinds,
|
|
71
|
+
...this.caseKinds,
|
|
72
|
+
...this.elseIfKinds,
|
|
73
|
+
...this.guardKinds,
|
|
74
|
+
...this.patternAlternativeKinds,
|
|
75
|
+
...this.shortCircuitKinds,
|
|
76
|
+
...this.anonymousOperatorKinds,
|
|
77
|
+
...this.binaryKinds,
|
|
78
|
+
]);
|
|
79
|
+
}
|
|
80
|
+
registerLogicalKinds(operators, kind) {
|
|
81
|
+
for (const operator of operators ?? [])
|
|
82
|
+
this.logicalKinds.set(operator, kind);
|
|
83
|
+
}
|
|
84
|
+
detect(node) {
|
|
85
|
+
const kind = node.type;
|
|
86
|
+
if (this.elseIfKinds.has(kind))
|
|
87
|
+
return branching("else_if", "if", true);
|
|
88
|
+
if (this.guardKinds.has(kind))
|
|
89
|
+
return branching("guard", "if", false);
|
|
90
|
+
if (this.patternAlternativeKinds.has(kind))
|
|
91
|
+
return extendedOnly("pattern_alternative");
|
|
92
|
+
if (this.shortCircuitKinds.has(kind)) {
|
|
93
|
+
return extendedOnly("short_circuit", `short-circuit-${String(node.startIndex)}`);
|
|
94
|
+
}
|
|
95
|
+
if (this.ifKinds.has(kind))
|
|
96
|
+
return this.detectIf(node);
|
|
97
|
+
if (this.loopKinds.has(kind))
|
|
98
|
+
return branching("loop", "loop", false);
|
|
99
|
+
if (this.catchKinds.has(kind))
|
|
100
|
+
return branching("catch", "catch", false);
|
|
101
|
+
if (this.ternaryKinds.has(kind))
|
|
102
|
+
return branching("ternary", "ternary", false);
|
|
103
|
+
if (this.switchKinds.has(kind))
|
|
104
|
+
return { nesting: { construct: "switch", continuation: false } };
|
|
105
|
+
if (this.caseKinds.has(kind))
|
|
106
|
+
return this.detectCase(node);
|
|
107
|
+
if (this.binaryKinds.has(kind) || this.anonymousOperatorKinds.has(kind)) {
|
|
108
|
+
return this.detectLogical(node);
|
|
109
|
+
}
|
|
110
|
+
return {};
|
|
111
|
+
}
|
|
112
|
+
detectIf(node) {
|
|
113
|
+
if (this.isElseIf(node))
|
|
114
|
+
return branching("else_if", "if", true);
|
|
115
|
+
return branching(this.isGuardClause(node) ? "guard" : "if", "if", false);
|
|
116
|
+
}
|
|
117
|
+
isElseIf(node) {
|
|
118
|
+
const parent = node.parent;
|
|
119
|
+
if (parent === null)
|
|
120
|
+
return false;
|
|
121
|
+
if (this.elseIfParentKinds.has(parent.type))
|
|
122
|
+
return true;
|
|
123
|
+
if (this.elseIfWrapperKinds.has(parent.type)) {
|
|
124
|
+
let previous = parent.previousSibling;
|
|
125
|
+
while (previous !== null && this.triviaKinds.has(previous.type)) {
|
|
126
|
+
previous = previous.previousSibling;
|
|
127
|
+
}
|
|
128
|
+
if (previous?.type === "else")
|
|
129
|
+
return true;
|
|
130
|
+
}
|
|
131
|
+
return this.isDetachedElseIfAfterComments(node, parent);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Kotlin 0.0.7 verliert in `else /* ... *\/ if` das `else` als Baumknoten
|
|
135
|
+
* und beendet das erste `if_expression` vor dem Blockkommentar. Die
|
|
136
|
+
* Korrektur bleibt an AST-Grenzen gebunden: links muss ein mit `if` endender
|
|
137
|
+
* Geschwisterteilbaum stehen, dazwischen mindestens ein echter
|
|
138
|
+
* Kommentarknoten, und nur der exakte Keyword-Spalt `else` darf fehlen.
|
|
139
|
+
*/
|
|
140
|
+
isDetachedElseIfAfterComments(node, parent) {
|
|
141
|
+
if (this.rules.recoverDetachedElseIfAfterComments !== true)
|
|
142
|
+
return false;
|
|
143
|
+
let right = node;
|
|
144
|
+
let left = node.previousSibling;
|
|
145
|
+
let sawComment = false;
|
|
146
|
+
while (left !== null && this.triviaKinds.has(left.type)) {
|
|
147
|
+
if (!this.isWhitespaceGap(parent, left.endIndex, right.startIndex))
|
|
148
|
+
return false;
|
|
149
|
+
sawComment = true;
|
|
150
|
+
right = left;
|
|
151
|
+
left = left.previousSibling;
|
|
152
|
+
}
|
|
153
|
+
if (!sawComment || left === null || !this.endsWithIf(left))
|
|
154
|
+
return false;
|
|
155
|
+
const keywordGap = this.textBetween(parent, left.endIndex, right.startIndex);
|
|
156
|
+
return keywordGap !== null && keywordGap.trim() === "else";
|
|
157
|
+
}
|
|
158
|
+
isWhitespaceGap(parent, startIndex, endIndex) {
|
|
159
|
+
const gap = this.textBetween(parent, startIndex, endIndex);
|
|
160
|
+
return gap !== null && gap.trim().length === 0;
|
|
161
|
+
}
|
|
162
|
+
textBetween(parent, startIndex, endIndex) {
|
|
163
|
+
const start = startIndex - parent.startIndex;
|
|
164
|
+
const end = endIndex - parent.startIndex;
|
|
165
|
+
if (start < 0 || end < start || end > parent.text.length)
|
|
166
|
+
return null;
|
|
167
|
+
return parent.text.slice(start, end);
|
|
168
|
+
}
|
|
169
|
+
/** Ob `node` an seiner rechten AST-Grenze in einem `if` endet. */
|
|
170
|
+
endsWithIf(node) {
|
|
171
|
+
const endIndex = node.endIndex;
|
|
172
|
+
const stack = [node];
|
|
173
|
+
while (stack.length > 0) {
|
|
174
|
+
const current = stack.pop();
|
|
175
|
+
if (current.endIndex !== endIndex)
|
|
176
|
+
continue;
|
|
177
|
+
if (this.ifKinds.has(current.type))
|
|
178
|
+
return true;
|
|
179
|
+
for (const child of current.children) {
|
|
180
|
+
if (child.endIndex === endIndex)
|
|
181
|
+
stack.push(child);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
isGuardClause(node) {
|
|
187
|
+
if (this.rules.consequenceField === undefined || this.jumpKinds.size === 0)
|
|
188
|
+
return false;
|
|
189
|
+
if (this.rules.alternativeField !== undefined &&
|
|
190
|
+
node.childForFieldName(this.rules.alternativeField) !== null) {
|
|
191
|
+
return false;
|
|
192
|
+
}
|
|
193
|
+
const consequence = node.childForFieldName(this.rules.consequenceField);
|
|
194
|
+
const sole = consequence === null ? null : this.soleStatementOf(consequence);
|
|
195
|
+
return sole !== null && this.jumpKinds.has(sole.type);
|
|
196
|
+
}
|
|
197
|
+
soleStatementOf(node) {
|
|
198
|
+
let current = node;
|
|
199
|
+
while (current !== null && this.blockKinds.has(current.type)) {
|
|
200
|
+
current = current.namedChildCount === 1 ? current.namedChild(0) : null;
|
|
201
|
+
}
|
|
202
|
+
return current;
|
|
203
|
+
}
|
|
204
|
+
detectCase(node) {
|
|
205
|
+
if (firstChildOfKinds(node, this.caseExcludeChildKinds) !== null)
|
|
206
|
+
return {};
|
|
207
|
+
const firstText = node.children[0]?.text.trim();
|
|
208
|
+
if (firstText !== undefined && firstText === this.rules.caseExcludeFirstChildText)
|
|
209
|
+
return {};
|
|
210
|
+
return { decision: { kind: "case", countsForClassic: true, countsForExtended: true } };
|
|
211
|
+
}
|
|
212
|
+
detectLogical(node) {
|
|
213
|
+
const operator = this.operatorOf(node);
|
|
214
|
+
if (operator === undefined)
|
|
215
|
+
return {};
|
|
216
|
+
const kind = this.logicalKinds.get(operator);
|
|
217
|
+
return kind === undefined ? {} : extendedOnly(kind, this.logicalGroupIdFor(node, operator));
|
|
218
|
+
}
|
|
219
|
+
operatorOf(node) {
|
|
220
|
+
if (!this.anonymousOperatorKinds.has(node.type)) {
|
|
221
|
+
return node.childForFieldName(this.operatorField)?.text;
|
|
222
|
+
}
|
|
223
|
+
for (const child of node.children) {
|
|
224
|
+
const text = child.text.trim();
|
|
225
|
+
if (this.logicalKinds.has(text))
|
|
226
|
+
return text;
|
|
227
|
+
}
|
|
228
|
+
return undefined;
|
|
229
|
+
}
|
|
230
|
+
/** Stabile, positionsbasierte Kennung einer maximalen Operatorkette. */
|
|
231
|
+
logicalGroupIdFor(node, operator) {
|
|
232
|
+
let top = node;
|
|
233
|
+
while (top.parent !== null && this.isLogicalExpression(top.parent)) {
|
|
234
|
+
const parent = top.parent;
|
|
235
|
+
if (this.operatorOf(parent) !== operator)
|
|
236
|
+
break;
|
|
237
|
+
top = parent;
|
|
238
|
+
}
|
|
239
|
+
return `logical-${String(top.startIndex)}`;
|
|
240
|
+
}
|
|
241
|
+
isLogicalExpression(node) {
|
|
242
|
+
return this.binaryKinds.has(node.type) || this.anonymousOperatorKinds.has(node.type);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=table-profile-decisions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-profile-decisions.js","sourceRoot":"","sources":["../../../src/languages/shared/table-profile-decisions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { FileTextContext } from "./node-utils.js";
|
|
2
|
+
import type { ModuleFactSink } from "./profile.js";
|
|
3
|
+
import type { SyntaxNode } from "./syntax.js";
|
|
4
|
+
import type { CallRules, ImportRules } from "./table-profile.js";
|
|
5
|
+
/** Kompiliert ausschliesslich Import- und Aufrufregeln einer Sprachtabelle. */
|
|
6
|
+
export declare class TableModuleFactCollector {
|
|
7
|
+
private readonly imports;
|
|
8
|
+
private readonly calls;
|
|
9
|
+
readonly nodeKinds: ReadonlySet<string>;
|
|
10
|
+
private readonly importKinds;
|
|
11
|
+
private readonly importSpecKinds;
|
|
12
|
+
private readonly callKinds;
|
|
13
|
+
private readonly constructionKinds;
|
|
14
|
+
private readonly memberKinds;
|
|
15
|
+
private readonly functionField;
|
|
16
|
+
private readonly argumentsField;
|
|
17
|
+
constructor(imports: ImportRules, calls: CallRules);
|
|
18
|
+
collect(node: SyntaxNode, kind: string, callerScopeId: string, ctx: FileTextContext, sink: ModuleFactSink): void;
|
|
19
|
+
private collectImports;
|
|
20
|
+
private collectImportSpec;
|
|
21
|
+
private importPartsOf;
|
|
22
|
+
private initialImportPathOf;
|
|
23
|
+
private namedChildTexts;
|
|
24
|
+
private collectCall;
|
|
25
|
+
private calleeOf;
|
|
26
|
+
private callTargetOf;
|
|
27
|
+
private memberCalleeOf;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=table-profile-module-facts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-profile-module-facts.d.ts","sourceRoot":"","sources":["../../../src/languages/shared/table-profile-module-facts.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAO9C,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAYjE,+EAA+E;AAC/E,qBAAa,wBAAwB;IAYjC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAZxB,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAExC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsB;IAClD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsB;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAsB;IACxD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsB;IAClD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;gBAGrB,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,SAAS;IAYnC,OAAO,CACL,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,cAAc,GACnB,IAAI;IAQP,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,QAAQ;IAehB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,cAAc;CAQvB"}
|