@untangle-code/parser-registry 0.0.0-stage → 0.1.0
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,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Das SPRACHPROFIL: alles, was der vereinheitlichte Walk (`engine.ts`) ueber
|
|
3
|
+
* eine konkrete Sprache wissen muss — als Tabelle plus eine Handvoll Haken,
|
|
4
|
+
* nicht als verdrahtete Zeichenketten im Motor.
|
|
5
|
+
*
|
|
6
|
+
* WARUM (WP-220): bis Welle 6 stand die JS/TS-Familie fest im Motor. `engine.ts`
|
|
7
|
+
* nannte 48 verschiedene Knotenarten woertlich, `fingerprint.ts` kannte
|
|
8
|
+
* `"comment"` als Konstante, `chunks.ts` kannte `export_statement`. Solange es
|
|
9
|
+
* genau ein Backend und genau eine Sprachfamilie gab, war das billig und
|
|
10
|
+
* ehrlich. Mit dem zweiten Backend (`languages/astgrep-backend/`) waere daraus ein
|
|
11
|
+
* ZWEITER Motor neben dem ersten geworden — und damit das Gegenteil der These
|
|
12
|
+
* aus vision.md §1b, die wir belegen wollen: gleiche Leistung mit WENIGER
|
|
13
|
+
* Komplexitaet. Deshalb erst die Verallgemeinerung, dann das Backend.
|
|
14
|
+
*
|
|
15
|
+
* ZWEI ARTEN, EIN PROFIL ZU BAUEN:
|
|
16
|
+
*
|
|
17
|
+
* 1. `js-family-profile.ts` — die handgeschriebene Fassung fuer
|
|
18
|
+
* TypeScript/JavaScript/TSX/JSX. Sie reicht die vorhandenen Detektoren
|
|
19
|
+
* (`decisions.ts`, `import-detection.ts`, `call-detection.ts`,
|
|
20
|
+
* `scope-naming.ts`, `scope-signature.ts`, `doc-binding.ts`) unveraendert
|
|
21
|
+
* durch. Ihr Verhalten ist Zeile fuer Zeile das von vorher; die
|
|
22
|
+
* Golden-Tests dieses Pakets sind der Beleg.
|
|
23
|
+
*
|
|
24
|
+
* 2. `table-profile.ts` — die tabellengetriebene Fassung fuer jede weitere
|
|
25
|
+
* Sprache. Sie kennt keine Sprache, nur Rollen: welche Knotenart ist ein
|
|
26
|
+
* Kommentar, welche oeffnet einen Scope, welche traegt eine Entscheidung.
|
|
27
|
+
* Eine neue Sprache kostet damit eine Tabelle, keinen Motor.
|
|
28
|
+
*
|
|
29
|
+
* WAS HIER NICHT HINEINGEHOERT: alles Backendspezifische. Ein Profil sagt,
|
|
30
|
+
* WAS eine Knotenart bedeutet, nie, WIE der Baum entsteht. Das Backend steht
|
|
31
|
+
* in `create-adapter.ts` (tree-sitter) bzw. `languages/astgrep-backend/create-adapter.ts`.
|
|
32
|
+
*/
|
|
33
|
+
import type { LiteralFact, RawCall, RawImport, SourceRange, SupportLevel } from "@untangle-code/domain";
|
|
34
|
+
import type { DecisionDetectionResult } from "./decisions.js";
|
|
35
|
+
import type { FileTextContext } from "./node-utils.js";
|
|
36
|
+
import type { ScopeNode } from "./scope-model.js";
|
|
37
|
+
import type { SyntaxNode } from "./syntax.js";
|
|
38
|
+
/** Die Fakten, die ein Knoten ausserhalb von Entscheidungen beitragen kann. */
|
|
39
|
+
export interface ModuleFactSink {
|
|
40
|
+
imports: RawImport[];
|
|
41
|
+
calls: RawCall[];
|
|
42
|
+
}
|
|
43
|
+
/** Roh- und Normalform der Kopfzeile eines Symbols (siehe `signature.ts`). */
|
|
44
|
+
export interface ScopeSignature {
|
|
45
|
+
raw?: string;
|
|
46
|
+
normalized: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Ein Sprachprofil. Jede Eigenschaft wird vom Walk GENAU EINMAL je Knoten
|
|
50
|
+
* gelesen; die Mengen sind deshalb `Set`s und keine Arrays.
|
|
51
|
+
*/
|
|
52
|
+
export interface LanguageProfile {
|
|
53
|
+
readonly languageId: string;
|
|
54
|
+
readonly extensions: readonly string[];
|
|
55
|
+
readonly supportLevel: SupportLevel;
|
|
56
|
+
/** Kommentarknoten: nie Operator, nie Operand, nie Teil eines Fingerabdrucks. */
|
|
57
|
+
readonly commentKinds: ReadonlySet<string>;
|
|
58
|
+
/**
|
|
59
|
+
* Knoten, deren ganzer Teilbaum als EIN Operand/Literal zaehlt (der Walk
|
|
60
|
+
* steigt nicht hinein). In der JS/TS-Familie `string` und `regex`.
|
|
61
|
+
*/
|
|
62
|
+
readonly literalContainerKinds: ReadonlySet<string>;
|
|
63
|
+
/** Blattknoten, die ein Bezeichnervorkommen sind. */
|
|
64
|
+
readonly identifierLeafKinds: ReadonlySet<string>;
|
|
65
|
+
/** Blattknoten, die ein einfaches Literal sind. */
|
|
66
|
+
readonly simpleLiteralLeafKinds: ReadonlySet<string>;
|
|
67
|
+
/** Statische Textteile in einer Zeichenkettenschablone. */
|
|
68
|
+
readonly templateTextLeafKinds: ReadonlySet<string>;
|
|
69
|
+
/** Satzzeichenblaetter, die weder Operator noch Operand sind. */
|
|
70
|
+
readonly ignoredPunctuationKinds: ReadonlySet<string>;
|
|
71
|
+
/**
|
|
72
|
+
* Elternknotenarten, deren Blaetter reine Typsyntax sind (TS
|
|
73
|
+
* `predefined_type`): gezaehlt in `nodeKinds`, aber nie als Token.
|
|
74
|
+
*/
|
|
75
|
+
readonly typeKeywordParentKinds: ReadonlySet<string>;
|
|
76
|
+
/** Funktionsartige Knoten — sie erzeugen zusaetzlich ein Lambda-Nesting. */
|
|
77
|
+
readonly functionLikeKinds: ReadonlySet<string>;
|
|
78
|
+
/** Literalart eines Container-Literals (`literalContainerKinds`). */
|
|
79
|
+
containerLiteralKind(kind: string): LiteralFact["literalKind"];
|
|
80
|
+
/** Literalart eines einfachen Literalblatts (`simpleLiteralLeafKinds`). */
|
|
81
|
+
simpleLiteralKind(kind: string): LiteralFact["literalKind"];
|
|
82
|
+
/** Deklaration oder Verweis? `fieldName` ist der Feldname im Elternknoten. */
|
|
83
|
+
identifierRole(fieldName: string | undefined, parentKind: string): "declaration" | "reference";
|
|
84
|
+
/**
|
|
85
|
+
* Braucht ein innerer Knoten dieser Art ueberhaupt einen Knotenwrapper?
|
|
86
|
+
*
|
|
87
|
+
* Das ist das Vorsieb aus WP-95: fuer die grosse Mehrheit der inneren Knoten
|
|
88
|
+
* (Ausdruecke, Bloecke, Anweisungslisten) faellt die Grenzueberquerung
|
|
89
|
+
* vollstaendig weg. Wer hier `true` zurueckgibt, bezahlt je Knoten — beim
|
|
90
|
+
* ast-grep-Backend deutlich mehr als bei tree-sitter.
|
|
91
|
+
*/
|
|
92
|
+
needsNode(kind: string): boolean;
|
|
93
|
+
/** Welche Art von Scope oeffnet dieser Knoten — oder keinen (`null`)? */
|
|
94
|
+
scopeKindOf(node: SyntaxNode): ScopeNode["kind"] | null;
|
|
95
|
+
/**
|
|
96
|
+
* Unterdrueckt einen sonst geoeffneten Scope (JS: ein Feld, dessen Wert
|
|
97
|
+
* selbst eine Funktion ist — die Funktion bekommt den Scope, nicht das Feld).
|
|
98
|
+
*/
|
|
99
|
+
suppressesScope(node: SyntaxNode): boolean;
|
|
100
|
+
scopeName(node: SyntaxNode): string;
|
|
101
|
+
/**
|
|
102
|
+
* Ein Namensteil, der VOR den Scope-Namen gehoert, aber nicht aus einem
|
|
103
|
+
* Elternscope stammt (WP-237).
|
|
104
|
+
*
|
|
105
|
+
* Gos Methoden haengen nicht in ihrem Typ, sondern tragen ihn als Feld:
|
|
106
|
+
* `func (a *A) Run()` ist ein Geschwister von `type A struct{}`, kein Kind.
|
|
107
|
+
* Ohne diesen Zusatz heissen `(*A).Run` und `(*B).Run` beide `Run`, und der
|
|
108
|
+
* Symbolgraph haelt zwei verschiedene Methoden fuer dieselbe — eine
|
|
109
|
+
* Impact-Analyse auf einer Go-Codebasis waere damit schlicht falsch.
|
|
110
|
+
*
|
|
111
|
+
* Rueckgabe `undefined` heisst: dieser Knoten braucht keinen Zusatz.
|
|
112
|
+
*/
|
|
113
|
+
scopeQualifier?(node: SyntaxNode): string | undefined;
|
|
114
|
+
scopeSignature(node: SyntaxNode, kind: ScopeNode["kind"], name: string): ScopeSignature;
|
|
115
|
+
docRange(node: SyntaxNode, ctx: FileTextContext): SourceRange | undefined;
|
|
116
|
+
visibility(node: SyntaxNode, name: string): string | undefined;
|
|
117
|
+
exportedNames(node: SyntaxNode, name: string): string[];
|
|
118
|
+
detectDecisionAndNesting(node: SyntaxNode): DecisionDetectionResult;
|
|
119
|
+
/**
|
|
120
|
+
* Importe und Aufrufe dieses Knotens. Schreibt DIREKT in `sink`, statt ein
|
|
121
|
+
* Ergebnisobjekt zu bauen: der Haken laeuft im Walk, und ein Objekt je
|
|
122
|
+
* Aufrufknoten waere reiner Muell fuer den Sammler.
|
|
123
|
+
*/
|
|
124
|
+
collectModuleFacts(node: SyntaxNode, kind: string, callerScopeId: string, ctx: FileTextContext, sink: ModuleFactSink): void;
|
|
125
|
+
/**
|
|
126
|
+
* Huellknoten, deren Bytes zum Symbol gehoeren (JS/TS: `export_statement`).
|
|
127
|
+
* Leer, wenn die Sprache keine solche Huelle kennt.
|
|
128
|
+
*/
|
|
129
|
+
readonly exportWrapperKinds: ReadonlySet<string>;
|
|
130
|
+
/**
|
|
131
|
+
* Zusaetzliche Kindregionen eines Klassen-artigen Scopes, die selbst keinen
|
|
132
|
+
* Scope oeffnen, aber Inhalt tragen (JS/TS: `static { ... }`). Ohne sie
|
|
133
|
+
* fielen ihre Bytes durch den Mitgliederlauf — spec.md §8.4 verbietet das.
|
|
134
|
+
*/
|
|
135
|
+
memberRegions(node: SyntaxNode, parentScopeId: string, ctx: FileTextContext): MemberRegion[];
|
|
136
|
+
}
|
|
137
|
+
/** Eine Region ohne Symbol, wie sie `memberRegions` liefert. */
|
|
138
|
+
export interface MemberRegion {
|
|
139
|
+
range: SourceRange;
|
|
140
|
+
scopeId: string;
|
|
141
|
+
headerText: string;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Ausfuehrungseinheiten (spec.md §16.1) — bei jeder Sprache dieselben drei
|
|
145
|
+
* Arten. Der Dateirahmen ist gesondert ausfuehrbar (`engine.ts`); er kommt hier
|
|
146
|
+
* nie an, weil `scopeKindOf` niemals `"file"` liefert.
|
|
147
|
+
*/
|
|
148
|
+
export declare function isExecutableScopeKind(kind: ScopeNode["kind"]): boolean;
|
|
149
|
+
//# sourceMappingURL=profile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../../src/languages/shared/profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ausfuehrungseinheiten (spec.md §16.1) — bei jeder Sprache dieselben drei
|
|
3
|
+
* Arten. Der Dateirahmen ist gesondert ausfuehrbar (`engine.ts`); er kommt hier
|
|
4
|
+
* nie an, weil `scopeKindOf` niemals `"file"` liefert.
|
|
5
|
+
*/
|
|
6
|
+
export function isExecutableScopeKind(kind) {
|
|
7
|
+
return kind === "function" || kind === "method" || kind === "constructor";
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../src/languages/shared/profile.ts"],"names":[],"mappings":"AAgLA;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAuB;IAC3D,OAAO,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,aAAa,CAAC;AAC5E,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { SourceRange } from "@untangle-code/domain";
|
|
2
|
+
import type { SyntaxNode } from "./syntax.js";
|
|
3
|
+
/**
|
|
4
|
+
* Internal (package-private) representation of one symbol scope, built once
|
|
5
|
+
* per parse by `engine.ts#analyze` and then projected into the public
|
|
6
|
+
* `ExtractedSymbol[]` / `SymbolScopeFact[]` / `AstRegion[]` shapes by
|
|
7
|
+
* `extractSymbols.ts`, `complexity.ts` and `chunks.ts` respectively. Keeping
|
|
8
|
+
* ONE tree as the single source of truth guarantees `scopeId`s line up
|
|
9
|
+
* exactly across `extractSymbols`, `computeComplexity` and `extractCalls`,
|
|
10
|
+
* since all three are projections of the same walk.
|
|
11
|
+
*/
|
|
12
|
+
export interface ScopeNode {
|
|
13
|
+
scopeId: string;
|
|
14
|
+
/** Adapter-internal kind: superset of ExtractedSymbol.kind plus "file". */
|
|
15
|
+
kind: "file" | "function" | "method" | "constructor" | "class" | "interface" | "type" | "enum" | "namespace" | "property";
|
|
16
|
+
name: string;
|
|
17
|
+
qualifiedName: string;
|
|
18
|
+
parentQualifiedName?: string;
|
|
19
|
+
range: SourceRange;
|
|
20
|
+
docRange?: SourceRange;
|
|
21
|
+
signature?: string;
|
|
22
|
+
normalizedSignature: string;
|
|
23
|
+
exportedNames: string[];
|
|
24
|
+
visibility?: string;
|
|
25
|
+
executable: boolean;
|
|
26
|
+
astHash: string;
|
|
27
|
+
tokenFingerprint: string;
|
|
28
|
+
/** The tree-sitter node whose range/body IS this scope (used only within this package). */
|
|
29
|
+
node: SyntaxNode;
|
|
30
|
+
children: ScopeNode[];
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=scope-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-model.d.ts","sourceRoot":"","sources":["../../../src/languages/shared/scope-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;;;;GAQG;AACH,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,IAAI,EACA,MAAM,GACN,UAAU,GACV,QAAQ,GACR,aAAa,GACb,OAAO,GACP,WAAW,GACX,MAAM,GACN,MAAM,GACN,WAAW,GACX,UAAU,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,2FAA2F;IAC3F,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,SAAS,EAAE,CAAC;CACvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-model.js","sourceRoot":"","sources":["../../../src/languages/shared/scope-model.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { SyntaxNode } from "./syntax.js";
|
|
2
|
+
/** Derives the declared or contextually-borrowed name of a scope-opening node. */
|
|
3
|
+
export declare function resolveScopeName(node: SyntaxNode): string;
|
|
4
|
+
/**
|
|
5
|
+
* True when a field's initializer is itself a function-like node: in that
|
|
6
|
+
* case the FIELD does not get its own scope — the function value does,
|
|
7
|
+
* borrowing the field's property name (avoids a redundant doubled
|
|
8
|
+
* `Class.field.field` qualified name for `class C { handler = () => {} }`).
|
|
9
|
+
*/
|
|
10
|
+
export declare function fieldDelegatesToFunctionValue(node: SyntaxNode): boolean;
|
|
11
|
+
/** `public`/`private`/`protected` if explicit, `"private"` for a `#name`, else `undefined` (implicit public). */
|
|
12
|
+
export declare function resolveVisibility(node: SyntaxNode, name: string): string | undefined;
|
|
13
|
+
/**
|
|
14
|
+
* Names this declaration exports, per spec.md §8.3 step 2/§14 (best-effort:
|
|
15
|
+
* only direct `export` / `export default` wrapping the declaration itself is
|
|
16
|
+
* recognized — a later `export { name }` clause elsewhere in the file is a
|
|
17
|
+
* documented simplification, see README "Entscheidungen").
|
|
18
|
+
*/
|
|
19
|
+
export declare function resolveExportedNames(node: SyntaxNode, name: string): string[];
|
|
20
|
+
//# sourceMappingURL=scope-naming.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-naming.d.ts","sourceRoot":"","sources":["../../../src/languages/shared/scope-naming.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAsDzD;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAIvE;AAID,iHAAiH;AACjH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKpF;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAqB7E"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Name/signature/visibility derivation for one scope-opening node.
|
|
3
|
+
*
|
|
4
|
+
* A scope-opening node (function/method/class/interface/type/enum/property,
|
|
5
|
+
* see `node-kinds.ts#SCOPE_OPENING_TYPES`) is either self-naming (its own
|
|
6
|
+
* `name` field) or anonymous, in which case the name is borrowed from the
|
|
7
|
+
* enclosing syntactic context — `const x = () => {}`, `{ key: () => {} }`,
|
|
8
|
+
* `x.y = function () {}`, `export default function () {}`, or a class field
|
|
9
|
+
* initialized with an arrow function (spec.md §8.3 step 3: "Top-Level-Symbole
|
|
10
|
+
* bestimmen").
|
|
11
|
+
*/
|
|
12
|
+
import { CLASS_TYPES, FIELD_TYPES, FUNCTION_LIKE_TYPES, METHOD_TYPE } from "./node-kinds.js";
|
|
13
|
+
import { unquote } from "./node-utils.js";
|
|
14
|
+
const ANONYMOUS_NAME = "<anonymous>";
|
|
15
|
+
/** Derives the declared or contextually-borrowed name of a scope-opening node. */
|
|
16
|
+
export function resolveScopeName(node) {
|
|
17
|
+
const ownName = node.childForFieldName("name");
|
|
18
|
+
if (ownName !== null) {
|
|
19
|
+
return ownName.type === "computed_property_name" ? ownName.text : unquote(ownName.text);
|
|
20
|
+
}
|
|
21
|
+
if (FIELD_TYPES.has(node.type)) {
|
|
22
|
+
const property = node.childForFieldName("property");
|
|
23
|
+
if (property !== null)
|
|
24
|
+
return unquote(property.text);
|
|
25
|
+
}
|
|
26
|
+
if (FUNCTION_LIKE_TYPES.has(node.type) ||
|
|
27
|
+
node.type === METHOD_TYPE ||
|
|
28
|
+
CLASS_TYPES.has(node.type)) {
|
|
29
|
+
const parent = node.parent;
|
|
30
|
+
if (parent === null)
|
|
31
|
+
return ANONYMOUS_NAME;
|
|
32
|
+
switch (parent.type) {
|
|
33
|
+
case "variable_declarator": {
|
|
34
|
+
const declaratorName = parent.childForFieldName("name");
|
|
35
|
+
return declaratorName !== null && declaratorName.type === "identifier"
|
|
36
|
+
? declaratorName.text
|
|
37
|
+
: ANONYMOUS_NAME;
|
|
38
|
+
}
|
|
39
|
+
case "pair":
|
|
40
|
+
case "pair_pattern": {
|
|
41
|
+
const key = parent.childForFieldName("key");
|
|
42
|
+
return key !== null ? unquote(key.text) : ANONYMOUS_NAME;
|
|
43
|
+
}
|
|
44
|
+
case "assignment_expression": {
|
|
45
|
+
const left = parent.childForFieldName("left");
|
|
46
|
+
if (left === null)
|
|
47
|
+
return ANONYMOUS_NAME;
|
|
48
|
+
if (left.type === "identifier")
|
|
49
|
+
return left.text;
|
|
50
|
+
if (left.type === "member_expression") {
|
|
51
|
+
const property = left.childForFieldName("property");
|
|
52
|
+
return property !== null ? property.text : ANONYMOUS_NAME;
|
|
53
|
+
}
|
|
54
|
+
return ANONYMOUS_NAME;
|
|
55
|
+
}
|
|
56
|
+
case "field_definition":
|
|
57
|
+
case "public_field_definition": {
|
|
58
|
+
const property = parent.childForFieldName("property");
|
|
59
|
+
return property !== null ? unquote(property.text) : ANONYMOUS_NAME;
|
|
60
|
+
}
|
|
61
|
+
case "export_statement":
|
|
62
|
+
return "default";
|
|
63
|
+
default:
|
|
64
|
+
return ANONYMOUS_NAME;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return ANONYMOUS_NAME;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* True when a field's initializer is itself a function-like node: in that
|
|
71
|
+
* case the FIELD does not get its own scope — the function value does,
|
|
72
|
+
* borrowing the field's property name (avoids a redundant doubled
|
|
73
|
+
* `Class.field.field` qualified name for `class C { handler = () => {} }`).
|
|
74
|
+
*/
|
|
75
|
+
export function fieldDelegatesToFunctionValue(node) {
|
|
76
|
+
if (!FIELD_TYPES.has(node.type))
|
|
77
|
+
return false;
|
|
78
|
+
const value = node.childForFieldName("value");
|
|
79
|
+
return value !== null && (FUNCTION_LIKE_TYPES.has(value.type) || value.type === "class");
|
|
80
|
+
}
|
|
81
|
+
const VISIBILITY_MODIFIER_TYPE = "accessibility_modifier";
|
|
82
|
+
/** `public`/`private`/`protected` if explicit, `"private"` for a `#name`, else `undefined` (implicit public). */
|
|
83
|
+
export function resolveVisibility(node, name) {
|
|
84
|
+
const modifier = node.children.find((child) => child.type === VISIBILITY_MODIFIER_TYPE);
|
|
85
|
+
if (modifier !== undefined)
|
|
86
|
+
return modifier.text;
|
|
87
|
+
if (name.startsWith("#"))
|
|
88
|
+
return "private";
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Names this declaration exports, per spec.md §8.3 step 2/§14 (best-effort:
|
|
93
|
+
* only direct `export` / `export default` wrapping the declaration itself is
|
|
94
|
+
* recognized — a later `export { name }` clause elsewhere in the file is a
|
|
95
|
+
* documented simplification, see README "Entscheidungen").
|
|
96
|
+
*/
|
|
97
|
+
export function resolveExportedNames(node, name) {
|
|
98
|
+
let current = node;
|
|
99
|
+
// Walk up through wrapping declarator/declaration nodes that carry no name of their own.
|
|
100
|
+
while (current !== null) {
|
|
101
|
+
const parent = current.parent;
|
|
102
|
+
if (parent === null)
|
|
103
|
+
return [];
|
|
104
|
+
if (parent.type === "export_statement") {
|
|
105
|
+
const hasDefault = parent.children.some((child) => child.type === "default");
|
|
106
|
+
return [hasDefault ? "default" : name];
|
|
107
|
+
}
|
|
108
|
+
if (parent.type === "variable_declarator" ||
|
|
109
|
+
parent.type === "lexical_declaration" ||
|
|
110
|
+
parent.type === "variable_declaration") {
|
|
111
|
+
current = parent;
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
return [];
|
|
115
|
+
}
|
|
116
|
+
return [];
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=scope-naming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-naming.js","sourceRoot":"","sources":["../../../src/languages/shared/scope-naming.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { SyntaxNode } from "./syntax.js";
|
|
2
|
+
interface FunctionSignature {
|
|
3
|
+
raw: string;
|
|
4
|
+
normalized: string;
|
|
5
|
+
}
|
|
6
|
+
/** Builds the signature for a function/arrow/method-shaped scope node. */
|
|
7
|
+
export declare function buildFunctionSignature(node: SyntaxNode, name: string): FunctionSignature;
|
|
8
|
+
/** Builds the signature for a class/interface/enum/type-alias/namespace scope node. */
|
|
9
|
+
export declare function buildHeaderSignature(node: SyntaxNode): FunctionSignature;
|
|
10
|
+
/** Builds the signature for a class field / property scope node. */
|
|
11
|
+
export declare function buildPropertySignature(node: SyntaxNode, name: string): FunctionSignature;
|
|
12
|
+
export declare function isFunctionLikeScope(nodeType: string): boolean;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=scope-signature.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-signature.d.ts","sourceRoot":"","sources":["../../../src/languages/shared/scope-signature.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA+B9C,UAAU,iBAAiB;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,0EAA0E;AAC1E,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAgCxF;AAED,uFAAuF;AACvF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,iBAAiB,CAOxE;AAED,oEAAoE;AACpE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,iBAAiB,CASxF;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE7D"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Signature text composition per scope kind (see `signature.ts` for the
|
|
3
|
+
* normalization primitives this builds on, and its doc comment for the
|
|
4
|
+
* normative whitespace/defaults/optional-marker/type-annotation rules).
|
|
5
|
+
*/
|
|
6
|
+
import { FUNCTION_LIKE_TYPES, METHOD_TYPE } from "./node-kinds.js";
|
|
7
|
+
import { normalizeHeaderText, normalizeParameterList, normalizeReturnType, normalizeTypeParameterList, } from "./signature.js";
|
|
8
|
+
const MODIFIER_ORDER = [
|
|
9
|
+
"accessibility_modifier",
|
|
10
|
+
"static",
|
|
11
|
+
"abstract",
|
|
12
|
+
"override_modifier",
|
|
13
|
+
"readonly",
|
|
14
|
+
"declare",
|
|
15
|
+
"async",
|
|
16
|
+
];
|
|
17
|
+
function collectModifiers(node) {
|
|
18
|
+
const found = [];
|
|
19
|
+
for (const modifierType of MODIFIER_ORDER) {
|
|
20
|
+
const child = node.children.find((c) => c.type === modifierType);
|
|
21
|
+
if (child !== undefined)
|
|
22
|
+
found.push(child.text);
|
|
23
|
+
}
|
|
24
|
+
return found;
|
|
25
|
+
}
|
|
26
|
+
function isGenerator(node) {
|
|
27
|
+
return node.children.some((child) => child.type === "*");
|
|
28
|
+
}
|
|
29
|
+
function accessorKeyword(node) {
|
|
30
|
+
const hasGet = node.children.some((child) => child.type === "get");
|
|
31
|
+
const hasSet = node.children.some((child) => child.type === "set");
|
|
32
|
+
return hasGet ? "get" : hasSet ? "set" : undefined;
|
|
33
|
+
}
|
|
34
|
+
/** Builds the signature for a function/arrow/method-shaped scope node. */
|
|
35
|
+
export function buildFunctionSignature(node, name) {
|
|
36
|
+
const typeParamsNode = node.childForFieldName("type_parameters");
|
|
37
|
+
const parametersNode = node.childForFieldName("parameters");
|
|
38
|
+
const returnTypeNode = node.childForFieldName("return_type");
|
|
39
|
+
const modifiers = collectModifiers(node);
|
|
40
|
+
const accessor = accessorKeyword(node);
|
|
41
|
+
const generatorMarker = isGenerator(node) ? "*" : "";
|
|
42
|
+
const headParts = [...modifiers];
|
|
43
|
+
if (accessor !== undefined)
|
|
44
|
+
headParts.push(accessor);
|
|
45
|
+
const head = headParts.length > 0
|
|
46
|
+
? `${headParts.join(" ")} ${generatorMarker}${name}`
|
|
47
|
+
: `${generatorMarker}${name}`;
|
|
48
|
+
const rawTypeParams = typeParamsNode?.text;
|
|
49
|
+
const rawParams = parametersNode?.text ??
|
|
50
|
+
(node.childForFieldName("parameter")?.text !== undefined
|
|
51
|
+
? `(${node.childForFieldName("parameter")?.text})`
|
|
52
|
+
: "()");
|
|
53
|
+
const rawReturnType = returnTypeNode?.text;
|
|
54
|
+
const raw = `${head}${rawTypeParams ?? ""}${rawParams}${rawReturnType !== undefined ? rawReturnType : ""}`;
|
|
55
|
+
const normalizedTypeParams = normalizeTypeParameterList(rawTypeParams);
|
|
56
|
+
const normalizedParams = normalizeParameterList(rawParams);
|
|
57
|
+
const normalizedReturnType = normalizeReturnType(rawReturnType);
|
|
58
|
+
const normalized = `${head}${normalizedTypeParams}${normalizedParams}${normalizedReturnType}`;
|
|
59
|
+
return { raw, normalized };
|
|
60
|
+
}
|
|
61
|
+
/** Builds the signature for a class/interface/enum/type-alias/namespace scope node. */
|
|
62
|
+
export function buildHeaderSignature(node) {
|
|
63
|
+
const bodyNode = node.childForFieldName("body");
|
|
64
|
+
const raw = bodyNode !== null
|
|
65
|
+
? node.text.slice(0, bodyNode.startIndex - node.startIndex).trimEnd()
|
|
66
|
+
: node.text.replace(/;\s*$/, "");
|
|
67
|
+
return { raw, normalized: normalizeHeaderText(raw) };
|
|
68
|
+
}
|
|
69
|
+
/** Builds the signature for a class field / property scope node. */
|
|
70
|
+
export function buildPropertySignature(node, name) {
|
|
71
|
+
const typeNode = node.childForFieldName("type");
|
|
72
|
+
const modifiers = collectModifiers(node);
|
|
73
|
+
const head = modifiers.length > 0 ? `${modifiers.join(" ")} ${name}` : name;
|
|
74
|
+
const rawType = typeNode?.text;
|
|
75
|
+
const raw = `${head}${rawType ?? ""}`;
|
|
76
|
+
const normalized = rawType !== undefined ? `${head}${normalizeReturnType(rawType)}` : normalizeHeaderText(head);
|
|
77
|
+
return { raw, normalized };
|
|
78
|
+
}
|
|
79
|
+
export function isFunctionLikeScope(nodeType) {
|
|
80
|
+
return FUNCTION_LIKE_TYPES.has(nodeType) || nodeType === METHOD_TYPE;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=scope-signature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-signature.js","sourceRoot":"","sources":["../../../src/languages/shared/scope-signature.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
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
|
+
/** Collapses whitespace and canonicalizes spacing around common punctuation. */
|
|
32
|
+
export declare function normalizeSpacing(text: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Splits `content` on top-level occurrences of `separator` (depth 0 with
|
|
35
|
+
* respect to `(`, `[`, `{`, `<`/`>`). Used to split parameter lists and
|
|
36
|
+
* type-parameter lists without being confused by nested generics/objects.
|
|
37
|
+
*/
|
|
38
|
+
export declare function splitTopLevel(content: string, separator: string): string[];
|
|
39
|
+
/** Strips a single parameter's/type-parameter's default value (`= <expr>`), keeping any `?`/type annotation before it. */
|
|
40
|
+
export declare function stripDefaultValue(entry: string): string;
|
|
41
|
+
/**
|
|
42
|
+
* Normalizes a formal-parameter-list text (including its outer parens),
|
|
43
|
+
* e.g. `(a: number = 1, b ?: string)` -> `(a: number, b?: string)`.
|
|
44
|
+
*/
|
|
45
|
+
export declare function normalizeParameterList(paramsText: string): string;
|
|
46
|
+
/**
|
|
47
|
+
* Normalizes a type-parameter list text (including its outer `<>`), e.g.
|
|
48
|
+
* `<T extends object = {}, U>` -> `<T extends object, U>`.
|
|
49
|
+
*/
|
|
50
|
+
export declare function normalizeTypeParameterList(typeParamsText: string | undefined): string;
|
|
51
|
+
/** Normalizes a return-type annotation text (e.g. ` : Promise<void> ` -> `: Promise<void>`). */
|
|
52
|
+
export declare function normalizeReturnType(returnTypeText: string | undefined): string;
|
|
53
|
+
/** Normalizes an arbitrary header text (class/interface/type/enum declarations). */
|
|
54
|
+
export declare function normalizeHeaderText(headerText: string): string;
|
|
55
|
+
//# sourceMappingURL=signature.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signature.d.ts","sourceRoot":"","sources":["../../../src/languages/shared/signature.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAKH,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAarD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAgB1E;AA6BD,0HAA0H;AAC1H,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CASjE;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAWrF;AAED,gGAAgG;AAChG,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAI9E;AAED,oFAAoF;AACpF,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE9D"}
|