@vibgrate/cli 2026.825.1 → 2026.825.2
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/dist/{agent-IHNUBFBM.js → agent-DHQYEHVW.js} +13 -13
- package/dist/{agent-IHNUBFBM.js.map → agent-DHQYEHVW.js.map} +1 -1
- package/dist/{approvals-HRIMDIX3.js → approvals-KBM72NU2.js} +5 -5
- package/dist/{approvals-HRIMDIX3.js.map → approvals-KBM72NU2.js.map} +1 -1
- package/dist/{attach-L43JUJ7A.js → attach-O74NL4M5.js} +3 -3
- package/dist/{attach-L43JUJ7A.js.map → attach-O74NL4M5.js.map} +1 -1
- package/dist/{baseline-EZQ7SCRT.js → baseline-4X6MQBDA.js} +3 -3
- package/dist/{baseline-EZQ7SCRT.js.map → baseline-4X6MQBDA.js.map} +1 -1
- package/dist/{chunk-X34HVFZ6.js → chunk-27TS2AUJ.js} +8 -8
- package/dist/{chunk-X34HVFZ6.js.map → chunk-27TS2AUJ.js.map} +1 -1
- package/dist/{chunk-RHYRMMN3.js → chunk-2NUS5BOR.js} +3 -3
- package/dist/{chunk-RHYRMMN3.js.map → chunk-2NUS5BOR.js.map} +1 -1
- package/dist/{chunk-TLYNLQL2.js → chunk-3E7QT4NE.js} +9 -9
- package/dist/{chunk-TLYNLQL2.js.map → chunk-3E7QT4NE.js.map} +1 -1
- package/dist/{chunk-L3YEEJ6U.js → chunk-6MIJLO5B.js} +3 -3
- package/dist/{chunk-L3YEEJ6U.js.map → chunk-6MIJLO5B.js.map} +1 -1
- package/dist/{chunk-5BFA532E.js → chunk-7M4E7UGX.js} +3 -3
- package/dist/{chunk-5BFA532E.js.map → chunk-7M4E7UGX.js.map} +1 -1
- package/dist/{chunk-M7O6IVKN.js → chunk-BICZR6UJ.js} +3 -3
- package/dist/{chunk-M7O6IVKN.js.map → chunk-BICZR6UJ.js.map} +1 -1
- package/dist/{chunk-BCK2NIBM.js → chunk-DIZ5KI5Q.js} +6 -6
- package/dist/{chunk-BCK2NIBM.js.map → chunk-DIZ5KI5Q.js.map} +1 -1
- package/dist/{chunk-QTQRM7HQ.js → chunk-E3XVIFSH.js} +3 -3
- package/dist/{chunk-QTQRM7HQ.js.map → chunk-E3XVIFSH.js.map} +1 -1
- package/dist/{chunk-B5X246UH.js → chunk-FQHWPOTS.js} +3 -3
- package/dist/{chunk-B5X246UH.js.map → chunk-FQHWPOTS.js.map} +1 -1
- package/dist/chunk-G3ACLBMG.js +6 -0
- package/dist/{chunk-KFLNWYZG.js.map → chunk-G3ACLBMG.js.map} +1 -1
- package/dist/{chunk-CIC3NY2D.js → chunk-GR7SFCQJ.js} +12 -12
- package/dist/{chunk-CIC3NY2D.js.map → chunk-GR7SFCQJ.js.map} +1 -1
- package/dist/{chunk-Y3X3ORQ3.js → chunk-GWSJYDK7.js} +5 -5
- package/dist/{chunk-Y3X3ORQ3.js.map → chunk-GWSJYDK7.js.map} +1 -1
- package/dist/{chunk-ECQFRZJI.js → chunk-HFQIYM6E.js} +4 -4
- package/dist/{chunk-ECQFRZJI.js.map → chunk-HFQIYM6E.js.map} +1 -1
- package/dist/{chunk-GRMZU24V.js → chunk-IJVWKZRS.js} +3 -3
- package/dist/{chunk-GRMZU24V.js.map → chunk-IJVWKZRS.js.map} +1 -1
- package/dist/{chunk-YIRDV4YJ.js → chunk-JAEHLTVX.js} +3 -3
- package/dist/{chunk-YIRDV4YJ.js.map → chunk-JAEHLTVX.js.map} +1 -1
- package/dist/{chunk-LUJ4H4RJ.js → chunk-K3SXWOTT.js} +3 -3
- package/dist/{chunk-LUJ4H4RJ.js.map → chunk-K3SXWOTT.js.map} +1 -1
- package/dist/{chunk-JSZ46IDG.js → chunk-KYM55VZX.js} +6 -6
- package/dist/{chunk-JSZ46IDG.js.map → chunk-KYM55VZX.js.map} +1 -1
- package/dist/{chunk-YP243ZKD.js → chunk-L7GCJNDT.js} +3 -3
- package/dist/{chunk-YP243ZKD.js.map → chunk-L7GCJNDT.js.map} +1 -1
- package/dist/{chunk-UUVOA6WD.js → chunk-NS4DL3QR.js} +8 -8
- package/dist/{chunk-UUVOA6WD.js.map → chunk-NS4DL3QR.js.map} +1 -1
- package/dist/{chunk-S3HMG6BC.js → chunk-NZES47ST.js} +3 -3
- package/dist/{chunk-S3HMG6BC.js.map → chunk-NZES47ST.js.map} +1 -1
- package/dist/{chunk-FVBN4E5C.js → chunk-OIUVWCKM.js} +3 -3
- package/dist/{chunk-FVBN4E5C.js.map → chunk-OIUVWCKM.js.map} +1 -1
- package/dist/{chunk-DLNNNESQ.js → chunk-SIXWWQ6S.js} +3 -3
- package/dist/{chunk-DLNNNESQ.js.map → chunk-SIXWWQ6S.js.map} +1 -1
- package/dist/{chunk-6VLOI2ZP.js → chunk-SYMJSRYF.js} +3 -3
- package/dist/{chunk-6VLOI2ZP.js.map → chunk-SYMJSRYF.js.map} +1 -1
- package/dist/{chunk-LKJIYGO5.js → chunk-TT2J2TB6.js} +6 -6
- package/dist/{chunk-LKJIYGO5.js.map → chunk-TT2J2TB6.js.map} +1 -1
- package/dist/{chunk-4PCFSRYH.js → chunk-VMPKOMHG.js} +5 -5
- package/dist/{chunk-4PCFSRYH.js.map → chunk-VMPKOMHG.js.map} +1 -1
- package/dist/cli.js +49 -49
- package/dist/{daemon-WPX2SBVV.js → daemon-RZS5FPIW.js} +9 -9
- package/dist/{daemon-WPX2SBVV.js.map → daemon-RZS5FPIW.js.map} +1 -1
- package/dist/embed-worker-main.js +3 -3
- package/dist/{ensure-map-MLI4XCRV.js → ensure-map-DL2S774J.js} +14 -14
- package/dist/{ensure-map-MLI4XCRV.js.map → ensure-map-DL2S774J.js.map} +1 -1
- package/dist/{graph-backend-LK5EFQXN.js → graph-backend-JXARVT3R.js} +7 -7
- package/dist/{graph-backend-LK5EFQXN.js.map → graph-backend-JXARVT3R.js.map} +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +15 -15
- package/dist/{interactive-K446F42I.js → interactive-2XRBRFRB.js} +25 -25
- package/dist/{interactive-K446F42I.js.map → interactive-2XRBRFRB.js.map} +1 -1
- package/dist/load-7C5VETRD.js +11 -0
- package/dist/{load-2FRH37JY.js.map → load-7C5VETRD.js.map} +1 -1
- package/dist/parse-worker.js +2 -2
- package/dist/{run-outcome-4ETNDPX6.js → run-outcome-TMB5TJNA.js} +5 -5
- package/dist/{run-outcome-4ETNDPX6.js.map → run-outcome-TMB5TJNA.js.map} +1 -1
- package/dist/{runtime-session-RMSKXFIJ.js → runtime-session-Y23NVY7R.js} +9 -9
- package/dist/{runtime-session-RMSKXFIJ.js.map → runtime-session-Y23NVY7R.js.map} +1 -1
- package/dist/{session-22BGDYWF.js → session-KXT2ZTPE.js} +8 -8
- package/dist/{session-22BGDYWF.js.map → session-KXT2ZTPE.js.map} +1 -1
- package/dist/{stream-json-MD7MSSCH.js → stream-json-NW6AOE47.js} +13 -13
- package/dist/{stream-json-MD7MSSCH.js.map → stream-json-NW6AOE47.js.map} +1 -1
- package/dist/version-7ABYXWOZ.js +4 -0
- package/dist/{version-FRUT6RI2.js.map → version-7ABYXWOZ.js.map} +1 -1
- package/dist/{vg-mcp-bridge-H6I3ALUW.js → vg-mcp-bridge-LXBHKEFR.js} +8 -8
- package/dist/{vg-mcp-bridge-H6I3ALUW.js.map → vg-mcp-bridge-LXBHKEFR.js.map} +1 -1
- package/dist/{vgd-TW7HU2PH.js → vgd-RW7HCEIP.js} +8 -8
- package/dist/vgd-RW7HCEIP.js.map +1 -0
- package/package.json +1 -1
- package/dist/chunk-KFLNWYZG.js +0 -6
- package/dist/load-2FRH37JY.js +0 -11
- package/dist/version-FRUT6RI2.js +0 -4
- package/dist/vgd-TW7HU2PH.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/engine/grammars.ts","../src/engine/queries.ts","../src/engine/sfc.ts","../src/engine/toolchain/grammars.ts","../src/engine/ast-roles.ts","../src/engine/parse.ts"],"names":["require","ranges","createRequire","languageCache","path2","fs2","Language","Parser","compiledCache","compile","Query"],"mappings":"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","file":"chunk-L3YEEJ6U.js","sourcesContent":["import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { createRequire } from 'node:module';\nimport { Parser, Language } from 'web-tree-sitter';\nimport { langById, LANGUAGES, type LanguageDef } from './languages.js';\n\n/**\n * Grammar loader. Resolves the pre-compiled tree-sitter `.wasm` for a language\n * from, in order:\n * 1. the `--grammars <dir>` override (offline / air-gapped)\n * 2. ../grammars next to dist (bundled in the published package)\n * 3. the installed `tree-sitter-wasms` package (dev / fallback)\n *\n * Languages are cached. The grammar set version is recorded in provenance so the\n * determinism contract is explicit about which grammars produced the graph.\n */\n\nconst require = createRequire(import.meta.url);\n\nlet parserInit: Promise<void> | null = null;\nconst languageCache = new Map<string, Language>();\n\n// The `--grammars <dir>` override, set per process (and per parse worker, via the\n// parse payload) before parsing. Configured by a command option, not an env var.\nlet grammarsOverride: string | undefined;\nexport function setGrammarsOverride(dir?: string): void {\n grammarsOverride = dir ? path.resolve(dir) : undefined;\n}\n\nfunction thisDir(): string {\n return path.dirname(fileURLToPath(import.meta.url));\n}\n\nlet cachedTreeSitterWasmsDir: string | null = null;\nfunction treeSitterWasmsOutDir(): string {\n if (cachedTreeSitterWasmsDir) return cachedTreeSitterWasmsDir;\n const pkgJson = require.resolve('tree-sitter-wasms/package.json');\n cachedTreeSitterWasmsDir = path.join(path.dirname(pkgJson), 'out');\n return cachedTreeSitterWasmsDir;\n}\n\n/**\n * The grammar-set version string recorded in provenance (determinism input).\n * The `+swift-vendored` suffix marks the vendored tree-sitter-swift build (see\n * vendor/README.md) that replaces the tree-sitter-wasms prebuilt; bump the\n * suffix if a vendored grammar is regenerated, so caches invalidate.\n */\nexport function grammarSetVersion(): string {\n try {\n const pkgJson = require.resolve('tree-sitter-wasms/package.json');\n const { version } = JSON.parse(fs.readFileSync(pkgJson, 'utf8')) as { version: string };\n return `tree-sitter-wasms@${version}+swift-vendored@0.7.1`;\n } catch {\n return 'tree-sitter-wasms@unknown+swift-vendored@0.7.1';\n }\n}\n\n/**\n * Candidate directories holding grammar .wasm files, highest priority first.\n * The vendor/ dirs are OVERLAYS holding only rebuilt replacements for\n * defective prebuilts (vendor/README.md) — they outrank the tree-sitter-wasms\n * fallback so dev/test runs without a prior `pnpm build` never load a\n * known-bad prebuilt, but they are never a complete grammar set.\n */\nexport function grammarDirs(): string[] {\n const dirs: string[] = [];\n // the `--grammars <dir>` override (offline / air-gapped), if set\n if (grammarsOverride) dirs.push(grammarsOverride);\n // ../grammars relative to dist/ (bundled in the published artifact)\n dirs.push(path.join(thisDir(), '..', 'grammars'));\n dirs.push(path.join(thisDir(), 'grammars'));\n // vendored overlays\n dirs.push(path.join(thisDir(), '..', 'vendor')); // from dist/\n dirs.push(path.join(thisDir(), '..', '..', 'vendor')); // from src/engine/\n // node_modules fallback\n try {\n dirs.push(treeSitterWasmsOutDir());\n } catch {\n /* tree-sitter-wasms not resolvable — rely on the dirs above */\n }\n return dirs;\n}\n\nconst isVendorOverlay = (dir: string): boolean => path.basename(dir) === 'vendor';\n\n/**\n * The first existing directory that holds a grammar .wasm set. Skips the\n * vendor overlays — they hold single replacement files, never a full set.\n * For a complete per-language resolution use resolvedGrammarFiles().\n */\nexport function grammarsSourceDir(): string | null {\n for (const dir of grammarDirs()) {\n if (isVendorOverlay(dir)) continue;\n if (fs.existsSync(dir) && fs.readdirSync(dir).some((f) => f.endsWith('.wasm'))) return dir;\n }\n return null;\n}\n\nfunction resolveGrammarFile(grammarFile: string): string {\n const fileName = `${grammarFile}.wasm`;\n for (const dir of grammarDirs()) {\n const candidate = path.join(dir, fileName);\n if (fs.existsSync(candidate)) return candidate;\n }\n throw new Error(\n `grammar \"${fileName}\" not found. Looked in: ${grammarDirs().join(', ')}. ` +\n `Pass --grammars <dir> pointing at a directory of grammar .wasm files.`,\n );\n}\n\n/**\n * Every registered language's grammar .wasm resolved through the same\n * priority order the parser uses (override > bundled > vendor overlay >\n * tree-sitter-wasms). Used by `vg bundle` so an air-gapped bundle always\n * carries the exact grammar files a scan would load.\n */\nexport function resolvedGrammarFiles(): { fileName: string; absPath: string }[] {\n return LANGUAGES.map((l) => ({\n fileName: `${l.grammarFile}.wasm`,\n absPath: resolveGrammarFile(l.grammarFile),\n }));\n}\n\nexport async function ensureParserInit(): Promise<void> {\n if (!parserInit) parserInit = Parser.init();\n await parserInit;\n}\n\n/** Load (and cache) the tree-sitter Language for a vg language id. */\nexport async function loadLanguage(langId: string): Promise<Language> {\n const cached = languageCache.get(langId);\n if (cached) return cached;\n const def = langById(langId);\n if (!def) throw new Error(`unknown language id \"${langId}\"`);\n await ensureParserInit();\n const wasmPath = resolveGrammarFile(def.grammarFile);\n const language = await Language.load(fs.readFileSync(wasmPath));\n languageCache.set(langId, language);\n return language;\n}\n\n// One reused parser per language: a Parser allocates in the shared wasm heap\n// and is never garbage-collected there, so a parser-per-file leaks the heap\n// until parsing dies with \"memory access out of bounds\" on large builds\n// (observed ~10k files in one process). Parsers are reusable across parse()\n// calls; resetParser() discards one after a failed parse left it mid-state.\nconst parserCache = new Map<string, Parser>();\n\n/** A per-language reused parser bound to the language's grammar. */\nexport async function parserFor(def: LanguageDef): Promise<Parser> {\n const cached = parserCache.get(def.id);\n if (cached) return cached;\n const language = await loadLanguage(def.id);\n const parser = new Parser();\n parser.setLanguage(language);\n parserCache.set(def.id, parser);\n return parser;\n}\n\n/** Drop a language's cached parser (after a parse error left it mid-state). */\nexport function resetParser(langId: string): void {\n const parser = parserCache.get(langId);\n if (!parser) return;\n parserCache.delete(langId);\n try {\n parser.delete();\n } catch {\n // The wasm side may already be unusable; dropping the reference is enough.\n }\n}\n","import type { NodeKind } from '../schema.js';\n\n/**\n * Per-language tree-sitter queries driving extraction. Each query uses a small,\n * fixed capture vocabulary so the generic extractor (parse.ts) stays\n * language-agnostic:\n *\n * @def — a definition node (its kind comes from the rule)\n * @name — the name node of that definition\n * @callee — a called name node (a call edge, resolved later)\n * @source — an import/require source string node (incl. quotes)\n * @extends / @implements — a base type name node (a heritage edge)\n *\n * Queries are best-effort per language: if a pattern fails to compile against a\n * grammar it is skipped (logged once), so one bad rule never disables a whole\n * language. Coverage is deepest for the TS/JS-first audience and a solid\n * baseline elsewhere — honestly recorded as `heuristic` resolution.\n */\n\nexport interface DefRule {\n kind: NodeKind;\n query: string;\n}\n\nexport interface LangQueries {\n defs: DefRule[];\n calls: string[];\n imports: string[];\n heritage: string[];\n /** Assert/guard expressions captured as @guard → invariant facts. */\n guards?: string[];\n /**\n * Constructor-parameter / field declared types captured as @typeref — a\n * structural dependency (e.g. Spring constructor/field injection) that never\n * appears as a `call_expression`/`object_creation_expression`, so it needs its\n * own capture. Resolved to a `references` edge (not `call`) in resolve.ts.\n */\n typeRefs?: string[];\n /**\n * Namespace declarations captured as @namespace — the namespaces a file\n * declares its types in. For languages where a namespace is decoupled from\n * the directory (C#), this lets the resolver connect a cross-directory\n * reference when the caller `using`-imports that namespace. Absent for\n * languages that have no namespace concept or where package == directory.\n */\n namespaces?: string[];\n}\n\n// assert-like call detection, shared by the C-family languages.\nconst ASSERT_CALLS = [\n '(call_expression function: (identifier) @_g (#match? @_g \"^(assert|invariant|require|precondition|invariantViolation)$\")) @guard',\n];\n\nconst TS_JS_CALLS = [\n '(call_expression function: (identifier) @callee)',\n '(call_expression function: (member_expression property: (property_identifier) @callee))',\n '(new_expression constructor: (identifier) @callee)',\n];\n\nconst TS_JS_IMPORTS = [\n '(import_statement source: (string) @source)',\n '(call_expression function: (identifier) @_req (#eq? @_req \"require\") arguments: (arguments (string) @source))',\n];\n\nconst TYPESCRIPT: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_declaration name: (identifier) @name) @def' },\n {\n kind: 'function',\n query: '(generator_function_declaration name: (identifier) @name) @def',\n },\n {\n kind: 'function',\n query:\n '(variable_declarator name: (identifier) @name value: [(arrow_function) (function_expression)]) @def',\n },\n { kind: 'method', query: '(method_definition name: (property_identifier) @name) @def' },\n // Object-literal methods: `{ showToast: function () {} }` / `{ showToast: () => {} }`\n // (common in Vue/NS utilities; class method_definition alone does not cover these).\n {\n kind: 'method',\n query:\n '(pair key: (property_identifier) @name value: [(function_expression) (arrow_function)] @def)',\n },\n { kind: 'class', query: '(class_declaration name: (type_identifier) @name) @def' },\n { kind: 'class', query: '(abstract_class_declaration name: (type_identifier) @name) @def' },\n { kind: 'interface', query: '(interface_declaration name: (type_identifier) @name) @def' },\n ],\n calls: TS_JS_CALLS,\n imports: TS_JS_IMPORTS,\n heritage: [\n '(class_heritage (extends_clause value: (identifier) @extends))',\n '(class_heritage (extends_clause value: (member_expression property: (property_identifier) @extends)))',\n '(class_heritage (implements_clause (type_identifier) @implements))',\n '(extends_type_clause type: (type_identifier) @extends)',\n ],\n guards: ASSERT_CALLS,\n};\n\nconst JAVASCRIPT: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_declaration name: (identifier) @name) @def' },\n {\n kind: 'function',\n query: '(generator_function_declaration name: (identifier) @name) @def',\n },\n {\n kind: 'function',\n query:\n '(variable_declarator name: (identifier) @name value: [(arrow_function) (function_expression)]) @def',\n },\n { kind: 'method', query: '(method_definition name: (property_identifier) @name) @def' },\n // Object-literal methods (see TYPESCRIPT above).\n {\n kind: 'method',\n query:\n '(pair key: (property_identifier) @name value: [(function_expression) (arrow_function)] @def)',\n },\n { kind: 'class', query: '(class_declaration name: (identifier) @name) @def' },\n ],\n calls: TS_JS_CALLS,\n imports: TS_JS_IMPORTS,\n heritage: [\n '(class_heritage (identifier) @extends)',\n '(class_heritage (member_expression property: (property_identifier) @extends))',\n ],\n guards: ASSERT_CALLS,\n};\n\nconst PYTHON: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_definition name: (identifier) @name) @def' },\n { kind: 'class', query: '(class_definition name: (identifier) @name) @def' },\n ],\n calls: [\n '(call function: (identifier) @callee)',\n '(call function: (attribute attribute: (identifier) @callee))',\n ],\n imports: [\n '(import_statement name: (dotted_name) @source)',\n '(import_from_statement module_name: (dotted_name) @source)',\n // Relative imports (`from .models import X`, `from ..core.utils import Y`) —\n // the module is a `relative_import` node, not a `dotted_name`. These are the\n // bulk of intra-package edges and were previously dropped entirely.\n '(import_from_statement module_name: (relative_import) @source)',\n ],\n heritage: ['(class_definition superclasses: (argument_list (identifier) @extends))'],\n guards: ['(assert_statement) @guard'],\n};\n\nconst GO: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_declaration name: (identifier) @name) @def' },\n { kind: 'method', query: '(method_declaration name: (field_identifier) @name) @def' },\n { kind: 'class', query: '(type_declaration (type_spec name: (type_identifier) @name)) @def' },\n ],\n calls: [\n '(call_expression function: (identifier) @callee)',\n '(call_expression function: (selector_expression field: (field_identifier) @callee))',\n ],\n imports: ['(import_spec path: (interpreted_string_literal) @source)'],\n heritage: [],\n};\n\nconst JAVA: LangQueries = {\n defs: [\n { kind: 'method', query: '(method_declaration name: (identifier) @name) @def' },\n { kind: 'method', query: '(constructor_declaration name: (identifier) @name) @def' },\n { kind: 'class', query: '(class_declaration name: (identifier) @name) @def' },\n { kind: 'interface', query: '(interface_declaration name: (identifier) @name) @def' },\n ],\n calls: ['(method_invocation name: (identifier) @callee)', '(object_creation_expression type: (type_identifier) @callee)'],\n imports: ['(import_declaration (scoped_identifier) @source)'],\n heritage: [\n '(superclass (type_identifier) @extends)',\n '(super_interfaces (type_list (type_identifier) @implements))',\n ],\n // Spring-style dependency injection wires a collaborator via a constructor\n // parameter or a field, never a `new`/method call — so without these, an\n // injected repository/service shows zero callers even when it is the sole\n // reason five other classes exist.\n typeRefs: [\n '(constructor_declaration parameters: (formal_parameters (formal_parameter type: (type_identifier) @typeref)))',\n '(field_declaration type: (type_identifier) @typeref)',\n ],\n // A Java package is a directory, so cross-directory (cross-package) DI\n // resolves through `import a.b.Foo`. Capturing the package lets the resolver\n // reach the implementation in another package when the caller imports it.\n namespaces: ['(package_declaration (scoped_identifier) @namespace)', '(package_declaration (identifier) @namespace)'],\n};\n\nconst RUST: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_item name: (identifier) @name) @def' },\n { kind: 'class', query: '(struct_item name: (type_identifier) @name) @def' },\n { kind: 'class', query: '(enum_item name: (type_identifier) @name) @def' },\n { kind: 'interface', query: '(trait_item name: (type_identifier) @name) @def' },\n // Rust colocates tests: `#[cfg(test)] mod tests` sits at the bottom of the\n // file it tests. Without the module capture every `#[test] fn` is indexed\n // as a bare top-level function, so nothing downstream can tell a test from\n // production code (a test name echoing an ask outranked the code it\n // covers). Capturing it also qualifies ordinary `mod` members, matching\n // what Ruby/Scala/C++/OCaml already do.\n { kind: 'module', query: '(mod_item name: (identifier) @name) @def' },\n ],\n calls: [\n '(call_expression function: (identifier) @callee)',\n '(call_expression function: (field_expression field: (field_identifier) @callee))',\n '(call_expression function: (scoped_identifier name: (identifier) @callee))',\n ],\n imports: ['(use_declaration (scoped_identifier) @source)'],\n heritage: [],\n};\n\nconst C_SHARP: LangQueries = {\n defs: [\n { kind: 'method', query: '(method_declaration name: (identifier) @name) @def' },\n { kind: 'class', query: '(class_declaration name: (identifier) @name) @def' },\n { kind: 'interface', query: '(interface_declaration name: (identifier) @name) @def' },\n { kind: 'class', query: '(struct_declaration name: (identifier) @name) @def' },\n // Enums and records are load-bearing lookup targets in real C# codebases\n // (permission enums, DTO records); without these captures a `Privilege`-\n // style lookup only ever resolves via the literal text fallthrough.\n // 'class' is this engine's established kind for enum-like types (see the\n // Rust enum_item and C enum_specifier mappings).\n { kind: 'class', query: '(enum_declaration name: (identifier) @name) @def' },\n { kind: 'class', query: '(record_declaration name: (identifier) @name) @def' },\n ],\n calls: [\n '(invocation_expression function: (member_access_expression name: (identifier) @callee))',\n '(invocation_expression function: (identifier) @callee)',\n // `new Foo(...)` is an instantiation dependency (the caller depends on Foo),\n // and it is how a test most directly links to the class under test — without\n // it a test that only constructs the service showed up as no coverage.\n '(object_creation_expression type: (identifier) @callee)',\n ],\n imports: ['(using_directive (qualified_name) @source)', '(using_directive (identifier) @source)'],\n heritage: ['(base_list (identifier) @extends)'],\n // Dependency-injection wiring: the interface a class depends on appears as a\n // constructor-parameter type or a readonly field type, never as a call — so\n // without these captures a controller/service injected through an interface\n // looks like it references nothing. Simple (identifier) types only; generics/\n // qualified names are left to a precise rung. Mirrors the Java DI captures.\n typeRefs: [\n '(constructor_declaration (parameter_list (parameter type: (identifier) @typeref)))',\n '(field_declaration (variable_declaration type: (identifier) @typeref))',\n ],\n // A namespace is decoupled from the directory in C#, so cross-namespace\n // resolution needs to know which namespace a file declares. Both block-scoped\n // (`namespace N { }`) and file-scoped (`namespace N;`) forms.\n namespaces: [\n '(namespace_declaration name: [(identifier) (qualified_name)] @namespace)',\n '(file_scoped_namespace_declaration name: [(identifier) (qualified_name)] @namespace)',\n ],\n};\n\nconst RUBY: LangQueries = {\n defs: [\n { kind: 'method', query: '(method name: (identifier) @name) @def' },\n { kind: 'class', query: '(class name: (constant) @name) @def' },\n { kind: 'module', query: '(module name: (constant) @name) @def' },\n ],\n calls: ['(call method: (identifier) @callee)', '(command method: (identifier) @callee)'],\n imports: [\n '(call method: (identifier) @_m (#match? @_m \"require\") arguments: (argument_list (string (string_content) @source)))',\n ],\n heritage: ['(class (superclass (constant) @extends))'],\n};\n\n\nconst PHP: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_definition name: (name) @name) @def' },\n {\n kind: 'function',\n query:\n '(assignment_expression left: (variable_name (name) @name) right: [(anonymous_function_creation_expression) (arrow_function)]) @def',\n },\n { kind: 'method', query: '(method_declaration name: (name) @name) @def' },\n { kind: 'class', query: '(class_declaration name: (name) @name) @def' },\n { kind: 'class', query: '(trait_declaration name: (name) @name) @def' },\n { kind: 'interface', query: '(interface_declaration name: (name) @name) @def' },\n ],\n calls: [\n '(function_call_expression function: (name) @callee)',\n '(member_call_expression name: (name) @callee)',\n '(nullsafe_member_call_expression name: (name) @callee)',\n '(scoped_call_expression name: (name) @callee)',\n '(object_creation_expression (name) @callee)',\n ],\n imports: [\n '(namespace_use_clause (qualified_name) @source)',\n '(namespace_use_clause (name) @source)',\n '[(require_expression (string) @source) (require_once_expression (string) @source) (include_expression (string) @source) (include_once_expression (string) @source)]',\n ],\n heritage: ['(base_clause (name) @extends)', '(class_interface_clause (name) @implements)'],\n // PHP namespaces are decoupled from directories (PSR-4 maps them, but the\n // resolver has no composer.json), so cross-namespace DI resolves through\n // `use`. Constructor-parameter and typed-property types are the injection\n // points.\n namespaces: ['(namespace_definition name: (namespace_name) @namespace)'],\n typeRefs: [\n '(simple_parameter type: (named_type (name) @typeref))',\n '(property_declaration type: (named_type (name) @typeref))',\n ],\n guards: ['(function_call_expression function: (name) @_g (#eq? @_g \"assert\")) @guard'],\n};\n\n// fwcd grammar: no field names — captures are positional; each def pattern binds\n// exactly one @name (params live under function_value_parameters). `class` vs\n// `interface` are both class_declaration, split by the anonymous keyword token.\nconst KOTLIN: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_declaration (simple_identifier) @name) @def' },\n { kind: 'class', query: '(class_declaration \"class\" (type_identifier) @name) @def' },\n { kind: 'interface', query: '(class_declaration \"interface\" (type_identifier) @name) @def' },\n { kind: 'class', query: '(object_declaration (type_identifier) @name) @def' },\n ],\n calls: [\n '(call_expression (simple_identifier) @callee)',\n '(call_expression (navigation_expression (navigation_suffix (simple_identifier) @callee)))',\n ],\n imports: ['(import_header (identifier) @source)'],\n // Kotlin: package for cross-package DI reachability; primary-constructor\n // `val` params and property types are the injection points.\n namespaces: ['(package_header (identifier) @namespace)'],\n typeRefs: [\n '(class_parameter (user_type (type_identifier) @typeref))',\n '(property_declaration (variable_declaration (user_type (type_identifier) @typeref)))',\n '(property_declaration (variable_declaration (nullable_type (user_type (type_identifier) @typeref))))',\n ],\n heritage: [\n '(delegation_specifier (constructor_invocation (user_type (type_identifier) @extends)))',\n '(delegation_specifier (user_type (type_identifier) @implements))',\n ],\n guards: ['(call_expression (simple_identifier) @_g (#match? @_g \"^(require|check|assert)$\")) @guard'],\n};\n\n// class/struct/enum/extension are ALL class_declaration; extensions carry\n// name: (user_type …) and so get their own (duplicate-named) class def node.\nconst SWIFT: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_declaration name: (simple_identifier) @name) @def' },\n { kind: 'method', query: '(protocol_function_declaration name: (simple_identifier) @name) @def' },\n { kind: 'class', query: '(class_declaration name: (type_identifier) @name) @def' },\n { kind: 'class', query: '(class_declaration name: (user_type (type_identifier) @name)) @def' },\n { kind: 'interface', query: '(protocol_declaration name: (type_identifier) @name) @def' },\n ],\n calls: [\n '(call_expression (simple_identifier) @callee)',\n '(call_expression (navigation_expression suffix: (navigation_suffix suffix: (simple_identifier) @callee)))',\n ],\n imports: ['(import_declaration (identifier) @source)'],\n heritage: ['(inheritance_specifier inherits_from: (user_type (type_identifier) @extends))'],\n // Swift: init-parameter and stored-property types are the injection points\n // (protocol-typed). Whole-module visibility (handled in resolve.ts) makes the\n // conforming implementation reachable cross-file.\n typeRefs: [\n '(parameter (user_type (type_identifier) @typeref))',\n '(type_annotation (user_type (type_identifier) @typeref))',\n ],\n guards: [\n '(call_expression (simple_identifier) @_g (#match? @_g \"^(assert|precondition|assertionFailure|preconditionFailure)$\")) @guard',\n ],\n};\n\nconst SCALA: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_definition name: (identifier) @name) @def' },\n { kind: 'method', query: '(function_declaration name: (identifier) @name) @def' },\n { kind: 'class', query: '(class_definition name: (identifier) @name) @def' },\n { kind: 'interface', query: '(trait_definition name: (identifier) @name) @def' },\n { kind: 'module', query: '(object_definition name: (identifier) @name) @def' },\n ],\n calls: [\n '(call_expression function: (identifier) @callee)',\n '(call_expression function: (field_expression field: (identifier) @callee))',\n ],\n imports: [\n '(import_declaration path: (stable_identifier) @source)',\n '(import_declaration path: (identifier) @source)',\n ],\n heritage: [\n '(extends_clause type: (type_identifier) @extends)',\n '(extends_clause type: (generic_type type: (type_identifier) @extends))',\n '(extends_clause type: (compound_type base: (type_identifier) @extends))',\n '(extends_clause type: (compound_type extra: (type_identifier) @implements))',\n ],\n // Scala: package for cross-package DI reachability; class-parameter and val\n // types are the injection points.\n namespaces: ['(package_clause name: (package_identifier) @namespace)'],\n typeRefs: [\n '(class_parameter type: (type_identifier) @typeref)',\n '(val_definition type: (type_identifier) @typeref)',\n ],\n guards: ['(call_expression function: (identifier) @_g (#match? @_g \"^(require|assert|assume)$\")) @guard'],\n};\n\n// No call_expression node in this grammar: a call is an identifier followed by a\n// sibling selector(argument_part), hence the anchored sibling patterns.\nconst DART: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_signature name: (identifier) @name) @def' },\n { kind: 'method', query: '(constructor_signature name: (identifier) @name) @def' },\n { kind: 'class', query: '(class_definition name: (identifier) @name) @def' },\n { kind: 'class', query: '(mixin_declaration (identifier) @name) @def' },\n ],\n calls: [\n '(_ (identifier) @callee . (selector (argument_part)))',\n '(_ (selector (unconditional_assignable_selector (identifier) @callee)) . (selector (argument_part)))',\n '(_ (selector (conditional_assignable_selector (identifier) @callee)) . (selector (argument_part)))',\n '(cascade_section (cascade_selector (identifier) @callee) . (argument_part))',\n ],\n imports: ['(import_specification (configurable_uri (uri (string_literal) @source)))'],\n // Dart: constructor/method parameter types and typed field declarations are\n // the injection points (Dart resolves cross-file via `import`, so no\n // namespace query is needed — the import rung already reaches the impl).\n typeRefs: [\n '(formal_parameter (type_identifier) @typeref)',\n '(declaration (type_identifier) @typeref)',\n ],\n heritage: [\n '(superclass (type_identifier) @extends)',\n '(interfaces (type_identifier) @implements)',\n '(mixins (type_identifier) @implements)',\n ],\n guards: ['(assert_statement) @guard'],\n};\n\nconst LUA: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_definition_statement name: (identifier) @name) @def' },\n { kind: 'function', query: '(function_definition_statement name: (variable field: (identifier) @name)) @def' },\n { kind: 'method', query: '(function_definition_statement name: (variable method: (identifier) @name)) @def' },\n { kind: 'function', query: '(local_function_definition_statement name: (identifier) @name) @def' },\n {\n kind: 'function',\n query:\n '(variable_assignment (variable_list (variable field: (identifier) @name)) (expression_list value: (function_definition))) @def',\n },\n {\n kind: 'function',\n query:\n '(local_variable_declaration (variable_list (variable name: (identifier) @name)) (expression_list value: (function_definition))) @def',\n },\n ],\n calls: [\n '(call function: (variable name: (identifier) @callee))',\n '(call function: (variable field: (identifier) @callee))',\n '(call function: (variable method: (identifier) @callee))',\n ],\n imports: [\n '(call function: (variable name: (identifier) @_r (#eq? @_r \"require\")) arguments: (argument_list (expression_list (string) @source)))',\n ],\n heritage: [],\n guards: ['(call function: (variable name: (identifier) @_g (#eq? @_g \"assert\"))) @guard'],\n};\n\n// Expression-based grammar: defmodule/def/defp are ordinary `call` nodes keyed by\n// their target identifier, so every rule is predicate-gated. A parenthesized def\n// head is itself a call and yields one benign same-line self-capture; the\n// resolver's qualified-call/enclosing-def rules keep it from becoming an edge.\nconst ELIXIR: LangQueries = {\n defs: [\n { kind: 'module', query: '(call target: (identifier) @_kw (#eq? @_kw \"defmodule\") (arguments (alias) @name)) @def' },\n {\n kind: 'function',\n query:\n '(call target: (identifier) @_kw (#match? @_kw \"^(def|defp|defmacro|defmacrop|defguard|defguardp)$\") (arguments (call target: (identifier) @name))) @def',\n },\n {\n kind: 'function',\n query:\n '(call target: (identifier) @_kw (#match? @_kw \"^(def|defp|defmacro|defmacrop)$\") (arguments (identifier) @name)) @def',\n },\n {\n kind: 'function',\n query:\n '(call target: (identifier) @_kw (#match? @_kw \"^(def|defp|defmacro|defmacrop|defguard|defguardp)$\") (arguments (binary_operator left: (call target: (identifier) @name)))) @def',\n },\n ],\n calls: [\n '(call target: (dot right: (identifier) @callee))',\n '(call target: (identifier) @callee (#not-match? @callee \"^(def|defp|defmacro|defmacrop|defmodule|defstruct|defprotocol|defimpl|defguard|defguardp|defdelegate|defexception|defoverridable|alias|import|require|use|quote|unquote|moduledoc|doc|spec|type|typep|typedoc|opaque|behaviour|impl|derive|enforce_keys|callback|macrocallback|optional_callbacks|compile|deprecated|dialyzer|external_resource|on_definition|on_load|after_compile|before_compile)$\"))',\n ],\n imports: [\n '(call target: (identifier) @_kw (#match? @_kw \"^(alias|import|require|use)$\") (arguments (alias) @source))',\n '(call target: (identifier) @_kw (#match? @_kw \"^(alias|import|require|use)$\") (arguments (dot left: (alias) @source)))',\n ],\n heritage: [],\n};\n\n// Every shell command is a `command` node, so callees include external binaries\n// (rsync, git, …). Safe: the resolver has no global-name fallback, so only\n// callees matching a reachable function_definition become edges.\nconst BASH: LangQueries = {\n defs: [{ kind: 'function', query: '(function_definition name: (word) @name) @def' }],\n calls: ['(command name: (command_name (word) @callee))'],\n imports: [\n '(command name: (command_name (word) @_c (#match? @_c \"^(source|\\\\.)$\")) argument: [(word) (string) (raw_string) (concatenation)] @source)',\n ],\n heritage: [],\n};\n\nconst ZIG: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_declaration name: (identifier) @name) @def' },\n { kind: 'class', query: '(variable_declaration (identifier) @name (struct_declaration)) @def' },\n { kind: 'class', query: '(variable_declaration (identifier) @name (enum_declaration)) @def' },\n { kind: 'class', query: '(variable_declaration (identifier) @name (union_declaration)) @def' },\n ],\n calls: [\n '(call_expression function: (identifier) @callee)',\n '(call_expression function: (field_expression member: (identifier) @callee))',\n ],\n imports: ['(builtin_function (builtin_identifier) @_i (#eq? @_i \"@import\") (arguments (string) @source))'],\n heritage: [],\n guards: ['(call_expression function: (field_expression member: (identifier) @_g (#eq? @_g \"assert\"))) @guard'],\n};\n\n// Only body-bearing function_definitions match (prototypes are `declaration`s).\nconst C_LANG: LangQueries = {\n defs: [\n {\n kind: 'function',\n query:\n '(function_definition declarator: [(function_declarator declarator: (identifier) @name) (pointer_declarator declarator: (function_declarator declarator: (identifier) @name))]) @def',\n },\n { kind: 'class', query: '(struct_specifier name: (type_identifier) @name body: (field_declaration_list)) @def' },\n { kind: 'class', query: '(enum_specifier name: (type_identifier) @name body: (enumerator_list)) @def' },\n { kind: 'class', query: '(type_definition declarator: (type_identifier) @name) @def' },\n ],\n calls: [\n '(call_expression function: (identifier) @callee)',\n '(call_expression function: (field_expression field: (field_identifier) @callee))',\n ],\n imports: ['(preproc_include path: (string_literal) @source)', '(preproc_include path: (system_lib_string) @source)'],\n heritage: [],\n guards: ['(call_expression function: (identifier) @_g (#match? @_g \"^(assert|static_assert)$\")) @guard'],\n};\n\nconst CPP: LangQueries = {\n defs: [\n {\n kind: 'function',\n query:\n '(function_definition declarator: [(function_declarator declarator: (identifier) @name) (pointer_declarator declarator: (function_declarator declarator: (identifier) @name)) (reference_declarator (function_declarator declarator: (identifier) @name))]) @def',\n },\n { kind: 'method', query: '(function_definition declarator: (function_declarator declarator: (field_identifier) @name)) @def' },\n {\n kind: 'method',\n query:\n '(function_definition declarator: [(function_declarator declarator: (qualified_identifier name: (identifier) @name)) (pointer_declarator declarator: (function_declarator declarator: (qualified_identifier name: (identifier) @name))) (reference_declarator (function_declarator declarator: (qualified_identifier name: (identifier) @name)))]) @def',\n },\n {\n kind: 'method',\n query:\n '(function_definition declarator: (function_declarator declarator: (qualified_identifier name: (qualified_identifier name: (identifier) @name)))) @def',\n },\n { kind: 'class', query: '(class_specifier name: (type_identifier) @name body: (field_declaration_list)) @def' },\n { kind: 'class', query: '(struct_specifier name: (type_identifier) @name body: (field_declaration_list)) @def' },\n { kind: 'module', query: '(namespace_definition name: (namespace_identifier) @name) @def' },\n ],\n calls: [\n '(call_expression function: (identifier) @callee)',\n '(call_expression function: (field_expression field: (field_identifier) @callee))',\n '(call_expression function: (qualified_identifier name: (identifier) @callee))',\n '(call_expression function: (qualified_identifier name: (qualified_identifier name: (identifier) @callee)))',\n '(new_expression type: (type_identifier) @callee)',\n ],\n imports: ['(preproc_include path: (string_literal) @source)', '(preproc_include path: (system_lib_string) @source)'],\n heritage: [\n '(base_class_clause (type_identifier) @extends)',\n '(base_class_clause (qualified_identifier name: (type_identifier) @extends))',\n ],\n guards: ['(call_expression function: (identifier) @_g (#match? @_g \"^(assert|static_assert)$\")) @guard'],\n};\n\nconst OBJC: LangQueries = {\n defs: [\n {\n kind: 'function',\n query: '(function_definition declarator: (function_declarator declarator: (identifier) @name)) @def',\n },\n // The selector segments are the method_definition's direct bare identifiers\n // (param names sit inside method_parameter); the first segment names it.\n { kind: 'method', query: '(method_definition (identifier) @name) @def' },\n { kind: 'class', query: '(class_implementation . (identifier) @name) @def' },\n { kind: 'interface', query: '(class_interface . (identifier) @name) @def' },\n // A @protocol is Objective-C's interface — without this it is not a node, so\n // conformance and protocol-typed DI cannot resolve.\n { kind: 'interface', query: '(protocol_declaration (identifier) @name) @def' },\n ],\n calls: [\n '(call_expression function: (identifier) @callee)',\n '(message_expression method: (identifier) @callee)',\n ],\n imports: [\n '(preproc_include path: (string_literal) @source)',\n '(preproc_include path: (system_lib_string) @source)',\n ],\n // Superclass (`: NSObject`) is `extends`; adopted protocols (`<Servicing>`,\n // captured as parameterized_arguments after the interface name) are the\n // `implements` relationship a DI call disambiguates through.\n heritage: [\n '(class_interface superclass: (identifier) @extends)',\n '(class_interface (parameterized_arguments (type_name (type_identifier) @implements)))',\n ],\n guards: ASSERT_CALLS,\n};\n\nconst OCAML: LangQueries = {\n defs: [\n // Only parameterised bindings — plain `let x = …` values would drown the\n // graph in constants.\n { kind: 'function', query: '(let_binding pattern: (value_name) @name (parameter)) @def' },\n { kind: 'module', query: '(module_binding name: (module_name) @name) @def' },\n ],\n calls: ['(application_expression function: (value_path (value_name) @callee))'],\n imports: ['(open_module (module_path (module_name) @source))'],\n heritage: [],\n};\n\nconst RESCRIPT: LangQueries = {\n defs: [\n { kind: 'function', query: '(let_binding pattern: (value_identifier) @name body: (function)) @def' },\n { kind: 'module', query: '(module_binding name: (module_identifier) @name) @def' },\n ],\n calls: [\n '(call_expression function: (value_identifier) @callee)',\n '(call_expression function: (value_identifier_path (value_identifier) @callee))',\n ],\n imports: ['(open_statement (module_identifier) @source)'],\n heritage: [],\n};\n\nconst SOLIDITY: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_definition name: (identifier) @name) @def' },\n { kind: 'function', query: '(modifier_definition name: (identifier) @name) @def' },\n { kind: 'class', query: '(contract_declaration name: (identifier) @name) @def' },\n { kind: 'class', query: '(library_declaration name: (identifier) @name) @def' },\n { kind: 'interface', query: '(interface_declaration name: (identifier) @name) @def' },\n ],\n calls: [\n '(call_expression function: (identifier) @callee)',\n '(call_expression function: (member_expression property: (identifier) @callee))',\n '(emit_statement name: (identifier) @callee)',\n ],\n imports: ['(import_directive source: (string) @source)'],\n heritage: ['(inheritance_specifier ancestor: (user_defined_type (identifier) @extends))'],\n guards: [\n '(call_expression function: (identifier) @_g (#match? @_g \"^(require|assert)$\")) @guard',\n ],\n};\n\nconst BY_LANG: Record<string, LangQueries> = {\n ts: TYPESCRIPT,\n tsx: TYPESCRIPT,\n js: JAVASCRIPT,\n py: PYTHON,\n go: GO,\n java: JAVA,\n rust: RUST,\n cs: C_SHARP,\n rb: RUBY,\n php: PHP,\n kotlin: KOTLIN,\n swift: SWIFT,\n scala: SCALA,\n dart: DART,\n lua: LUA,\n ex: ELIXIR,\n sh: BASH,\n zig: ZIG,\n c: C_LANG,\n cpp: CPP,\n objc: OBJC,\n ocaml: OCAML,\n rescript: RESCRIPT,\n solidity: SOLIDITY,\n // Container formats (vue/svelte/astro/html/erb/ejs) have no entry here on\n // purpose: parse.ts routes them to their embedded language's queries.\n};\n\nexport function queriesFor(langId: string): LangQueries | undefined {\n return BY_LANG[langId];\n}\n","/**\n * Embedded-script container formats — files whose code lives in script regions\n * inside a non-code host document:\n *\n * - single-file components: Vue (`.vue`), Svelte (`.svelte`), Astro\n * (`.astro`, frontmatter fence + client `<script>`s);\n * - plain HTML with inline `<script>` blocks (`.html`/`.htm`);\n * - `<% … %>` templates: ERB (`.erb`, Ruby) and EJS (`.ejs`, JavaScript).\n *\n * The graph parses these by masking: every character outside the script\n * region(s) is replaced with a space (newlines kept), and the result is parsed\n * with the ordinary grammar of the embedded language. Masking preserves byte\n * offsets and line numbers exactly, so defs/calls/imports land on their true\n * positions in the original file and every downstream stage (resolution,\n * impact, display) works unchanged. Pure and deterministic: identical source →\n * identical mask.\n *\n * Template/markup content is intentionally out of scope — imports, exported\n * bindings, and calls all live in the script regions, which is what call/import\n * edges are built from.\n */\n\nexport interface EmbeddedScript {\n /** Effective grammar to parse the masked source with ('ts' | 'tsx' | 'js' | 'rb'). */\n langId: string;\n /** The original source with all non-script content blanked to spaces. */\n masked: string;\n}\n\ninterface ScriptTagSpec {\n kind: 'script-tags';\n /** Grammar when a block has no `lang` attribute. */\n defaultLang: string;\n /** Also extract a leading `---` frontmatter fence (Astro). */\n frontmatter?: boolean;\n}\n\ninterface DelimitedSpec {\n kind: 'delimited';\n /** The container's fixed embedded language. */\n lang: string;\n}\n\n/** Container language ids (must match the languages.ts registry entries). */\nconst CONTAINERS: Record<string, ScriptTagSpec | DelimitedSpec> = {\n vue: { kind: 'script-tags', defaultLang: 'js' },\n svelte: { kind: 'script-tags', defaultLang: 'js' },\n astro: { kind: 'script-tags', defaultLang: 'ts', frontmatter: true }, // frontmatter is TS\n html: { kind: 'script-tags', defaultLang: 'js' },\n erb: { kind: 'delimited', lang: 'rb' },\n ejs: { kind: 'delimited', lang: 'js' },\n};\n\nexport function isContainerLang(langId: string): boolean {\n return langId in CONTAINERS;\n}\n\ninterface Range {\n start: number;\n end: number;\n}\n\n// `<script …>body</script>` — non-greedy body, so multiple blocks (Vue's\n// `<script>` + `<script setup>`, Svelte's `context=\"module\"`) each match.\n// A void `<script src=… />` has an empty body and contributes nothing.\nconst SCRIPT_RE = /<script\\b([^>]*)>([\\s\\S]*?)<\\/script\\s*>/gi;\n\n// Astro frontmatter: a `---` fence on the first line, closed by a `---` line.\nconst ASTRO_FENCE_RE = /^---\\r?\\n([\\s\\S]*?)(\\r?\\n)---(?:\\r?\\n|$)/;\n\n// `<% code %>` regions (ERB/EJS): `=`/`-` output tags included, `#`/`%%`\n// comment/escape forms excluded, optional `-`/`_` trim markers kept out of the\n// body. Non-greedy to the first closer, the standard template behaviour.\nconst DELIMITED_RE = /<%(?![%#])[=\\-_]?([\\s\\S]*?)[-_]?%>/g;\n\nconst LANG_ATTR_RE = /\\blang\\s*=\\s*[\"']?([A-Za-z]+)/i;\n\n/** Rank grammars so mixed blocks pick the most permissive one (tsx ⊇ ts ⊇ js for our queries). */\nconst GRAMMAR_RANK: Record<string, number> = { js: 0, ts: 1, tsx: 2 };\n\nfunction grammarForAttr(attrs: string, fallback: string): string {\n const m = LANG_ATTR_RE.exec(attrs);\n if (!m) return fallback;\n const lang = m[1].toLowerCase();\n if (lang === 'ts' || lang === 'typescript') return 'ts';\n if (lang === 'tsx') return 'tsx';\n return 'js'; // js / jsx / anything exotic → the JS grammar\n}\n\n/**\n * Extract the script regions of a container-format file. Returns null for\n * non-container language ids (the caller parses the source as-is). A container\n * file with no script region returns a fully-blank mask — the file still gets\n * a graph node, it just defines nothing.\n */\nexport function extractEmbeddedScript(langId: string, source: string): EmbeddedScript | null {\n const spec = CONTAINERS[langId];\n if (!spec) return null;\n\n if (spec.kind === 'delimited') {\n const ranges: Range[] = [];\n for (const m of source.matchAll(DELIMITED_RE)) {\n const body = m[1] ?? '';\n if (!body.trim()) continue;\n const start = m.index + m[0].indexOf(body);\n ranges.push({ start, end: start + body.length });\n }\n // Fragments are expressions/statements cut from one template — terminate\n // each region (on the trim/closing char, still inside the match, so the\n // length is unchanged) so `<%= a %> … <%= b %>` on one line parses as two\n // statements rather than one garbled one.\n return { langId: spec.lang, masked: mask(source, ranges, { terminate: true }) };\n }\n\n const ranges: Range[] = [];\n let grammar = spec.defaultLang;\n\n if (spec.frontmatter) {\n const fence = ASTRO_FENCE_RE.exec(source);\n if (fence) {\n const start = fence[0].indexOf('\\n') + 1;\n ranges.push({ start, end: start + fence[1].length });\n }\n }\n\n for (const m of source.matchAll(SCRIPT_RE)) {\n const attrs = m[1] ?? '';\n const body = m[2] ?? '';\n if (!body) continue;\n const start = m.index + '<script'.length + attrs.length + 1; // past the tag's '>'\n ranges.push({ start, end: start + body.length });\n const g = grammarForAttr(attrs, spec.defaultLang);\n if (GRAMMAR_RANK[g] > GRAMMAR_RANK[grammar]) grammar = g;\n }\n\n return { langId: grammar, masked: mask(source, ranges) };\n}\n\n/**\n * Blank everything outside `ranges` to spaces, preserving newlines (and CR).\n * With `terminate`, the character right after each range (part of the closing\n * delimiter, never a newline) becomes `;` — a statement boundary for the\n * embedded language.\n */\nfunction mask(source: string, ranges: Range[], opts: { terminate?: boolean } = {}): string {\n const out = new Array<string>(source.length);\n for (let i = 0; i < source.length; i++) {\n const ch = source[i];\n out[i] = ch === '\\n' || ch === '\\r' ? ch : ' ';\n }\n for (const r of ranges) {\n for (let i = r.start; i < r.end && i < source.length; i++) out[i] = source[i];\n if (opts.terminate && r.end < source.length && out[r.end] === ' ') out[r.end] = ';';\n }\n return out.join('');\n}\n","import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { createRequire } from 'node:module';\nimport { Parser, Language } from 'web-tree-sitter';\nimport { grammarDirs, ensureParserInit } from '../grammars.js';\n\n/**\n * Grammar loading for the **toolchain** corpus (infrastructure, CI, config).\n *\n * Deliberately separate from `engine/grammars.ts`'s language registry. Adding\n * these grammars to `LANGUAGES` would make `discover.ts` treat every `.tf` /\n * `.yaml` / `.json` in a repository as a *source* file, which silently changes:\n *\n * - `project-classification.ts` source-file counts — and those pick the\n * billing tier, so a config-heavy repo would jump a tier for free;\n * - DriftScore, coverage ratios, file-hotspot and code-quality metrics.\n *\n * So the toolchain corpus is discovered separately (via `docs-ingest`, which\n * already classifies exactly these files) and parsed with its own grammar set.\n * The source corpus is untouched.\n *\n * ## Why only HCL\n *\n * YAML, JSON and TOML are *not* parsed with tree-sitter here. The repository\n * already depends on `yaml` (which yields byte ranges on every node, plus\n * multi-document, anchor and merge-key support that a grammar would force us to\n * reimplement) and `smol-toml`. Reusing audited parsers beats adding grammars.\n * HCL has no such parser in the tree, so it gets a grammar.\n *\n * ## Supply chain\n *\n * `@tree-sitter-grammars/tree-sitter-hcl` carries a native `install` script\n * (`node-gyp-build`) for its Node bindings. It is therefore a **devDependency**\n * only: `scripts/bundle-grammars.mjs` copies its prebuilt `.wasm` into\n * `grammars/` at build time, and that file ships inside the published tarball.\n * End users receive the grammar; they never install the grammar package and\n * never run its install script.\n */\n\nconst require = createRequire(import.meta.url);\n\n/** Toolchain grammar ids → the `.wasm` base name and its owning npm package. */\nexport const TOOLCHAIN_GRAMMARS: Record<string, { wasm: string; pkg: string }> = {\n hcl: { wasm: 'tree-sitter-hcl', pkg: '@tree-sitter-grammars/tree-sitter-hcl' },\n};\n\nconst languageCache = new Map<string, Language>();\n\n/**\n * Directories to search for a toolchain grammar, highest priority first: the\n * same set the source grammars use (so `--grammars <dir>` and the bundled\n * `grammars/` both work), then the owning devDependency's package root as the\n * dev/test fallback before a `pnpm build` has run.\n */\nfunction toolchainGrammarDirs(pkg: string): string[] {\n const dirs = [...grammarDirs()];\n try {\n dirs.push(path.dirname(require.resolve(`${pkg}/package.json`)));\n } catch {\n /* devDependency absent (e.g. a published install) — the bundled dirs cover it */\n }\n return dirs;\n}\n\n/** Absolute path to a toolchain grammar's `.wasm`, or null when unavailable. */\nexport function resolveToolchainGrammar(id: string): string | null {\n const spec = TOOLCHAIN_GRAMMARS[id];\n if (!spec) return null;\n for (const dir of toolchainGrammarDirs(spec.pkg)) {\n const candidate = path.join(dir, `${spec.wasm}.wasm`);\n if (fs.existsSync(candidate)) return candidate;\n }\n return null;\n}\n\n/**\n * Load (and cache) a toolchain grammar.\n *\n * Returns `null` rather than throwing when the grammar is unavailable: a\n * missing toolchain grammar must degrade to \"no structural extraction for that\n * format\", never fail a build. The caller surfaces a warning.\n */\nexport async function loadToolchainLanguage(id: string): Promise<Language | null> {\n const cached = languageCache.get(id);\n if (cached) return cached;\n const wasmPath = resolveToolchainGrammar(id);\n if (!wasmPath) return null;\n try {\n await ensureParserInit();\n const language = await Language.load(fs.readFileSync(wasmPath));\n languageCache.set(id, language);\n return language;\n } catch {\n return null;\n }\n}\n\n/** A parser bound to a toolchain grammar, or null when the grammar is unavailable. */\nexport async function toolchainParser(id: string): Promise<Parser | null> {\n const language = await loadToolchainLanguage(id);\n if (!language) return null;\n const parser = new Parser();\n parser.setLanguage(language);\n return parser;\n}\n\n/**\n * Version string for the toolchain grammar set — a determinism input recorded\n * in provenance alongside `grammarSetVersion()`. Resolved from the owning\n * package when present; `unknown` once the package is absent (published\n * installs), which is stable because the shipped `.wasm` is fixed at publish.\n */\nexport function toolchainGrammarSetVersion(): string {\n const parts: string[] = [];\n for (const id of Object.keys(TOOLCHAIN_GRAMMARS).sort()) {\n const { pkg } = TOOLCHAIN_GRAMMARS[id];\n let version = 'bundled';\n try {\n const json = require.resolve(`${pkg}/package.json`);\n version = (JSON.parse(fs.readFileSync(json, 'utf8')) as { version: string }).version;\n } catch {\n /* published install — the bundled .wasm is fixed, so `bundled` is stable */\n }\n parts.push(`${pkg}@${version}`);\n }\n return parts.join(',');\n}\n\n/** Reset the language cache. Test-only. */\nexport function resetToolchainGrammarCache(): void {\n languageCache.clear();\n}\n","import { Query, type Language, type Node } from 'web-tree-sitter';\nimport {\n catalogForLanguage,\n sourceHasRoleNeedle,\n type AstRoleCatalogEntry,\n} from '../core-open/scanners/architecture/packs/ast-role-catalog.js';\nimport type { AstRoleHit } from '../core-open/scanners/architecture/ast-roles.js';\nimport type { FileParse } from './types.js';\nimport { loadCache } from './cache.js';\nimport { grammarSetVersion } from './grammars.js';\nimport { toolchainGrammarSetVersion } from './toolchain/grammars.js';\nimport { VERSION } from '../version.js';\n\n/**\n * Run pack-scoped role queries against the tree `buildGraph` already paid for.\n * A compile miss falls back to the needle matcher — never a second parse.\n */\n\nconst compiledCache = new Map<string, Query | null>();\n\nfunction compile(lang: Language, langId: string, source: string): Query | null {\n const key = `${langId}::${source}`;\n if (compiledCache.has(key)) return compiledCache.get(key) ?? null;\n let q: Query | null = null;\n try {\n q = new Query(lang, source);\n } catch {\n q = null;\n }\n compiledCache.set(key, q);\n return q;\n}\n\nfunction entryHits(\n lang: Language,\n langId: string,\n root: Node,\n source: string,\n entry: AstRoleCatalogEntry,\n): boolean {\n const compiled = compile(lang, langId, entry.query);\n if (!compiled) return sourceHasRoleNeedle(source, entry.needle);\n try {\n return compiled.captures(root).length > 0;\n } catch {\n return sourceHasRoleNeedle(source, entry.needle);\n }\n}\n\nexport function extractAstRolesFromTree(\n _rel: string,\n langId: string,\n language: Language,\n root: Node,\n source: string,\n): FileParse['roles'] {\n const catalog = catalogForLanguage(langId);\n if (catalog.length === 0) return undefined;\n const hits: NonNullable<FileParse['roles']> = [];\n for (const entry of catalog) {\n if (!entryHits(language, langId, root, source, entry)) continue;\n hits.push({\n role: entry.role,\n layer: entry.layer,\n confidence: entry.confidence,\n signal: entry.signal,\n packId: entry.packId,\n });\n }\n if (hits.length === 0) return undefined;\n hits.sort((a, b) =>\n b.confidence - a.confidence\n || a.packId.localeCompare(b.packId)\n || a.role.localeCompare(b.role),\n );\n return hits;\n}\n\nexport function fileRolesFromParses(parses: readonly FileParse[]): AstRoleHit[] {\n const hits: AstRoleHit[] = [];\n for (const parse of parses) {\n if (!parse.roles?.length) continue;\n const rel = (parse.rel || '.').replace(/\\\\/g, '/');\n for (const role of parse.roles) {\n hits.push({\n filePath: rel,\n role: role.role,\n layer: role.layer,\n confidence: role.confidence,\n signal: role.signal,\n packId: role.packId,\n });\n }\n }\n return hits;\n}\n\n/**\n * Recover architecture role hits from the versioned parse cache.\n * Used by the LSP when the map is loaded from disk (no in-process build).\n */\nexport function fileRolesFromParseCache(root: string): AstRoleHit[] {\n const grammars = `${grammarSetVersion()}+${toolchainGrammarSetVersion()}`;\n const cache = loadCache(root, { toolVersion: VERSION, grammars });\n return fileRolesFromParses(cache.allParses());\n}\n","import { Query, type Node, type Language } from 'web-tree-sitter';\nimport { parserFor, loadLanguage } from './grammars.js';\nimport { langById } from './languages.js';\nimport { queriesFor, type DefRule } from './queries.js';\nimport { extractEmbeddedScript } from './sfc.js';\nimport { hashString } from './hash.js';\nimport { redactSecrets } from '../core-open/utils/redact.js';\nimport { extractAstRolesFromTree } from './ast-roles.js';\nimport type { FileParse, RawCall, RawDef, RawGuard, RawHeritage, RawImport, RawTypeRef } from './types.js';\n\n/**\n * Parse a single file's source into the raw symbol/edge tables. Pure and\n * deterministic: identical (lang, source) → identical FileParse. Cross-file\n * resolution is a later stage (resolve.ts); here we only see one file.\n */\n\n// Compiled queries are cached per (lang, querySource) — compilation is the\n// expensive part and queries are reused across every file of a language.\nconst compiledCache = new Map<string, Query | null>();\n\nfunction compile(lang: Language, langId: string, source: string): Query | null {\n const key = `${langId}::${source}`;\n if (compiledCache.has(key)) return compiledCache.get(key) ?? null;\n let q: Query | null = null;\n try {\n q = new Query(lang, source);\n } catch {\n q = null; // grammar doesn't support this pattern — skip it gracefully\n }\n compiledCache.set(key, q);\n return q;\n}\n\nfunction namedCapture(\n captures: { name: string; node: Node }[],\n name: string,\n): Node | undefined {\n return captures.find((c) => c.name === name)?.node;\n}\n\n/**\n * Wrapper node types that sit between a *qualified* callee identifier and the\n * call node (`obj.foo()` / `pkg::foo()` / `recv.foo()` across the grammars).\n * A bare call's identifier hangs directly off the call node instead.\n */\nconst MEMBER_PARENT_TYPES = new Set([\n 'member_expression', // ts/js: obj.foo()\n 'attribute', // python: obj.foo()\n 'selector_expression', // go: pkg.Foo()\n 'field_expression', // rust/scala/c/cpp/zig: recv.foo()\n 'scoped_identifier', // rust: Type::foo()\n 'member_access_expression', // c#: obj.Foo()\n 'qualified_identifier', // c++: ns::f(), Type::m()\n 'dot', // elixir: Mod.fun()\n 'navigation_suffix', // kotlin/swift: recv.foo()\n 'member_call_expression', // php: $x->m()\n 'nullsafe_member_call_expression', // php: $x?->m()\n 'scoped_call_expression', // php: X::m()\n 'unconditional_assignable_selector', // dart: x.foo()\n 'conditional_assignable_selector', // dart: x?.foo()\n 'cascade_selector', // dart: x..foo()\n 'value_identifier_path', // rescript: Mod.foo() (only exists for qualified calls)\n]);\n\n/**\n * Was this callee identifier part of a qualified call (`x.foo()`) rather than a\n * bare one (`foo()`)? The queries capture only the trailing name, so the\n * resolver needs this bit to know a same-file def with the same short name is\n * NOT evidence — the receiver points elsewhere (see resolve.ts).\n */\nfunction isQualifiedCallee(node: Node): boolean {\n const parent = node.parent;\n if (!parent) return false;\n if (MEMBER_PARENT_TYPES.has(parent.type)) return true;\n // Java `method_invocation` and Ruby `call` keep receiver and name on the call\n // node itself — qualified iff the receiver/object field is present.\n if (parent.type === 'method_invocation') return parent.childForFieldName('object') != null;\n // Ruby `call` carries a `receiver` field when qualified; Python's `call` has\n // no such field (its qualified form is the `attribute` wrapper above), and\n // Elixir's `call` has none either (its qualified form is the `dot` wrapper).\n if (parent.type === 'call') return parent.childForFieldName('receiver') != null;\n // Lua wraps every callee in `variable`; qualified iff a `table` receiver exists\n // (`repo.fetch()` / `repo:method()` carry table:, bare `foo()` has only name:).\n if (parent.type === 'variable') return parent.childForFieldName('table') != null;\n // OCaml wraps every callee in `value_path`; qualified iff a module path is\n // present (`Mod.f x` has two named children, bare `f x` has one).\n if (parent.type === 'value_path') return parent.namedChildCount > 1;\n // ObjC message sends: `[obj doThing]` points elsewhere, but `[self …]` /\n // `[super …]` stay within the class — same-file evidence still counts there.\n if (parent.type === 'message_expression') {\n const recv = parent.childForFieldName('receiver');\n return recv != null && recv.text !== 'self' && recv.text !== 'super';\n }\n return false;\n}\n\nfunction signatureOf(source: string, def: Node, langId: string): string {\n // The text up to the body opening, single-lined, bounded — a deterministic,\n // human-meaningful signature without dragging in the whole body.\n // - Brace languages: cut at the body `{`.\n // - Python: cut at the def-terminating `:` at bracket-depth 0 (so a `:` inside\n // typed params / generics / the `-> Dict[...]` return type doesn't cut it,\n // and the docstring/body is excluded).\n // - Ruby: the header is the first line.\n const full = source.slice(def.startIndex, def.endIndex);\n let head: string;\n if (langId === 'py') head = pythonHeader(full);\n // Ruby/Elixir: `do…end` bodies (and Elixir `%{}` default args would break a\n // brace cut) — the header is the first line.\n else if (langId === 'rb' || langId === 'ex') head = full.split('\\n')[0];\n else {\n const braceIdx = full.indexOf('{');\n head = braceIdx >= 0 ? full.slice(0, braceIdx) : full.split('\\n')[0];\n }\n head = head.replace(/\\s+/g, ' ').trim().replace(/[:{]\\s*$/, '').trim();\n return head.length > 200 ? `${head.slice(0, 197)}...` : head;\n}\n\n/**\n * A short doc summary for a definition — the leading doc-comment (JSDoc/TSDoc,\n * `//`, `///`, `#`) directly above it, or (Python) the body docstring. Gives a\n * tersely-named symbol real prose for semantic search. Deterministic, marker-\n * stripped, whitespace-collapsed, truncated; never the full body. Returns\n * undefined when there is no doc.\n */\nfunction scrubbedDoc(source: string, def: Node, langId: string): string | undefined {\n const doc = docOf(source, def, langId);\n return doc === undefined ? undefined : redactSecrets(doc);\n}\n\nfunction docOf(source: string, def: Node, langId: string): string | undefined {\n const lines = source.split('\\n');\n if (langId === 'py') return pythonDocstring(lines, def.startPosition.row);\n return leadingComment(lines, def.startPosition.row);\n}\n\n/** Contiguous comment lines directly above `row` (0-based), markers stripped. */\nfunction leadingComment(lines: string[], row: number): string | undefined {\n const collected: string[] = [];\n for (let r = row - 1; r >= 0; r--) {\n const line = lines[r].trim();\n if (line === '') break; // a blank line detaches the comment\n if (/^(\\/\\/|\\/\\*\\*?|\\*\\/?|#|;|--)/.test(line)) collected.unshift(line);\n else break;\n }\n if (!collected.length) return undefined;\n const text = collected\n .join('\\n')\n .replace(/\\/\\*\\*?|\\*\\//g, ' ') // /** and */\n .replace(/^\\s*[*]\\s?/gm, ' ') // leading * in block comments\n .replace(/^\\s*(\\/\\/+|#+|;+|--)\\s?/gm, ' ') // line-comment markers\n .replace(/@\\w+/g, ' '); // drop JSDoc tags (@param, @returns…)\n return clip(text);\n}\n\n/** The first string literal in a Python body (the docstring), if present. */\nfunction pythonDocstring(lines: string[], row: number): string | undefined {\n // Find the header's terminating line (ends with ':'), then the first non-blank line.\n let r = row;\n while (r < lines.length && !/:\\s*(#.*)?$/.test(lines[r])) r++;\n let j = r + 1;\n while (j < lines.length && lines[j].trim() === '') j++;\n const first = lines[j]?.trim() ?? '';\n const m = /^[rubfRUBF]{0,2}(\"\"\"|''')/.exec(first);\n if (!m) return undefined;\n const q = m[1];\n let rest = first.slice(first.indexOf(q) + 3);\n if (rest.includes(q)) return clip(rest.slice(0, rest.indexOf(q))); // single-line docstring\n const parts = [rest];\n for (let k = j + 1; k < lines.length; k++) {\n const idx = lines[k].indexOf(q);\n if (idx >= 0) {\n parts.push(lines[k].slice(0, idx));\n break;\n }\n parts.push(lines[k]);\n }\n return clip(parts.join(' '));\n}\n\nfunction clip(s: string): string | undefined {\n const t = s.replace(/\\s+/g, ' ').trim();\n if (!t) return undefined;\n return t.length > 200 ? `${t.slice(0, 197)}...` : t;\n}\n\n/** Python def/class header up to the terminating `:` at bracket-depth 0. */\nfunction pythonHeader(full: string): string {\n let depth = 0;\n for (let i = 0; i < full.length; i++) {\n const c = full[i];\n if (c === '(' || c === '[' || c === '{') depth++;\n else if (c === ')' || c === ']' || c === '}') depth--;\n else if (c === ':' && depth === 0) return full.slice(0, i);\n }\n return full.split('\\n')[0];\n}\n\nexport async function parseSource(\n rel: string,\n langId: string,\n source: string,\n): Promise<FileParse> {\n // Pure extractors (no tree-sitter) — SQL DDL topology.\n if (langId === 'sql') {\n const { parseSqlFile } = await import('./sql-extract.js');\n return parseSqlFile(rel, source);\n }\n\n // Container formats (Vue/Svelte/Astro SFCs): parse the embedded script\n // region with the JS/TS grammar over a position-preserving mask, so every\n // offset/line below refers to the original file. The node keeps the\n // container's own lang id.\n const embedded = extractEmbeddedScript(langId, source);\n const effLangId = embedded?.langId ?? langId;\n const text = embedded?.masked ?? source;\n const def = langById(effLangId);\n const langQueries = queriesFor(effLangId);\n const hash = hashString(source);\n const result: FileParse = {\n rel,\n lang: langId,\n hash,\n bytes: Buffer.byteLength(source, 'utf8'),\n defs: [],\n calls: [],\n imports: [],\n heritage: [],\n typeRefs: [],\n guards: [],\n };\n if (!def || !langQueries) return result;\n\n const language = await loadLanguage(effLangId);\n const parser = await parserFor(def);\n const tree = parser.parse(text);\n if (!tree) return result;\n const root = tree.rootNode;\n\n // --- definitions ---\n const rawDefs: (RawDef & { _start: number; _end: number })[] = [];\n for (const rule of langQueries.defs) {\n collectDefs(language, effLangId, text, root, rule, rawDefs);\n }\n // Dedupe definitions that overlap on the same name+range (multiple rules can\n // match the same node, e.g. abstract vs plain class).\n const seen = new Set<string>();\n const deduped = rawDefs.filter((d) => {\n const key = `${d._start}:${d._end}:${d.name}:${d.kind}`;\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n // Compute dotted qualified names by nesting (smallest enclosing def is parent).\n const byStart = [...deduped].sort((a, b) => a._start - b._start || b._end - a._end);\n for (const d of byStart) {\n const parent = enclosing(byStart, d._start, d._end);\n d.qualifiedName = parent ? `${parent.qualifiedName}.${d.name}` : d.name;\n }\n result.defs = byStart\n .map((d) => {\n const { _start, _end, ...rest } = d;\n void _start;\n void _end;\n return rest;\n })\n .sort(\n (a, b) =>\n a.startLine - b.startLine ||\n a.qualifiedName.localeCompare(b.qualifiedName) ||\n a.name.localeCompare(b.name),\n );\n\n // --- calls ---\n // A definition's own name node must never double as a call site: in\n // expression-based grammars (Elixir) a `def foo(…)` head is itself a `call`\n // node, which would fabricate a recursion edge for every definition.\n const defNameBytes = new Set<number>();\n for (const qsrc of langQueries.defs) {\n const q = compile(language, effLangId, qsrc.query);\n if (!q) continue;\n for (const m of q.matches(root)) {\n const nameNode = namedCapture(m.captures, 'name');\n if (nameNode) defNameBytes.add(nameNode.startIndex);\n }\n }\n const calls: RawCall[] = [];\n for (const qsrc of langQueries.calls) {\n const q = compile(language, effLangId, qsrc);\n if (!q) continue;\n for (const cap of q.captures(root)) {\n if (cap.name !== 'callee') continue;\n if (defNameBytes.has(cap.node.startIndex)) continue;\n calls.push({\n callee: cap.node.text,\n byte: cap.node.startIndex,\n line: cap.node.startPosition.row + 1,\n qualified: isQualifiedCallee(cap.node),\n });\n }\n }\n result.calls = calls.sort((a, b) => a.byte - b.byte || a.callee.localeCompare(b.callee));\n\n // --- imports ---\n const imports: RawImport[] = [];\n for (const qsrc of langQueries.imports) {\n const q = compile(language, effLangId, qsrc);\n if (!q) continue;\n for (const cap of q.captures(root)) {\n if (cap.name !== 'source') continue;\n imports.push({ source: stripQuotes(cap.node.text) });\n }\n }\n result.imports = dedupeImports(imports);\n\n // --- heritage (extends / implements) ---\n const heritage: RawHeritage[] = [];\n for (const qsrc of langQueries.heritage) {\n const q = compile(language, effLangId, qsrc);\n if (!q) continue;\n for (const cap of q.captures(root)) {\n if (cap.name !== 'extends' && cap.name !== 'implements') continue;\n heritage.push({ superName: cap.node.text, byte: cap.node.startIndex, kind: cap.name });\n }\n }\n result.heritage = heritage.sort(\n (a, b) =>\n a.byte - b.byte || a.kind.localeCompare(b.kind) || a.superName.localeCompare(b.superName),\n );\n\n // --- type references (constructor-param / field types → DI dependency edges) ---\n const typeRefs: RawTypeRef[] = [];\n for (const qsrc of langQueries.typeRefs ?? []) {\n const q = compile(language, effLangId, qsrc);\n if (!q) continue;\n for (const cap of q.captures(root)) {\n if (cap.name !== 'typeref') continue;\n typeRefs.push({ name: cap.node.text, byte: cap.node.startIndex });\n }\n }\n result.typeRefs = typeRefs.sort((a, b) => a.byte - b.byte || a.name.localeCompare(b.name));\n\n // --- namespaces declared by this file (C# cross-namespace resolution) ---\n const namespaces = new Set<string>();\n for (const qsrc of langQueries.namespaces ?? []) {\n const q = compile(language, effLangId, qsrc);\n if (!q) continue;\n for (const cap of q.captures(root)) {\n if (cap.name !== 'namespace') continue;\n const name = cap.node.text.trim();\n if (name) namespaces.add(name);\n }\n }\n if (namespaces.size) result.namespaces = [...namespaces].sort();\n\n // --- guards (assert-like expressions → invariant facts) ---\n const guards: RawGuard[] = [];\n for (const qsrc of langQueries.guards ?? []) {\n const q = compile(language, effLangId, qsrc);\n if (!q) continue;\n for (const cap of q.captures(root)) {\n if (cap.name !== 'guard') continue;\n const expr = cap.node.text.replace(/\\s+/g, ' ').trim();\n guards.push({ expr: expr.length > 160 ? `${expr.slice(0, 157)}...` : expr, line: cap.node.startPosition.row + 1 });\n }\n }\n result.guards = guards.sort((a, b) => a.line - b.line || a.expr.localeCompare(b.expr));\n\n const roles = extractAstRolesFromTree(rel, effLangId, language, root, text);\n if (roles) result.roles = roles;\n\n tree.delete();\n return result;\n}\n\n/**\n * Dart splits a function into sibling signature + body nodes (and wraps class\n * methods in a method_signature). Return the trailing function_body so the def\n * span covers it — otherwise calls inside the body attribute to the file and\n * nested defs do not nest.\n */\nfunction dartBodyOf(defNode: Node): Node | null {\n if (!defNode.type.endsWith('_signature')) return null;\n if (defNode.nextNamedSibling?.type === 'function_body') return defNode.nextNamedSibling;\n const wrapper = defNode.parent;\n if (wrapper?.type === 'method_signature' && wrapper.nextNamedSibling?.type === 'function_body') {\n return wrapper.nextNamedSibling;\n }\n return null;\n}\n\nfunction collectDefs(\n language: Language,\n langId: string,\n source: string,\n root: Node,\n rule: DefRule,\n out: (RawDef & { _start: number; _end: number })[],\n): void {\n const q = compile(language, langId, rule.query);\n if (!q) return;\n for (const match of q.matches(root)) {\n const defNode = namedCapture(match.captures, 'def');\n const nameNode = namedCapture(match.captures, 'name');\n if (!defNode || !nameNode) continue;\n // Dart splits a function into sibling signature + body nodes; the def span\n // must cover the body or calls inside it would attribute to the file, and\n // nested defs would not nest.\n const spanEnd = dartBodyOf(defNode) ?? defNode;\n out.push({\n kind: rule.kind,\n name: nameNode.text,\n qualifiedName: nameNode.text, // refined after nesting is computed\n startLine: defNode.startPosition.row + 1,\n endLine: spanEnd.endPosition.row + 1,\n startByte: defNode.startIndex,\n endByte: spanEnd.endIndex,\n signature:\n rule.kind === 'function' || rule.kind === 'method'\n ? redactSecrets(signatureOf(source, defNode, langId))\n : undefined,\n // GUARDRAILS §1: signatures/docs are lifted verbatim from source and are\n // persisted (graph.json, `vg share` commits it) — scrub at ingest.\n doc: scrubbedDoc(source, defNode, langId),\n visibility: undefined,\n _start: defNode.startIndex,\n _end: spanEnd.endIndex,\n });\n }\n}\n\n/** The smallest def strictly containing [start,end) other than itself. */\nfunction enclosing(\n defs: { qualifiedName: string; _start: number; _end: number }[],\n start: number,\n end: number,\n): { qualifiedName: string } | undefined {\n let best: { qualifiedName: string; _start: number; _end: number } | undefined;\n for (const d of defs) {\n if (d._start === start && d._end === end) continue;\n if (d._start <= start && d._end >= end) {\n if (!best || d._end - d._start < best._end - best._start) best = d;\n }\n }\n return best;\n}\n\nfunction stripQuotes(text: string): string {\n return text.replace(/^['\"`]|['\"`]$/g, '');\n}\n\nfunction dedupeImports(imports: RawImport[]): RawImport[] {\n const seen = new Set<string>();\n const out: RawImport[] = [];\n for (const i of imports.sort((a, b) => a.source.localeCompare(b.source))) {\n if (seen.has(i.source)) continue;\n seen.add(i.source);\n out.push(i);\n }\n return out;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/engine/grammars.ts","../src/engine/queries.ts","../src/engine/sfc.ts","../src/engine/toolchain/grammars.ts","../src/engine/ast-roles.ts","../src/engine/parse.ts"],"names":["require","ranges","createRequire","languageCache","path2","fs2","Language","Parser","compiledCache","compile","Query"],"mappings":"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","file":"chunk-6MIJLO5B.js","sourcesContent":["import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { createRequire } from 'node:module';\nimport { Parser, Language } from 'web-tree-sitter';\nimport { langById, LANGUAGES, type LanguageDef } from './languages.js';\n\n/**\n * Grammar loader. Resolves the pre-compiled tree-sitter `.wasm` for a language\n * from, in order:\n * 1. the `--grammars <dir>` override (offline / air-gapped)\n * 2. ../grammars next to dist (bundled in the published package)\n * 3. the installed `tree-sitter-wasms` package (dev / fallback)\n *\n * Languages are cached. The grammar set version is recorded in provenance so the\n * determinism contract is explicit about which grammars produced the graph.\n */\n\nconst require = createRequire(import.meta.url);\n\nlet parserInit: Promise<void> | null = null;\nconst languageCache = new Map<string, Language>();\n\n// The `--grammars <dir>` override, set per process (and per parse worker, via the\n// parse payload) before parsing. Configured by a command option, not an env var.\nlet grammarsOverride: string | undefined;\nexport function setGrammarsOverride(dir?: string): void {\n grammarsOverride = dir ? path.resolve(dir) : undefined;\n}\n\nfunction thisDir(): string {\n return path.dirname(fileURLToPath(import.meta.url));\n}\n\nlet cachedTreeSitterWasmsDir: string | null = null;\nfunction treeSitterWasmsOutDir(): string {\n if (cachedTreeSitterWasmsDir) return cachedTreeSitterWasmsDir;\n const pkgJson = require.resolve('tree-sitter-wasms/package.json');\n cachedTreeSitterWasmsDir = path.join(path.dirname(pkgJson), 'out');\n return cachedTreeSitterWasmsDir;\n}\n\n/**\n * The grammar-set version string recorded in provenance (determinism input).\n * The `+swift-vendored` suffix marks the vendored tree-sitter-swift build (see\n * vendor/README.md) that replaces the tree-sitter-wasms prebuilt; bump the\n * suffix if a vendored grammar is regenerated, so caches invalidate.\n */\nexport function grammarSetVersion(): string {\n try {\n const pkgJson = require.resolve('tree-sitter-wasms/package.json');\n const { version } = JSON.parse(fs.readFileSync(pkgJson, 'utf8')) as { version: string };\n return `tree-sitter-wasms@${version}+swift-vendored@0.7.1`;\n } catch {\n return 'tree-sitter-wasms@unknown+swift-vendored@0.7.1';\n }\n}\n\n/**\n * Candidate directories holding grammar .wasm files, highest priority first.\n * The vendor/ dirs are OVERLAYS holding only rebuilt replacements for\n * defective prebuilts (vendor/README.md) — they outrank the tree-sitter-wasms\n * fallback so dev/test runs without a prior `pnpm build` never load a\n * known-bad prebuilt, but they are never a complete grammar set.\n */\nexport function grammarDirs(): string[] {\n const dirs: string[] = [];\n // the `--grammars <dir>` override (offline / air-gapped), if set\n if (grammarsOverride) dirs.push(grammarsOverride);\n // ../grammars relative to dist/ (bundled in the published artifact)\n dirs.push(path.join(thisDir(), '..', 'grammars'));\n dirs.push(path.join(thisDir(), 'grammars'));\n // vendored overlays\n dirs.push(path.join(thisDir(), '..', 'vendor')); // from dist/\n dirs.push(path.join(thisDir(), '..', '..', 'vendor')); // from src/engine/\n // node_modules fallback\n try {\n dirs.push(treeSitterWasmsOutDir());\n } catch {\n /* tree-sitter-wasms not resolvable — rely on the dirs above */\n }\n return dirs;\n}\n\nconst isVendorOverlay = (dir: string): boolean => path.basename(dir) === 'vendor';\n\n/**\n * The first existing directory that holds a grammar .wasm set. Skips the\n * vendor overlays — they hold single replacement files, never a full set.\n * For a complete per-language resolution use resolvedGrammarFiles().\n */\nexport function grammarsSourceDir(): string | null {\n for (const dir of grammarDirs()) {\n if (isVendorOverlay(dir)) continue;\n if (fs.existsSync(dir) && fs.readdirSync(dir).some((f) => f.endsWith('.wasm'))) return dir;\n }\n return null;\n}\n\nfunction resolveGrammarFile(grammarFile: string): string {\n const fileName = `${grammarFile}.wasm`;\n for (const dir of grammarDirs()) {\n const candidate = path.join(dir, fileName);\n if (fs.existsSync(candidate)) return candidate;\n }\n throw new Error(\n `grammar \"${fileName}\" not found. Looked in: ${grammarDirs().join(', ')}. ` +\n `Pass --grammars <dir> pointing at a directory of grammar .wasm files.`,\n );\n}\n\n/**\n * Every registered language's grammar .wasm resolved through the same\n * priority order the parser uses (override > bundled > vendor overlay >\n * tree-sitter-wasms). Used by `vg bundle` so an air-gapped bundle always\n * carries the exact grammar files a scan would load.\n */\nexport function resolvedGrammarFiles(): { fileName: string; absPath: string }[] {\n return LANGUAGES.map((l) => ({\n fileName: `${l.grammarFile}.wasm`,\n absPath: resolveGrammarFile(l.grammarFile),\n }));\n}\n\nexport async function ensureParserInit(): Promise<void> {\n if (!parserInit) parserInit = Parser.init();\n await parserInit;\n}\n\n/** Load (and cache) the tree-sitter Language for a vg language id. */\nexport async function loadLanguage(langId: string): Promise<Language> {\n const cached = languageCache.get(langId);\n if (cached) return cached;\n const def = langById(langId);\n if (!def) throw new Error(`unknown language id \"${langId}\"`);\n await ensureParserInit();\n const wasmPath = resolveGrammarFile(def.grammarFile);\n const language = await Language.load(fs.readFileSync(wasmPath));\n languageCache.set(langId, language);\n return language;\n}\n\n// One reused parser per language: a Parser allocates in the shared wasm heap\n// and is never garbage-collected there, so a parser-per-file leaks the heap\n// until parsing dies with \"memory access out of bounds\" on large builds\n// (observed ~10k files in one process). Parsers are reusable across parse()\n// calls; resetParser() discards one after a failed parse left it mid-state.\nconst parserCache = new Map<string, Parser>();\n\n/** A per-language reused parser bound to the language's grammar. */\nexport async function parserFor(def: LanguageDef): Promise<Parser> {\n const cached = parserCache.get(def.id);\n if (cached) return cached;\n const language = await loadLanguage(def.id);\n const parser = new Parser();\n parser.setLanguage(language);\n parserCache.set(def.id, parser);\n return parser;\n}\n\n/** Drop a language's cached parser (after a parse error left it mid-state). */\nexport function resetParser(langId: string): void {\n const parser = parserCache.get(langId);\n if (!parser) return;\n parserCache.delete(langId);\n try {\n parser.delete();\n } catch {\n // The wasm side may already be unusable; dropping the reference is enough.\n }\n}\n","import type { NodeKind } from '../schema.js';\n\n/**\n * Per-language tree-sitter queries driving extraction. Each query uses a small,\n * fixed capture vocabulary so the generic extractor (parse.ts) stays\n * language-agnostic:\n *\n * @def — a definition node (its kind comes from the rule)\n * @name — the name node of that definition\n * @callee — a called name node (a call edge, resolved later)\n * @source — an import/require source string node (incl. quotes)\n * @extends / @implements — a base type name node (a heritage edge)\n *\n * Queries are best-effort per language: if a pattern fails to compile against a\n * grammar it is skipped (logged once), so one bad rule never disables a whole\n * language. Coverage is deepest for the TS/JS-first audience and a solid\n * baseline elsewhere — honestly recorded as `heuristic` resolution.\n */\n\nexport interface DefRule {\n kind: NodeKind;\n query: string;\n}\n\nexport interface LangQueries {\n defs: DefRule[];\n calls: string[];\n imports: string[];\n heritage: string[];\n /** Assert/guard expressions captured as @guard → invariant facts. */\n guards?: string[];\n /**\n * Constructor-parameter / field declared types captured as @typeref — a\n * structural dependency (e.g. Spring constructor/field injection) that never\n * appears as a `call_expression`/`object_creation_expression`, so it needs its\n * own capture. Resolved to a `references` edge (not `call`) in resolve.ts.\n */\n typeRefs?: string[];\n /**\n * Namespace declarations captured as @namespace — the namespaces a file\n * declares its types in. For languages where a namespace is decoupled from\n * the directory (C#), this lets the resolver connect a cross-directory\n * reference when the caller `using`-imports that namespace. Absent for\n * languages that have no namespace concept or where package == directory.\n */\n namespaces?: string[];\n}\n\n// assert-like call detection, shared by the C-family languages.\nconst ASSERT_CALLS = [\n '(call_expression function: (identifier) @_g (#match? @_g \"^(assert|invariant|require|precondition|invariantViolation)$\")) @guard',\n];\n\nconst TS_JS_CALLS = [\n '(call_expression function: (identifier) @callee)',\n '(call_expression function: (member_expression property: (property_identifier) @callee))',\n '(new_expression constructor: (identifier) @callee)',\n];\n\nconst TS_JS_IMPORTS = [\n '(import_statement source: (string) @source)',\n '(call_expression function: (identifier) @_req (#eq? @_req \"require\") arguments: (arguments (string) @source))',\n];\n\nconst TYPESCRIPT: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_declaration name: (identifier) @name) @def' },\n {\n kind: 'function',\n query: '(generator_function_declaration name: (identifier) @name) @def',\n },\n {\n kind: 'function',\n query:\n '(variable_declarator name: (identifier) @name value: [(arrow_function) (function_expression)]) @def',\n },\n { kind: 'method', query: '(method_definition name: (property_identifier) @name) @def' },\n // Object-literal methods: `{ showToast: function () {} }` / `{ showToast: () => {} }`\n // (common in Vue/NS utilities; class method_definition alone does not cover these).\n {\n kind: 'method',\n query:\n '(pair key: (property_identifier) @name value: [(function_expression) (arrow_function)] @def)',\n },\n { kind: 'class', query: '(class_declaration name: (type_identifier) @name) @def' },\n { kind: 'class', query: '(abstract_class_declaration name: (type_identifier) @name) @def' },\n { kind: 'interface', query: '(interface_declaration name: (type_identifier) @name) @def' },\n ],\n calls: TS_JS_CALLS,\n imports: TS_JS_IMPORTS,\n heritage: [\n '(class_heritage (extends_clause value: (identifier) @extends))',\n '(class_heritage (extends_clause value: (member_expression property: (property_identifier) @extends)))',\n '(class_heritage (implements_clause (type_identifier) @implements))',\n '(extends_type_clause type: (type_identifier) @extends)',\n ],\n guards: ASSERT_CALLS,\n};\n\nconst JAVASCRIPT: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_declaration name: (identifier) @name) @def' },\n {\n kind: 'function',\n query: '(generator_function_declaration name: (identifier) @name) @def',\n },\n {\n kind: 'function',\n query:\n '(variable_declarator name: (identifier) @name value: [(arrow_function) (function_expression)]) @def',\n },\n { kind: 'method', query: '(method_definition name: (property_identifier) @name) @def' },\n // Object-literal methods (see TYPESCRIPT above).\n {\n kind: 'method',\n query:\n '(pair key: (property_identifier) @name value: [(function_expression) (arrow_function)] @def)',\n },\n { kind: 'class', query: '(class_declaration name: (identifier) @name) @def' },\n ],\n calls: TS_JS_CALLS,\n imports: TS_JS_IMPORTS,\n heritage: [\n '(class_heritage (identifier) @extends)',\n '(class_heritage (member_expression property: (property_identifier) @extends))',\n ],\n guards: ASSERT_CALLS,\n};\n\nconst PYTHON: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_definition name: (identifier) @name) @def' },\n { kind: 'class', query: '(class_definition name: (identifier) @name) @def' },\n ],\n calls: [\n '(call function: (identifier) @callee)',\n '(call function: (attribute attribute: (identifier) @callee))',\n ],\n imports: [\n '(import_statement name: (dotted_name) @source)',\n '(import_from_statement module_name: (dotted_name) @source)',\n // Relative imports (`from .models import X`, `from ..core.utils import Y`) —\n // the module is a `relative_import` node, not a `dotted_name`. These are the\n // bulk of intra-package edges and were previously dropped entirely.\n '(import_from_statement module_name: (relative_import) @source)',\n ],\n heritage: ['(class_definition superclasses: (argument_list (identifier) @extends))'],\n guards: ['(assert_statement) @guard'],\n};\n\nconst GO: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_declaration name: (identifier) @name) @def' },\n { kind: 'method', query: '(method_declaration name: (field_identifier) @name) @def' },\n { kind: 'class', query: '(type_declaration (type_spec name: (type_identifier) @name)) @def' },\n ],\n calls: [\n '(call_expression function: (identifier) @callee)',\n '(call_expression function: (selector_expression field: (field_identifier) @callee))',\n ],\n imports: ['(import_spec path: (interpreted_string_literal) @source)'],\n heritage: [],\n};\n\nconst JAVA: LangQueries = {\n defs: [\n { kind: 'method', query: '(method_declaration name: (identifier) @name) @def' },\n { kind: 'method', query: '(constructor_declaration name: (identifier) @name) @def' },\n { kind: 'class', query: '(class_declaration name: (identifier) @name) @def' },\n { kind: 'interface', query: '(interface_declaration name: (identifier) @name) @def' },\n ],\n calls: ['(method_invocation name: (identifier) @callee)', '(object_creation_expression type: (type_identifier) @callee)'],\n imports: ['(import_declaration (scoped_identifier) @source)'],\n heritage: [\n '(superclass (type_identifier) @extends)',\n '(super_interfaces (type_list (type_identifier) @implements))',\n ],\n // Spring-style dependency injection wires a collaborator via a constructor\n // parameter or a field, never a `new`/method call — so without these, an\n // injected repository/service shows zero callers even when it is the sole\n // reason five other classes exist.\n typeRefs: [\n '(constructor_declaration parameters: (formal_parameters (formal_parameter type: (type_identifier) @typeref)))',\n '(field_declaration type: (type_identifier) @typeref)',\n ],\n // A Java package is a directory, so cross-directory (cross-package) DI\n // resolves through `import a.b.Foo`. Capturing the package lets the resolver\n // reach the implementation in another package when the caller imports it.\n namespaces: ['(package_declaration (scoped_identifier) @namespace)', '(package_declaration (identifier) @namespace)'],\n};\n\nconst RUST: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_item name: (identifier) @name) @def' },\n { kind: 'class', query: '(struct_item name: (type_identifier) @name) @def' },\n { kind: 'class', query: '(enum_item name: (type_identifier) @name) @def' },\n { kind: 'interface', query: '(trait_item name: (type_identifier) @name) @def' },\n // Rust colocates tests: `#[cfg(test)] mod tests` sits at the bottom of the\n // file it tests. Without the module capture every `#[test] fn` is indexed\n // as a bare top-level function, so nothing downstream can tell a test from\n // production code (a test name echoing an ask outranked the code it\n // covers). Capturing it also qualifies ordinary `mod` members, matching\n // what Ruby/Scala/C++/OCaml already do.\n { kind: 'module', query: '(mod_item name: (identifier) @name) @def' },\n ],\n calls: [\n '(call_expression function: (identifier) @callee)',\n '(call_expression function: (field_expression field: (field_identifier) @callee))',\n '(call_expression function: (scoped_identifier name: (identifier) @callee))',\n ],\n imports: ['(use_declaration (scoped_identifier) @source)'],\n heritage: [],\n};\n\nconst C_SHARP: LangQueries = {\n defs: [\n { kind: 'method', query: '(method_declaration name: (identifier) @name) @def' },\n { kind: 'class', query: '(class_declaration name: (identifier) @name) @def' },\n { kind: 'interface', query: '(interface_declaration name: (identifier) @name) @def' },\n { kind: 'class', query: '(struct_declaration name: (identifier) @name) @def' },\n // Enums and records are load-bearing lookup targets in real C# codebases\n // (permission enums, DTO records); without these captures a `Privilege`-\n // style lookup only ever resolves via the literal text fallthrough.\n // 'class' is this engine's established kind for enum-like types (see the\n // Rust enum_item and C enum_specifier mappings).\n { kind: 'class', query: '(enum_declaration name: (identifier) @name) @def' },\n { kind: 'class', query: '(record_declaration name: (identifier) @name) @def' },\n ],\n calls: [\n '(invocation_expression function: (member_access_expression name: (identifier) @callee))',\n '(invocation_expression function: (identifier) @callee)',\n // `new Foo(...)` is an instantiation dependency (the caller depends on Foo),\n // and it is how a test most directly links to the class under test — without\n // it a test that only constructs the service showed up as no coverage.\n '(object_creation_expression type: (identifier) @callee)',\n ],\n imports: ['(using_directive (qualified_name) @source)', '(using_directive (identifier) @source)'],\n heritage: ['(base_list (identifier) @extends)'],\n // Dependency-injection wiring: the interface a class depends on appears as a\n // constructor-parameter type or a readonly field type, never as a call — so\n // without these captures a controller/service injected through an interface\n // looks like it references nothing. Simple (identifier) types only; generics/\n // qualified names are left to a precise rung. Mirrors the Java DI captures.\n typeRefs: [\n '(constructor_declaration (parameter_list (parameter type: (identifier) @typeref)))',\n '(field_declaration (variable_declaration type: (identifier) @typeref))',\n ],\n // A namespace is decoupled from the directory in C#, so cross-namespace\n // resolution needs to know which namespace a file declares. Both block-scoped\n // (`namespace N { }`) and file-scoped (`namespace N;`) forms.\n namespaces: [\n '(namespace_declaration name: [(identifier) (qualified_name)] @namespace)',\n '(file_scoped_namespace_declaration name: [(identifier) (qualified_name)] @namespace)',\n ],\n};\n\nconst RUBY: LangQueries = {\n defs: [\n { kind: 'method', query: '(method name: (identifier) @name) @def' },\n { kind: 'class', query: '(class name: (constant) @name) @def' },\n { kind: 'module', query: '(module name: (constant) @name) @def' },\n ],\n calls: ['(call method: (identifier) @callee)', '(command method: (identifier) @callee)'],\n imports: [\n '(call method: (identifier) @_m (#match? @_m \"require\") arguments: (argument_list (string (string_content) @source)))',\n ],\n heritage: ['(class (superclass (constant) @extends))'],\n};\n\n\nconst PHP: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_definition name: (name) @name) @def' },\n {\n kind: 'function',\n query:\n '(assignment_expression left: (variable_name (name) @name) right: [(anonymous_function_creation_expression) (arrow_function)]) @def',\n },\n { kind: 'method', query: '(method_declaration name: (name) @name) @def' },\n { kind: 'class', query: '(class_declaration name: (name) @name) @def' },\n { kind: 'class', query: '(trait_declaration name: (name) @name) @def' },\n { kind: 'interface', query: '(interface_declaration name: (name) @name) @def' },\n ],\n calls: [\n '(function_call_expression function: (name) @callee)',\n '(member_call_expression name: (name) @callee)',\n '(nullsafe_member_call_expression name: (name) @callee)',\n '(scoped_call_expression name: (name) @callee)',\n '(object_creation_expression (name) @callee)',\n ],\n imports: [\n '(namespace_use_clause (qualified_name) @source)',\n '(namespace_use_clause (name) @source)',\n '[(require_expression (string) @source) (require_once_expression (string) @source) (include_expression (string) @source) (include_once_expression (string) @source)]',\n ],\n heritage: ['(base_clause (name) @extends)', '(class_interface_clause (name) @implements)'],\n // PHP namespaces are decoupled from directories (PSR-4 maps them, but the\n // resolver has no composer.json), so cross-namespace DI resolves through\n // `use`. Constructor-parameter and typed-property types are the injection\n // points.\n namespaces: ['(namespace_definition name: (namespace_name) @namespace)'],\n typeRefs: [\n '(simple_parameter type: (named_type (name) @typeref))',\n '(property_declaration type: (named_type (name) @typeref))',\n ],\n guards: ['(function_call_expression function: (name) @_g (#eq? @_g \"assert\")) @guard'],\n};\n\n// fwcd grammar: no field names — captures are positional; each def pattern binds\n// exactly one @name (params live under function_value_parameters). `class` vs\n// `interface` are both class_declaration, split by the anonymous keyword token.\nconst KOTLIN: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_declaration (simple_identifier) @name) @def' },\n { kind: 'class', query: '(class_declaration \"class\" (type_identifier) @name) @def' },\n { kind: 'interface', query: '(class_declaration \"interface\" (type_identifier) @name) @def' },\n { kind: 'class', query: '(object_declaration (type_identifier) @name) @def' },\n ],\n calls: [\n '(call_expression (simple_identifier) @callee)',\n '(call_expression (navigation_expression (navigation_suffix (simple_identifier) @callee)))',\n ],\n imports: ['(import_header (identifier) @source)'],\n // Kotlin: package for cross-package DI reachability; primary-constructor\n // `val` params and property types are the injection points.\n namespaces: ['(package_header (identifier) @namespace)'],\n typeRefs: [\n '(class_parameter (user_type (type_identifier) @typeref))',\n '(property_declaration (variable_declaration (user_type (type_identifier) @typeref)))',\n '(property_declaration (variable_declaration (nullable_type (user_type (type_identifier) @typeref))))',\n ],\n heritage: [\n '(delegation_specifier (constructor_invocation (user_type (type_identifier) @extends)))',\n '(delegation_specifier (user_type (type_identifier) @implements))',\n ],\n guards: ['(call_expression (simple_identifier) @_g (#match? @_g \"^(require|check|assert)$\")) @guard'],\n};\n\n// class/struct/enum/extension are ALL class_declaration; extensions carry\n// name: (user_type …) and so get their own (duplicate-named) class def node.\nconst SWIFT: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_declaration name: (simple_identifier) @name) @def' },\n { kind: 'method', query: '(protocol_function_declaration name: (simple_identifier) @name) @def' },\n { kind: 'class', query: '(class_declaration name: (type_identifier) @name) @def' },\n { kind: 'class', query: '(class_declaration name: (user_type (type_identifier) @name)) @def' },\n { kind: 'interface', query: '(protocol_declaration name: (type_identifier) @name) @def' },\n ],\n calls: [\n '(call_expression (simple_identifier) @callee)',\n '(call_expression (navigation_expression suffix: (navigation_suffix suffix: (simple_identifier) @callee)))',\n ],\n imports: ['(import_declaration (identifier) @source)'],\n heritage: ['(inheritance_specifier inherits_from: (user_type (type_identifier) @extends))'],\n // Swift: init-parameter and stored-property types are the injection points\n // (protocol-typed). Whole-module visibility (handled in resolve.ts) makes the\n // conforming implementation reachable cross-file.\n typeRefs: [\n '(parameter (user_type (type_identifier) @typeref))',\n '(type_annotation (user_type (type_identifier) @typeref))',\n ],\n guards: [\n '(call_expression (simple_identifier) @_g (#match? @_g \"^(assert|precondition|assertionFailure|preconditionFailure)$\")) @guard',\n ],\n};\n\nconst SCALA: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_definition name: (identifier) @name) @def' },\n { kind: 'method', query: '(function_declaration name: (identifier) @name) @def' },\n { kind: 'class', query: '(class_definition name: (identifier) @name) @def' },\n { kind: 'interface', query: '(trait_definition name: (identifier) @name) @def' },\n { kind: 'module', query: '(object_definition name: (identifier) @name) @def' },\n ],\n calls: [\n '(call_expression function: (identifier) @callee)',\n '(call_expression function: (field_expression field: (identifier) @callee))',\n ],\n imports: [\n '(import_declaration path: (stable_identifier) @source)',\n '(import_declaration path: (identifier) @source)',\n ],\n heritage: [\n '(extends_clause type: (type_identifier) @extends)',\n '(extends_clause type: (generic_type type: (type_identifier) @extends))',\n '(extends_clause type: (compound_type base: (type_identifier) @extends))',\n '(extends_clause type: (compound_type extra: (type_identifier) @implements))',\n ],\n // Scala: package for cross-package DI reachability; class-parameter and val\n // types are the injection points.\n namespaces: ['(package_clause name: (package_identifier) @namespace)'],\n typeRefs: [\n '(class_parameter type: (type_identifier) @typeref)',\n '(val_definition type: (type_identifier) @typeref)',\n ],\n guards: ['(call_expression function: (identifier) @_g (#match? @_g \"^(require|assert|assume)$\")) @guard'],\n};\n\n// No call_expression node in this grammar: a call is an identifier followed by a\n// sibling selector(argument_part), hence the anchored sibling patterns.\nconst DART: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_signature name: (identifier) @name) @def' },\n { kind: 'method', query: '(constructor_signature name: (identifier) @name) @def' },\n { kind: 'class', query: '(class_definition name: (identifier) @name) @def' },\n { kind: 'class', query: '(mixin_declaration (identifier) @name) @def' },\n ],\n calls: [\n '(_ (identifier) @callee . (selector (argument_part)))',\n '(_ (selector (unconditional_assignable_selector (identifier) @callee)) . (selector (argument_part)))',\n '(_ (selector (conditional_assignable_selector (identifier) @callee)) . (selector (argument_part)))',\n '(cascade_section (cascade_selector (identifier) @callee) . (argument_part))',\n ],\n imports: ['(import_specification (configurable_uri (uri (string_literal) @source)))'],\n // Dart: constructor/method parameter types and typed field declarations are\n // the injection points (Dart resolves cross-file via `import`, so no\n // namespace query is needed — the import rung already reaches the impl).\n typeRefs: [\n '(formal_parameter (type_identifier) @typeref)',\n '(declaration (type_identifier) @typeref)',\n ],\n heritage: [\n '(superclass (type_identifier) @extends)',\n '(interfaces (type_identifier) @implements)',\n '(mixins (type_identifier) @implements)',\n ],\n guards: ['(assert_statement) @guard'],\n};\n\nconst LUA: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_definition_statement name: (identifier) @name) @def' },\n { kind: 'function', query: '(function_definition_statement name: (variable field: (identifier) @name)) @def' },\n { kind: 'method', query: '(function_definition_statement name: (variable method: (identifier) @name)) @def' },\n { kind: 'function', query: '(local_function_definition_statement name: (identifier) @name) @def' },\n {\n kind: 'function',\n query:\n '(variable_assignment (variable_list (variable field: (identifier) @name)) (expression_list value: (function_definition))) @def',\n },\n {\n kind: 'function',\n query:\n '(local_variable_declaration (variable_list (variable name: (identifier) @name)) (expression_list value: (function_definition))) @def',\n },\n ],\n calls: [\n '(call function: (variable name: (identifier) @callee))',\n '(call function: (variable field: (identifier) @callee))',\n '(call function: (variable method: (identifier) @callee))',\n ],\n imports: [\n '(call function: (variable name: (identifier) @_r (#eq? @_r \"require\")) arguments: (argument_list (expression_list (string) @source)))',\n ],\n heritage: [],\n guards: ['(call function: (variable name: (identifier) @_g (#eq? @_g \"assert\"))) @guard'],\n};\n\n// Expression-based grammar: defmodule/def/defp are ordinary `call` nodes keyed by\n// their target identifier, so every rule is predicate-gated. A parenthesized def\n// head is itself a call and yields one benign same-line self-capture; the\n// resolver's qualified-call/enclosing-def rules keep it from becoming an edge.\nconst ELIXIR: LangQueries = {\n defs: [\n { kind: 'module', query: '(call target: (identifier) @_kw (#eq? @_kw \"defmodule\") (arguments (alias) @name)) @def' },\n {\n kind: 'function',\n query:\n '(call target: (identifier) @_kw (#match? @_kw \"^(def|defp|defmacro|defmacrop|defguard|defguardp)$\") (arguments (call target: (identifier) @name))) @def',\n },\n {\n kind: 'function',\n query:\n '(call target: (identifier) @_kw (#match? @_kw \"^(def|defp|defmacro|defmacrop)$\") (arguments (identifier) @name)) @def',\n },\n {\n kind: 'function',\n query:\n '(call target: (identifier) @_kw (#match? @_kw \"^(def|defp|defmacro|defmacrop|defguard|defguardp)$\") (arguments (binary_operator left: (call target: (identifier) @name)))) @def',\n },\n ],\n calls: [\n '(call target: (dot right: (identifier) @callee))',\n '(call target: (identifier) @callee (#not-match? @callee \"^(def|defp|defmacro|defmacrop|defmodule|defstruct|defprotocol|defimpl|defguard|defguardp|defdelegate|defexception|defoverridable|alias|import|require|use|quote|unquote|moduledoc|doc|spec|type|typep|typedoc|opaque|behaviour|impl|derive|enforce_keys|callback|macrocallback|optional_callbacks|compile|deprecated|dialyzer|external_resource|on_definition|on_load|after_compile|before_compile)$\"))',\n ],\n imports: [\n '(call target: (identifier) @_kw (#match? @_kw \"^(alias|import|require|use)$\") (arguments (alias) @source))',\n '(call target: (identifier) @_kw (#match? @_kw \"^(alias|import|require|use)$\") (arguments (dot left: (alias) @source)))',\n ],\n heritage: [],\n};\n\n// Every shell command is a `command` node, so callees include external binaries\n// (rsync, git, …). Safe: the resolver has no global-name fallback, so only\n// callees matching a reachable function_definition become edges.\nconst BASH: LangQueries = {\n defs: [{ kind: 'function', query: '(function_definition name: (word) @name) @def' }],\n calls: ['(command name: (command_name (word) @callee))'],\n imports: [\n '(command name: (command_name (word) @_c (#match? @_c \"^(source|\\\\.)$\")) argument: [(word) (string) (raw_string) (concatenation)] @source)',\n ],\n heritage: [],\n};\n\nconst ZIG: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_declaration name: (identifier) @name) @def' },\n { kind: 'class', query: '(variable_declaration (identifier) @name (struct_declaration)) @def' },\n { kind: 'class', query: '(variable_declaration (identifier) @name (enum_declaration)) @def' },\n { kind: 'class', query: '(variable_declaration (identifier) @name (union_declaration)) @def' },\n ],\n calls: [\n '(call_expression function: (identifier) @callee)',\n '(call_expression function: (field_expression member: (identifier) @callee))',\n ],\n imports: ['(builtin_function (builtin_identifier) @_i (#eq? @_i \"@import\") (arguments (string) @source))'],\n heritage: [],\n guards: ['(call_expression function: (field_expression member: (identifier) @_g (#eq? @_g \"assert\"))) @guard'],\n};\n\n// Only body-bearing function_definitions match (prototypes are `declaration`s).\nconst C_LANG: LangQueries = {\n defs: [\n {\n kind: 'function',\n query:\n '(function_definition declarator: [(function_declarator declarator: (identifier) @name) (pointer_declarator declarator: (function_declarator declarator: (identifier) @name))]) @def',\n },\n { kind: 'class', query: '(struct_specifier name: (type_identifier) @name body: (field_declaration_list)) @def' },\n { kind: 'class', query: '(enum_specifier name: (type_identifier) @name body: (enumerator_list)) @def' },\n { kind: 'class', query: '(type_definition declarator: (type_identifier) @name) @def' },\n ],\n calls: [\n '(call_expression function: (identifier) @callee)',\n '(call_expression function: (field_expression field: (field_identifier) @callee))',\n ],\n imports: ['(preproc_include path: (string_literal) @source)', '(preproc_include path: (system_lib_string) @source)'],\n heritage: [],\n guards: ['(call_expression function: (identifier) @_g (#match? @_g \"^(assert|static_assert)$\")) @guard'],\n};\n\nconst CPP: LangQueries = {\n defs: [\n {\n kind: 'function',\n query:\n '(function_definition declarator: [(function_declarator declarator: (identifier) @name) (pointer_declarator declarator: (function_declarator declarator: (identifier) @name)) (reference_declarator (function_declarator declarator: (identifier) @name))]) @def',\n },\n { kind: 'method', query: '(function_definition declarator: (function_declarator declarator: (field_identifier) @name)) @def' },\n {\n kind: 'method',\n query:\n '(function_definition declarator: [(function_declarator declarator: (qualified_identifier name: (identifier) @name)) (pointer_declarator declarator: (function_declarator declarator: (qualified_identifier name: (identifier) @name))) (reference_declarator (function_declarator declarator: (qualified_identifier name: (identifier) @name)))]) @def',\n },\n {\n kind: 'method',\n query:\n '(function_definition declarator: (function_declarator declarator: (qualified_identifier name: (qualified_identifier name: (identifier) @name)))) @def',\n },\n { kind: 'class', query: '(class_specifier name: (type_identifier) @name body: (field_declaration_list)) @def' },\n { kind: 'class', query: '(struct_specifier name: (type_identifier) @name body: (field_declaration_list)) @def' },\n { kind: 'module', query: '(namespace_definition name: (namespace_identifier) @name) @def' },\n ],\n calls: [\n '(call_expression function: (identifier) @callee)',\n '(call_expression function: (field_expression field: (field_identifier) @callee))',\n '(call_expression function: (qualified_identifier name: (identifier) @callee))',\n '(call_expression function: (qualified_identifier name: (qualified_identifier name: (identifier) @callee)))',\n '(new_expression type: (type_identifier) @callee)',\n ],\n imports: ['(preproc_include path: (string_literal) @source)', '(preproc_include path: (system_lib_string) @source)'],\n heritage: [\n '(base_class_clause (type_identifier) @extends)',\n '(base_class_clause (qualified_identifier name: (type_identifier) @extends))',\n ],\n guards: ['(call_expression function: (identifier) @_g (#match? @_g \"^(assert|static_assert)$\")) @guard'],\n};\n\nconst OBJC: LangQueries = {\n defs: [\n {\n kind: 'function',\n query: '(function_definition declarator: (function_declarator declarator: (identifier) @name)) @def',\n },\n // The selector segments are the method_definition's direct bare identifiers\n // (param names sit inside method_parameter); the first segment names it.\n { kind: 'method', query: '(method_definition (identifier) @name) @def' },\n { kind: 'class', query: '(class_implementation . (identifier) @name) @def' },\n { kind: 'interface', query: '(class_interface . (identifier) @name) @def' },\n // A @protocol is Objective-C's interface — without this it is not a node, so\n // conformance and protocol-typed DI cannot resolve.\n { kind: 'interface', query: '(protocol_declaration (identifier) @name) @def' },\n ],\n calls: [\n '(call_expression function: (identifier) @callee)',\n '(message_expression method: (identifier) @callee)',\n ],\n imports: [\n '(preproc_include path: (string_literal) @source)',\n '(preproc_include path: (system_lib_string) @source)',\n ],\n // Superclass (`: NSObject`) is `extends`; adopted protocols (`<Servicing>`,\n // captured as parameterized_arguments after the interface name) are the\n // `implements` relationship a DI call disambiguates through.\n heritage: [\n '(class_interface superclass: (identifier) @extends)',\n '(class_interface (parameterized_arguments (type_name (type_identifier) @implements)))',\n ],\n guards: ASSERT_CALLS,\n};\n\nconst OCAML: LangQueries = {\n defs: [\n // Only parameterised bindings — plain `let x = …` values would drown the\n // graph in constants.\n { kind: 'function', query: '(let_binding pattern: (value_name) @name (parameter)) @def' },\n { kind: 'module', query: '(module_binding name: (module_name) @name) @def' },\n ],\n calls: ['(application_expression function: (value_path (value_name) @callee))'],\n imports: ['(open_module (module_path (module_name) @source))'],\n heritage: [],\n};\n\nconst RESCRIPT: LangQueries = {\n defs: [\n { kind: 'function', query: '(let_binding pattern: (value_identifier) @name body: (function)) @def' },\n { kind: 'module', query: '(module_binding name: (module_identifier) @name) @def' },\n ],\n calls: [\n '(call_expression function: (value_identifier) @callee)',\n '(call_expression function: (value_identifier_path (value_identifier) @callee))',\n ],\n imports: ['(open_statement (module_identifier) @source)'],\n heritage: [],\n};\n\nconst SOLIDITY: LangQueries = {\n defs: [\n { kind: 'function', query: '(function_definition name: (identifier) @name) @def' },\n { kind: 'function', query: '(modifier_definition name: (identifier) @name) @def' },\n { kind: 'class', query: '(contract_declaration name: (identifier) @name) @def' },\n { kind: 'class', query: '(library_declaration name: (identifier) @name) @def' },\n { kind: 'interface', query: '(interface_declaration name: (identifier) @name) @def' },\n ],\n calls: [\n '(call_expression function: (identifier) @callee)',\n '(call_expression function: (member_expression property: (identifier) @callee))',\n '(emit_statement name: (identifier) @callee)',\n ],\n imports: ['(import_directive source: (string) @source)'],\n heritage: ['(inheritance_specifier ancestor: (user_defined_type (identifier) @extends))'],\n guards: [\n '(call_expression function: (identifier) @_g (#match? @_g \"^(require|assert)$\")) @guard',\n ],\n};\n\nconst BY_LANG: Record<string, LangQueries> = {\n ts: TYPESCRIPT,\n tsx: TYPESCRIPT,\n js: JAVASCRIPT,\n py: PYTHON,\n go: GO,\n java: JAVA,\n rust: RUST,\n cs: C_SHARP,\n rb: RUBY,\n php: PHP,\n kotlin: KOTLIN,\n swift: SWIFT,\n scala: SCALA,\n dart: DART,\n lua: LUA,\n ex: ELIXIR,\n sh: BASH,\n zig: ZIG,\n c: C_LANG,\n cpp: CPP,\n objc: OBJC,\n ocaml: OCAML,\n rescript: RESCRIPT,\n solidity: SOLIDITY,\n // Container formats (vue/svelte/astro/html/erb/ejs) have no entry here on\n // purpose: parse.ts routes them to their embedded language's queries.\n};\n\nexport function queriesFor(langId: string): LangQueries | undefined {\n return BY_LANG[langId];\n}\n","/**\n * Embedded-script container formats — files whose code lives in script regions\n * inside a non-code host document:\n *\n * - single-file components: Vue (`.vue`), Svelte (`.svelte`), Astro\n * (`.astro`, frontmatter fence + client `<script>`s);\n * - plain HTML with inline `<script>` blocks (`.html`/`.htm`);\n * - `<% … %>` templates: ERB (`.erb`, Ruby) and EJS (`.ejs`, JavaScript).\n *\n * The graph parses these by masking: every character outside the script\n * region(s) is replaced with a space (newlines kept), and the result is parsed\n * with the ordinary grammar of the embedded language. Masking preserves byte\n * offsets and line numbers exactly, so defs/calls/imports land on their true\n * positions in the original file and every downstream stage (resolution,\n * impact, display) works unchanged. Pure and deterministic: identical source →\n * identical mask.\n *\n * Template/markup content is intentionally out of scope — imports, exported\n * bindings, and calls all live in the script regions, which is what call/import\n * edges are built from.\n */\n\nexport interface EmbeddedScript {\n /** Effective grammar to parse the masked source with ('ts' | 'tsx' | 'js' | 'rb'). */\n langId: string;\n /** The original source with all non-script content blanked to spaces. */\n masked: string;\n}\n\ninterface ScriptTagSpec {\n kind: 'script-tags';\n /** Grammar when a block has no `lang` attribute. */\n defaultLang: string;\n /** Also extract a leading `---` frontmatter fence (Astro). */\n frontmatter?: boolean;\n}\n\ninterface DelimitedSpec {\n kind: 'delimited';\n /** The container's fixed embedded language. */\n lang: string;\n}\n\n/** Container language ids (must match the languages.ts registry entries). */\nconst CONTAINERS: Record<string, ScriptTagSpec | DelimitedSpec> = {\n vue: { kind: 'script-tags', defaultLang: 'js' },\n svelte: { kind: 'script-tags', defaultLang: 'js' },\n astro: { kind: 'script-tags', defaultLang: 'ts', frontmatter: true }, // frontmatter is TS\n html: { kind: 'script-tags', defaultLang: 'js' },\n erb: { kind: 'delimited', lang: 'rb' },\n ejs: { kind: 'delimited', lang: 'js' },\n};\n\nexport function isContainerLang(langId: string): boolean {\n return langId in CONTAINERS;\n}\n\ninterface Range {\n start: number;\n end: number;\n}\n\n// `<script …>body</script>` — non-greedy body, so multiple blocks (Vue's\n// `<script>` + `<script setup>`, Svelte's `context=\"module\"`) each match.\n// A void `<script src=… />` has an empty body and contributes nothing.\nconst SCRIPT_RE = /<script\\b([^>]*)>([\\s\\S]*?)<\\/script\\s*>/gi;\n\n// Astro frontmatter: a `---` fence on the first line, closed by a `---` line.\nconst ASTRO_FENCE_RE = /^---\\r?\\n([\\s\\S]*?)(\\r?\\n)---(?:\\r?\\n|$)/;\n\n// `<% code %>` regions (ERB/EJS): `=`/`-` output tags included, `#`/`%%`\n// comment/escape forms excluded, optional `-`/`_` trim markers kept out of the\n// body. Non-greedy to the first closer, the standard template behaviour.\nconst DELIMITED_RE = /<%(?![%#])[=\\-_]?([\\s\\S]*?)[-_]?%>/g;\n\nconst LANG_ATTR_RE = /\\blang\\s*=\\s*[\"']?([A-Za-z]+)/i;\n\n/** Rank grammars so mixed blocks pick the most permissive one (tsx ⊇ ts ⊇ js for our queries). */\nconst GRAMMAR_RANK: Record<string, number> = { js: 0, ts: 1, tsx: 2 };\n\nfunction grammarForAttr(attrs: string, fallback: string): string {\n const m = LANG_ATTR_RE.exec(attrs);\n if (!m) return fallback;\n const lang = m[1].toLowerCase();\n if (lang === 'ts' || lang === 'typescript') return 'ts';\n if (lang === 'tsx') return 'tsx';\n return 'js'; // js / jsx / anything exotic → the JS grammar\n}\n\n/**\n * Extract the script regions of a container-format file. Returns null for\n * non-container language ids (the caller parses the source as-is). A container\n * file with no script region returns a fully-blank mask — the file still gets\n * a graph node, it just defines nothing.\n */\nexport function extractEmbeddedScript(langId: string, source: string): EmbeddedScript | null {\n const spec = CONTAINERS[langId];\n if (!spec) return null;\n\n if (spec.kind === 'delimited') {\n const ranges: Range[] = [];\n for (const m of source.matchAll(DELIMITED_RE)) {\n const body = m[1] ?? '';\n if (!body.trim()) continue;\n const start = m.index + m[0].indexOf(body);\n ranges.push({ start, end: start + body.length });\n }\n // Fragments are expressions/statements cut from one template — terminate\n // each region (on the trim/closing char, still inside the match, so the\n // length is unchanged) so `<%= a %> … <%= b %>` on one line parses as two\n // statements rather than one garbled one.\n return { langId: spec.lang, masked: mask(source, ranges, { terminate: true }) };\n }\n\n const ranges: Range[] = [];\n let grammar = spec.defaultLang;\n\n if (spec.frontmatter) {\n const fence = ASTRO_FENCE_RE.exec(source);\n if (fence) {\n const start = fence[0].indexOf('\\n') + 1;\n ranges.push({ start, end: start + fence[1].length });\n }\n }\n\n for (const m of source.matchAll(SCRIPT_RE)) {\n const attrs = m[1] ?? '';\n const body = m[2] ?? '';\n if (!body) continue;\n const start = m.index + '<script'.length + attrs.length + 1; // past the tag's '>'\n ranges.push({ start, end: start + body.length });\n const g = grammarForAttr(attrs, spec.defaultLang);\n if (GRAMMAR_RANK[g] > GRAMMAR_RANK[grammar]) grammar = g;\n }\n\n return { langId: grammar, masked: mask(source, ranges) };\n}\n\n/**\n * Blank everything outside `ranges` to spaces, preserving newlines (and CR).\n * With `terminate`, the character right after each range (part of the closing\n * delimiter, never a newline) becomes `;` — a statement boundary for the\n * embedded language.\n */\nfunction mask(source: string, ranges: Range[], opts: { terminate?: boolean } = {}): string {\n const out = new Array<string>(source.length);\n for (let i = 0; i < source.length; i++) {\n const ch = source[i];\n out[i] = ch === '\\n' || ch === '\\r' ? ch : ' ';\n }\n for (const r of ranges) {\n for (let i = r.start; i < r.end && i < source.length; i++) out[i] = source[i];\n if (opts.terminate && r.end < source.length && out[r.end] === ' ') out[r.end] = ';';\n }\n return out.join('');\n}\n","import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport { createRequire } from 'node:module';\nimport { Parser, Language } from 'web-tree-sitter';\nimport { grammarDirs, ensureParserInit } from '../grammars.js';\n\n/**\n * Grammar loading for the **toolchain** corpus (infrastructure, CI, config).\n *\n * Deliberately separate from `engine/grammars.ts`'s language registry. Adding\n * these grammars to `LANGUAGES` would make `discover.ts` treat every `.tf` /\n * `.yaml` / `.json` in a repository as a *source* file, which silently changes:\n *\n * - `project-classification.ts` source-file counts — and those pick the\n * billing tier, so a config-heavy repo would jump a tier for free;\n * - DriftScore, coverage ratios, file-hotspot and code-quality metrics.\n *\n * So the toolchain corpus is discovered separately (via `docs-ingest`, which\n * already classifies exactly these files) and parsed with its own grammar set.\n * The source corpus is untouched.\n *\n * ## Why only HCL\n *\n * YAML, JSON and TOML are *not* parsed with tree-sitter here. The repository\n * already depends on `yaml` (which yields byte ranges on every node, plus\n * multi-document, anchor and merge-key support that a grammar would force us to\n * reimplement) and `smol-toml`. Reusing audited parsers beats adding grammars.\n * HCL has no such parser in the tree, so it gets a grammar.\n *\n * ## Supply chain\n *\n * `@tree-sitter-grammars/tree-sitter-hcl` carries a native `install` script\n * (`node-gyp-build`) for its Node bindings. It is therefore a **devDependency**\n * only: `scripts/bundle-grammars.mjs` copies its prebuilt `.wasm` into\n * `grammars/` at build time, and that file ships inside the published tarball.\n * End users receive the grammar; they never install the grammar package and\n * never run its install script.\n */\n\nconst require = createRequire(import.meta.url);\n\n/** Toolchain grammar ids → the `.wasm` base name and its owning npm package. */\nexport const TOOLCHAIN_GRAMMARS: Record<string, { wasm: string; pkg: string }> = {\n hcl: { wasm: 'tree-sitter-hcl', pkg: '@tree-sitter-grammars/tree-sitter-hcl' },\n};\n\nconst languageCache = new Map<string, Language>();\n\n/**\n * Directories to search for a toolchain grammar, highest priority first: the\n * same set the source grammars use (so `--grammars <dir>` and the bundled\n * `grammars/` both work), then the owning devDependency's package root as the\n * dev/test fallback before a `pnpm build` has run.\n */\nfunction toolchainGrammarDirs(pkg: string): string[] {\n const dirs = [...grammarDirs()];\n try {\n dirs.push(path.dirname(require.resolve(`${pkg}/package.json`)));\n } catch {\n /* devDependency absent (e.g. a published install) — the bundled dirs cover it */\n }\n return dirs;\n}\n\n/** Absolute path to a toolchain grammar's `.wasm`, or null when unavailable. */\nexport function resolveToolchainGrammar(id: string): string | null {\n const spec = TOOLCHAIN_GRAMMARS[id];\n if (!spec) return null;\n for (const dir of toolchainGrammarDirs(spec.pkg)) {\n const candidate = path.join(dir, `${spec.wasm}.wasm`);\n if (fs.existsSync(candidate)) return candidate;\n }\n return null;\n}\n\n/**\n * Load (and cache) a toolchain grammar.\n *\n * Returns `null` rather than throwing when the grammar is unavailable: a\n * missing toolchain grammar must degrade to \"no structural extraction for that\n * format\", never fail a build. The caller surfaces a warning.\n */\nexport async function loadToolchainLanguage(id: string): Promise<Language | null> {\n const cached = languageCache.get(id);\n if (cached) return cached;\n const wasmPath = resolveToolchainGrammar(id);\n if (!wasmPath) return null;\n try {\n await ensureParserInit();\n const language = await Language.load(fs.readFileSync(wasmPath));\n languageCache.set(id, language);\n return language;\n } catch {\n return null;\n }\n}\n\n/** A parser bound to a toolchain grammar, or null when the grammar is unavailable. */\nexport async function toolchainParser(id: string): Promise<Parser | null> {\n const language = await loadToolchainLanguage(id);\n if (!language) return null;\n const parser = new Parser();\n parser.setLanguage(language);\n return parser;\n}\n\n/**\n * Version string for the toolchain grammar set — a determinism input recorded\n * in provenance alongside `grammarSetVersion()`. Resolved from the owning\n * package when present; `unknown` once the package is absent (published\n * installs), which is stable because the shipped `.wasm` is fixed at publish.\n */\nexport function toolchainGrammarSetVersion(): string {\n const parts: string[] = [];\n for (const id of Object.keys(TOOLCHAIN_GRAMMARS).sort()) {\n const { pkg } = TOOLCHAIN_GRAMMARS[id];\n let version = 'bundled';\n try {\n const json = require.resolve(`${pkg}/package.json`);\n version = (JSON.parse(fs.readFileSync(json, 'utf8')) as { version: string }).version;\n } catch {\n /* published install — the bundled .wasm is fixed, so `bundled` is stable */\n }\n parts.push(`${pkg}@${version}`);\n }\n return parts.join(',');\n}\n\n/** Reset the language cache. Test-only. */\nexport function resetToolchainGrammarCache(): void {\n languageCache.clear();\n}\n","import { Query, type Language, type Node } from 'web-tree-sitter';\nimport {\n catalogForLanguage,\n sourceHasRoleNeedle,\n type AstRoleCatalogEntry,\n} from '../core-open/scanners/architecture/packs/ast-role-catalog.js';\nimport type { AstRoleHit } from '../core-open/scanners/architecture/ast-roles.js';\nimport type { FileParse } from './types.js';\nimport { loadCache } from './cache.js';\nimport { grammarSetVersion } from './grammars.js';\nimport { toolchainGrammarSetVersion } from './toolchain/grammars.js';\nimport { VERSION } from '../version.js';\n\n/**\n * Run pack-scoped role queries against the tree `buildGraph` already paid for.\n * A compile miss falls back to the needle matcher — never a second parse.\n */\n\nconst compiledCache = new Map<string, Query | null>();\n\nfunction compile(lang: Language, langId: string, source: string): Query | null {\n const key = `${langId}::${source}`;\n if (compiledCache.has(key)) return compiledCache.get(key) ?? null;\n let q: Query | null = null;\n try {\n q = new Query(lang, source);\n } catch {\n q = null;\n }\n compiledCache.set(key, q);\n return q;\n}\n\nfunction entryHits(\n lang: Language,\n langId: string,\n root: Node,\n source: string,\n entry: AstRoleCatalogEntry,\n): boolean {\n const compiled = compile(lang, langId, entry.query);\n if (!compiled) return sourceHasRoleNeedle(source, entry.needle);\n try {\n return compiled.captures(root).length > 0;\n } catch {\n return sourceHasRoleNeedle(source, entry.needle);\n }\n}\n\nexport function extractAstRolesFromTree(\n _rel: string,\n langId: string,\n language: Language,\n root: Node,\n source: string,\n): FileParse['roles'] {\n const catalog = catalogForLanguage(langId);\n if (catalog.length === 0) return undefined;\n const hits: NonNullable<FileParse['roles']> = [];\n for (const entry of catalog) {\n if (!entryHits(language, langId, root, source, entry)) continue;\n hits.push({\n role: entry.role,\n layer: entry.layer,\n confidence: entry.confidence,\n signal: entry.signal,\n packId: entry.packId,\n });\n }\n if (hits.length === 0) return undefined;\n hits.sort((a, b) =>\n b.confidence - a.confidence\n || a.packId.localeCompare(b.packId)\n || a.role.localeCompare(b.role),\n );\n return hits;\n}\n\nexport function fileRolesFromParses(parses: readonly FileParse[]): AstRoleHit[] {\n const hits: AstRoleHit[] = [];\n for (const parse of parses) {\n if (!parse.roles?.length) continue;\n const rel = (parse.rel || '.').replace(/\\\\/g, '/');\n for (const role of parse.roles) {\n hits.push({\n filePath: rel,\n role: role.role,\n layer: role.layer,\n confidence: role.confidence,\n signal: role.signal,\n packId: role.packId,\n });\n }\n }\n return hits;\n}\n\n/**\n * Recover architecture role hits from the versioned parse cache.\n * Used by the LSP when the map is loaded from disk (no in-process build).\n */\nexport function fileRolesFromParseCache(root: string): AstRoleHit[] {\n const grammars = `${grammarSetVersion()}+${toolchainGrammarSetVersion()}`;\n const cache = loadCache(root, { toolVersion: VERSION, grammars });\n return fileRolesFromParses(cache.allParses());\n}\n","import { Query, type Node, type Language } from 'web-tree-sitter';\nimport { parserFor, loadLanguage } from './grammars.js';\nimport { langById } from './languages.js';\nimport { queriesFor, type DefRule } from './queries.js';\nimport { extractEmbeddedScript } from './sfc.js';\nimport { hashString } from './hash.js';\nimport { redactSecrets } from '../core-open/utils/redact.js';\nimport { extractAstRolesFromTree } from './ast-roles.js';\nimport type { FileParse, RawCall, RawDef, RawGuard, RawHeritage, RawImport, RawTypeRef } from './types.js';\n\n/**\n * Parse a single file's source into the raw symbol/edge tables. Pure and\n * deterministic: identical (lang, source) → identical FileParse. Cross-file\n * resolution is a later stage (resolve.ts); here we only see one file.\n */\n\n// Compiled queries are cached per (lang, querySource) — compilation is the\n// expensive part and queries are reused across every file of a language.\nconst compiledCache = new Map<string, Query | null>();\n\nfunction compile(lang: Language, langId: string, source: string): Query | null {\n const key = `${langId}::${source}`;\n if (compiledCache.has(key)) return compiledCache.get(key) ?? null;\n let q: Query | null = null;\n try {\n q = new Query(lang, source);\n } catch {\n q = null; // grammar doesn't support this pattern — skip it gracefully\n }\n compiledCache.set(key, q);\n return q;\n}\n\nfunction namedCapture(\n captures: { name: string; node: Node }[],\n name: string,\n): Node | undefined {\n return captures.find((c) => c.name === name)?.node;\n}\n\n/**\n * Wrapper node types that sit between a *qualified* callee identifier and the\n * call node (`obj.foo()` / `pkg::foo()` / `recv.foo()` across the grammars).\n * A bare call's identifier hangs directly off the call node instead.\n */\nconst MEMBER_PARENT_TYPES = new Set([\n 'member_expression', // ts/js: obj.foo()\n 'attribute', // python: obj.foo()\n 'selector_expression', // go: pkg.Foo()\n 'field_expression', // rust/scala/c/cpp/zig: recv.foo()\n 'scoped_identifier', // rust: Type::foo()\n 'member_access_expression', // c#: obj.Foo()\n 'qualified_identifier', // c++: ns::f(), Type::m()\n 'dot', // elixir: Mod.fun()\n 'navigation_suffix', // kotlin/swift: recv.foo()\n 'member_call_expression', // php: $x->m()\n 'nullsafe_member_call_expression', // php: $x?->m()\n 'scoped_call_expression', // php: X::m()\n 'unconditional_assignable_selector', // dart: x.foo()\n 'conditional_assignable_selector', // dart: x?.foo()\n 'cascade_selector', // dart: x..foo()\n 'value_identifier_path', // rescript: Mod.foo() (only exists for qualified calls)\n]);\n\n/**\n * Was this callee identifier part of a qualified call (`x.foo()`) rather than a\n * bare one (`foo()`)? The queries capture only the trailing name, so the\n * resolver needs this bit to know a same-file def with the same short name is\n * NOT evidence — the receiver points elsewhere (see resolve.ts).\n */\nfunction isQualifiedCallee(node: Node): boolean {\n const parent = node.parent;\n if (!parent) return false;\n if (MEMBER_PARENT_TYPES.has(parent.type)) return true;\n // Java `method_invocation` and Ruby `call` keep receiver and name on the call\n // node itself — qualified iff the receiver/object field is present.\n if (parent.type === 'method_invocation') return parent.childForFieldName('object') != null;\n // Ruby `call` carries a `receiver` field when qualified; Python's `call` has\n // no such field (its qualified form is the `attribute` wrapper above), and\n // Elixir's `call` has none either (its qualified form is the `dot` wrapper).\n if (parent.type === 'call') return parent.childForFieldName('receiver') != null;\n // Lua wraps every callee in `variable`; qualified iff a `table` receiver exists\n // (`repo.fetch()` / `repo:method()` carry table:, bare `foo()` has only name:).\n if (parent.type === 'variable') return parent.childForFieldName('table') != null;\n // OCaml wraps every callee in `value_path`; qualified iff a module path is\n // present (`Mod.f x` has two named children, bare `f x` has one).\n if (parent.type === 'value_path') return parent.namedChildCount > 1;\n // ObjC message sends: `[obj doThing]` points elsewhere, but `[self …]` /\n // `[super …]` stay within the class — same-file evidence still counts there.\n if (parent.type === 'message_expression') {\n const recv = parent.childForFieldName('receiver');\n return recv != null && recv.text !== 'self' && recv.text !== 'super';\n }\n return false;\n}\n\nfunction signatureOf(source: string, def: Node, langId: string): string {\n // The text up to the body opening, single-lined, bounded — a deterministic,\n // human-meaningful signature without dragging in the whole body.\n // - Brace languages: cut at the body `{`.\n // - Python: cut at the def-terminating `:` at bracket-depth 0 (so a `:` inside\n // typed params / generics / the `-> Dict[...]` return type doesn't cut it,\n // and the docstring/body is excluded).\n // - Ruby: the header is the first line.\n const full = source.slice(def.startIndex, def.endIndex);\n let head: string;\n if (langId === 'py') head = pythonHeader(full);\n // Ruby/Elixir: `do…end` bodies (and Elixir `%{}` default args would break a\n // brace cut) — the header is the first line.\n else if (langId === 'rb' || langId === 'ex') head = full.split('\\n')[0];\n else {\n const braceIdx = full.indexOf('{');\n head = braceIdx >= 0 ? full.slice(0, braceIdx) : full.split('\\n')[0];\n }\n head = head.replace(/\\s+/g, ' ').trim().replace(/[:{]\\s*$/, '').trim();\n return head.length > 200 ? `${head.slice(0, 197)}...` : head;\n}\n\n/**\n * A short doc summary for a definition — the leading doc-comment (JSDoc/TSDoc,\n * `//`, `///`, `#`) directly above it, or (Python) the body docstring. Gives a\n * tersely-named symbol real prose for semantic search. Deterministic, marker-\n * stripped, whitespace-collapsed, truncated; never the full body. Returns\n * undefined when there is no doc.\n */\nfunction scrubbedDoc(source: string, def: Node, langId: string): string | undefined {\n const doc = docOf(source, def, langId);\n return doc === undefined ? undefined : redactSecrets(doc);\n}\n\nfunction docOf(source: string, def: Node, langId: string): string | undefined {\n const lines = source.split('\\n');\n if (langId === 'py') return pythonDocstring(lines, def.startPosition.row);\n return leadingComment(lines, def.startPosition.row);\n}\n\n/** Contiguous comment lines directly above `row` (0-based), markers stripped. */\nfunction leadingComment(lines: string[], row: number): string | undefined {\n const collected: string[] = [];\n for (let r = row - 1; r >= 0; r--) {\n const line = lines[r].trim();\n if (line === '') break; // a blank line detaches the comment\n if (/^(\\/\\/|\\/\\*\\*?|\\*\\/?|#|;|--)/.test(line)) collected.unshift(line);\n else break;\n }\n if (!collected.length) return undefined;\n const text = collected\n .join('\\n')\n .replace(/\\/\\*\\*?|\\*\\//g, ' ') // /** and */\n .replace(/^\\s*[*]\\s?/gm, ' ') // leading * in block comments\n .replace(/^\\s*(\\/\\/+|#+|;+|--)\\s?/gm, ' ') // line-comment markers\n .replace(/@\\w+/g, ' '); // drop JSDoc tags (@param, @returns…)\n return clip(text);\n}\n\n/** The first string literal in a Python body (the docstring), if present. */\nfunction pythonDocstring(lines: string[], row: number): string | undefined {\n // Find the header's terminating line (ends with ':'), then the first non-blank line.\n let r = row;\n while (r < lines.length && !/:\\s*(#.*)?$/.test(lines[r])) r++;\n let j = r + 1;\n while (j < lines.length && lines[j].trim() === '') j++;\n const first = lines[j]?.trim() ?? '';\n const m = /^[rubfRUBF]{0,2}(\"\"\"|''')/.exec(first);\n if (!m) return undefined;\n const q = m[1];\n let rest = first.slice(first.indexOf(q) + 3);\n if (rest.includes(q)) return clip(rest.slice(0, rest.indexOf(q))); // single-line docstring\n const parts = [rest];\n for (let k = j + 1; k < lines.length; k++) {\n const idx = lines[k].indexOf(q);\n if (idx >= 0) {\n parts.push(lines[k].slice(0, idx));\n break;\n }\n parts.push(lines[k]);\n }\n return clip(parts.join(' '));\n}\n\nfunction clip(s: string): string | undefined {\n const t = s.replace(/\\s+/g, ' ').trim();\n if (!t) return undefined;\n return t.length > 200 ? `${t.slice(0, 197)}...` : t;\n}\n\n/** Python def/class header up to the terminating `:` at bracket-depth 0. */\nfunction pythonHeader(full: string): string {\n let depth = 0;\n for (let i = 0; i < full.length; i++) {\n const c = full[i];\n if (c === '(' || c === '[' || c === '{') depth++;\n else if (c === ')' || c === ']' || c === '}') depth--;\n else if (c === ':' && depth === 0) return full.slice(0, i);\n }\n return full.split('\\n')[0];\n}\n\nexport async function parseSource(\n rel: string,\n langId: string,\n source: string,\n): Promise<FileParse> {\n // Pure extractors (no tree-sitter) — SQL DDL topology.\n if (langId === 'sql') {\n const { parseSqlFile } = await import('./sql-extract.js');\n return parseSqlFile(rel, source);\n }\n\n // Container formats (Vue/Svelte/Astro SFCs): parse the embedded script\n // region with the JS/TS grammar over a position-preserving mask, so every\n // offset/line below refers to the original file. The node keeps the\n // container's own lang id.\n const embedded = extractEmbeddedScript(langId, source);\n const effLangId = embedded?.langId ?? langId;\n const text = embedded?.masked ?? source;\n const def = langById(effLangId);\n const langQueries = queriesFor(effLangId);\n const hash = hashString(source);\n const result: FileParse = {\n rel,\n lang: langId,\n hash,\n bytes: Buffer.byteLength(source, 'utf8'),\n defs: [],\n calls: [],\n imports: [],\n heritage: [],\n typeRefs: [],\n guards: [],\n };\n if (!def || !langQueries) return result;\n\n const language = await loadLanguage(effLangId);\n const parser = await parserFor(def);\n const tree = parser.parse(text);\n if (!tree) return result;\n const root = tree.rootNode;\n\n // --- definitions ---\n const rawDefs: (RawDef & { _start: number; _end: number })[] = [];\n for (const rule of langQueries.defs) {\n collectDefs(language, effLangId, text, root, rule, rawDefs);\n }\n // Dedupe definitions that overlap on the same name+range (multiple rules can\n // match the same node, e.g. abstract vs plain class).\n const seen = new Set<string>();\n const deduped = rawDefs.filter((d) => {\n const key = `${d._start}:${d._end}:${d.name}:${d.kind}`;\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n // Compute dotted qualified names by nesting (smallest enclosing def is parent).\n const byStart = [...deduped].sort((a, b) => a._start - b._start || b._end - a._end);\n for (const d of byStart) {\n const parent = enclosing(byStart, d._start, d._end);\n d.qualifiedName = parent ? `${parent.qualifiedName}.${d.name}` : d.name;\n }\n result.defs = byStart\n .map((d) => {\n const { _start, _end, ...rest } = d;\n void _start;\n void _end;\n return rest;\n })\n .sort(\n (a, b) =>\n a.startLine - b.startLine ||\n a.qualifiedName.localeCompare(b.qualifiedName) ||\n a.name.localeCompare(b.name),\n );\n\n // --- calls ---\n // A definition's own name node must never double as a call site: in\n // expression-based grammars (Elixir) a `def foo(…)` head is itself a `call`\n // node, which would fabricate a recursion edge for every definition.\n const defNameBytes = new Set<number>();\n for (const qsrc of langQueries.defs) {\n const q = compile(language, effLangId, qsrc.query);\n if (!q) continue;\n for (const m of q.matches(root)) {\n const nameNode = namedCapture(m.captures, 'name');\n if (nameNode) defNameBytes.add(nameNode.startIndex);\n }\n }\n const calls: RawCall[] = [];\n for (const qsrc of langQueries.calls) {\n const q = compile(language, effLangId, qsrc);\n if (!q) continue;\n for (const cap of q.captures(root)) {\n if (cap.name !== 'callee') continue;\n if (defNameBytes.has(cap.node.startIndex)) continue;\n calls.push({\n callee: cap.node.text,\n byte: cap.node.startIndex,\n line: cap.node.startPosition.row + 1,\n qualified: isQualifiedCallee(cap.node),\n });\n }\n }\n result.calls = calls.sort((a, b) => a.byte - b.byte || a.callee.localeCompare(b.callee));\n\n // --- imports ---\n const imports: RawImport[] = [];\n for (const qsrc of langQueries.imports) {\n const q = compile(language, effLangId, qsrc);\n if (!q) continue;\n for (const cap of q.captures(root)) {\n if (cap.name !== 'source') continue;\n imports.push({ source: stripQuotes(cap.node.text) });\n }\n }\n result.imports = dedupeImports(imports);\n\n // --- heritage (extends / implements) ---\n const heritage: RawHeritage[] = [];\n for (const qsrc of langQueries.heritage) {\n const q = compile(language, effLangId, qsrc);\n if (!q) continue;\n for (const cap of q.captures(root)) {\n if (cap.name !== 'extends' && cap.name !== 'implements') continue;\n heritage.push({ superName: cap.node.text, byte: cap.node.startIndex, kind: cap.name });\n }\n }\n result.heritage = heritage.sort(\n (a, b) =>\n a.byte - b.byte || a.kind.localeCompare(b.kind) || a.superName.localeCompare(b.superName),\n );\n\n // --- type references (constructor-param / field types → DI dependency edges) ---\n const typeRefs: RawTypeRef[] = [];\n for (const qsrc of langQueries.typeRefs ?? []) {\n const q = compile(language, effLangId, qsrc);\n if (!q) continue;\n for (const cap of q.captures(root)) {\n if (cap.name !== 'typeref') continue;\n typeRefs.push({ name: cap.node.text, byte: cap.node.startIndex });\n }\n }\n result.typeRefs = typeRefs.sort((a, b) => a.byte - b.byte || a.name.localeCompare(b.name));\n\n // --- namespaces declared by this file (C# cross-namespace resolution) ---\n const namespaces = new Set<string>();\n for (const qsrc of langQueries.namespaces ?? []) {\n const q = compile(language, effLangId, qsrc);\n if (!q) continue;\n for (const cap of q.captures(root)) {\n if (cap.name !== 'namespace') continue;\n const name = cap.node.text.trim();\n if (name) namespaces.add(name);\n }\n }\n if (namespaces.size) result.namespaces = [...namespaces].sort();\n\n // --- guards (assert-like expressions → invariant facts) ---\n const guards: RawGuard[] = [];\n for (const qsrc of langQueries.guards ?? []) {\n const q = compile(language, effLangId, qsrc);\n if (!q) continue;\n for (const cap of q.captures(root)) {\n if (cap.name !== 'guard') continue;\n const expr = cap.node.text.replace(/\\s+/g, ' ').trim();\n guards.push({ expr: expr.length > 160 ? `${expr.slice(0, 157)}...` : expr, line: cap.node.startPosition.row + 1 });\n }\n }\n result.guards = guards.sort((a, b) => a.line - b.line || a.expr.localeCompare(b.expr));\n\n const roles = extractAstRolesFromTree(rel, effLangId, language, root, text);\n if (roles) result.roles = roles;\n\n tree.delete();\n return result;\n}\n\n/**\n * Dart splits a function into sibling signature + body nodes (and wraps class\n * methods in a method_signature). Return the trailing function_body so the def\n * span covers it — otherwise calls inside the body attribute to the file and\n * nested defs do not nest.\n */\nfunction dartBodyOf(defNode: Node): Node | null {\n if (!defNode.type.endsWith('_signature')) return null;\n if (defNode.nextNamedSibling?.type === 'function_body') return defNode.nextNamedSibling;\n const wrapper = defNode.parent;\n if (wrapper?.type === 'method_signature' && wrapper.nextNamedSibling?.type === 'function_body') {\n return wrapper.nextNamedSibling;\n }\n return null;\n}\n\nfunction collectDefs(\n language: Language,\n langId: string,\n source: string,\n root: Node,\n rule: DefRule,\n out: (RawDef & { _start: number; _end: number })[],\n): void {\n const q = compile(language, langId, rule.query);\n if (!q) return;\n for (const match of q.matches(root)) {\n const defNode = namedCapture(match.captures, 'def');\n const nameNode = namedCapture(match.captures, 'name');\n if (!defNode || !nameNode) continue;\n // Dart splits a function into sibling signature + body nodes; the def span\n // must cover the body or calls inside it would attribute to the file, and\n // nested defs would not nest.\n const spanEnd = dartBodyOf(defNode) ?? defNode;\n out.push({\n kind: rule.kind,\n name: nameNode.text,\n qualifiedName: nameNode.text, // refined after nesting is computed\n startLine: defNode.startPosition.row + 1,\n endLine: spanEnd.endPosition.row + 1,\n startByte: defNode.startIndex,\n endByte: spanEnd.endIndex,\n signature:\n rule.kind === 'function' || rule.kind === 'method'\n ? redactSecrets(signatureOf(source, defNode, langId))\n : undefined,\n // GUARDRAILS §1: signatures/docs are lifted verbatim from source and are\n // persisted (graph.json, `vg share` commits it) — scrub at ingest.\n doc: scrubbedDoc(source, defNode, langId),\n visibility: undefined,\n _start: defNode.startIndex,\n _end: spanEnd.endIndex,\n });\n }\n}\n\n/** The smallest def strictly containing [start,end) other than itself. */\nfunction enclosing(\n defs: { qualifiedName: string; _start: number; _end: number }[],\n start: number,\n end: number,\n): { qualifiedName: string } | undefined {\n let best: { qualifiedName: string; _start: number; _end: number } | undefined;\n for (const d of defs) {\n if (d._start === start && d._end === end) continue;\n if (d._start <= start && d._end >= end) {\n if (!best || d._end - d._start < best._end - best._start) best = d;\n }\n }\n return best;\n}\n\nfunction stripQuotes(text: string): string {\n return text.replace(/^['\"`]|['\"`]$/g, '');\n}\n\nfunction dedupeImports(imports: RawImport[]): RawImport[] {\n const seen = new Set<string>();\n const out: RawImport[] = [];\n for (const i of imports.sort((a, b) => a.source.localeCompare(b.source))) {\n if (seen.has(i.source)) continue;\n seen.add(i.source);\n out.push(i);\n }\n return out;\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { loadGraphFileWithSnapshot, resolveGraphPath } from './chunk-
|
|
1
|
+
import { loadGraphFileWithSnapshot, resolveGraphPath } from './chunk-OIUVWCKM.js';
|
|
2
2
|
import { cacheDir } from './chunk-MVPRPSXU.js';
|
|
3
3
|
import { __require } from './chunk-Z6ZWNWWR.js';
|
|
4
4
|
import * as fs from 'fs';
|
|
@@ -200,5 +200,5 @@ function loadGraph(root, graphPath) {
|
|
|
200
200
|
}
|
|
201
201
|
|
|
202
202
|
export { SCHEMA_VERSION, SUPPORTED_SCHEMA_VERSIONS, loadGraph, loadGraphPreferIndex, writeGraphIndex };
|
|
203
|
-
//# sourceMappingURL=chunk-
|
|
204
|
-
//# sourceMappingURL=chunk-
|
|
203
|
+
//# sourceMappingURL=chunk-7M4E7UGX.js.map
|
|
204
|
+
//# sourceMappingURL=chunk-7M4E7UGX.js.map
|