@vibgrate/cli 2026.718.2 → 2026.720.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/DOCS.md +2 -0
- package/dist/baseline-WIZAFIJS.js +6 -0
- package/dist/{baseline-DKPQWOQ6.js.map → baseline-WIZAFIJS.js.map} +1 -1
- package/dist/{chunk-H5M7CXE6.js → chunk-7R4O5CZD.js} +71 -25
- package/dist/chunk-7R4O5CZD.js.map +1 -0
- package/dist/{chunk-VFO5UDAT.js → chunk-BHA7QIPD.js} +185 -16
- package/dist/chunk-BHA7QIPD.js.map +1 -0
- package/dist/{chunk-BFXDF6ZE.js → chunk-DDQ5JGBV.js} +3 -3
- package/dist/{chunk-BFXDF6ZE.js.map → chunk-DDQ5JGBV.js.map} +1 -1
- package/dist/{chunk-RME7BFMU.js → chunk-OD5654VF.js} +3 -3
- package/dist/{chunk-RME7BFMU.js.map → chunk-OD5654VF.js.map} +1 -1
- package/dist/cli.js +435 -111
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +132 -46
- package/dist/index.js +3 -3
- package/dist/parse-worker.js +1 -1
- package/grammars/tree-sitter-objc.wasm +0 -0
- package/grammars/tree-sitter-ocaml.wasm +0 -0
- package/grammars/tree-sitter-rescript.wasm +0 -0
- package/grammars/tree-sitter-solidity.wasm +0 -0
- package/package.json +9 -7
- package/dist/baseline-DKPQWOQ6.js +0 -6
- package/dist/chunk-H5M7CXE6.js.map +0 -1
- package/dist/chunk-VFO5UDAT.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/engine/languages.ts","../src/engine/grammars.ts","../src/engine/queries.ts","../src/engine/hash.ts","../src/engine/parse.ts"],"names":["require"],"mappings":"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","file":"chunk-VFO5UDAT.js","sourcesContent":["/**\n * Language registry: 20 supported languages (first wave + the Phase-3 expansion).\n *\n * Each language maps to a tree-sitter grammar shipped (pre-compiled to .wasm) by\n * `tree-sitter-wasms`. `grammarFile` is the base name under that package's `out/`\n * directory (and our bundled `grammars/` copy). The grammar *version* is recorded\n * in provenance so the determinism contract is explicit about its inputs.\n */\n\nexport interface LanguageDef {\n /** Canonical short id used in the schema (`lang` field) and `--only`. */\n id: string;\n /** Human label. */\n label: string;\n /** File extensions (lowercase, with leading dot). */\n extensions: string[];\n /** tree-sitter-wasms grammar base name, e.g. `tree-sitter-typescript`. */\n grammarFile: string;\n}\n\nexport const LANGUAGES: LanguageDef[] = [\n {\n id: 'ts',\n label: 'TypeScript',\n extensions: ['.ts', '.mts', '.cts'],\n grammarFile: 'tree-sitter-typescript',\n },\n {\n id: 'tsx',\n label: 'TSX',\n extensions: ['.tsx'],\n grammarFile: 'tree-sitter-tsx',\n },\n {\n id: 'js',\n label: 'JavaScript',\n extensions: ['.js', '.mjs', '.cjs', '.jsx'],\n grammarFile: 'tree-sitter-javascript',\n },\n {\n id: 'py',\n label: 'Python',\n extensions: ['.py', '.pyi'],\n grammarFile: 'tree-sitter-python',\n },\n {\n id: 'go',\n label: 'Go',\n extensions: ['.go'],\n grammarFile: 'tree-sitter-go',\n },\n {\n id: 'java',\n label: 'Java',\n extensions: ['.java'],\n grammarFile: 'tree-sitter-java',\n },\n {\n id: 'rust',\n label: 'Rust',\n extensions: ['.rs'],\n grammarFile: 'tree-sitter-rust',\n },\n {\n id: 'cs',\n label: 'C#',\n extensions: ['.cs'],\n grammarFile: 'tree-sitter-c_sharp',\n },\n {\n id: 'rb',\n label: 'Ruby',\n extensions: ['.rb'],\n grammarFile: 'tree-sitter-ruby',\n },\n { id: 'php', label: 'PHP', extensions: ['.php'], grammarFile: 'tree-sitter-php' },\n { id: 'kotlin', label: 'Kotlin', extensions: ['.kt', '.kts'], grammarFile: 'tree-sitter-kotlin' },\n { id: 'swift', label: 'Swift', extensions: ['.swift'], grammarFile: 'tree-sitter-swift' },\n { id: 'scala', label: 'Scala', extensions: ['.scala', '.sc'], grammarFile: 'tree-sitter-scala' },\n { id: 'dart', label: 'Dart', extensions: ['.dart'], grammarFile: 'tree-sitter-dart' },\n { id: 'lua', label: 'Lua', extensions: ['.lua'], grammarFile: 'tree-sitter-lua' },\n { id: 'ex', label: 'Elixir', extensions: ['.ex', '.exs'], grammarFile: 'tree-sitter-elixir' },\n // Known limitation: the bundled bash grammar's external scanner throws under\n // web-tree-sitter 0.25.10 on `case`/heredoc constructs. Such files degrade\n // gracefully (per-file empty parse + a surfaced warning, never a build crash);\n // functions in case/heredoc-free scripts extract normally.\n { id: 'sh', label: 'Shell', extensions: ['.sh', '.bash'], grammarFile: 'tree-sitter-bash' },\n { id: 'zig', label: 'Zig', extensions: ['.zig'], grammarFile: 'tree-sitter-zig' },\n { id: 'c', label: 'C', extensions: ['.c'], grammarFile: 'tree-sitter-c' },\n // C++ owns `.h`: the cpp grammar is a superset of C, so C headers parse clean\n // under it, while C++ headers (classes/templates) break the C grammar.\n {\n id: 'cpp',\n label: 'C++',\n extensions: ['.cpp', '.cc', '.cxx', '.hpp', '.hh', '.hxx', '.h'],\n grammarFile: 'tree-sitter-cpp',\n },\n];\n\nconst EXT_TO_LANG = new Map<string, LanguageDef>();\nfor (const lang of LANGUAGES) {\n for (const ext of lang.extensions) EXT_TO_LANG.set(ext, lang);\n}\n\nconst ID_TO_LANG = new Map<string, LanguageDef>(LANGUAGES.map((l) => [l.id, l]));\n\nexport function langForExtension(ext: string): LanguageDef | undefined {\n return EXT_TO_LANG.get(ext.toLowerCase());\n}\n\nexport function langById(id: string): LanguageDef | undefined {\n return ID_TO_LANG.get(id);\n}\n\nexport function allLanguageIds(): string[] {\n return LANGUAGES.map((l) => l.id);\n}\n","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 */\nfunction 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\nasync 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/** Construct a fresh parser bound to a language. */\nexport async function parserFor(def: LanguageDef): Promise<Parser> {\n const language = await loadLanguage(def.id);\n const parser = new Parser();\n parser.setLanguage(language);\n return parser;\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 (--deep). */\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\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 { 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 { 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};\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 ],\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 ],\n calls: ['(invocation_expression function: (member_access_expression name: (identifier) @callee))', '(invocation_expression function: (identifier) @callee)'],\n imports: ['(using_directive (qualified_name) @source)', '(using_directive (identifier) @source)'],\n heritage: ['(base_list (identifier) @extends)'],\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 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 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 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 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 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 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};\n\nexport function queriesFor(langId: string): LangQueries | undefined {\n return BY_LANG[langId];\n}\n","import { blake3 } from '@noble/hashes/blake3.js';\nimport { bytesToHex } from '@noble/hashes/utils.js';\n\n/**\n * Content hashing — the bedrock of vg's determinism contract.\n *\n * Ids are blake3 over a canonical payload. blake3 is pure-WASM/JS (no native\n * build, no platform variance), so identical input → identical id on every\n * machine. We never let timestamps, RNG, locale, or filesystem order into a\n * hashed payload (VG-ENGINE-TEARDOWN.md §5).\n */\n\nconst encoder = new TextEncoder();\n\n/** Full hex digest of a UTF-8 string. */\nexport function hashString(input: string): string {\n return bytesToHex(blake3(encoder.encode(input)));\n}\n\n/** Full hex digest of raw bytes (file contents). */\nexport function hashBytes(input: Uint8Array): string {\n return bytesToHex(blake3(input));\n}\n\n/**\n * A short, collision-resistant id for nodes/edges. 16 bytes (128 bits) of\n * blake3 is ample for repo-scale graphs and keeps `graph.json` compact and\n * human-diffable.\n */\nexport function shortId(input: string): string {\n return bytesToHex(blake3(encoder.encode(input), { dkLen: 16 }));\n}\n\n/**\n * Canonical JSON: object keys sorted recursively, no insignificant whitespace.\n * The single source of truth for \"what bytes get hashed\" so two runs that see\n * the same logical payload produce byte-identical input to blake3.\n */\nexport function canonicalize(value: unknown): string {\n return JSON.stringify(sortKeys(value));\n}\n\nfunction sortKeys(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(sortKeys);\n if (value && typeof value === 'object') {\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(value as Record<string, unknown>).sort()) {\n out[key] = sortKeys((value as Record<string, unknown>)[key]);\n }\n return out;\n }\n return value;\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 { hashString } from './hash.js';\nimport { redactSecrets } from '../core-open/utils/redact.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]);\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 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 const def = langById(langId);\n const langQueries = queriesFor(langId);\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(langId);\n const parser = await parserFor(def);\n const tree = parser.parse(source);\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, langId, source, 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, langId, 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, langId, 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, langId, 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, langId, 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, langId, 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 // --- guards (assert-like expressions → invariant facts) ---\n const guards: RawGuard[] = [];\n for (const qsrc of langQueries.guards ?? []) {\n const q = compile(language, langId, 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 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"]}
|