From f392417d6c9233af2e7d56546941d0ff15a456e4 Mon Sep 17 00:00:00 2001 From: danusha2345 Date: Tue, 15 Sep 2026 15:47:43 +0300 Subject: [PATCH 01/10] feat(verilog): index Verilog/SystemVerilog modules, instances, ports and signals Add a tree-sitter-systemverilog grammar (.v, .vh, .sv, .svh) and an extractor that records modules, packages, interfaces and modports as containers, named instances with an `instantiates` reference to the instantiated module, ports, nets and variables, parameters and `define macros, functions and tasks, `include imports, always/assign blocks and lexical/generate scopes. Signal references keep their enclosing block; bit and part selects keep their base signal. Same-line declarations get distinct node ids through the column. The extraction stamp is bumped so existing indexes ask for a re-index. Based on the extractor contributed in #402. Co-authored-by: FHYQ-Dong --- README.md | 3 +- __tests__/extraction.test.ts | 185 ++++++++ __tests__/verilog-grammar-version.test.ts | 43 ++ __tests__/verilog-signals.test.ts | 148 ++++++ src/extraction/grammars.ts | 9 +- src/extraction/languages/index.ts | 2 + .../languages/verilog-call-access.ts | 80 ++++ src/extraction/languages/verilog-generate.ts | 33 ++ src/extraction/languages/verilog-packages.ts | 46 ++ src/extraction/languages/verilog-signals.ts | 387 +++++++++++++++ src/extraction/languages/verilog.ts | 444 ++++++++++++++++++ .../wasm/tree-sitter-systemverilog.wasm | Bin 0 -> 21802386 bytes src/types.ts | 1 + 13 files changed, 1379 insertions(+), 2 deletions(-) create mode 100644 __tests__/verilog-grammar-version.test.ts create mode 100644 __tests__/verilog-signals.test.ts create mode 100644 src/extraction/languages/verilog-call-access.ts create mode 100644 src/extraction/languages/verilog-generate.ts create mode 100644 src/extraction/languages/verilog-packages.ts create mode 100644 src/extraction/languages/verilog-signals.ts create mode 100644 src/extraction/languages/verilog.ts create mode 100644 src/extraction/wasm/tree-sitter-systemverilog.wasm diff --git a/README.md b/README.md index baac93178c..92b48930e6 100644 --- a/README.md +++ b/README.md @@ -278,7 +278,7 @@ CodeGraph's parsing engine is a **native Rust kernel**: 20 languages — TypeScr | **Full-Text Search** | Find code by name instantly across your entire codebase, powered by FTS5 | | **Impact Analysis** | Trace callers, callees, and the full impact radius of any symbol before making changes | | **Always Fresh** | File watcher uses native OS events (FSEvents/inotify/ReadDirectoryChangesW) with debounced auto-sync — the graph stays current as you code, zero config | -| **20+ Languages** | TypeScript, JavaScript, ArkTS, Python, Go, Rust, Java, C#, VB.NET, PHP, Ruby, C, C++, CUDA, Objective-C, Metal, Swift, Kotlin, Scala, Dart, Lua, Luau, R, Nix, Erlang, CFML, COBOL, Solidity, Terraform/OpenTofu, Svelte, Vue, Astro, Liquid, Pascal/Delphi | +| **20+ Languages** | TypeScript, JavaScript, ArkTS, Python, Go, Rust, Java, C#, VB.NET, PHP, Ruby, C, C++, CUDA, Objective-C, Metal, Swift, Kotlin, Scala, Dart, Lua, Luau, R, Nix, Erlang, CFML, COBOL, Solidity, Terraform/OpenTofu, Svelte, Vue, Astro, Liquid, Pascal/Delphi, Verilog/SystemVerilog | | **Framework-aware Routes** | Recognizes web-framework routing files and links URL patterns to their handlers across 17 frameworks | | **Mixed iOS / React Native / Expo** | Closes cross-language flows that static parsing misses: Swift ↔ ObjC bridging, React Native legacy bridge + TurboModules + Fabric view components, native → JS event emitters, Expo Modules | | **100% Local** | No data leaves your machine. No API keys. No external services. SQLite database only | @@ -835,6 +835,7 @@ is written): | Astro | `.astro` | Full support (frontmatter + script extraction, template component/call references, `src/pages/` routes) | | Liquid | `.liquid` | Full support | | Pascal / Delphi | `.pas`, `.dpr`, `.dpk`, `.lpr` | Full support (classes, records, interfaces, enums, DFM/FMX form files) | +| Verilog / SystemVerilog | `.v`, `.vh`, `.sv`, `.svh` | Modules, packages, interfaces/modports and named instances; ports and signals with named/positional/wildcard port bindings, bit/part selects and always/assign blocks; lexical and generate scopes; read/write/control/event signal-access queries; optional build profiles (filelists/includes/defines, see [docs/hdl-profiles.md](docs/hdl-profiles.md)). Source graph only — no elaboration or timing; `codegraph hdl-semantic` computes parameters and widths through an installed [slang](docs/hdl-semantics.md) | | Lua | `.lua` | Full support (functions, methods with receivers, local variables, `require` imports, call edges) | | R | `.R` `.r` | Full support (functions in every assignment form, S4/R5/R6 classes with methods, `library`/`require` imports, `source()` file references, call edges) | | Luau | `.luau` | Full support (everything in Lua, plus `type`/`export type` aliases, typed signatures, and Roblox instance-path `require`) | diff --git a/__tests__/extraction.test.ts b/__tests__/extraction.test.ts index 2814a4a2c3..591c5a4d2c 100644 --- a/__tests__/extraction.test.ts +++ b/__tests__/extraction.test.ts @@ -14415,3 +14415,188 @@ describe('C++ COM interface declarations (#1519)', () => { expect(Buffer.byteLength(expected)).toBe(Buffer.byteLength(source)); }); }); + +describe('Verilog / SystemVerilog Extraction', () => { + it('should report Verilog as supported', () => { + expect(isLanguageSupported('verilog')).toBe(true); + expect(getSupportedLanguages()).toContain('verilog'); + }); + + it('should extract modules as containers with scoped functions and tasks', () => { + const code = ` +module top (input logic clk, output logic [7:0] z); + function automatic int square(int n); + return n * n; + endfunction + task automatic do_reset(); + z = '0; + endtask +endmodule +`; + const result = extractFromSource('top.sv', code); + + const mod = result.nodes.find((n) => n.kind === 'class' && n.name === 'top'); + expect(mod).toBeDefined(); + expect(mod?.language).toBe('verilog'); + + const fn = result.nodes.find((n) => n.kind === 'function' && n.name === 'square'); + expect(fn).toBeDefined(); + expect(fn?.qualifiedName).toBe('top::square'); // scoped under the module + + const task = result.nodes.find((n) => n.kind === 'function' && n.name === 'do_reset'); + expect(task).toBeDefined(); + }); + + it('should emit an instantiates reference from a module to its submodule type', () => { + const code = ` +module alu #(parameter int WIDTH = 8) (input logic [WIDTH-1:0] a, output logic [WIDTH-1:0] y); +endmodule + +module top (input logic [7:0] x, output logic [7:0] z); + alu #(.WIDTH(8)) u_alu (.a(x), .y(z)); +endmodule +`; + const result = extractFromSource('soc.sv', code); + + const top = result.nodes.find((n) => n.kind === 'class' && n.name === 'top'); + expect(top).toBeDefined(); + + const inst = result.unresolvedReferences.find( + (r) => r.referenceKind === 'instantiates' && r.referenceName === 'alu' + ); + expect(inst).toBeDefined(); + expect(inst?.fromNodeId).toBe(top?.id); // the parent module is the source + + // parameter is captured as a constant + const param = result.nodes.find((n) => n.kind === 'constant' && n.name === 'WIDTH'); + expect(param).toBeDefined(); + }); + + it('should extract package typedefs, functions, imports and call edges', () => { + const code = ` +package math_pkg; + typedef enum logic [1:0] { IDLE, RUN, DONE } state_t; + function automatic int add(int a, int b); + return a + b; + endfunction +endpackage + +module worker (input logic clk); + import math_pkg::*; + function automatic int caller(int y); + return add(y); + endfunction +endmodule +`; + const result = extractFromSource('pkg.sv', code); + + const pkg = result.nodes.find((n) => n.kind === 'class' && n.name === 'math_pkg'); + expect(pkg).toBeDefined(); + + const typedef = result.nodes.find((n) => n.kind === 'type_alias' && n.name === 'state_t'); + expect(typedef).toBeDefined(); + expect(typedef?.qualifiedName).toBe('math_pkg::state_t'); + + const importNode = result.nodes.find((n) => n.kind === 'import' && n.name === 'math_pkg'); + expect(importNode).toBeDefined(); + + const callRef = result.unresolvedReferences.find( + (r) => r.referenceKind === 'calls' && r.referenceName === 'add' + ); + expect(callRef).toBeDefined(); + }); + + it('should extract every package in a multi-package import statement', () => { + const code = ` +package a_pkg; + function automatic int fa(); return 1; endfunction +endpackage + +package b_pkg; + function automatic int fb(); return 2; endfunction +endpackage + +module worker (input logic clk); + import a_pkg::*, b_pkg::*; + function automatic int caller(); + return fa() + fb(); + endfunction +endmodule +`; + const result = extractFromSource('multi.sv', code); + + const imports = result.nodes.filter((n) => n.kind === 'import').map((n) => n.name); + expect(imports).toContain('a_pkg'); + expect(imports).toContain('b_pkg'); // the second import must not be dropped + + // call edges still resolve when multiple imports share one statement + const calls = result.unresolvedReferences + .filter((r) => r.referenceKind === 'calls') + .map((r) => r.referenceName); + expect(calls).toContain('fa'); + expect(calls).toContain('fb'); + }); + + it('should capture function calls inside instantiation port/param expressions', () => { + const code = ` +module sub #(parameter int W = 8) (input logic [W-1:0] a); +endmodule + +module top (input logic [7:0] x); + function automatic int dbl(int v); return v * 2; endfunction + function automatic int wid(); return 8; endfunction + sub #(.W(wid())) u_sub (.a(dbl(x))); +endmodule +`; + const result = extractFromSource('inst_calls.sv', code); + + const calls = result.unresolvedReferences + .filter((r) => r.referenceKind === 'calls') + .map((r) => r.referenceName); + expect(calls).toContain('dbl'); // call inside a port connection + expect(calls).toContain('wid'); // call inside a parameter override + + // the instantiation edge itself is still emitted + const inst = result.unresolvedReferences.find( + (r) => r.referenceKind === 'instantiates' && r.referenceName === 'sub' + ); + expect(inst).toBeDefined(); + }); + + it('should emit an import for each `include directive, named by the included path', () => { + const code = ` +\`include "defs.vh" +\`include "axi/typedef.svh" +\`include +module top (input logic clk); +endmodule +`; + const result = extractFromSource('top.sv', code); + + const includes = result.nodes.filter((n) => n.kind === 'import').map((n) => n.name); + expect(includes).toEqual(['defs.vh', 'axi/typedef.svh', 'uvm_macros.svh']); + + // the path is what the import ref carries, so the file-path matcher can + // land it on the header by suffix + const refs = result.unresolvedReferences + .filter((r) => r.referenceKind === 'imports') + .map((r) => r.referenceName); + expect(refs).toEqual(['defs.vh', 'axi/typedef.svh', 'uvm_macros.svh']); + }); + + it('should extract `define macros and top-level parameters from a header', () => { + const code = ` +\`ifndef DEFS_VH +\`define DEFS_VH +\`define DATA_W 16 +\`define ADDR(x) (x + 1) +parameter CLK_HZ = 27_000_000; +localparam BAUD = 115200; +\`endif +`; + const result = extractFromSource('defs.vh', code); + + const constants = result.nodes.filter((n) => n.kind === 'constant').map((n) => n.name); + expect(constants).toEqual(['DEFS_VH', 'DATA_W', 'ADDR', 'CLK_HZ', 'BAUD']); + }); +}); diff --git a/__tests__/verilog-grammar-version.test.ts b/__tests__/verilog-grammar-version.test.ts new file mode 100644 index 0000000000..861c8397f9 --- /dev/null +++ b/__tests__/verilog-grammar-version.test.ts @@ -0,0 +1,43 @@ +import { afterAll, beforeAll, describe, expect, it } from 'vitest'; +import { Parser, Language } from 'web-tree-sitter'; +import path from 'node:path'; + +let parser: Parser; +let grammar: Language; +beforeAll(async () => { + await Parser.init(); + grammar = await Language.load(path.join(__dirname, '../src/extraction/wasm/tree-sitter-systemverilog.wasm')); + parser = new Parser(); + parser.setLanguage(grammar); +}); +afterAll(() => parser?.delete()); + +describe('SystemVerilog grammar capabilities', () => { + it('loads the shipped grammar with the supported ABI', () => { + expect(grammar.abiVersion).toBe(15); + }); + it.each([ + ['class timeunits', 'class C; timeunit 1ns; timeprecision 1ps; endclass', 'timeunits_declaration'], + ['generate inside expression', 'module m; parameter N=1; if (N inside {1,2}) begin: g wire x; end endmodule', 'inside_expression'], + ['keywords in macro arguments', 'module m; `M(input, output, always_ff) endmodule', 'text_macro_usage'], + ])('parses %s without recovery', (_name, source, expectedType) => { + const tree = parser.parse(source)!; + try { + expect(tree.rootNode.hasError).toBe(false); + expect(tree.rootNode.descendantsOfType(expectedType).length).toBeGreaterThan(0); + } finally { tree.delete(); } + }); + it('rejects whitespace between the backtick and a macro name', () => { + const tree = parser.parse('module m; ` M(x) endmodule')!; + try { expect(tree.rootNode.hasError).toBe(true); } + finally { tree.delete(); } + }); + it('represents replication multipliers as constant expressions', () => { + const tree = parser.parse('module m(input a, output [3:0] q); parameter N=4; assign q={N{a}}; endmodule')!; + try { + expect(tree.rootNode.hasError).toBe(false); + const replication = tree.rootNode.descendantsOfType('multiple_concatenation')[0]!; + expect(replication.namedChildren[0]?.type).toBe('constant_expression'); + } finally { tree.delete(); } + }); +}); diff --git a/__tests__/verilog-signals.test.ts b/__tests__/verilog-signals.test.ts new file mode 100644 index 0000000000..58076e3fe1 --- /dev/null +++ b/__tests__/verilog-signals.test.ts @@ -0,0 +1,148 @@ +import { beforeAll, describe, expect, it } from 'vitest'; +import { extractFromSource } from '../src/extraction'; +import { initGrammars, loadAllGrammars } from '../src/extraction/grammars'; + +beforeAll(async () => { await initGrammars(); await loadAllGrammars(); }); + +describe('HDL signals and procedural source navigation', () => { + it('keeps ANSI direction, non-ANSI declarations and exact source signatures', () => { + const code = `module top(input logic clk, rst, output reg [3:0] q); +wire a,b=1; logic [7:0] x,y; +endmodule +module old(a,b); input [3:0] a; output reg b; endmodule`; + const result = extractFromSource('ports.sv', code); + const fields = result.nodes.filter(n => n.kind === 'field'); + expect(fields.map(n => n.qualifiedName)).toEqual(['top::clk', 'top::rst', 'top::q', 'top::a', 'top::b', 'top::x', 'top::y', 'old::a', 'old::b']); + expect(fields.find(n => n.name === 'rst')?.decorators).toContain('hdl:input'); + expect(fields.find(n => n.name === 'q')?.signature).toBe('output reg [3:0] q'); + expect(fields.find(n => n.name === 'x')?.signature).toBe('logic [7:0] x,y;'); + expect(fields.find(n => n.qualifiedName === 'old::a')?.signature).toBe('input [3:0] a'); + }); + + it('indexes separate same-line processes and records only local signal candidates', () => { + const code = `module top(input logic clk, output logic q); +logic x; +always_ff @(posedge clk) q <= helper(x); always_comb x = q; +initial x=0; assign q = x; +endmodule`; + const result = extractFromSource('logic.sv', code); + const processes = result.nodes.filter(n => n.decorators?.includes('hdl:process')); + expect(processes.map(n => n.name.split('@')[0])).toEqual(['always_ff', 'always_comb', 'initial', 'assign']); + expect(new Set(processes.map(n => n.id)).size).toBe(4); + expect(processes[0].signature).toBe('always_ff @(posedge clk) q <= helper(x);'); + const signals = result.unresolvedReferences.filter(r => r.referenceName.startsWith('hdl:signal:')); + expect(signals.some(r => r.referenceName === 'hdl:signal:helper')).toBe(false); + expect(signals.filter(r => r.fromNodeId === processes[0].id).map(r => r.referenceName)).toEqual(['hdl:signal:clk', 'hdl:signal:q', 'hdl:signal:x']); + }); + + it('does not inherit a scalar output direction onto an interface port', () => { + const result = extractFromSource('interface.sv', 'module top(output q, bus.master link); endmodule'); + const link = result.nodes.find(n => n.name === 'link')!; + expect(link.decorators).toContain('hdl:interface:bus'); + expect(link.decorators).not.toContain('hdl:output'); + expect(result.unresolvedReferences.find(r => r.fromNodeId === link.id)?.referenceName).toBe('bus.master'); + }); + + it('does not bind a block-local shadow to a module signal', () => { + const result = extractFromSource('shadow.sv', 'module top; logic x,y; initial begin logic x; x = y; end endmodule'); + const local = result.nodes.find(n => n.name === 'x' && n.qualifiedName.includes('::block@'))!; + const refs = result.unresolvedReferences.filter(r => r.referenceName.startsWith('hdl:signal:')); + expect(refs.map(r => r.referenceName)).toEqual(['hdl:signal:x', 'hdl:signal:y']); + expect(result.nodes.find(n => n.id === refs[0].fromNodeId)?.qualifiedName).toBe(local.qualifiedName.split('::').slice(0, -1).join('::')); + }); + + it('merges non-ANSI reg redeclarations and indexes initializer dependencies', () => { + const result = extractFromSource('legacy.sv', 'module top(a); output a; reg a; wire x = a; endmodule'); + expect(result.nodes.filter(n => n.qualifiedName === 'top::a')).toHaveLength(1); + const x = result.nodes.find(n => n.name === 'x')!; + expect(result.unresolvedReferences.filter(r => r.fromNodeId === x.id).map(r => r.referenceName)).toContain('hdl:signal:a'); + }); + + it('does not confuse generate iteration bindings with outer ports', () => { + const result = extractFromSource('generate.sv', `module top(input i, input x); +for(genvar i=0;i<2;i++) begin : lanes leaf u(.a(i), .b(x)); leaf short(.i); end +leaf outside(.a(i)); endmodule`); + const inside = result.nodes.find(n => n.name === 'u')!; + const outside = result.nodes.find(n => n.name === 'outside')!; + const shorthand = result.nodes.find(n => n.name === 'short')!; + expect(result.nodes.find(n => n.qualifiedName === 'top::lanes::i')?.decorators).toContain('hdl:generate-parameter'); + expect(result.unresolvedReferences.filter(r => r.fromNodeId === shorthand.id).map(r => r.referenceName)).toContain('hdl:signal:i'); + expect(result.unresolvedReferences.filter(r => r.fromNodeId === inside.id && r.referenceName.startsWith('hdl:signal:')).map(r => r.referenceName)).toEqual(['hdl:signal:i', 'hdl:signal:x']); + expect(result.unresolvedReferences.filter(r => r.fromNodeId === outside.id).map(r => r.referenceName)).toContain('hdl:signal:i'); + }); + + it('skips package qualifiers while preserving method-call argument signals', () => { + const result = extractFromSource('package-call.sv', `module top(input p, input x, output integer q); +initial q=p::value(x); endmodule`); + expect(result.unresolvedReferences.filter(r => r.referenceName.startsWith('hdl:signal:')).map(r => r.referenceName)).toEqual(['hdl:signal:q', 'hdl:signal:x']); + }); + + it('records bit/part-select bases, bounds and concatenated assignment targets', () => { + const result = extractFromSource('selects.sv', `module top; +assign x[3] = y; +assign x[i+:W] = y; +assign x[msb:lsb] = y; +assign {a, b[j]} = v; +endmodule`); + const refs = (line: number) => result.unresolvedReferences.filter(r => r.line === line && r.referenceName.startsWith('hdl:signal:')).map(r => r.referenceName); + expect(refs(2)).toEqual(['hdl:signal:x', 'hdl:signal:y']); + expect(refs(3)).toEqual(['hdl:signal:x', 'hdl:signal:i', 'hdl:signal:W', 'hdl:signal:y']); + expect(refs(4)).toEqual(['hdl:signal:x', 'hdl:signal:msb', 'hdl:signal:lsb', 'hdl:signal:y']); + expect(refs(5)).toEqual(['hdl:signal:a', 'hdl:signal:b', 'hdl:signal:j', 'hdl:signal:v']); + }); + + it('keeps index expressions but never flattens hierarchical LHS members', () => { + const result = extractFromSource('member-select.sv', `module top; +assign remote.x[i] = y; +assign {a, remote.x[j]} = v; +assign x[bound(i)+:pkg::W] = y; +assign pkg::x[i] = y; +assign x[i].field[j] = y; +assign $root.top.x[i] = y; +endmodule`); + const refs = (line: number) => result.unresolvedReferences.filter(r => r.line === line && r.referenceName.startsWith('hdl:signal:')).map(r => r.referenceName); + expect(refs(2)).toEqual(['hdl:signal:i', 'hdl:signal:y']); + expect(refs(3)).toEqual(['hdl:signal:a', 'hdl:signal:j', 'hdl:signal:v']); + expect(refs(4)).toEqual(['hdl:signal:x', 'hdl:signal:i', 'hdl:signal:y']); + expect(refs(5)).toEqual(['hdl:signal:i', 'hdl:signal:y']); + expect(refs(6)).toEqual(['hdl:signal:i', 'hdl:signal:j', 'hdl:signal:y']); + expect(refs(7)).toEqual(['hdl:signal:i', 'hdl:signal:y']); + }); + + it('does not bind procedural for/foreach variables to matching module ports', () => { + const result = extractFromSource('procedural-loop.sv', `module top(input i, input j, input y); +logic [7:0] x; +initial for (int i=0;i<4;i++) x[i]=y; +initial foreach (x[j]) x[j]=y; +endmodule`); + const refs = result.unresolvedReferences.filter(r => r.referenceName.startsWith('hdl:signal:')).map(r => r.referenceName); + expect(result.nodes.some(n => n.name === 'i' && n.qualifiedName.includes('::for@'))).toBe(true); + expect(result.nodes.some(n => n.name === 'j' && n.qualifiedName.includes('::foreach@'))).toBe(true); + expect(refs).toContain('hdl:signal:i'); + expect(refs).toContain('hdl:signal:j'); + expect(refs).toContain('hdl:signal:x'); + expect(refs).toContain('hdl:signal:y'); + }); + + it('does not bind qualified procedural targets to same-named local ports', () => { + const result = extractFromSource('procedural-package.sv', `package p; logic x; endpackage +module top(input a, input x, input i, input j, output [7:0] y); +always_comb p::x = a; +always_comb p::x[i] = helper(a); +always_comb {p::x[i], y[j]} = a; +always_comb remote.x[i] = a; +assign y = p::x[i]; +endmodule`); + const refs = (line: number) => result.unresolvedReferences.filter(r => r.line === line && r.referenceName.startsWith('hdl:signal:')).map(r => r.referenceName); + expect(refs(3)).toEqual(['hdl:signal:a']); + expect(refs(4)).toEqual(['hdl:signal:i', 'hdl:signal:a']); + expect(refs(5)).toEqual(['hdl:signal:i', 'hdl:signal:y', 'hdl:signal:j', 'hdl:signal:a']); + expect(refs(6)).toEqual(['hdl:signal:i', 'hdl:signal:a']); + expect(refs(7)).toEqual(['hdl:signal:y', 'hdl:signal:i']); + }); + + it('does not flatten hierarchical members into local signal references', () => { + const result = extractFromSource('scope.sv', 'module top; wire x,y; assign x = remote.y; endmodule'); + expect(result.unresolvedReferences.filter(r => r.referenceName.startsWith('hdl:signal:')).map(r => r.referenceName)).toEqual(['hdl:signal:x']); + }); +}); diff --git a/src/extraction/grammars.ts b/src/extraction/grammars.ts index 66c69687b7..3217be7e4f 100644 --- a/src/extraction/grammars.ts +++ b/src/extraction/grammars.ts @@ -24,6 +24,7 @@ const WASM_GRAMMAR_FILES: Record = { javascript: 'tree-sitter-javascript.wasm', jsx: 'tree-sitter-javascript.wasm', python: 'tree-sitter-python.wasm', + verilog: 'tree-sitter-systemverilog.wasm', go: 'tree-sitter-go.wasm', rust: 'tree-sitter-rust.wasm', java: 'tree-sitter-java.wasm', @@ -121,6 +122,11 @@ export const EXTENSION_MAP: Record = { '.scala': 'scala', '.sc': 'scala', '.lua': 'lua', + // Verilog / SystemVerilog (one grammar covers both) + '.v': 'verilog', + '.vh': 'verilog', + '.sv': 'verilog', + '.svh': 'verilog', '.luau': 'luau', '.m': 'objc', '.mm': 'objc', @@ -395,7 +401,7 @@ export async function initGrammars(): Promise { * the vendored wasm together. */ const VENDORED_WASM_LANGS: ReadonlySet = new Set([ - 'pascal', 'scala', 'lua', 'luau', 'csharp', 'r', 'cfml', 'cfscript', 'cfquery', + 'pascal', 'scala', 'lua', 'luau', 'verilog', 'csharp', 'r', 'cfml', 'cfscript', 'cfquery', 'cobol', 'vbnet', 'erlang', 'terraform', 'arkts', 'nix', 'typescript', 'tsx', 'javascript', 'jsx', 'java', 'python', 'go', // R7a (C/C++ kernel port prep): tree-sitter-c v0.24.2 (b780e47) + @@ -929,6 +935,7 @@ export function getLanguageDisplayName(language: Language): string { scala: 'Scala', lua: 'Lua', luau: 'Luau', + verilog: 'Verilog / SystemVerilog', objc: 'Objective-C', solidity: 'Solidity', nix: 'Nix', diff --git a/src/extraction/languages/index.ts b/src/extraction/languages/index.ts index 6b760b01d6..ed11e19084 100644 --- a/src/extraction/languages/index.ts +++ b/src/extraction/languages/index.ts @@ -24,6 +24,7 @@ import { dartExtractor } from './dart'; import { pascalExtractor } from './pascal'; import { scalaExtractor } from './scala'; import { luaExtractor } from './lua'; +import { verilogExtractor } from './verilog'; import { rExtractor } from './r'; import { luauExtractor } from './luau'; import { objcExtractor } from './objc'; @@ -57,6 +58,7 @@ export const EXTRACTORS: Partial> = { pascal: pascalExtractor, scala: scalaExtractor, lua: luaExtractor, + verilog: verilogExtractor, r: rExtractor, luau: luauExtractor, objc: objcExtractor, diff --git a/src/extraction/languages/verilog-call-access.ts b/src/extraction/languages/verilog-call-access.ts new file mode 100644 index 0000000000..7c5b374d5b --- /dev/null +++ b/src/extraction/languages/verilog-call-access.ts @@ -0,0 +1,80 @@ +import type { Node as SyntaxNode } from 'web-tree-sitter'; +import type { ExtractorContext } from '../tree-sitter-types'; + +export const VERILOG_CALL_ARGUMENT_PREFIX = 'hdl:call-arg:'; +export interface VerilogCallArgument { + callee: string; + callableId: string; + scope: string; + argument: number | string; + slots: Array<{ key: number | string; omitted: boolean }>; + role: 'value' | 'index'; + writeTarget: boolean; + referenceTarget: boolean; +} + +function assignable(node: SyntaxNode, allowConcat = true): boolean { + if (node.type === 'expression') return node.namedChildCount === 1 && !!node.firstNamedChild && assignable(node.firstNamedChild, allowConcat); + if (node.type === 'primary') { + const first = node.firstNamedChild; + return !!first && assignable(first, allowConcat) && node.namedChildren.slice(1).every(n => n.type === 'select' + && !n.namedChildren.some(c => ['simple_identifier', 'escaped_identifier'].includes(c.type))); + } + if (node.type === 'hierarchical_identifier') return node.namedChildCount === 1 + && ['simple_identifier', 'escaped_identifier'].includes(node.firstNamedChild?.type ?? ''); + if (node.type === 'concatenation') return allowConcat && node.namedChildren.length > 0 && node.namedChildren.every(n => assignable(n, allowConcat)); + return false; +} + +/** Annotate an already discovered local signal occurrence; never emit a second edge. */ +export function getVerilogCallArgumentCandidates(id: SyntaxNode, ctx: ExtractorContext): string[] { + let argument: SyntaxNode = id; + let role: VerilogCallArgument['role'] = 'value'; + while (argument.parent && argument.parent.type !== 'list_of_arguments') { + argument = argument.parent; + if (['select', 'constant_select', 'bit_select', 'constant_bit_select', 'part_select_range'].includes(argument.type)) role = 'index'; + if (['function_declaration', 'task_declaration', 'module_declaration'].includes(argument.type)) return []; + } + const list = argument.parent; + if (!list || list.hasError || argument.type !== 'expression') return []; + const call = list.parent?.type === 'method_call_body' ? list.parent.parent : list.parent; + if (!call || call.hasError) return []; + let callee: string | undefined; + if (call.type === 'tf_call') callee = call.namedChildren.find(n => n.type === 'hierarchical_identifier')?.text.trim(); + if (call.type === 'method_call') { + const receiver = call.namedChildren.find(n => n.type === 'primary'); + const name = list.parent?.childForFieldName('name'); + if (receiver && name && /^\s*::\s*$/.test(ctx.source.slice(receiver.endIndex, name.startIndex))) callee = `${receiver.text.trim()}::${name.text.trim()}`; + } + if (!callee) return []; + const segments: SyntaxNode[][] = [[]]; + for (const child of list.children) { + if (child.type === ',') segments.push([]); + else if (!['comment', 'block_comment', 'one_line_comment'].includes(child.type)) segments[segments.length - 1]!.push(child); + } + const slots: VerilogCallArgument['slots'] = []; + let selected: number | string | undefined; + let namedSeen = false; + for (let index = 0; index < segments.length; index++) { + const segment = segments[index]!; + const named = segment[0]?.type === '.'; + const expression = segment.find(n => n.type === 'expression'); + let key: number | string = index; + if (named) { + namedSeen = true; + const name = segment.find(n => ['simple_identifier', 'escaped_identifier'].includes(n.type)); + if (!name) return []; + key = name.text.trim(); + } else if (namedSeen) return []; // A positional actual cannot follow named ones. + slots.push({ key, omitted: !expression }); + if (expression?.id === argument.id) selected = key; + } + if (selected === undefined) return []; + const lexical = ctx.nodes.find(n => n.id === ctx.nodeStack[ctx.nodeStack.length - 1]); + const owner = [...ctx.nodeStack].reverse().map(nodeId => ctx.nodes.find(n => n.id === nodeId)) + .find(n => n?.kind === 'function' || n?.kind === 'method') ?? lexical; + if (!owner || !lexical) return []; + const metadata: VerilogCallArgument = { callee, callableId: owner.id, scope: lexical.qualifiedName, + argument: selected, slots, role, writeTarget: assignable(argument), referenceTarget: assignable(argument, false) }; + return [`${VERILOG_CALL_ARGUMENT_PREFIX}${JSON.stringify(metadata)}`]; +} diff --git a/src/extraction/languages/verilog-generate.ts b/src/extraction/languages/verilog-generate.ts new file mode 100644 index 0000000000..6a5c1f55c4 --- /dev/null +++ b/src/extraction/languages/verilog-generate.ts @@ -0,0 +1,33 @@ +import type { Node as SyntaxNode } from 'web-tree-sitter'; +import type { ExtractorContext } from '../tree-sitter-types'; +import { getNodeText } from '../tree-sitter-helpers'; +import { addVerilogSignalReferences } from './verilog-signals'; + +function identifier(node: SyntaxNode): SyntaxNode | undefined { + return node.namedChildren.find(n => ['simple_identifier', 'escaped_identifier'].includes(n.type)); +} + +/** A generate iteration is a declaration template, never a guessed elaborated value. */ +export function initializeVerilogGenerateScope(block: SyntaxNode, ctx: ExtractorContext): void { + const loop = block.parent; + if (loop?.type !== 'loop_generate_construct') return; + const init = loop.namedChildren.find(n => n.type === 'genvar_initialization'); + const name = init && identifier(init); + if (!init || !name) return; + const binding = ctx.createNode('constant', getNodeText(name, ctx.source), init, { + signature: getNodeText(init, ctx.source), decorators: ['hdl:generate-parameter', 'hdl:template'], + }); + if (binding) addVerilogSignalReferences(init, ctx, binding.id); +} + +export function visitVerilogGenvarDeclaration(node: SyntaxNode, ctx: ExtractorContext): boolean { + if (node.type !== 'genvar_declaration') return false; + const list = node.namedChildren.find(n => n.type === 'list_of_genvar_identifiers'); + for (const name of list?.namedChildren ?? []) { + if (!['simple_identifier', 'escaped_identifier'].includes(name.type)) continue; + ctx.createNode('constant', getNodeText(name, ctx.source), name, { + signature: getNodeText(node, ctx.source), decorators: ['hdl:genvar', 'hdl:template'], + }); + } + return true; +} diff --git a/src/extraction/languages/verilog-packages.ts b/src/extraction/languages/verilog-packages.ts new file mode 100644 index 0000000000..5440c479e7 --- /dev/null +++ b/src/extraction/languages/verilog-packages.ts @@ -0,0 +1,46 @@ +import type { Node as SyntaxNode } from 'web-tree-sitter'; +import type { ExtractorContext } from '../tree-sitter-types'; + +/** Keep qualification: a package or hierarchical call must never become a bare global call. */ +export function getVerilogCallName(node: SyntaxNode, _source: string): string | undefined { + const callee = node.namedChildren.find(c => c.type === 'hierarchical_identifier' || c.type === 'simple_identifier'); + return callee?.text.trim(); +} + +/** Package calls use method_call in this grammar; modports are named interface views. */ +export function handleVerilogPackageNode(node: SyntaxNode, ctx: ExtractorContext): boolean { + if (node.type === 'modport_item') { + const name = node.namedChildren.find(c => c.type === 'simple_identifier'); + const view = name ? ctx.createNode('interface', name.text, node, { signature: `modport ${node.text.trim()}` }) : null; + if (view) { + const visit = (part: SyntaxNode): void => { + if (part.type === 'modport_simple_port' && part.namedChildCount === 1 && part.firstNamedChild?.type === 'simple_identifier') { + ctx.addUnresolvedReference({ fromNodeId: view.id, + referenceName: `hdl:signal:${part.firstNamedChild.text}`, referenceKind: 'references', + line: part.startPosition.row + 1, column: part.startPosition.column }); + } else for (const child of part.namedChildren) visit(child); + }; + visit(node); + } + return true; + } + if (node.type !== 'method_call') return false; + const primary = node.namedChildren.find(c => c.type === 'primary'); + const body = node.namedChildren.find(c => c.type === 'method_call_body'); + const name = body?.childForFieldName('name'); + // Require the literal package separator between AST nodes, excluding object methods. + if (primary && name && /^\s*::\s*$/.test(ctx.source.slice(primary.endIndex, name.startIndex))) { + const lexical = ctx.nodes.find(n => n.id === ctx.nodeStack[ctx.nodeStack.length - 1]); + const callable = [...ctx.nodeStack].reverse().map(id => ctx.nodes.find(n => n.id === id)) + .find(n => n && (n.kind === 'function' || n.kind === 'method')); + const fromNodeId = callable?.id ?? lexical?.id; + if (fromNodeId) ctx.addUnresolvedReference({ fromNodeId, + ...(lexical?.kind === 'namespace' && lexical.id !== fromNodeId + ? { candidates: [`hdl:scope:${lexical.qualifiedName}`] } : {}), + referenceName: `${primary.text.trim()}::${name.text}`, referenceKind: 'calls', + line: node.startPosition.row + 1, column: node.startPosition.column }); + for (const child of body!.namedChildren) if (child.id !== name.id) ctx.visitNode(child); + return true; + } + return false; +} diff --git a/src/extraction/languages/verilog-signals.ts b/src/extraction/languages/verilog-signals.ts new file mode 100644 index 0000000000..fdfd40ff92 --- /dev/null +++ b/src/extraction/languages/verilog-signals.ts @@ -0,0 +1,387 @@ +import { getVerilogCallArgumentCandidates } from './verilog-call-access'; +import type { Node as SyntaxNode } from 'web-tree-sitter'; +import type { ExtractorContext } from '../tree-sitter-types'; +import { getNodeText } from '../tree-sitter-helpers'; + +function children(node: SyntaxNode): SyntaxNode[] { + return node.namedChildren; +} +function identifier(node: SyntaxNode): SyntaxNode | undefined { + return children(node).find(n => n.type === 'simple_identifier' || n.type === 'escaped_identifier'); +} +function walkChildren(node: SyntaxNode, ctx: ExtractorContext): void { + for (const child of children(node)) ctx.visitNode(child); +} +function direction(node: SyntaxNode, ctx: ExtractorContext): string | undefined { + for (const child of children(node)) { + if (child.type === 'port_direction') return getNodeText(child, ctx.source); + const nested = direction(child, ctx); + if (nested) return nested; + } + return undefined; +} + +/** Authoritative source header order for positional instance connections. + * null means the syntax is incomplete or needs preprocessing/elaboration. + * [] explicitly describes a module with no ports. Body declaration order is + * never used: legacy non-ANSI declarations can legally be reordered. + */ +export function getVerilogPortOrder(node: SyntaxNode, source: string): string[] | null { + const headers = new Set(['module_ansi_header', 'module_nonansi_header', 'module_header', + 'interface_ansi_header', 'interface_nonansi_header', 'program_ansi_header', 'program_nonansi_header']); + const header = children(node).find(n => headers.has(n.type)); + if (!header || node.hasError) return null; + const uncertain = (current: SyntaxNode): boolean => { + if (current.type.endsWith('_comment') || current.type === 'comment') return false; + return current.isMissing || current.type.includes('directive') || current.type.includes('macro') + || children(current).some(uncertain); + }; + if (uncertain(header)) return null; + const list = children(header).find(n => ['list_of_ports', 'list_of_port_declarations'].includes(n.type)); + if (!list) return []; + const names: string[] = []; + const seen = new Set(); + for (const port of children(list)) { + if (port.type.endsWith('_comment') || port.type === 'comment') continue; + let id: SyntaxNode | null | undefined; + if (port.type === 'ansi_port_declaration') { + if (getNodeText(port, source).trimStart().startsWith('.')) return null; + id = port.childForFieldName('port_name'); + } else if (port.type === 'port') { + id = identifier(port); + if (!id || children(port).length !== 1 || getNodeText(port, source).trim() !== getNodeText(id, source).trim()) return null; + } else return null; + if (!id || !['simple_identifier', 'escaped_identifier'].includes(id.type)) return null; + const name = getNodeText(id, source).trim(); + // Escaping an otherwise simple name does not create a distinct HDL port. + const canonical = name.replace(/^\\/, ''); + if (!canonical || seen.has(canonical)) return null; + seen.add(canonical); + names.push(name); + } + return names; +} + +/** Generate iteration variables are implicit local parameters in their body. + * Do not let an identically named outer signal stand in for that binding. */ +export function isVerilogGenerateBinding(node: SyntaxNode, ctx: ExtractorContext, name: string): boolean { + for (let ancestor = node.parent; ancestor; ancestor = ancestor.parent) { + if (ancestor.type === 'loop_generate_construct') { + const init = children(ancestor).find(n => n.type === 'genvar_initialization'); + const id = init && identifier(init); + if (id && getNodeText(id, ctx.source) === name) { + for (let i = ctx.nodeStack.length - 1; i >= 0; i--) { + const scope = ctx.nodes.find(n => n.id === ctx.nodeStack[i]); + if (scope && ctx.nodes.some(n => n.qualifiedName === `${scope.qualifiedName}::${name}` && n.decorators?.includes('hdl:generate-parameter'))) return false; + } + return true; + } + } + if (['module_declaration', 'interface_declaration', 'program_declaration'].includes(ancestor.type)) break; + } + return false; +} + +/** Describe the syntactic role of an occurrence, not simulated drive/race behavior. + * Calls and other unknown constructs remain ordinary references unless a + * separate argument resolver can prove their formal direction. + */ +function signalAccess(id: SyntaxNode, source: string): string[] { + let lhs = false; + const role = (kind: string): string[] => { + const roles = [`hdl:access:${kind}`]; + if (kind === 'write' || kind === 'readwrite') { + for (let context: SyntaxNode | null = id; context; context = context.parent) { + if (['statement_item', 'list_of_arguments'].includes(context.type)) break; + if (['cond_predicate', 'case_expression', 'case_item_expression'].includes(context.type) + || (context.type === 'expression' && ['loop_statement', 'wait_statement'].includes(context.parent?.type ?? ''))) { + roles.push('hdl:access:control'); + break; + } + } + } + return roles; + }; + for (let current: SyntaxNode | null = id; current; current = current.parent) { + if (['select', 'constant_select', 'bit_select', 'constant_bit_select', 'constant_indexed_range', 'constant_range'].includes(current.type)) return role('read'); + if (['variable_lvalue', 'net_lvalue'].includes(current.type)) lhs = true; + if (current.type === 'list_of_arguments') return []; + if (current.type === 'inc_or_dec_expression') return lhs ? role('readwrite') : []; + if (['operator_assignment', 'blocking_assignment', 'nonblocking_assignment', 'net_assignment', 'variable_assignment'].includes(current.type)) { + const op = children(current).find(n => n.type === 'assignment_operator'); + return role(lhs ? (op && getNodeText(op, source).trim() !== '=' ? 'readwrite' : 'write') : 'read'); + } + if (current.type === 'delay_control') return role('read'); + if (current.type === 'jump_statement' && current.children.some(n => n.type === 'return')) return role('read'); + if (current.type === 'event_expression') { + const iff = current.children.find(n => n.type === 'iff'); + if (iff && id.startIndex > iff.endIndex) return role('control'); + const edge = children(current).find(n => n.type === 'edge_identifier'); + const text = edge && getNodeText(edge, source).trim(); + return [...role('event'), ...(['posedge', 'negedge'].includes(text ?? '') ? [`hdl:event:${text}`] : [])]; + } + if (['cond_predicate', 'case_expression', 'case_item_expression'].includes(current.type) + || (current.type === 'expression' && ['loop_statement', 'wait_statement'].includes(current.parent?.type ?? ''))) return role('control'); + if (['variable_decl_assignment', 'net_decl_assignment', 'for_variable_declaration', 'tf_port_item'].includes(current.type)) return role('read'); + if (['statement_item', 'function_body_declaration', 'task_body_declaration', 'module_declaration'].includes(current.type)) return []; + } + return []; +} + +function hasIncompleteProceduralScope(node: SyntaxNode): boolean { + for (let ancestor: SyntaxNode | null = node; ancestor; ancestor = ancestor.parent) { + if (['always_construct', 'initial_construct', 'final_construct', 'function_declaration', 'task_declaration', 'seq_block', 'par_block', 'loop_statement'].includes(ancestor.type) && ancestor.hasError) return true; + if (['module_declaration', 'interface_declaration', 'program_declaration'].includes(ancestor.type)) break; + } + return false; +} + +/** Emit exact syntactic occurrences and bounded source access roles. + * A dedicated resolver must bind these only in the lexical scope of the owner. + * Dotted hierarchical accesses are deliberately excluded: their root is not + * sufficient evidence that the terminal signal belongs to this module. + */ +export function addVerilogSignalReferences(node: SyntaxNode, ctx: ExtractorContext, ownerId: string, lexicalScope = false): void { + // Parser recovery can lose a declaration while retaining its later uses. + // Keep the source nodes, but do not bind names from an incomplete procedural + // region to outer declarations. An unrelated valid process remains usable. + if (hasIncompleteProceduralScope(node)) return; + + const skip = new Set(['data_declaration', 'net_declaration', 'for_variable_declaration', 'tf_port_list', 'tf_port_declaration', 'tf_call', 'ps_or_hierarchical_function_identifier']); + const emit = (id: SyntaxNode): void => { + const name = getNodeText(id, ctx.source).trim(); + if (isVerilogGenerateBinding(id, ctx, name)) return; + const syntax = signalAccess(id, ctx.source); + // i++ remains a read/write occurrence even when its resulting value is + // passed to an input formal. Formal direction cannot erase that side effect. + const explicitEffect = syntax.some(c => c === 'hdl:access:write' || c === 'hdl:access:readwrite'); + ctx.addUnresolvedReference({ fromNodeId: ownerId, referenceName: `hdl:signal:${name}`, + referenceKind: 'references', line: id.startPosition.row + 1, column: id.startPosition.column, + candidates: [...syntax, ...(explicitEffect ? [] : getVerilogCallArgumentCandidates(id, ctx))] }); + }; + const visit = (current: SyntaxNode): void => { + if (lexicalScope && current.id !== node.id && ['seq_block', 'par_block', 'loop_statement'].includes(current.type)) return; + // A package-qualified call is also parsed as method_call. Its receiver + // may name a package, never evidence for an identically named local port. + if (current.type === 'method_call') { + const body = children(current).find(n => n.type === 'method_call_body'); + const args = body?.namedChildren.find(n => n.type === 'list_of_arguments'); + if (args) visit(args); + return; + } + if (skip.has(current.type)) { + // Function arguments still contain ordinary signal expressions. + if (current.type === 'tf_call') { + for (const child of children(current)) if (child.type === 'list_of_arguments') visit(child); + } + return; + } + if (['variable_lvalue', 'primary', 'constant_primary'].includes(current.type) && children(current).some(n => n.type.endsWith('_scope') || n.type === 'implicit_class_handle')) { + // p::x (on either side) is a package variable, even though the grammar wraps x in a + // single hierarchical_identifier. Keep index expressions, not its name. + for (const child of children(current)) { + if (['select', 'constant_select', 'variable_lvalue'].includes(child.type)) visit(child); + } + return; + } + if (current.type === 'net_lvalue') { + const id = identifier(current); + const select = children(current).find(n => n.type === 'constant_select'); + // The grammar puts `.member` identifiers directly inside constant_select, + // whereas bit/part-select expressions have their own nested AST nodes. + const hasMember = select && children(select).some(n => ['simple_identifier', 'escaped_identifier'].includes(n.type)); + const hasQualifier = children(current).some(n => n.id !== id?.id && !['constant_select', 'net_lvalue'].includes(n.type)); + if (id && !hasMember && !hasQualifier) emit(id); + // Concatenations recurse through nested net_lvalue; bounds recurse through + // constant_select. Bare member identifiers are never emitted by this walk. + for (const child of children(current)) if (child.id !== id?.id) visit(child); + return; + } + if (current.type === 'hierarchical_identifier' || current.type === 'constant_primary' || current.type === 'delay_value') { + const id = identifier(current); + // A single AST identifier is local evidence; qualified/member expressions + // must not collapse to a terminal name merely because that signal exists. + if (id && children(current).length === 1 && getNodeText(id, ctx.source).trim() === getNodeText(current, ctx.source).trim()) { + emit(id); + return; + } + if (current.type === 'hierarchical_identifier') { + for (const child of children(current)) { + if (['constant_bit_select', 'bit_select', 'select'].includes(child.type)) visit(child); + } + return; + } + } + for (const child of children(current)) visit(child); + }; + visit(node); +} + +/** Source-order/direction evidence for function/task actual arguments. */ +function formalMetadata(node: SyntaxNode, id: SyntaxNode, source: string): string[] { + for (let ancestor: SyntaxNode | null = node; ancestor; ancestor = ancestor.parent) { + if (['function_declaration', 'task_declaration'].includes(ancestor.type)) { + if (ancestor.hasError) return []; + break; + } + } + const uncertain = (part: SyntaxNode): boolean => !part.type.endsWith('_comment') + && (part.type.includes('directive') || part.type.includes('macro') || children(part).some(uncertain)); + if (node.type === 'tf_port_item' && node.parent && uncertain(node.parent)) return []; + const declarations: SyntaxNode[] = []; + if (node.type === 'tf_port_item') { + declarations.push(...(node.parent?.namedChildren.filter(n => n.type === 'tf_port_item') ?? [])); + } else if (node.type === 'tf_port_declaration') { + const body = node.parent?.parent; + if (!body || !['task_body_declaration', 'function_body_declaration'].includes(body.type) || uncertain(body)) return []; + for (const item of children(body)) { + declarations.push(...children(item).filter(n => n.type === 'tf_port_declaration')); + } + } else return []; + let index = 0; + let inherited = 'input'; + for (const declaration of declarations) { + const directionNode = children(declaration).find(n => n.type === 'tf_port_direction'); + const direct = directionNode && getNodeText(directionNode, source).trim().replace(/\s+/g, '-'); + const direction = direct ?? (node.type === 'tf_port_item' ? inherited : 'input'); + inherited = direction; + const list = declaration.type === 'tf_port_declaration' + ? children(declaration).find(n => n.type === 'list_of_tf_variable_identifiers') : declaration; + for (const name of list ? children(list).filter(n => ['simple_identifier', 'escaped_identifier'].includes(n.type)) : []) { + if (name.id === id.id) { + const hasDefault = name.nextNamedSibling?.type === 'expression'; + return [`hdl:formal-index:${index}`, ...(['input', 'output', 'inout', 'ref', 'const-ref'].includes(direction) ? [`hdl:direction:${direction}`] : []), ...(hasDefault ? ['hdl:default'] : [])]; + } + index++; + } + } + return []; +} + +/** HDL declarations and executable blocks; called before generic recursion. */ +export function visitVerilogSignals(node: SyntaxNode, ctx: ExtractorContext): boolean { + if (['seq_block', 'par_block', 'loop_statement'].includes(node.type)) { + // Generate blocks have their own handler; these nodes are procedural scopes. + const keyword = node.children[0]?.text ?? 'block'; + const label = node.type === 'loop_statement' ? undefined : identifier(node); + const kind = node.type === 'loop_statement' ? keyword : node.type === 'par_block' ? 'fork' : 'block'; + const name = label ? getNodeText(label, ctx.source) : `${kind}@${node.startPosition.row + 1}:${node.startPosition.column}`; + const created = ctx.createNode('namespace', name, node, { decorators: ['hdl:procedural-scope'] }); + if (created) { + ctx.pushScope(created.id); + addVerilogSignalReferences(node, ctx, created.id, true); + } + walkChildren(node, ctx); + if (created) ctx.popScope(); + return true; + } + if (['tf_port_item', 'tf_port_declaration', 'for_variable_declaration', 'loop_variables'].includes(node.type)) { + const list = node.type === 'tf_port_declaration' + ? children(node).find(n => n.type === 'list_of_tf_variable_identifiers') : node; + const ids = list ? children(list).filter(n => ['simple_identifier', 'escaped_identifier'].includes(n.type)) : []; + for (const id of ids) { + const created = ctx.createNode('field', getNodeText(id, ctx.source), id, + { signature: getNodeText(node, ctx.source), decorators: [node.type.startsWith('tf_') ? 'hdl:formal' : 'hdl:signal', ...formalMetadata(node, id, ctx.source)] }); + // Declarator initializers belong to this declaration's lexical scope. + if (created) { + for (let next = id.nextNamedSibling; next && !ids.some(n => n.id === next!.id); next = next.nextNamedSibling) { + if (next.type === 'expression' || next.type === 'constant_expression') addVerilogSignalReferences(next, ctx, created.id, true); + } + } + } + // Visit each initializer once with the enclosing callable as call owner. + for (const child of list ? children(list) : []) { + if (child.type === 'expression' || child.type === 'constant_expression') ctx.visitNode(child); + } + return true; + } + + if (node.type === 'ansi_port_declaration') { + const name = node.childForFieldName('port_name'); + if (name) { + let dir = direction(node, ctx); + // ANSI comma continuations inherit direction from the preceding port. + let previous = node.previousNamedSibling; + const hasHeader = children(node).some(n => n.type.endsWith('_port_header')); + while (!dir && !hasHeader && previous?.type === 'ansi_port_declaration') { + dir = direction(previous, ctx); + if (children(previous).some(n => n.type.endsWith('_port_header'))) break; + previous = previous.previousNamedSibling; + } + const decorators = ['hdl:port', ...(dir ? [`hdl:${dir}`] : [])]; + const iface = children(node).find(n => n.type === 'interface_port_header'); + for (const [field, tag] of [['interface_name', 'interface'], ['modport_name', 'modport']] as const) { + const value = iface?.childForFieldName(field); + if (value) decorators.push(`hdl:${tag}:${getNodeText(value, ctx.source)}`); + } + const created = ctx.createNode('field', getNodeText(name, ctx.source), node, + { signature: getNodeText(node, ctx.source), decorators }); + const typeName = iface?.childForFieldName('interface_name'); + const modport = iface?.childForFieldName('modport_name'); + if (created && typeName) ctx.addUnresolvedReference({ + fromNodeId: created.id, referenceName: getNodeText(typeName, ctx.source) + (modport ? `.${getNodeText(modport, ctx.source)}` : ''), + referenceKind: 'type_of', line: node.startPosition.row + 1, column: node.startPosition.column, + }); + } + return true; + } + if (node.type === 'port_declaration') { + for (const decl of children(node)) { + const dir = decl.type.replace(/_declaration$/, ''); + for (const list of children(decl).filter(n => /list_of_.*port_identifiers/.test(n.type))) { + for (const id of children(list).filter(n => ['simple_identifier', 'escaped_identifier'].includes(n.type))) { + ctx.createNode('field', getNodeText(id, ctx.source), id, + { signature: getNodeText(node, ctx.source), decorators: ['hdl:port', `hdl:${dir}`] }); + } + } + } + return true; + } + if (node.type === 'net_declaration' || node.type === 'data_declaration') { + const lists = children(node).filter(n => ['list_of_net_decl_assignments', 'list_of_variable_decl_assignments'].includes(n.type)); + if (!lists.length) return false; // e.g. typedef: let its structural handler run. + for (const list of lists) for (const decl of children(list)) { + const name = decl.childForFieldName('name') ?? identifier(decl); + if (name) { + const text = getNodeText(name, ctx.source); + const parent = ctx.nodes.find(n => n.id === ctx.nodeStack[ctx.nodeStack.length - 1]); + const qualified = parent ? `${parent.qualifiedName}::${text}` : text; + // A non-ANSI output may legally be redeclared as reg in the body. + const port = ctx.nodes.find(n => n.qualifiedName === qualified && n.decorators?.includes('hdl:port')); + const created = port ?? ctx.createNode('field', text, decl, + { signature: getNodeText(node, ctx.source), decorators: ['hdl:signal'] }); + if (created) { + // The '=' token proves a source initialization; dimensions and bare + // declarations are dependencies/declarations, not writes to the name. + if (!decl.hasError && !hasIncompleteProceduralScope(decl) && decl.children.some(n => n.type === '=')) { + ctx.addUnresolvedReference({ fromNodeId: created.id, referenceName: `hdl:signal:${text}`, + referenceKind: 'references', line: name.startPosition.row + 1, column: name.startPosition.column, + candidates: ['hdl:access:write'] }); + } + for (const child of children(decl)) { + if (child.id !== name.id) addVerilogSignalReferences(child, ctx, created.id); + } + } + } + } + walkChildren(node, ctx); + return true; + } + if (['always_construct', 'initial_construct', 'final_construct', 'continuous_assign'].includes(node.type)) { + const keyword = children(node).find(n => n.type === 'always_keyword'); + const kind = node.type === 'always_construct' + ? (keyword ? getNodeText(keyword, ctx.source) : 'always') + : node.type === 'continuous_assign' ? 'assign' : node.type.replace(/_construct$/, ''); + const name = `${kind}@${node.startPosition.row + 1}:${node.startPosition.column}`; + const created = ctx.createNode('function', name, node, + { signature: getNodeText(node, ctx.source), decorators: ['hdl:process', `hdl:${kind}`] }); + if (created) { + ctx.pushScope(created.id); + addVerilogSignalReferences(node, ctx, created.id, true); + } + walkChildren(node, ctx); + if (created) ctx.popScope(); + return true; + } + return false; +} diff --git a/src/extraction/languages/verilog.ts b/src/extraction/languages/verilog.ts new file mode 100644 index 0000000000..4bb471a49b --- /dev/null +++ b/src/extraction/languages/verilog.ts @@ -0,0 +1,444 @@ +import { initializeVerilogGenerateScope, visitVerilogGenvarDeclaration } from './verilog-generate'; +import { getVerilogPortOrder, visitVerilogSignals, addVerilogSignalReferences, isVerilogGenerateBinding } from './verilog-signals'; +import { handleVerilogPackageNode, getVerilogCallName } from './verilog-packages'; +import type { Node as SyntaxNode } from 'web-tree-sitter'; +import { getNodeText, getChildByField } from '../tree-sitter-helpers'; +import type { LanguageExtractor, ExtractorContext } from '../tree-sitter-types'; + +/** + * Verilog / SystemVerilog extractor (grammar: tree-sitter-systemverilog, ABI 15). + * + * The SystemVerilog grammar nests declared names deep inside header/body + * wrapper nodes (`module_declaration → module_ansi_header → name`, + * `function_declaration → function_body_declaration → name`), so the generic + * field/first-identifier name resolution can't reach them. Everything + * structural is therefore handled in a custom `visitNode` hook that resolves + * names explicitly, manages scope, and drives its own child recursion. + * + * What the hook emits: + * - module / interface / program / package / class → container nodes (kind + * `class`/`interface`) that scope their members. + * - function / task → `function` nodes (their bodies are walked for calls). + * - module instances → named `variable` nodes with original connections and + * `instantiates` edges (parent module and instance → module type). + * - generate blocks → source scopes; arrays and loops are not elaborated. + * - parameter / localparam → `constant` nodes. + * - `define macro → `constant` node (a `.vh` header is mostly macros, and a + * `WIDTH` written as `` `DATA_W `` has to land somewhere). + * - typedef → `type_alias` node. + * - function/task subroutine calls (`tf_call`) → `calls` references. + * + * Package imports and `` `include `` directives go through the generic import + * path (`importTypes` + `extractImport`): each `package_import_item` so every + * package in a multi-import (`import a::*, b::*;`) gets its own node, and each + * `include_compiler_directive` with the quoted path as its module name — the + * file-path matcher resolves `"defs.vh"` / `"axi/typedef.svh"` to the indexed + * header closest to the including file, the same way a C `#include` lands. + * Ports, signals and executable blocks are handled by verilog-signals; source + * occurrences are distinct from elaborated connectivity or drive direction. + */ + +// Header wrappers that carry a module/interface/program name. +const HEADER_TYPES = [ + 'module_ansi_header', + 'module_nonansi_header', + 'module_header', + 'interface_ansi_header', + 'interface_nonansi_header', + 'program_ansi_header', + 'program_nonansi_header', +]; + +function firstChildOfType(node: SyntaxNode, types: string[]): SyntaxNode | null { + for (let i = 0; i < node.namedChildCount; i++) { + const c = node.namedChild(i); + if (c && types.includes(c.type)) return c; + } + return null; +} + +function firstSimpleIdentifier(node: SyntaxNode): SyntaxNode | null { + for (let i = 0; i < node.namedChildCount; i++) { + const c = node.namedChild(i); + if (c && c.type === 'simple_identifier') return c; + } + return null; +} + +/** + * Module type names are resolved against module declarations. Function calls + * retain their package or hierarchy qualification in verilog-packages. + */ +function trailingSegment(name: string): string { + const sep = Math.max(name.lastIndexOf('::'), name.lastIndexOf('.')); + return sep >= 0 ? name.slice(sep).replace(/^[:.]+/, '') : name; +} + +function visitNamedChildren(node: SyntaxNode, ctx: ExtractorContext): void { + for (let i = 0; i < node.namedChildCount; i++) { + const c = node.namedChild(i); + if (c) ctx.visitNode(c); + } +} + +/** + * Resolve a declared name that may sit directly on the node (package/class), + * on a header child (module/interface/program), or as the first identifier. + */ +function declName(node: SyntaxNode, source: string): string | undefined { + const direct = getChildByField(node, 'name'); + if (direct) return getNodeText(direct, source); + const header = firstChildOfType(node, HEADER_TYPES); + if (header) { + const hn = getChildByField(header, 'name') ?? firstSimpleIdentifier(header); + if (hn) return getNodeText(hn, source); + } + const si = firstSimpleIdentifier(node); + return si ? getNodeText(si, source) : undefined; +} + +function handleContainer( + node: SyntaxNode, + ctx: ExtractorContext, + kind: 'class' | 'interface' +): boolean { + const name = declName(node, ctx.source); + if (!name) { + visitNamedChildren(node, ctx); + return true; + } + const order = getVerilogPortOrder(node, ctx.source); + const created = ctx.createNode(kind, name, node, order === null ? undefined + : { decorators: [`hdl:port-order:${JSON.stringify(order)}`] }); + if (created) ctx.pushScope(created.id); + visitNamedChildren(node, ctx); + if (created) ctx.popScope(); + return true; +} + +function handleSubroutine(node: SyntaxNode, ctx: ExtractorContext): boolean { + const bodyDecl = firstChildOfType(node, [ + 'function_body_declaration', + 'task_body_declaration', + ]); + const nameNode = bodyDecl + ? getChildByField(bodyDecl, 'name') ?? firstSimpleIdentifier(bodyDecl) + : getChildByField(node, 'name'); + const name = nameNode ? getNodeText(nameNode, ctx.source) : undefined; + if (!name) { + visitNamedChildren(node, ctx); + return true; + } + + let signature: string | undefined; + if (bodyDecl) { + const ports = firstChildOfType(bodyDecl, ['tf_port_list']); + const ret = firstChildOfType(bodyDecl, ['data_type_or_void']); + const portText = ports ? getNodeText(ports, ctx.source) : ''; + const retText = ret ? getNodeText(ret, ctx.source).trim() : ''; + signature = `${retText} (${portText})`.trim(); + } + + const created = ctx.createNode('function', name, node, { signature }); + if (created) ctx.pushScope(created.id); + if (created && bodyDecl) addVerilogSignalReferences(bodyDecl, ctx, created.id, true); + visitNamedChildren(node, ctx); + if (created) ctx.popScope(); + return true; +} + +function handleGenerateBlock(node: SyntaxNode, ctx: ExtractorContext): boolean { + const nameNode = getChildByField(node, 'name'); + // Anonymous labels identify source scopes, not elaborated genblk numbers. + const name = nameNode ? getNodeText(nameNode, ctx.source) + : `generate@${node.startPosition.row + 1}:${node.startPosition.column}`; + const loop = node.parent?.type === 'loop_generate_construct' ? node.parent : null; + const created = ctx.createNode('namespace', name, node, { + decorators: ['hdl:generate-scope'], + ...(loop ? { signature: ctx.source.slice(loop.startIndex, node.startIndex).trim() } : {}), + }); + if (created) { + ctx.pushScope(created.id); + initializeVerilogGenerateScope(node, ctx); + } + visitNamedChildren(node, ctx); + if (created) ctx.popScope(); + return true; +} + +/** Direct AST commas delimit slots; nested expression commas stay inside their node. */ +function positionalConnections(node: SyntaxNode, ctx: ExtractorContext, leading: SyntaxNode[] = []): Array<{ position: SyntaxNode; text: string }> | null { + if (node.hasError || node.namedChildren.some(n => !['ordered_port_connection', 'comment', 'block_comment', 'one_line_comment'].includes(n.type))) return null; + const slots: Array<{ position: SyntaxNode; text: string }> = []; + let start = leading[0]?.startIndex ?? node.startIndex; + let position: SyntaxNode = leading[0] ?? node; + for (const child of [...leading.flatMap(n => n.children), ...node.children]) { + if (child.type === ',') { + slots.push({ position, text: ctx.source.slice(start, child.startIndex).trim() }); + start = child.endIndex; + position = child; + } else if (child.type === 'ordered_port_connection') position = child; + } + slots.push({ position, text: ctx.source.slice(start, node.endIndex).trim() }); + return slots; +} + +function handleInstantiation(node: SyntaxNode, ctx: ExtractorContext): boolean { + const typeNode = getChildByField(node, 'instance_type') ?? firstSimpleIdentifier(node); + if (!typeNode) { + visitNamedChildren(node, ctx); + return true; + } + const typeName = getNodeText(typeNode, ctx.source).trim(); + const moduleName = trailingSegment(typeName); + const addReference = (fromId: string, position: SyntaxNode): void => { + ctx.addUnresolvedReference({ + fromNodeId: fromId, + referenceName: moduleName, + referenceKind: 'instantiates', + line: position.startPosition.row + 1, + column: position.startPosition.column, + }); + }; + // Keep the module-to-module flow even when a generate scope contains this + // declaration. Individual instances additionally provide navigable evidence. + for (let i = ctx.nodeStack.length - 1; i >= 0; i--) { + const parent = ctx.nodes.find(n => n.id === ctx.nodeStack[i]); + if (parent && (parent.kind === 'class' || parent.kind === 'interface')) { + addReference(parent.id, node); + break; + } + } + const parameters = firstChildOfType(node, ['parameter_value_assignment']); + const prefix = `${typeName}${parameters ? ' ' + getNodeText(parameters, ctx.source) : ''}`; + for (let i = 0; i < node.namedChildCount; i++) { + const child = node.namedChild(i); + if (!child) continue; + if (child.type !== 'hierarchical_instance') { + ctx.visitNode(child); + continue; + } + const nameOfInstance = firstChildOfType(child, ['name_of_instance']); + const nameNode = nameOfInstance && (getChildByField(nameOfInstance, 'instance_name') + ?? firstSimpleIdentifier(nameOfInstance)); + const name = nameNode ? getNodeText(nameNode, ctx.source) : undefined; + const created = name ? ctx.createNode('variable', name, child, { + // Preserve arrays, named/ordered/shorthand connections and parameter + // overrides as source evidence; do not infer elaborated wire endpoints. + signature: `${prefix} ${getNodeText(child, ctx.source)}`, + }) : null; + if (created) { + addReference(created.id, child); + addVerilogSignalReferences(child, ctx, created.id); + ctx.pushScope(created.id); + const connections = firstChildOfType(child, ['list_of_port_connections']); + // This grammar wraps leading empty-slot commas in ERROR. Accept only + // those literal separators; all other parse errors/mixed lists stay opaque. + const leadingCommas = child.namedChildren.filter(n => n.type === 'ERROR' + && connections && n.endIndex <= connections.startIndex && /^\s*,+\s*$/.test(getNodeText(n, ctx.source))); + const allowedErrors = new Set(leadingCommas.map(n => n.id)); + const soundTree = (part: SyntaxNode): boolean => !part.isMissing && (part.type === 'ERROR' + ? allowedErrors.has(part.id) : part.namedChildren.every(soundTree)); + const validConnections = soundTree(node) + && child.namedChildren.filter(n => n.type === 'list_of_port_connections').length === 1; + const slots = validConnections && connections ? positionalConnections(connections, ctx, leadingCommas) : null; + if (slots) slots.forEach((slot, index) => { + const binding = ctx.createNode('property', `port[${index}]`, slot.position, { + signature: slot.text, decorators: ['hdl:connection', `hdl:position:${index}`], + }); + if (binding) { + ctx.addUnresolvedReference({ fromNodeId: binding.id, + referenceName: `hdl:port-position:${JSON.stringify([moduleName, index, slots.length, created.id])}`, + referenceKind: 'references', line: slot.position.startPosition.row + 1, + column: slot.position.startPosition.column }); + if (slot.position.type === 'ordered_port_connection') addVerilogSignalReferences(slot.position, ctx, binding.id); + } + }); + for (const connection of validConnections ? connections?.namedChildren ?? [] : []) { + if (connection.type !== 'named_port_connection') continue; + const port = getChildByField(connection, 'port_name'); + if (!port) { + if (!getNodeText(connection, ctx.source).includes('.*')) continue; + const excluded = (connections?.namedChildren ?? []).flatMap(n => { + const formal = getChildByField(n, 'port_name'); + return formal ? [getNodeText(formal, ctx.source)] : []; + }); + // An implicit generate parameter shadows an outer same-name signal. + for (let ancestor = connection.parent; ancestor; ancestor = ancestor.parent) { + if (ancestor.type === 'loop_generate_construct') { + const init = firstChildOfType(ancestor, ['genvar_initialization']); + const id = init && firstSimpleIdentifier(init); + if (id) excluded.push(getNodeText(id, ctx.source)); + } + if (['module_declaration', 'interface_declaration', 'program_declaration'].includes(ancestor.type)) break; + } + const wildcard = ctx.createNode('property', '*', connection, { + signature: getNodeText(connection, ctx.source), decorators: ['hdl:connection', 'hdl:wildcard'], + }); + if (wildcard) ctx.addUnresolvedReference({ fromNodeId: wildcard.id, + referenceName: `hdl:wildcard:${JSON.stringify([moduleName, created.id, excluded])}`, + referenceKind: 'references', line: connection.startPosition.row + 1, column: connection.startPosition.column }); + continue; + } + const portName = getNodeText(port, ctx.source); + const binding = ctx.createNode('property', portName, connection, { + signature: getNodeText(connection, ctx.source), decorators: ['hdl:connection', 'hdl:named'], + }); + if (binding) { + ctx.addUnresolvedReference({ fromNodeId: binding.id, + referenceName: `hdl:port:${JSON.stringify([moduleName, portName, created.id])}`, + referenceKind: 'references', line: port.startPosition.row + 1, column: port.startPosition.column }); + addVerilogSignalReferences(connection, ctx, binding.id); + } + // Shorthand .port connects the same local name. Empty .port() has a + // formal endpoint but no local expression; no drive direction inferred. + if (!isVerilogGenerateBinding(connection, ctx, portName) + && /^\s*\.\s*[^()\s]+\s*$/.test(getNodeText(connection, ctx.source))) { + for (const owner of [created, ...(binding ? [binding] : [])]) { + ctx.addUnresolvedReference({ fromNodeId: owner.id, + referenceName: `hdl:signal:${portName}`, referenceKind: 'references', + line: port.startPosition.row + 1, column: port.startPosition.column }); + } + } + } + } + visitNamedChildren(child, ctx); + if (created) ctx.popScope(); + } + return true; +} + +function handleParam(node: SyntaxNode, ctx: ExtractorContext): boolean { + const list = firstChildOfType(node, ['list_of_param_assignments']); + if (list) { + for (let i = 0; i < list.namedChildCount; i++) { + const assign = list.namedChild(i); + if (!assign || assign.type !== 'param_assignment') continue; + const id = firstSimpleIdentifier(assign); + if (id) ctx.createNode('constant', getNodeText(id, ctx.source), assign); + } + } + return true; +} + +function handleMacro(node: SyntaxNode, ctx: ExtractorContext): boolean { + const nameNode = firstChildOfType(node, ['text_macro_name']); + const id = nameNode ? firstSimpleIdentifier(nameNode) : null; + if (id) ctx.createNode('constant', getNodeText(id, ctx.source), node); + return true; +} + +function handleTypedef(node: SyntaxNode, ctx: ExtractorContext): boolean { + const nameNode = + getChildByField(node, 'type_name') ?? + getChildByField(node, 'name') ?? + firstSimpleIdentifier(node); + const name = nameNode ? getNodeText(nameNode, ctx.source) : undefined; + if (name) ctx.createNode('type_alias', name, node); + return true; +} + +function handleCall(node: SyntaxNode, ctx: ExtractorContext): boolean { + if (ctx.nodeStack.length > 0) { + const lexical = ctx.nodes.find(n => n.id === ctx.nodeStack[ctx.nodeStack.length - 1]); + const callable = [...ctx.nodeStack].reverse().map(id => ctx.nodes.find(n => n.id === id)) + .find(n => n && (n.kind === 'function' || n.kind === 'method')); + const fromId = callable?.id ?? lexical?.id; + const callee = firstChildOfType(node, ['hierarchical_identifier']) ?? firstSimpleIdentifier(node); + if (fromId && callee) { + const name = getVerilogCallName(node, ctx.source); + if (name) { + ctx.addUnresolvedReference({ + fromNodeId: fromId, + referenceName: name, + referenceKind: 'calls', + ...(lexical?.kind === 'namespace' && lexical.id !== fromId + ? { candidates: [`hdl:scope:${lexical.qualifiedName}`] } : {}), + line: node.startPosition.row + 1, + column: node.startPosition.column, + }); + } + } + } + // Walk arguments so nested calls (`caller(helper(x))`) get their own refs. + visitNamedChildren(node, ctx); + return true; +} + +export const verilogExtractor: LanguageExtractor = { + // The visitNode hook below owns dispatch for all structural constructs; + // these generic arrays stay empty except imports, which reuse the core path. + functionTypes: [], + classTypes: [], + methodTypes: [], + interfaceTypes: [], + structTypes: [], + enumTypes: [], + typeAliasTypes: [], + // Target the per-item node, not the whole declaration, so every package in a + // multi-import (`import a::*, b::*;`) is indexed — one import node per item. + importTypes: ['package_import_item', 'include_compiler_directive'], + callTypes: [], + variableTypes: [], + nameField: 'name', + bodyField: 'body', + paramsField: 'tf_port_list', + + visitNode: (node, ctx) => { + if (visitVerilogGenvarDeclaration(node, ctx) || visitVerilogSignals(node, ctx) || handleVerilogPackageNode(node, ctx)) return true; + switch (node.type) { + case 'module_declaration': + case 'program_declaration': + case 'package_declaration': + case 'class_declaration': + return handleContainer(node, ctx, 'class'); + case 'interface_declaration': + return handleContainer(node, ctx, 'interface'); + case 'function_declaration': + case 'task_declaration': + return handleSubroutine(node, ctx); + case 'generate_block': + return handleGenerateBlock(node, ctx); + case 'module_instantiation': + return handleInstantiation(node, ctx); + case 'parameter_declaration': + case 'local_parameter_declaration': + return handleParam(node, ctx); + case 'text_macro_definition': + return handleMacro(node, ctx); + case 'type_declaration': + return handleTypedef(node, ctx); + case 'tf_call': + return handleCall(node, ctx); + default: + return false; + } + }, + + extractImport: (node, source) => { + if (node.type === 'include_compiler_directive') { + // `include "defs.vh"` → the quoted path; `include ` → the + // bracketed one. The path is the module name, so the generic import ref + // resolves it to the header FILE by path suffix (name-matcher's + // file-path strategy), never to a symbol. + const quoted = firstChildOfType(node, ['quoted_string']); + const item = quoted ? firstChildOfType(quoted, ['quoted_string_item']) : null; + const system = firstChildOfType(node, ['system_lib_string']); + const target = item + ? getNodeText(item, source) + : system + ? getNodeText(system, source).replace(/^<|>$/g, '') + : ''; + if (!target.trim()) return null; + return { moduleName: target.trim(), signature: getNodeText(node, source).trim() }; + } + // `node` is a package_import_item (`pkg::*` / `pkg::name`); the package name + // is its first simple_identifier. One item → one import node. + const id = firstSimpleIdentifier(node); + if (!id) return null; + return { + moduleName: getNodeText(id, source), + signature: getNodeText(node, source).trim(), + }; + }, +}; diff --git a/src/extraction/wasm/tree-sitter-systemverilog.wasm b/src/extraction/wasm/tree-sitter-systemverilog.wasm new file mode 100644 index 0000000000000000000000000000000000000000..ad8201395e4d93dbe4a6508ef43a8d6a5e03bed6 GIT binary patch literal 21802386 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 z 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%0Dw-(=3y|8*shUcme<0^lwTQ6K_(~%%e^a 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 $-|2H~AcAJi*jlq8Dz?qZ+51zY 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�Gk#gOKx;yPNM`)-GiiD1QmISiY2&tm95! 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

epEf- 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

7I!>;EfcT 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

Cv7 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

({cEI;R97GA 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 Y3`mJjpEN3EY}Nc@hYT7KpE5E1|CfPoOaK4? literal 0 HcmV?d00001 diff --git a/src/types.ts b/src/types.ts index 9c4c4461f9..6723259689 100644 --- a/src/types.ts +++ b/src/types.ts @@ -109,6 +109,7 @@ export const LANGUAGES = [ 'pascal', 'scala', 'lua', + 'verilog', 'luau', 'objc', 'r', From dcd50514bc2e5287cfc276c956a6049fca215685 Mon Sep 17 00:00:00 2001 From: danusha2345 Date: Tue, 15 Sep 2026 15:47:43 +0300 Subject: [PATCH 02/10] feat(verilog): resolve instances, port bindings and scoped signal references Instantiations prefer a synthesizable module over a same-named simulation stub. Named, positional and wildcard (.*) port connections resolve to the formal port of the instantiated module and to the local signal; positional bindings follow the ANSI/non-ANSI header order, wildcard bindings require known formals and an unambiguous local signal, and explicit connections win. Member references are matched inside their own scope, package-qualified calls keep the package identity, and named-symbol flow walks `instantiates` edges so `codegraph_explore` shows the hierarchy path between two modules. Sync re-opens a wildcard or positional binding's whole fan-out when a module header changes, and replays HDL references by their qualified name instead of re-attaching by short name. --- __tests__/hdl-instances.test.ts | 46 ++++++++ __tests__/hdl-port-bindings.test.ts | 112 ++++++++++++++++++ __tests__/hdl-positional-ports.test.ts | 106 +++++++++++++++++ __tests__/hdl-wildcard-ports.test.ts | 131 ++++++++++++++++++++++ __tests__/verilog-call-scope.test.ts | 53 +++++++++ __tests__/verilog-flow.test.ts | 56 +++++++++ __tests__/verilog-generate-scopes.test.ts | 88 +++++++++++++++ __tests__/verilog-packages.test.ts | 61 ++++++++++ __tests__/verilog-port-order.test.ts | 47 ++++++++ __tests__/verilog-resolution.test.ts | 87 ++++++++++++++ __tests__/verilog-scopes.test.ts | 84 ++++++++++++++ src/db/queries.ts | 38 ++++++- src/db/reference-tail.ts | 16 +++ src/graph/named-symbol-flow.ts | 19 +++- src/resolution/index.ts | 11 ++ src/resolution/name-matcher.ts | 33 ++++++ src/resolution/verilog-members.ts | 74 ++++++++++++ src/resolution/verilog-ports.ts | 93 +++++++++++++++ src/resolution/verilog-wildcard.ts | 70 ++++++++++++ 19 files changed, 1218 insertions(+), 7 deletions(-) create mode 100644 __tests__/hdl-instances.test.ts create mode 100644 __tests__/hdl-port-bindings.test.ts create mode 100644 __tests__/hdl-positional-ports.test.ts create mode 100644 __tests__/hdl-wildcard-ports.test.ts create mode 100644 __tests__/verilog-call-scope.test.ts create mode 100644 __tests__/verilog-flow.test.ts create mode 100644 __tests__/verilog-generate-scopes.test.ts create mode 100644 __tests__/verilog-packages.test.ts create mode 100644 __tests__/verilog-port-order.test.ts create mode 100644 __tests__/verilog-resolution.test.ts create mode 100644 __tests__/verilog-scopes.test.ts create mode 100644 src/resolution/verilog-members.ts create mode 100644 src/resolution/verilog-ports.ts create mode 100644 src/resolution/verilog-wildcard.ts diff --git a/__tests__/hdl-instances.test.ts b/__tests__/hdl-instances.test.ts new file mode 100644 index 0000000000..70e74656f1 --- /dev/null +++ b/__tests__/hdl-instances.test.ts @@ -0,0 +1,46 @@ +import { it, expect } from 'vitest'; +import * as fs from 'node:fs'; +import * as os from 'node:os'; +import * as path from 'node:path'; +import { CodeGraph } from '../src'; + +it('keeps named HDL instances, source connections and generate scopes without elaborating arrays', async () => { + const root = fs.mkdtempSync(path.join(os.tmpdir(), 'cg-hdl-instances-')); + let cg: CodeGraph | undefined; + try { + fs.writeFileSync(path.join(root, 'top.sv'), `module leaf #(parameter W=8) (input a); endmodule +module top(input a); + leaf #(.W(4)) first(.a(a)), bank[3:0](a); + if (1) begin : yes leaf u(.a(a)); end else begin : no leaf u(.*); end + for(genvar i=0;i<4;i++) begin : lanes leaf repeated(.a); end + if (1) begin leaf anonymous(.a(a)); end +endmodule +`); + cg = CodeGraph.initSync(root); + expect((await cg.indexAll()).success).toBe(true); + const instances = ['first', 'bank', 'u', 'repeated', 'anonymous'].flatMap(name => + cg!.getNodesByName(name).filter(n => n.kind === 'variable')); + expect(instances).toHaveLength(6); + expect(new Set(instances.map(n => n.id)).size).toBe(6); + expect(instances.find(n => n.name === 'first')?.signature).toBe('leaf #(.W(4)) first(.a(a))'); + expect(instances.find(n => n.name === 'bank')?.signature).toBe('leaf #(.W(4)) bank[3:0](a)'); + expect(instances.filter(n => n.name === 'u').map(n => n.qualifiedName).sort()).toEqual(['top::no::u', 'top::yes::u']); + expect(instances.find(n => n.name === 'repeated')?.qualifiedName).toBe('top::lanes::repeated'); + expect(instances.find(n => n.name === 'anonymous')?.qualifiedName).toMatch(/^top::generate@6:\d+::anonymous$/); + const targets = (id: string) => cg!.getCallees(id).filter(e => e.edge.kind === 'instantiates').map(e => e.node.name); + for (const instance of instances) expect(targets(instance.id)).toEqual(['leaf']); + expect(targets(cg.getNodesByName('top')[0].id)).toEqual(['leaf']); + for (const instance of instances.filter(n => n.signature?.includes('.a(') || n.name === 'bank' || n.name === 'repeated')) { + expect(cg.getCallees(instance.id).filter(e => e.edge.kind === 'references').map(e => e.node.qualifiedName)).toEqual(['top::a']); + } + const wildcard = instances.find(n => n.signature === 'leaf u(.*)')!; + expect(cg.getCallees(wildcard.id).filter(e => e.edge.kind === 'references')).toEqual([]); + const before = instances.map(n => n.id).sort(); + await cg.indexAll(); + expect(['first', 'bank', 'u', 'repeated', 'anonymous'].flatMap(name => + cg!.getNodesByName(name).filter(n => n.kind === 'variable').map(n => n.id)).sort()).toEqual(before); + } finally { + cg?.close(); + fs.rmSync(root, { recursive: true, force: true }); + } +}); diff --git a/__tests__/hdl-port-bindings.test.ts b/__tests__/hdl-port-bindings.test.ts new file mode 100644 index 0000000000..e906b39d85 --- /dev/null +++ b/__tests__/hdl-port-bindings.test.ts @@ -0,0 +1,112 @@ +import { it, expect } from 'vitest'; +import * as fs from 'node:fs'; +import * as os from 'node:os'; +import * as path from 'node:path'; +import { CodeGraph } from '../src'; + +async function graph(files: Record, check: (cg: CodeGraph, root: string) => Promise | void): Promise { + const root = fs.mkdtempSync(path.join(os.tmpdir(), 'hdl-ports-')); + let cg: CodeGraph | undefined; + try { + for (const [file, source] of Object.entries(files)) { + fs.mkdirSync(path.dirname(path.join(root, file)), { recursive: true }); + fs.writeFileSync(path.join(root, file), source); + } + cg = CodeGraph.initSync(root); + expect((await cg.indexAll()).success).toBe(true); + await check(cg, root); + } finally { cg?.close(); fs.rmSync(root, { recursive: true, force: true }); } +} +function bindings(cg: CodeGraph) { + return (cg as any).db.db.prepare("select id, name, qualified_name qualifiedName, signature from nodes where kind='property' and language='verilog' and decorators LIKE '%hdl:named%'").all() as Array<{ id: string; name: string; qualifiedName: string; signature: string }>; +} +const leaf = 'module leaf(input rx, output tx); endmodule'; + +it('maps named and shorthand ports to formal declarations and local expressions, including explicit open ports', async () => { + await graph({ 'leaf.sv': leaf, 'top.sv': `module top(input wire rx, output wire tx); +leaf u(.rx(rx), .tx()); leaf bank[3:0](.rx, .tx(tx)); +leaf positional(rx,tx); leaf wildcard(.*); +endmodule` }, cg => { + const ports = bindings(cg); + expect(ports).toHaveLength(4); + const endpoints = (q: string) => cg.getCallees(ports.find(n => n.qualifiedName === q)!.id) + .filter(e => e.edge.kind === 'references').map(e => e.node.qualifiedName).sort(); + expect(endpoints('top::u::rx')).toEqual(['leaf::rx', 'top::rx']); + expect(endpoints('top::u::tx')).toEqual(['leaf::tx']); + expect(endpoints('top::bank::rx')).toEqual(['leaf::rx', 'top::rx']); + expect(endpoints('top::bank::tx')).toEqual(['leaf::tx', 'top::tx']); + expect(ports.find(n => n.qualifiedName === 'top::u::tx')!.signature).toBe('.tx()'); + expect(cg.getNodesByName('bank').filter(n => n.kind === 'variable')).toHaveLength(1); + }); +}); + +it('does not borrow missing formal ports from another module and drops removed targets after reindex', async () => { + await graph({ 'leaf.sv': leaf, 'foreign.sv': 'module foreign(input missing); endmodule', + 'top.sv': 'module top(input sig); leaf u(.rx(sig), .missing(sig)); endmodule' }, async (cg, root) => { + const formalTargets = (name: string) => cg.getCallees(bindings(cg).find(n => n.name === name)!.id) + .filter(e => e.edge.metadata?.binding === 'hdl-named-port').map(e => e.node.qualifiedName); + expect(formalTargets('rx')).toEqual(['leaf::rx']); + expect(formalTargets('missing')).toEqual([]); + const before = bindings(cg).map(n => n.id).sort(); + fs.writeFileSync(path.join(root, 'leaf.sv'), 'module leaf(output tx); endmodule'); + expect((await cg.indexAll()).success).toBe(true); + expect(formalTargets('rx')).toEqual([]); + expect(bindings(cg).map(n => n.id).sort()).toEqual(before); + }); +}); + +it('uses the same synthesis versus simulation target as the instance', async () => { + await graph({ 'rtl/leaf.sv': leaf, 'sim/leaf_stub.sv': leaf, + 'top.sv': 'module top(input sig); leaf u(.rx(sig)); endmodule', + 'sim/tb_top.sv': 'module tb_top(input sig); leaf dut(.rx(sig)); endmodule' }, cg => { + for (const binding of bindings(cg)) { + const instanceName = binding.qualifiedName.startsWith('top::') ? 'u' : 'dut'; + const instance = cg.getNodesByName(instanceName).find(n => n.kind === 'variable')!; + const target = cg.getCallees(instance.id).find(e => e.edge.kind === 'instantiates')!.node; + const formal = cg.getCallees(binding.id).find(e => e.edge.metadata?.binding === 'hdl-named-port')!.node; + expect(formal.filePath).toBe(target.filePath); + } + }); +}); + +it.each([ + { 'a.sv': leaf, 'b.sv': leaf }, + { 'a.sv': `${leaf} ${leaf}` }, +])('leaves formal endpoints unresolved for duplicate module definitions: %j', async definitions => { + await graph({ ...definitions, 'top.sv': 'module top(input sig); leaf u(.rx(sig)); endmodule' } as Record, cg => { + expect(cg.getCallees(bindings(cg)[0]!.id).filter(e => e.edge.metadata?.binding === 'hdl-named-port')).toEqual([]); + }); +}); + +it('does not use fuzzy module-name guesses for a formal endpoint', async () => { + await graph({ 'leaf.sv': leaf, 'top.sv': 'module top(input sig); leaff u(.rx(sig)); endmodule' }, cg => { + expect(cg.getCallees(bindings(cg)[0]!.id).filter(e => e.edge.metadata?.binding === 'hdl-named-port')).toEqual([]); + }); +}); + +it('rehydrates named-port tokens when only the target changes during incremental sync', async () => { + const top = 'module top(input sig); leaf u(.rx(sig)); endmodule'; + await graph({ 'leaf.sv': leaf, 'top.sv': top }, async (cg, root) => { + const binding = bindings(cg)[0]!; + const formal = () => cg.getCallees(binding.id).filter(e => e.edge.metadata?.binding === 'hdl-named-port'); + const originalTarget = formal()[0]!.node; + expect(originalTarget.qualifiedName).toBe('leaf::rx'); + fs.writeFileSync(path.join(root, 'leaf.sv'), 'module leaf(output tx); endmodule'); + const removed = await cg.sync(); + expect(removed.filesModified).toBe(1); + expect(formal()).toEqual([]); + expect(bindings(cg)[0]!.id).toBe(binding.id); + // Restore at a different source position: a stale retained edge cannot pass. + fs.writeFileSync(path.join(root, 'leaf.sv'), `// moved port declaration\n${leaf}`); + const restored = await cg.sync(); + expect(restored.filesModified).toBe(1); + const restoredFormal = formal(); + expect(restoredFormal).toHaveLength(1); + expect(restoredFormal[0]!.node.qualifiedName).toBe('leaf::rx'); + expect(restoredFormal[0]!.node.filePath).toBe('leaf.sv'); + expect(restoredFormal[0]!.node.id).not.toBe(originalTarget.id); + expect(bindings(cg)[0]!.id).toBe(binding.id); + expect(fs.readFileSync(path.join(root, 'top.sv'), 'utf8')).toBe(top); + expect(cg.getCallees(binding.id).some(e => e.node.qualifiedName === 'top::sig')).toBe(true); + }); +}); diff --git a/__tests__/hdl-positional-ports.test.ts b/__tests__/hdl-positional-ports.test.ts new file mode 100644 index 0000000000..6df3bad257 --- /dev/null +++ b/__tests__/hdl-positional-ports.test.ts @@ -0,0 +1,106 @@ +import { it, expect } from 'vitest'; +import * as fs from 'node:fs'; +import * as os from 'node:os'; +import * as path from 'node:path'; +import { CodeGraph } from '../src'; + +async function graph(leaf: string, top: string, check: (cg: CodeGraph, root: string) => void | Promise) { + const root = fs.mkdtempSync(path.join(os.tmpdir(), 'hdl-positional-')); + let cg: CodeGraph | undefined; + try { + fs.writeFileSync(path.join(root, 'leaf.sv'), leaf); + fs.writeFileSync(path.join(root, 'top.sv'), top); + cg = CodeGraph.initSync(root); expect((await cg.indexAll()).success).toBe(true); + await check(cg, root); + } finally { cg?.close(); fs.rmSync(root, { recursive: true, force: true }); } +} +function slots(cg: CodeGraph) { + return (cg as any).db.db.prepare("select id,name,signature from nodes where kind='property' and decorators like '%hdl:position:%' order by name").all() as Array<{id:string;name:string;signature:string}>; +} +function formal(cg: CodeGraph, id: string) { + return cg.getCallees(id).filter(e => e.edge.metadata?.binding === 'hdl-positional-port').map(e => e.node.name); +} +const ansi = 'module leaf(input rx, output tx, input enable); endmodule'; + +it('maps ANSI positions, preserving empty slots and local expressions without expanding instance arrays', async () => { + await graph(ansi, 'module top(input sig); leaf bank[3:0](sig,,sig); endmodule', cg => { + const connections = slots(cg); + expect(connections).toHaveLength(3); + expect(connections.map(n => formal(cg,n.id))).toEqual([['rx'], ['tx'], ['enable']]); + expect(connections[1]!.signature).toBe(''); + expect(cg.getCallees(connections[1]!.id).filter(e => e.node.qualifiedName === 'top::sig')).toEqual([]); + expect(cg.getCallees(connections[2]!.id).some(e => e.node.qualifiedName === 'top::sig')).toBe(true); + expect(cg.getNodesByName('bank').filter(n => n.kind === 'variable')).toHaveLength(1); + }); +}); + +it('uses the non-ANSI header order rather than declaration body order', async () => { + await graph('module leaf(enable, rx, tx); output tx; input rx; input enable; endmodule', + 'module top(input sig); leaf u(sig,sig,sig); endmodule', cg => { + expect(slots(cg).map(n => formal(cg,n.id))).toEqual([['enable'], ['rx'], ['tx']]); + }); +}); + +it.each([ + ['extra arguments', ansi, 'leaf u(sig,sig,sig,sig);'], + ['mixed named and positional', ansi, 'leaf u(sig,.tx(sig));'], + ['complex non-ANSI header', 'module leaf(.rx({rx0,rx1})); input rx0,rx1; endmodule', 'leaf u(sig);'], +])('does not guess formal endpoints for %s', async (_label, declaration, instance) => { + await graph(declaration, `module top(input sig); ${instance} endmodule`, cg => { + expect(slots(cg).flatMap(n => formal(cg,n.id))).toEqual([]); + }); +}); + +it('rebinds unchanged positional callers after target order changes, removal and restoration through sync', async () => { + const top = 'module top(input sig); leaf u(sig,sig); endmodule'; + await graph('module leaf(rx,tx); input rx; output tx; endmodule', top, async (cg, root) => { + const ids = slots(cg).map(n => n.id); + const targets = () => slots(cg).map(n => formal(cg,n.id)); + expect(targets()).toEqual([['rx'], ['tx']]); + // Keep names and body declaration positions identical; only the header order changes. + fs.writeFileSync(path.join(root,'leaf.sv'), 'module leaf(tx,rx); input rx; output tx; endmodule'); + expect((await cg.sync()).filesModified).toBe(1); + expect(targets()).toEqual([['tx'], ['rx']]); + fs.writeFileSync(path.join(root,'leaf.sv'), 'module leaf(rx); input rx; endmodule'); + expect((await cg.sync()).filesModified).toBe(1); + expect(targets()).toEqual([[], []]); + fs.writeFileSync(path.join(root,'leaf.sv'), 'module leaf(rx,tx); input rx; output tx; endmodule'); + expect((await cg.sync()).filesModified).toBe(1); + expect(targets()).toEqual([['rx'], ['tx']]); + expect(slots(cg).map(n => n.id)).toEqual(ids); + expect(fs.readFileSync(path.join(root,'top.sv'),'utf8')).toBe(top); + }); +}); + +it('keeps leading and trailing empty slots while allowing an omitted trailing port list', async () => { + await graph(ansi, 'module top(input sig); leaf u(,sig,); leaf short_list(sig); endmodule', cg => { + const nodes = (cg as any).db.db.prepare("select id,qualified_name q from nodes where kind='property' and decorators like '%hdl:position:%' order by qualified_name").all(); + expect(nodes.map((n: any) => [n.q, formal(cg,n.id)])).toEqual([ + ['top::short_list::port[0]', ['rx']], ['top::u::port[0]', ['rx']], + ['top::u::port[1]', ['tx']], ['top::u::port[2]', ['enable']], + ]); + }); +}); + +it('invalidates formal mappings when an equally near empty duplicate module is added and recovers when removed', async () => { + await graph(ansi, 'module top(input sig); leaf u(sig); endmodule', async (cg, root) => { + const slot = slots(cg)[0]!; + expect(formal(cg,slot.id)).toEqual(['rx']); + fs.writeFileSync(path.join(root,'duplicate.sv'),'module leaf; endmodule'); + await cg.sync(); + expect(formal(cg,slot.id)).toEqual([]); + fs.rmSync(path.join(root,'duplicate.sv')); + await cg.sync(); + expect(formal(cg,slot.id)).toEqual(['rx']); + }); +}); + +it.each(['/* second slot */', '// second slot\n'])('keeps positional slot order across comments: %s', async comment => { + await graph(ansi, `module top(input sig); leaf u(sig, ${comment} sig,); endmodule`, cg => { + const connections = slots(cg); + expect(connections.map(n => formal(cg,n.id))).toEqual([['rx'], ['tx'], ['enable']]); + expect(connections[1]!.signature).toContain(comment); + expect(cg.getCallees(connections[1]!.id).some(e => e.node.qualifiedName === 'top::sig')).toBe(true); + expect(cg.getCallees(connections[2]!.id).some(e => e.node.qualifiedName === 'top::sig')).toBe(false); + }); +}); diff --git a/__tests__/hdl-wildcard-ports.test.ts b/__tests__/hdl-wildcard-ports.test.ts new file mode 100644 index 0000000000..5a783e5c15 --- /dev/null +++ b/__tests__/hdl-wildcard-ports.test.ts @@ -0,0 +1,131 @@ +import { it, expect } from 'vitest'; +import * as fs from 'node:fs'; +import * as os from 'node:os'; +import * as path from 'node:path'; +import { CodeGraph } from '../src'; + +async function graph(files: Record, check: (cg: CodeGraph, root: string) => Promise | void): Promise { + const root = fs.mkdtempSync(path.join(os.tmpdir(), 'hdl-wildcard-')); + let cg: CodeGraph | undefined; + try { + for (const [file, source] of Object.entries(files)) { + fs.mkdirSync(path.dirname(path.join(root, file)), { recursive: true }); + fs.writeFileSync(path.join(root, file), source); + } + cg = CodeGraph.initSync(root); + expect((await cg.indexAll()).success).toBe(true); + await check(cg, root); + } finally { cg?.close(); fs.rmSync(root, { recursive: true, force: true }); } +} +function wildcard(cg: CodeGraph, qname = 'top::u::*') { + const node = cg.getNodesByName('*').find(n => n.qualifiedName === qname)!; + expect(node).toBeDefined(); + return cg.getCallees(node.id).filter(e => e.edge.metadata?.binding === 'hdl-wildcard-port') + .map(e => ({ target: e.node.qualifiedName, endpoint: e.edge.metadata!.endpoint, + port: e.edge.metadata!.portName })).sort((a, b) => a.target.localeCompare(b.target)); +} +const pair = (name: string) => [ + { target: `leaf::${name}`, endpoint: 'formal', port: name }, + { target: `top::${name}`, endpoint: 'actual', port: name }, +]; + +it('pairs wildcard ports only with the exact local signal and keeps endpoint identity', async () => { + await graph({ 'leaf.sv': 'module leaf(input rx,output tx,input missing); endmodule', + 'top.sv': 'module top(input rx,output tx,input extra); leaf u(.*); endmodule', + 'other.sv': 'module other(input missing); endmodule' }, cg => { + expect(wildcard(cg)).toEqual([...pair('rx'), ...pair('tx')].sort((a, b) => a.target.localeCompare(b.target))); + }); +}); + +it('explicit named and open connections override .* independently of source order', async () => { + await graph({ 'leaf.sv': 'module leaf(input a,b,c); endmodule', + 'top.sv': 'module top(input a,b,c,x); leaf u(.a(x),.*, .b()); endmodule' }, cg => { + expect(wildcard(cg)).toEqual(pair('c')); + }); +}); + +it('does not bind an outer signal through an enclosing genvar or parameter', async () => { + await graph({ 'leaf.sv': 'module leaf(input i,input a); endmodule', + 'top.sv': 'module top(input i,input a); for(genvar i=0;i<2;i++) begin: lanes localparam a=1; leaf u(.*); end endmodule' }, cg => { + expect(wildcard(cg, 'top::lanes::u::*')).toEqual([]); + }); +}); + +it.each([ + { 'a.sv': 'module leaf(input a); endmodule', 'b.sv': 'module leaf(input a); endmodule' }, + { 'a.sv': 'module leaf(input a); endmodule module leaf(input a); endmodule' }, +])('rejects ambiguous module definitions %j', async definitions => { + await graph({ ...definitions, 'top.sv': 'module top(input a); leaf u(.*); endmodule' } as Record, cg => { + expect(wildcard(cg)).toEqual([]); + }); +}); + +it('refreshes added and removed formal endpoints when the wildcard source is unchanged', async () => { + await graph({ 'leaf.sv': 'module leaf(input a); endmodule', + 'top.sv': 'module top(input a,b); leaf u(.*); endmodule' }, async (cg, root) => { + expect(wildcard(cg)).toEqual(pair('a')); + fs.writeFileSync(path.join(root, 'leaf.sv'), 'module leaf(input a,b); endmodule'); + await cg.sync(); + expect(wildcard(cg)).toEqual([...pair('a'), ...pair('b')].sort((a,b)=>a.target.localeCompare(b.target))); + fs.writeFileSync(path.join(root, 'leaf.sv'), 'module leaf(input b); endmodule'); + await cg.sync(); + expect(wildcard(cg)).toEqual(pair('b')); + }); +}); + +it('retries a known module with no matches and updates added or removed local signals', async () => { + await graph({ 'leaf.sv': 'module leaf(input absent); endmodule', + 'top.sv': 'module top(input b); leaf u(.*); endmodule' }, async (cg, root) => { + expect(wildcard(cg)).toEqual([]); + fs.writeFileSync(path.join(root, 'leaf.sv'), 'module leaf(input b); endmodule'); + await cg.sync(); + expect(wildcard(cg)).toEqual(pair('b')); + fs.writeFileSync(path.join(root, 'top.sv'), 'module top; leaf u(.*); endmodule'); + await cg.sync(); + expect(wildcard(cg)).toEqual([]); + fs.writeFileSync(path.join(root, 'top.sv'), 'module top(input b); leaf u(.*); endmodule'); + await cg.sync(); + expect(wildcard(cg)).toEqual(pair('b')); + }); +}); + +it('discovers a previously unknown module and removes bindings when a duplicate appears', async () => { + await graph({ 'top.sv': 'module top(input a); leaf u(.*); endmodule' }, async (cg, root) => { + expect(wildcard(cg)).toEqual([]); + fs.writeFileSync(path.join(root, 'leaf.sv'), 'module leaf(input a); endmodule'); + await cg.sync(); + expect(wildcard(cg)).toEqual(pair('a')); + fs.writeFileSync(path.join(root, 'duplicate.sv'), 'module leaf(input a); endmodule'); + await cg.sync(); + expect(wildcard(cg)).toEqual([]); + fs.unlinkSync(path.join(root, 'duplicate.sv')); + await cg.sync(); + expect(wildcard(cg)).toEqual(pair('a')); + fs.unlinkSync(path.join(root, 'leaf.sv')); + await cg.sync(); + expect(wildcard(cg)).toEqual([]); + }); +}); + +it('normalizes escaped source identifiers for matching and explicit exclusions', async () => { + await graph({ 'leaf.sv': 'module leaf(input \\a , input b); endmodule', + 'top.sv': 'module top(input a, input \\b ); leaf u(.*, .\\a ()); endmodule' }, cg => { + expect(wildcard(cg)).toEqual([ + { target: 'leaf::b', endpoint: 'formal', port: 'b' }, + { target: 'top::\\b', endpoint: 'actual', port: 'b' }, + ]); + }); +}); + +it.each([ + 'module leaf(.p(a)); input a; endmodule', + 'module leaf(.p({a,b})); input a,b; endmodule', + '`define PORTS input a\nmodule leaf(`PORTS); endmodule', +])('keeps only the module dependency for unknown or complex non-ANSI headers: %s', async leaf => { + await graph({ 'leaf.sv': leaf, 'top.sv': 'module top(input a,b,p); leaf u(.*); endmodule' }, cg => { + expect(wildcard(cg)).toEqual([]); + const node = cg.getNodesByName('*').find(n => n.qualifiedName === 'top::u::*')!; + expect(cg.getCallees(node.id).filter(e => e.edge.metadata?.binding === 'hdl-wildcard-dependency') + .map(e => e.node.qualifiedName)).toEqual(['leaf']); + }); +}); diff --git a/__tests__/verilog-call-scope.test.ts b/__tests__/verilog-call-scope.test.ts new file mode 100644 index 0000000000..3e4f1247e8 --- /dev/null +++ b/__tests__/verilog-call-scope.test.ts @@ -0,0 +1,53 @@ +import { it, expect } from 'vitest'; +import * as fs from 'node:fs'; +import * as os from 'node:os'; +import * as path from 'node:path'; +import { CodeGraph } from '../src'; + +it('retains callable owners and block imports when package definitions change through sync', async () => { + const root = fs.mkdtempSync(path.join(os.tmpdir(), 'hdl-call-scope-')); + let cg: CodeGraph | undefined; + const pkg = 'package p; function int run(); return 1; endfunction endpackage\npackage q; function int run(); return 2; endfunction endpackage'; + try { + fs.writeFileSync(path.join(root, 'pkg.sv'), pkg); + fs.writeFileSync(path.join(root, 'top.sv'), `module top; +function int f(); begin : chosen import p::*; f = run(); end endfunction +function int g(); begin : other import q::*; g = run(); end endfunction +initial begin : direct p::run(); end +endmodule`); + cg = CodeGraph.initSync(root); + expect((await cg.indexAll()).success).toBe(true); + const calls = () => (cg as any).db.db.prepare("SELECT s.qualified_name source,t.qualified_name target FROM edges e JOIN nodes s ON s.id=e.source JOIN nodes t ON t.id=e.target WHERE e.kind='calls' ORDER BY source,target").all(); + const before = calls(); + expect(before).toEqual([ + { source: 'top::f', target: 'p::run' }, + { source: 'top::g', target: 'q::run' }, + { source: 'top::initial@4:0', target: 'p::run' }, + ]); + fs.writeFileSync(path.join(root, 'pkg.sv'), '// move declarations\n' + pkg); + await cg.sync(); + expect(calls()).toEqual(before); + fs.writeFileSync(path.join(root, 'pkg.sv'), pkg.replace('int run()', 'int renamed()')); + await cg.sync(); + expect(calls()).toEqual([{ source: 'top::g', target: 'q::run' }]); + fs.writeFileSync(path.join(root, 'pkg.sv'), pkg); + await cg.sync(); + expect(calls()).toEqual(before); + await cg.indexAll(); + expect(calls()).toEqual(before); + } finally { cg?.close(); fs.rmSync(root, { recursive: true, force: true }); } +}); + +it.each(['import p::*;', 'function int run(); return 1; endfunction'])( + 'prefers an inner package import over outer declarations: %s', async outer => { + const root = fs.mkdtempSync(path.join(os.tmpdir(), 'hdl-import-shadow-')); + let cg: CodeGraph | undefined; + try { + fs.writeFileSync(path.join(root, 'pkg.sv'), 'package p; function int run(); return 1; endfunction endpackage\npackage q; function int run(); return 2; endfunction endpackage'); + fs.writeFileSync(path.join(root, 'top.sv'), `module top; ${outer} initial begin : local_scope import q::*; $display(run()); end endmodule`); + cg = CodeGraph.initSync(root); + await cg.indexAll(); + const calls = (cg as any).db.db.prepare("SELECT t.qualified_name target FROM edges e JOIN nodes t ON t.id=e.target WHERE e.kind='calls'").all(); + expect(calls).toEqual([{ target: 'q::run' }]); + } finally { cg?.close(); fs.rmSync(root, { recursive: true, force: true }); } + }); diff --git a/__tests__/verilog-flow.test.ts b/__tests__/verilog-flow.test.ts new file mode 100644 index 0000000000..57563c14a2 --- /dev/null +++ b/__tests__/verilog-flow.test.ts @@ -0,0 +1,56 @@ +/** + * In an HDL the design hierarchy IS the flow: how `top` reaches `uart_rx` is + * `top` instantiating `uart_bridge` instantiating `uart_rx`. The flow finder + * rides `instantiates` edges between Verilog modules (indexed as `class`), + * and only there — a TS `new X()` stays a dependency, not a step. + */ + +import { describe, it, expect, afterEach } from 'vitest'; +import * as fs from 'fs'; +import * as os from 'os'; +import * as path from 'path'; +import CodeGraph from '../src/index'; +import { resolveNamedSymbolFlow } from '../src/graph/named-symbol-flow'; + +let tempDir: string; +let cg: CodeGraph | null = null; + +afterEach(() => { + cg?.close(); + cg = null; + fs.rmSync(tempDir, { recursive: true, force: true }); +}); + +async function index(files: Record): Promise { + tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'codegraph-verilog-flow-')); + for (const [rel, content] of Object.entries(files)) fs.writeFileSync(path.join(tempDir, rel), content); + cg = await CodeGraph.init(tempDir, { index: true }); + cg.resolveReferences(); + return cg; +} + +describe('Verilog: the module-instantiation hierarchy is the flow', () => { + it('connects top to a leaf module through an unnamed bridge module', async () => { + const g = await index({ + 'top.v': 'module top(input clk, input rx, output tx);\n uart_bridge bridge (.clk(clk), .rx(rx), .tx(tx));\nendmodule\n', + 'uart_bridge.v': 'module uart_bridge(input clk, input rx, output tx);\n uart_rx rx_inst (.clk(clk), .rx(rx));\n uart_tx tx_inst (.clk(clk), .tx(tx));\nendmodule\n', + 'uart_rx.v': 'module uart_rx(input clk, input rx);\nendmodule\n', + 'uart_tx.v': 'module uart_tx(input clk, output tx);\nendmodule\n', + }); + const flow = resolveNamedSymbolFlow(g, 'top uart_rx'); + expect(flow.chains.length).toBeGreaterThan(0); + const steps = flow.chains[0]!.steps; + expect(steps.map((s) => s.node.name)).toEqual(['top', 'uart_bridge', 'uart_rx']); + expect(steps.slice(1).map((s) => s.edge?.kind)).toEqual(['instantiates', 'instantiates']); + }); + + it('does not ride a TypeScript `new X()` the same way', async () => { + const g = await index({ + 'top.ts': "import { Bridge } from './bridge';\nexport function top() { return new Bridge(); }\n", + 'bridge.ts': "import { Leaf } from './leaf';\nexport class Bridge { leaf = new Leaf(); }\n", + 'leaf.ts': 'export class Leaf {}\n', + }); + const flow = resolveNamedSymbolFlow(g, 'top Leaf'); + expect(flow.chains.map((c) => c.steps.map((s) => s.edge?.kind))).not.toContainEqual([undefined, 'instantiates', 'instantiates']); + }); +}); diff --git a/__tests__/verilog-generate-scopes.test.ts b/__tests__/verilog-generate-scopes.test.ts new file mode 100644 index 0000000000..0a934e949a --- /dev/null +++ b/__tests__/verilog-generate-scopes.test.ts @@ -0,0 +1,88 @@ +import { it, expect } from 'vitest'; +import * as fs from 'node:fs'; +import * as os from 'node:os'; +import * as path from 'node:path'; +import { CodeGraph } from '../src'; + +async function graph(source: string, check: (cg: CodeGraph, root: string) => void | Promise) { + const root = fs.mkdtempSync(path.join(os.tmpdir(),'hdl-generate-')); + let cg: CodeGraph | undefined; + try { + fs.writeFileSync(path.join(root,'top.sv'),source); + cg = CodeGraph.initSync(root); expect((await cg.indexAll()).success).toBe(true); + await check(cg,root); + } finally { cg?.close(); fs.rmSync(root,{recursive:true,force:true}); } +} +function targets(cg: CodeGraph, name: string) { + const source = cg.getNodesByName(name).find(n => n.kind === 'variable')!; + return cg.getCallees(source.id).filter(e => e.edge.kind === 'references').map(e => e.node.qualifiedName).sort(); +} + +it('binds inline iteration templates in nested and sibling generate scopes instead of outer ports', async () => { + await graph(`module leaf(input i); endmodule +module top(input i); +for(genvar i=0;i<2;i++) begin: outer + leaf a(.i(i)); + for(genvar i=0;i<3;i++) begin: inner leaf b(.i); end +end +for(genvar i=0;i<4;i++) begin: sibling leaf c(i); end +leaf outside(i); +endmodule`, cg => { + expect(targets(cg,'a')).toEqual(['top::outer::i']); + expect(targets(cg,'b')).toEqual(['top::outer::inner::i']); + expect(targets(cg,'c')).toEqual(['top::sibling::i']); + expect(targets(cg,'outside')).toEqual(['top::i']); + const iterations = cg.getNodesByName('i').filter(n => n.decorators?.includes('hdl:generate-parameter')); + expect(iterations).toHaveLength(3); + expect(new Set(iterations.map(n => n.id)).size).toBe(3); + expect(iterations.every(n => n.kind === 'constant' && n.decorators?.includes('hdl:template'))).toBe(true); + }); +}); + +it('separates predeclared genvars from their per-loop templates and retains anonymous scope identities', async () => { + await graph(`module leaf(input p); endmodule +module top; +genvar i,j; +for(i=0;i<2;i++) leaf a(i); +for(i=0;i<3;i++) leaf b(i); +endmodule`, async cg => { + const declared = cg.getNodesByName('i').filter(n => n.decorators?.includes('hdl:genvar')); + expect(declared.map(n => n.qualifiedName)).toEqual(['top::i']); + const a = targets(cg,'a'), b = targets(cg,'b'); + expect(a[0]).toMatch(/^top::generate@4:\d+::i$/); + expect(b[0]).toMatch(/^top::generate@5:\d+::i$/); + expect(a).not.toEqual(b); + const before = cg.getNodesByName('i').map(n => n.id).sort(); + await cg.indexAll(); + expect(cg.getNodesByName('i').map(n => n.id).sort()).toEqual(before); + }); +}); + +it('keeps references on declarations and assignment expressions in the nearest generated template scope', async () => { + await graph(`module top(input i, output wire[3:0] out); +for(genvar i=0;i<4;i++) begin: lanes +wire local_sig = i; +assign out[i] = local_sig; +end +endmodule`, cg => { + const local = cg.getNodesByName('local_sig')[0]!; + expect(cg.getCallees(local.id).filter(e => e.edge.kind === 'references').map(e => e.node.qualifiedName)).toEqual(['top::lanes::i']); + const db=(cg as any).db.db; + const wrong = db.prepare("select count(*) n from edges e join nodes s on s.id=e.source join nodes t on t.id=e.target where e.kind='references' and s.qualified_name like 'top::lanes::%' and t.qualified_name='top::i'").get(); + expect(wrong.n).toBe(0); + }); +}); + +it('converges sync and clean indexing after a generate variable and scope rename', async () => { + const initial = 'module leaf(input p); endmodule module top; for(genvar i=0;i<2;i++) begin: lanes leaf u(i); end endmodule'; + await graph(initial, async (cg,root) => { + const changed = initial.replace(/genvar i=0;i<2;i\+\+/, 'genvar j=0;j<3;j++').replace('lanes leaf u(i)', 'channels leaf u(j)'); + fs.writeFileSync(path.join(root,'top.sv'),changed); + expect((await cg.sync()).filesModified).toBe(1); + expect(targets(cg,'u')).toEqual(['top::channels::j']); + const snapshot = () => (cg as any).db.db.prepare("select s.qualified_name source,t.qualified_name target,e.kind kind from edges e join nodes s on s.id=e.source join nodes t on t.id=e.target order by source,target,kind").all(); + const synced = snapshot(); + await cg.indexAll(); + expect(snapshot()).toEqual(synced); + }); +}); diff --git a/__tests__/verilog-packages.test.ts b/__tests__/verilog-packages.test.ts new file mode 100644 index 0000000000..c62c6a6935 --- /dev/null +++ b/__tests__/verilog-packages.test.ts @@ -0,0 +1,61 @@ +import { describe, it, expect } from 'vitest'; +import * as fs from 'node:fs'; +import * as os from 'node:os'; +import * as path from 'node:path'; +import { CodeGraph } from '../src'; + +async function graph(sources: Record, check: (db: any) => void) { + const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'hdl-packages-')); + let cg: CodeGraph | undefined; + try { + for (const [name, source] of Object.entries(sources)) fs.writeFileSync(path.join(dir, name), source); + cg = await CodeGraph.init(dir, { silent: true }); + await cg.indexAll(); + check((cg as any).db.db); + } finally { cg?.destroy(); fs.rmSync(dir, { recursive: true, force: true }); } +} +const functions = 'package a; function int convert(); return 1; endfunction endpackage\npackage b; function int convert(); return 2; endfunction endpackage'; +function calls(db: any) { return db.prepare("SELECT t.qualified_name target FROM edges e JOIN nodes t ON t.id=e.target WHERE e.kind='calls'").all().map((r: any) => r.target); } + +describe('SystemVerilog package and interface identity', () => { + it('keeps the package qualifier and does not match a same-named foreign function', async () => { + await graph({ 'pkg.sv': functions, 'top.sv': 'module top; initial begin b::convert(); missing::convert(); end endmodule' }, db => { + expect(calls(db)).toEqual(['b::convert']); + }); + }); + it('resolves a visible package import but never an unrelated global package member', async () => { + await graph({ 'pkg.sv': functions, 'top.sv': 'module top; import b::*; initial convert(); endmodule\nmodule other; initial convert(); endmodule' }, db => { + expect(calls(db)).toEqual(['b::convert']); + }); + }); + it('does not choose between conflicting package imports', async () => { + await graph({ 'pkg.sv': functions, 'top.sv': 'module top; import a::*, b::*; initial convert(); endmodule' }, db => { + expect(calls(db)).toEqual([]); + }); + }); + it('does not flatten hierarchical calls to an unrelated package function', async () => { + await graph({ 'pkg.sv': functions, 'top.sv': 'module top; initial obj.convert(); endmodule' }, db => { + expect(calls(db)).toEqual([]); + }); + }); + it('does not import compilation-unit functions from an unrelated file', async () => { + await graph({ 'foreign.sv': 'function int convert(); return 1; endfunction', + 'top.sv': 'module top; initial convert(); endmodule' }, db => expect(calls(db)).toEqual([])); + }); + it('keeps nested package calls inside argument expressions', async () => { + await graph({ 'pkg.sv': functions, 'top.sv': 'module top; initial b::convert(a::convert()); endmodule' }, db => { + expect(calls(db).sort()).toEqual(['a::convert', 'b::convert']); + }); + }); + it('exposes modport directions and resolves an interface port to its exact view', async () => { + await graph({ 'bus.sv': 'interface bus; logic valid, ready; modport Master(output valid, input ready), Slave(input valid, output ready); endinterface', + 'top.sv': 'module top(bus.Master axi); endmodule' }, db => { + const views = db.prepare("SELECT qualified_name name, signature FROM nodes WHERE signature LIKE 'modport %' ORDER BY name").all(); + expect(views).toEqual([{ name: 'bus::Master', signature: 'modport Master(output valid, input ready)' }, { name: 'bus::Slave', signature: 'modport Slave(input valid, output ready)' }]); + const types = db.prepare("SELECT s.name source, t.qualified_name target FROM edges e JOIN nodes s ON s.id=e.source JOIN nodes t ON t.id=e.target WHERE e.kind='type_of'").all(); + const signals = db.prepare("SELECT t.qualified_name target FROM edges e JOIN nodes s ON s.id=e.source JOIN nodes t ON t.id=e.target WHERE e.kind='references' AND s.qualified_name='bus::Master' ORDER BY target").all(); + expect(signals).toEqual([{ target: 'bus::ready' }, { target: 'bus::valid' }]); + expect(types).toContainEqual({ source: 'axi', target: 'bus::Master' }); + }); + }); +}); diff --git a/__tests__/verilog-port-order.test.ts b/__tests__/verilog-port-order.test.ts new file mode 100644 index 0000000000..da2ca372af --- /dev/null +++ b/__tests__/verilog-port-order.test.ts @@ -0,0 +1,47 @@ +import { afterAll, beforeAll, describe, expect, it } from 'vitest'; +import { Parser, Language } from 'web-tree-sitter'; +import path from 'node:path'; +import { getVerilogPortOrder } from '../src/extraction/languages/verilog-signals'; + +let parser: Parser; +beforeAll(async () => { + await Parser.init(); + parser = new Parser(); + parser.setLanguage(await Language.load(path.join(__dirname, '../src/extraction/wasm/tree-sitter-systemverilog.wasm'))); +}); +afterAll(() => parser?.delete()); +function order(source: string): string[] | null { + const tree = parser.parse(source)!; + try { return getVerilogPortOrder(tree.rootNode.namedChildren[0]!, source); } + finally { tree.delete(); } +} + +describe('authoritative HDL positional port order', () => { + it('takes ANSI comma continuation ports in header source order, ignoring comments', () => { + expect(order('module m(input a, /* comment `ifdef FALSE */ b, output [3:0] c); endmodule')).toEqual(['a', 'b', 'c']); + }); + it('uses non-ANSI header order even when body declarations are reversed', () => { + expect(order('module m(a,b,c); input c; output b; input a; endmodule')).toEqual(['a', 'b', 'c']); + }); + it('preserves escaped identifiers and supports empty headers', () => { + expect(order('module m(input \\x.y , output z); endmodule')).toEqual(['\\x.y', 'z']); + expect(order('module m(\\x.y ,z); input z; output \\x.y ; endmodule')).toEqual(['\\x.y', 'z']); + expect(order('module m(); endmodule')).toEqual([]); + expect(order('module m; endmodule')).toEqual([]); + }); + it.each([ + 'module m(a,,b); input a,b; endmodule', + 'module m({a,b},c); input a,b,c; endmodule', + 'module m(.a(x),b); input x,b; endmodule', + 'module m(input a, a); endmodule', + 'module m(input a, \\a ); endmodule', + 'module m(input a, `ifdef TEST input b, `endif output c); endmodule', + 'module m(`PORTS); endmodule', + 'module m(input a); assign = ; endmodule', + ])('does not infer order from ambiguous or incomplete syntax: %s', source => { + expect(order(source)).toBeNull(); + }); + it('accepts interfaces and ignores parameter declarations in port numbering', () => { + expect(order('interface bus #(parameter W=8)(input clk, input [W-1:0] data); endinterface')).toEqual(['clk', 'data']); + }); +}); diff --git a/__tests__/verilog-resolution.test.ts b/__tests__/verilog-resolution.test.ts new file mode 100644 index 0000000000..d9a5d9f0ce --- /dev/null +++ b/__tests__/verilog-resolution.test.ts @@ -0,0 +1,87 @@ +/** + * Verilog module resolution across files. + * + * A module instantiation names its target by bare name — no import pins + * `pll u_pll (...)` to a file, the tool's file list does. A design commonly + * keeps a simulation stand-in beside the real module (`src/pll.v` and + * `sim/pll_stub.v`, both `module pll`); a synthesis file must land on the real + * one whatever the directory layout, while a testbench may mean either. And a + * `` `include "defs.vh" `` must become an edge to the header file. + */ +import { describe, it, expect, beforeEach, afterEach } from 'vitest'; +import * as fs from 'node:fs'; +import * as path from 'node:path'; +import * as os from 'node:os'; +import { CodeGraph } from '../src'; + +type Edge = { kind: string; sn: string; sf: string; tn: string; tf: string }; + +async function edges(dir: string): Promise { + const cg = await CodeGraph.init(dir, { silent: true }); + await cg.indexAll(); + const db = (cg as any).db.db; + const rows = db + .prepare( + `SELECT e.kind kind, s.name sn, s.file_path sf, t.name tn, t.file_path tf + FROM edges e JOIN nodes s ON s.id = e.source JOIN nodes t ON t.id = e.target + WHERE e.kind IN ('instantiates', 'imports') AND s.language = 'verilog'` + ) + .all(); + cg.destroy(); + return rows; +} + +function write(dir: string, rel: string, body: string): void { + fs.mkdirSync(path.dirname(path.join(dir, rel)), { recursive: true }); + fs.writeFileSync(path.join(dir, rel), body); +} + +const PLL = 'module pll (input clk, output lock);\nendmodule\n'; +const TOP = 'module top (input clk, output lock);\n pll u_pll (.clk(clk), .lock(lock));\nendmodule\n'; + +describe('verilog module resolution', () => { + let dir: string; + beforeEach(() => { dir = fs.mkdtempSync(path.join(os.tmpdir(), 'verilog-res-')); }); + afterEach(() => { fs.rmSync(dir, { recursive: true, force: true }); }); + + it('a synthesis file skips the simulation stub even when no directory is closer', async () => { + // `top.v` at the root shares no directory with either candidate, so + // proximity cannot break the tie — the simulation path must. + write(dir, 'top.v', TOP); + write(dir, 'rtl/pll.v', PLL); + write(dir, 'sim/pll_stub.v', PLL); + const inst = (await edges(dir)).filter((e) => e.kind === 'instantiates'); + expect(inst.map(e => [e.sn, e.tn, e.tf]).sort()).toEqual([['top', 'pll', 'rtl/pll.v'], ['u_pll', 'pll', 'rtl/pll.v']]); + }); + + it('a stub named by file suffix is skipped too', async () => { + write(dir, 'top.v', TOP); + write(dir, 'rtl/pll.v', PLL); + write(dir, 'models/pll_stub.v', PLL); + const inst = (await edges(dir)).filter((e) => e.kind === 'instantiates'); + expect(inst.map((e) => e.tf)).toEqual(['rtl/pll.v', 'rtl/pll.v']); + }); + + it('a testbench keeps every candidate and lands on the stub beside it', async () => { + write(dir, 'src/pll.v', PLL); + write(dir, 'sim/pll_stub.v', PLL); + write(dir, 'sim/tb_top.v', 'module tb_top;\n reg clk; wire lock;\n pll dut (.clk(clk), .lock(lock));\nendmodule\n'); + const inst = (await edges(dir)).filter((e) => e.kind === 'instantiates'); + expect(inst.map((e) => e.tf)).toEqual(['sim/pll_stub.v', 'sim/pll_stub.v']); + }); + + it('`include resolves to the header file, by suffix and closest to the includer', async () => { + write(dir, 'src/defs.vh', '`define DATA_W 16\n'); + write(dir, 'include/axi/typedef.svh', '`define AXI_TYPEDEF(x) x\n'); + write( + dir, + 'src/top.v', + '`include "defs.vh"\n`include "axi/typedef.svh"\nmodule top (input clk);\nendmodule\n' + ); + const imports = (await edges(dir)).filter((e) => e.kind === 'imports'); + expect(imports.map((e) => [e.sf, e.tf]).sort()).toEqual([ + ['src/top.v', 'include/axi/typedef.svh'], + ['src/top.v', 'src/defs.vh'], + ]); + }); +}); diff --git a/__tests__/verilog-scopes.test.ts b/__tests__/verilog-scopes.test.ts new file mode 100644 index 0000000000..67e882ffb5 --- /dev/null +++ b/__tests__/verilog-scopes.test.ts @@ -0,0 +1,84 @@ +import { afterEach, beforeEach, expect, it } from 'vitest'; +import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path'; +import { CodeGraph } from '../src'; +let root:string; let cg:CodeGraph|undefined; +beforeEach(()=>{root=fs.mkdtempSync(path.join(os.tmpdir(),'hdl-scopes-'));}); +afterEach(()=>{cg?.close();cg=undefined;fs.rmSync(root,{recursive:true,force:true});}); +const rows=()=> (cg as any).db.db.prepare(`SELECT s.qualified_name source,t.qualified_name target,e.line line FROM edges e JOIN nodes s ON s.id=e.source JOIN nodes t ON t.id=e.target WHERE e.kind='references' AND json_extract(e.metadata,'$.refName') LIKE 'hdl:signal:%' ORDER BY source,target,line`).all() as {source:string,target:string,line:number}[]; +const code=`module crc(input clk, input feedback, output logic [15:0] crc); +always @(posedge clk) begin : update + crc[0] <= feedback; + begin : inner + logic feedback; + feedback = crc[15]; + crc[1] <= feedback; + end + begin : sibling + crc[2] <= feedback; + end +end +endmodule`; +it('binds nested shadows in their own scope and keeps outer/sibling uses',async()=>{ + fs.writeFileSync(path.join(root,'crc.sv'),code);cg=CodeGraph.initSync(root);await cg.indexAll(); + const refs=rows().filter(r=>r.target.endsWith('::feedback')); + expect(refs.filter(r=>r.line===3).map(r=>r.target)).toEqual(['crc::feedback']); + expect(refs.filter(r=>r.line===7).map(r=>r.target)).toEqual(['crc::always@2:0::update::inner::feedback']); + expect(refs.filter(r=>r.line===10).map(r=>r.target)).toEqual(['crc::feedback']); +}); +it('keeps anonymous siblings and for/foreach bindings distinct',async()=>{ + fs.writeFileSync(path.join(root,'uart.sv'),`module uart(input i, input j, input data); logic [7:0] bits; +initial begin + begin integer count; count=1; end + begin integer count; count=2; end + for(int i=0;i<8;i++) bits[i]=data; + foreach(bits[j]) bits[j]=data; + bits[i]=data; +end endmodule`);cg=CodeGraph.initSync(root);await cg.indexAll(); + const counts=cg.getNodesByName('count');expect(counts).toHaveLength(2);expect(new Set(counts.map(n=>n.qualifiedName)).size).toBe(2); + const refs=rows();expect(refs.filter(r=>r.line===5&&r.target.endsWith('::i')).every(r=>r.target.includes('::for@'))).toBe(true); + expect(refs.filter(r=>r.line===5&&r.target.endsWith('::i')).length).toBeGreaterThan(0); + expect(refs.filter(r=>r.line===6&&r.target.endsWith('::j')).every(r=>r.target.includes('::foreach@'))).toBe(true); + expect(refs.filter(r=>r.line===7&&r.target.endsWith('::i')).map(r=>r.target)).toEqual(['uart::i']); +}); +it('rebinds a removed local shadow identically on sync and full rebuild',async()=>{ + const file=path.join(root,'crc.sv');fs.writeFileSync(file,code);cg=CodeGraph.initSync(root);await cg.indexAll(); + fs.writeFileSync(file,code.replace(' logic feedback;',' // feedback now belongs to module')); + await cg.sync();const synced=rows();await cg.indexAll();expect(rows()).toEqual(synced); + expect(synced.filter(r=>r.line===7&&r.target.endsWith('::feedback')).map(r=>r.target)).toEqual(['crc::feedback']); +}); +it('models function/task formal ports and preserves function call owners inside blocks',async()=>{ + fs.writeFileSync(path.join(root,'functions.sv'),`module m(input x); +function int g(input int x); return x; endfunction +function int f(input int x); + begin : work + f = g(x); + end +endfunction +task t; input x; begin x=x; end endtask +endmodule`);cg=CodeGraph.initSync(root);await cg.indexAll(); + const refs=rows();expect(refs.filter(r=>r.line===5&&r.target.endsWith('::x')).map(r=>r.target)).toEqual(['m::f::x']); + expect(refs.filter(r=>r.line===8&&r.target.endsWith('::x')).every(r=>r.target==='m::t::x')).toBe(true); + expect(refs.filter(r=>r.line===8&&r.target.endsWith('::x')).length).toBeGreaterThan(0); + const f=cg.getNodesByName('f').find(n=>n.kind==='function')!; + expect(cg.getCallees(f.id).filter(e=>e.edge.kind==='calls').map(e=>e.node.qualifiedName)).toContain('m::g'); +}); +it('keeps calls and signal dependencies in formal defaults and loop initializers',async()=>{ + fs.writeFileSync(path.join(root,'defaults.sv'),`module m(input seed); +function int g(); return 1; endfunction +function int f(input int x=g(), input int y=seed); return x+y; endfunction +initial for(int i=g();i<3;i++) $display(i); +endmodule`);cg=CodeGraph.initSync(root);await cg.indexAll(); + const f=cg.getNodesByName('f').find(n=>n.kind==='function')!; + const initial=cg.getNodesByName('initial@4:0')[0]!; + const callees=(id:string)=>cg!.getCallees(id).filter(e=>e.edge.kind==='calls').map(e=>e.node.qualifiedName); + expect(callees(f.id)).toEqual(['m::g']);expect(callees(initial.id)).toEqual(['m::g']); + expect(rows().filter(r=>r.source==='m::f::y').map(r=>r.target)).toEqual(['m::seed']); +}); +it('does not invent outer bindings from a loop with recovered declaration syntax',async()=>{ + fs.writeFileSync(path.join(root,'recovery.sv'),`module m(input j); +initial for(int i=0,j=0;i<3;i++) $display(j); +initial $display(j); +endmodule`);cg=CodeGraph.initSync(root);await cg.indexAll(); + expect(rows().filter(r=>r.line===2&&r.target==='m::j')).toEqual([]); + expect(rows().filter(r=>r.line===3&&r.target==='m::j').length).toBeGreaterThan(0); +}); diff --git a/src/db/queries.ts b/src/db/queries.ts index 4675e3b65e..450c3b8ff8 100644 --- a/src/db/queries.ts +++ b/src/db/queries.ts @@ -5335,12 +5335,46 @@ export class QueryBuilder { refs: UnresolvedReference[] ): number { return this.db.transaction(() => { - const changed = this.deleteEdgesByIds(edgeIds); - this.insertUnresolvedRefsBatch(refs); + let changed = this.deleteEdgesByIds(edgeIds); + const seenHdl = new Set(); + const pending = refs.filter(ref => { + if (!ref.referenceName.startsWith('hdl:wildcard:') && !ref.referenceName.startsWith('hdl:port-position:')) return true; + const key = JSON.stringify([ref.fromNodeId, ref.referenceName, ref.line, ref.column]); + if (seenHdl.has(key)) return false; + seenHdl.add(key); + return true; + }); + // A wildcard/positional binding depends on the entire module header. + // Invalidate its complete fan-out, including actual signals in untouched + // files, before rebuilding it from one original reference. + for (const ref of pending) { + if (ref.referenceName.startsWith('hdl:wildcard:') || ref.referenceName.startsWith('hdl:port-position:')) { + changed += this.db.prepare("DELETE FROM edges WHERE source = ? AND json_extract(metadata, '$.refName') = ?") + .run(ref.fromNodeId, ref.referenceName).changes; + } + } + this.insertUnresolvedRefsBatch(pending); return changed; })(); } + hasLanguage(language: Language): boolean { + return !!this.db.prepare('SELECT 1 FROM nodes WHERE language = ? LIMIT 1').get(language); + } + + /** HDL call arguments may change access when a remote formal changes direction. + * Seek HDL sources first, then their indexed outgoing edges; ordinary projects + * have no rows here. Include unclassified arguments so newly indexed callees + * can provide direction evidence on the next sync. */ + getHdlCallArgumentEdges(): Array { + const rows = this.db.prepare(`SELECT e.*, src.file_path AS source_file_path, src.language AS source_language + FROM nodes src JOIN edges e ON e.source = src.id + WHERE src.language = 'verilog' AND e.kind = 'references' AND e.metadata LIKE '%hdl:call-arg:%'`) + .all() as Array; + return rows.map(row => ({ ...rowToEdge(row), edgeId: row.id, + sourceFilePath: row.source_file_path, sourceLanguage: row.source_language })); + } + /** * Distinct node names present in the given files — the symbol names a sync * pass uses to look up retryable failed refs after those files changed. diff --git a/src/db/reference-tail.ts b/src/db/reference-tail.ts index 29ecb85d01..ffaec199e7 100644 --- a/src/db/reference-tail.ts +++ b/src/db/reference-tail.ts @@ -38,6 +38,22 @@ * division, so only a `references` ref is read as a path. */ export function referenceNameTail(referenceName: string, referenceKind?: string): string { + // Named HDL connections carry structured module/port/instance identity. + // Retry on the formal port name when a previously removed port reappears. + for (const prefix of ['hdl:port-position:', 'hdl:wildcard:']) { + if (referenceName.startsWith(prefix)) { + try { + const parts: unknown = JSON.parse(referenceName.slice(prefix.length)); + if (Array.isArray(parts) && typeof parts[0] === 'string') return parts[0]; + } catch { /* Fall back for malformed internal references. */ } + } + } + if (referenceName.startsWith('hdl:port:')) { + try { + const parts: unknown = JSON.parse(referenceName.slice('hdl:port:'.length)); + if (Array.isArray(parts) && parts.length === 3 && typeof parts[1] === 'string') return parts[1]; + } catch { /* Malformed refs retain the generic tail behavior below. */ } + } if (referenceKind === 'imports' && referenceName.replace(/\/+$/, '').includes('/')) { const stem = pathStem(referenceName); if (stem) return stem; diff --git a/src/graph/named-symbol-flow.ts b/src/graph/named-symbol-flow.ts index 34ae8adf56..c1078cd4ff 100644 --- a/src/graph/named-symbol-flow.ts +++ b/src/graph/named-symbol-flow.ts @@ -134,6 +134,15 @@ export const FLOW_CALLABLE_KINDS: ReadonlySet = new Set([ */ export const FLOW_EDGE_KINDS: ReadonlySet = new Set(['calls', 'navigates']); +function canSitOnFlow(n: { kind: string; language?: string }): boolean { + return FLOW_CALLABLE_KINDS.has(n.kind) || (n.kind === 'class' && n.language === 'verilog'); +} + +function carriesFlow(edge: { kind: string }, target: { language?: string }): boolean { + return FLOW_EDGE_KINDS.has(edge.kind) || (edge.kind === 'instantiates' && target.language === 'verilog'); +} + + /** * Node kinds that can be an endpoint of a SYNTHESIZED edge without being * callable. An RTK thunk is `const X = createAsyncThunk(...)`, so a thunk → @@ -311,7 +320,7 @@ export function resolveNamedTokens( for (const t of tokens) { const hits = findAllSymbols(cg, t).nodes; - const cands = hits.filter((n) => FLOW_CALLABLE_KINDS.has(n.kind)); + const cands = hits.filter((n) => canSitOnFlow(n)); out.tokenFamily.set(t, cands); // A qualified or otherwise-specific name (<=3 hits) keeps all of them. const specific = cands.length <= 3; @@ -345,7 +354,7 @@ export function resolveNamedTokens( if (out.dynNamed.size < 12) { let tokenDyn = 0; for (const n of hits) { - if (FLOW_CALLABLE_KINDS.has(n.kind) || !DYN_KINDS.has(n.kind) || out.dynNamed.has(n.id)) { + if (canSitOnFlow(n) || !DYN_KINDS.has(n.kind) || out.dynNamed.has(n.id)) { continue; } if (hasHeuristicEdge(n.id)) { @@ -444,7 +453,7 @@ function walkCalls( if (id !== seed.id && named.has(id)) reached.push(id); if (at.depth >= maxHops - 1) continue; for (const c of cg.getCallees(id)) { - if (!FLOW_EDGE_KINDS.has(c.edge.kind)) continue; + if (!carriesFlow(c.edge, c.node)) continue; const isNamed = named.has(c.node.id); // A route node is a connector, not a symbol the reader would have named: // crossing one costs no bridge budget. @@ -528,7 +537,7 @@ function walkBidirectional( const next: Node[] = []; for (const node of frontF) { for (const c of cg.getCallees(node.id)) { - if (!FLOW_EDGE_KINDS.has(c.edge.kind) || forward.has(c.node.id)) continue; + if (!carriesFlow(c.edge, c.node) || forward.has(c.node.id)) continue; forward.set(c.node.id, { prev: node.id, edge: c.edge, node: c.node }); next.push(c.node); } @@ -540,7 +549,7 @@ function walkBidirectional( const next: Node[] = []; for (const node of frontB) { for (const c of cg.getCallers(node.id)) { - if (!FLOW_EDGE_KINDS.has(c.edge.kind) || backward.has(c.node.id)) continue; + if (!carriesFlow(c.edge, c.node) || backward.has(c.node.id)) continue; backward.set(c.node.id, { next: node.id, edge: c.edge }); backNodes.set(c.node.id, c.node); next.push(c.node); diff --git a/src/resolution/index.ts b/src/resolution/index.ts index 9430776a53..431391897e 100644 --- a/src/resolution/index.ts +++ b/src/resolution/index.ts @@ -43,6 +43,9 @@ import { isJsSuperCallLanguage, isJsSuperCallSite, matchJsSuperCall } from './js import { CLASS_EXPRESSION_REF_LANGUAGES, isCommonJsExportedClass, isJsClassExpression, writtenIn, type ClassExpressionIndex } from './js-class-expressions'; import { matchRubyConstantPathRef } from './ruby-constant-paths'; import { resolveViaImport, resolvePhpImportedStaticCall, resolvePhpQualifiedClassRef, resolveTsQualifiedTypeRef, resolveJvmImport, extractImportMappings, extractReExports, loadCppIncludeDirs, isPhpIncludePathRef, isCobolCopybookRef, isNixPathImportRef, isDartImportRef, isLuaRequireRef, isJsPathImportRef, isBoundToOutOfRepoImport, reachesAmbientModule, importBindingTail, clearImportResolverMemos, resolveImportPath, isExternalImport, ESM_IMPORT_LANGUAGES, jsModuleFile, pythonRootFingerprint, pythonReopenScope, pythonPackageImporters, moduleDefaultExport, isJsFamilyFile, isModuleBindingName } from './import-resolver'; +import { isVerilogMemberRef, matchVerilogMember } from './verilog-members'; +import { isVerilogPortRef, matchVerilogPort } from './verilog-ports'; +import { isVerilogWildcardRef, matchVerilogWildcard } from './verilog-wildcard'; import { ResolverPool, minRefsForPool, shouldEngageAdaptively } from './resolver-pool'; import { resolveAliasBinding } from './alias-binding'; import { detectFrameworks, getResolvingFrameworks } from './frameworks'; @@ -1146,6 +1149,7 @@ export class ReferenceResolver { filePath: ref.filePath || this.getFilePathFromNodeId(ref.fromNodeId), language: ref.language || this.getLanguageFromNodeId(ref.fromNodeId), rowId: ref.rowId, + candidates: ref.candidates, })); const total = refs.length; @@ -1566,6 +1570,9 @@ export class ReferenceResolver { const superCall = matchJsSuperCall(ref, this.context); if (superCall !== undefined) return superCall; + if (isVerilogWildcardRef(ref)) return matchVerilogWildcard(ref, this.context, matchReference); + if (isVerilogPortRef(ref)) return matchVerilogPort(ref, this.context, matchReference); + if (isVerilogMemberRef(ref)) return matchVerilogMember(ref, this.context); // A Kotlin call through a receiver chain (`engine.pump.drain()`) resolves // on the chain's declared type, or gets no edge when that type is a // library one. An untyped chain resolves as the bare method name, the ref @@ -2018,6 +2025,8 @@ export class ReferenceResolver { // wrong rebind; edges without refName (pre-#1240, synthesized) are // deliberately NOT resurrected for the same reason. refName: ref.original.referenceName, + ...(ref.original.language === 'verilog' && ref.original.candidates?.length + ? { refCandidates: ref.original.candidates } : {}), ...(ref.original.referenceKind !== kind ? { refKind: ref.original.referenceKind } : {}), // Uniform marker for function-as-value edges (#756), regardless of // which strategy resolved them (import vs matchFunctionRef) — lets @@ -2323,6 +2332,7 @@ export class ReferenceResolver { filePath: raw.filePath || this.getFilePathFromNodeId(raw.fromNodeId), language: raw.language || this.getLanguageFromNodeId(raw.fromNodeId), rowId: raw.rowId, + candidates: raw.candidates, }; const result = this.resolveOneTimed(ref); if (result) { @@ -2443,6 +2453,7 @@ export class ReferenceResolver { filePath: raw.filePath || this.getFilePathFromNodeId(raw.fromNodeId), language: raw.language || this.getLanguageFromNodeId(raw.fromNodeId), rowId: raw.rowId, + candidates: raw.candidates, }; const result = this.resolveOneTimed(ref); if (result) { diff --git a/src/resolution/name-matcher.ts b/src/resolution/name-matcher.ts index 9debc1ec29..3752bece78 100644 --- a/src/resolution/name-matcher.ts +++ b/src/resolution/name-matcher.ts @@ -27,6 +27,10 @@ import { inBlock, isDeclarationFile, isMergedAmbientDeclaration, scanGlobalScope import { isMinifiedContent } from '../extraction/generated-detection'; import { getCargoWorkspaceCrateMap } from './frameworks/cargo-workspace'; import { readRustScopes, rustBindingAt, rustInnerBlockAt, rustBoundsOf, rustFnAt, rustImplAt, splitRustTopLevel, type RustBinding, type RustPatternSite, type RustScopes } from './rust-scopes'; +import { isVerilogMemberRef, matchVerilogMember } from './verilog-members'; +import { isVerilogPortRef, matchVerilogPort } from './verilog-ports'; +import { isVerilogWildcardRef, matchVerilogWildcard } from './verilog-wildcard'; + /** * Ceiling on how many same-named definitions a FUZZY name-match strategy will * score. A name defined more times than this is "ubiquitous" — a method/symbol @@ -28595,6 +28599,13 @@ export function dumpNameMatcherProfile(label: string): void { } } +function isVerilogSimPath(filePath: string): boolean { + return ( + /(^|\/)(sim|tb|tests?|testbench|dv)\//i.test(filePath) || + /_(stub|tb|sim)\.s?vh?$/i.test(filePath) + ); +} + export function matchReference( ref: UnresolvedRef, context: ResolutionContext @@ -28799,6 +28810,28 @@ function matchReferenceInner( ref: UnresolvedRef, context: ResolutionContext ): ResolvedRef | null { + if (isVerilogWildcardRef(ref)) return matchVerilogWildcard(ref, context, matchReference); + if (isVerilogPortRef(ref)) return matchVerilogPort(ref, context, matchReference); + if (isVerilogMemberRef(ref)) return matchVerilogMember(ref, context); + if (ref.language === 'verilog' && ref.referenceKind === 'instantiates' && !isVerilogSimPath(ref.filePath)) { + const modules = context + .getNodesByName(ref.referenceName) + .filter((n) => n.language === 'verilog' && (n.kind === 'class' || n.kind === 'interface')); + const synth = modules.filter((n) => !isVerilogSimPath(n.filePath)); + if (synth.length > 0 && synth.length < modules.length) { + const best = synth.length === 1 ? synth[0]! : findBestMatch(ref, synth, context); + if (best) { + const proximity = computePathProximity(ref.filePath, best.filePath); + return { + original: ref, + targetNodeId: best.id, + confidence: synth.length === 1 || proximity >= 30 ? 0.7 : 0.4, + resolvedBy: 'exact-match', + }; + } + } + } + // Function-as-value refs (#756) resolve ONLY through the dedicated matcher — // never the fuzzy/qualified fallthrough below (a wrong callback edge is // worse than none). diff --git a/src/resolution/verilog-members.ts b/src/resolution/verilog-members.ts new file mode 100644 index 0000000000..9ba8ae93c7 --- /dev/null +++ b/src/resolution/verilog-members.ts @@ -0,0 +1,74 @@ +import type { Node } from '../types'; +import { resolveVerilogCallArgumentAccess } from './verilog-call-access'; +import type { ResolvedRef, ResolutionContext, UnresolvedRef } from './types'; + +export function isVerilogMemberRef(ref: UnresolvedRef): boolean { + return ref.language === 'verilog' && (ref.referenceKind === 'calls' || ref.referenceKind === 'type_of' || + (ref.referenceKind === 'references' && (ref.referenceName.includes('::') || ref.referenceName.startsWith('hdl:signal:')))); +} + +/** Resolve only explicit HDL identity or visible lexical/import scope, never a trailing-name guess. */ +export function matchVerilogMember(ref: UnresolvedRef, context: ResolutionContext): ResolvedRef | null { + const exact = (name: string, kinds: Node['kind'][]) => context.getNodesByQualifiedName(name) + .filter(n => n.language === 'verilog' && kinds.includes(n.kind)); + const result = (nodes: Node[]): ResolvedRef | null => { + const unique = [...new Map(nodes.map(n => [n.id, n])).values()]; + if (unique.length !== 1) return null; + let metadata: Record | undefined; + if (ref.referenceKind === 'references' && ref.referenceName.startsWith('hdl:signal:')) { + const access = [...new Set((ref.candidates ?? []).filter(c => c.startsWith('hdl:access:')) + .map(c => c.slice('hdl:access:'.length)).filter(c => ['read', 'write', 'readwrite', 'control', 'event'].includes(c)))]; + const argument = access.length ? undefined : resolveVerilogCallArgumentAccess(ref, context, matchVerilogMember); + if (argument) access.push(argument.access); + const events = [...new Set((ref.candidates ?? []).filter(c => c.startsWith('hdl:event:')) + .map(c => c.slice('hdl:event:'.length)).filter(c => ['posedge', 'negedge'].includes(c)))]; + if (access.length) metadata = { hdlAccess: access, ...(events.length ? { hdlEvent: events } : {}), + ...(argument ? { hdlCallTargetId: argument.callableId, hdlFormalId: argument.formalId } : {}) }; + } + return { original: ref, targetNodeId: unique[0]!.id, confidence: 0.95, + resolvedBy: 'qualified-name', ...(metadata ? { metadata } : {}) }; + }; + if (ref.referenceKind === 'references' && ref.referenceName.startsWith('hdl:signal:')) { + const name = ref.referenceName.slice('hdl:signal:'.length); + const caller = context.getNodeById?.(ref.fromNodeId); + const scopes = caller?.qualifiedName.split('::') ?? []; + for (let i = scopes.length; i > 0; i--) { + const matches = exact(`${scopes.slice(0, i).join('::')}::${name}`, ['field', 'variable', 'constant']) + .filter(n => n.filePath === ref.filePath); + if (matches.length) return result(matches); + } + return null; + } + if (ref.referenceKind === 'references') return result(exact(ref.referenceName, ['field', 'variable', 'constant']) + .filter(n => n.filePath === ref.filePath)); + if (ref.referenceKind === 'type_of') return result(exact(ref.referenceName.replace(/\./g, '::'), ['interface', 'class', 'type_alias'])); + if (ref.referenceName.includes('::')) return result(exact(ref.referenceName, ['function', 'method'])); + // Hierarchical instance calls require elaborated receiver identity, which this pass does not infer. + if (ref.referenceName.includes('.')) return null; + const caller = context.getNodeById?.(ref.fromNodeId); + const hint = ref.candidates?.find(c => c.startsWith('hdl:scope:'))?.slice('hdl:scope:'.length); + const lexical = hint && caller && context.getNodesByQualifiedName(hint).some(n => + n.language === 'verilog' && n.filePath === ref.filePath && n.kind === 'namespace' + && n.qualifiedName.startsWith(`${caller.qualifiedName}::`) && n.startLine <= ref.line && n.endLine >= ref.line) + ? hint : caller?.qualifiedName; + const scopes = lexical?.split('::') ?? []; + const imports = context.getNodesInFile(ref.filePath).filter(n => n.kind === 'import' && n.startLine <= ref.line); + // Resolve one lexical level at a time: an inner package import can shadow + // an outer module function, just like a nearer declaration can. + for (let i = scopes.length; i >= 0; i--) { + const scope = scopes.slice(0, i).join('::'); + const matches = exact(scope ? `${scope}::${ref.referenceName}` : ref.referenceName, ['function', 'method']) + .filter(n => n.filePath === ref.filePath); + if (matches.length) return result(matches); + const imported: Node[] = []; + for (const item of imports) { + if (item.qualifiedName.split('::').slice(0, -1).join('::') !== scope) continue; + const match = item.signature?.trim().match(/^([\w$]+)::([\w$]+|\*)$/); + if (match && (match[2] === '*' || match[2] === ref.referenceName)) { + imported.push(...exact(`${match[1]}::${ref.referenceName}`, ['function', 'method'])); + } + } + if (imported.length) return result(imported); + } + return null; +} diff --git a/src/resolution/verilog-ports.ts b/src/resolution/verilog-ports.ts new file mode 100644 index 0000000000..d6dbf5fe91 --- /dev/null +++ b/src/resolution/verilog-ports.ts @@ -0,0 +1,93 @@ +import type { Node } from '../types'; +import type { ResolutionContext, ResolvedRef, UnresolvedRef } from './types'; + +const PREFIX = 'hdl:port:'; +const POSITION_PREFIX = 'hdl:port-position:'; + +export function isVerilogPortRef(ref: UnresolvedRef): boolean { + return ref.language === 'verilog' && ref.referenceKind === 'references' && (ref.referenceName.startsWith(PREFIX) || ref.referenceName.startsWith(POSITION_PREFIX)); +} + +/** Bind a named source connection to the selected module's own declared port. + * Reuse the instantiation matcher so simulation-file selection cannot diverge. + * This is source correspondence, not an elaborated net or drive-direction edge. + */ +export function matchVerilogPort( + ref: UnresolvedRef, + context: ResolutionContext, + resolveModule: (ref: UnresolvedRef, context: ResolutionContext) => ResolvedRef | null, +): ResolvedRef | null { + const positional = ref.referenceName.startsWith(POSITION_PREFIX); + let parts: unknown; + try { parts = JSON.parse(ref.referenceName.slice(positional ? POSITION_PREFIX.length : PREFIX.length)); } catch { return null; } + if (!Array.isArray(parts)) return null; + let moduleName: string, instanceId: string, portName: string; + let position = -1, count = -1; + if (positional) { + if (parts.length !== 4 || typeof parts[0] !== 'string' || !parts[0] || typeof parts[3] !== 'string' || !parts[3] + || !Number.isSafeInteger(parts[1]) || !Number.isSafeInteger(parts[2]) || parts[1] < 0 || parts[2] <= parts[1]) return null; + [moduleName, position, count, instanceId] = parts as [string, number, number, string]; + portName = ''; + } else { + if (parts.length !== 3 || !parts.every(p => typeof p === 'string' && p.length > 0)) return null; + [moduleName, portName, instanceId] = parts as [string, string, string]; + } + const selected = selectVerilogModule(ref, context, resolveModule, moduleName, instanceId); + if (!selected) return null; + const module = selected.module; + if (positional) { + const tag = module.decorators?.find(d => d.startsWith('hdl:port-order:')); + let order: unknown; + try { order = tag && JSON.parse(tag.slice('hdl:port-order:'.length)); } catch { return null; } + if (!Array.isArray(order) || !order.every(n => typeof n === 'string') || count > order.length + || new Set(order.map(n => n.replace(/^\\/, ''))).size !== order.length) return null; + portName = order[position]!; + } + const canonicalPort = portName.replace(/^\\/, ''); + const names = [canonicalPort, `\\${canonicalPort}`]; + const ports = names.flatMap(name => context.getNodesByQualifiedName(`${module.qualifiedName}::${name}`)) + .filter(n => n.language === 'verilog' && n.filePath === module.filePath && n.kind === 'field' + && n.decorators?.includes('hdl:port') && n.startLine >= module.startLine && n.endLine <= module.endLine); + if (ports.length !== 1) return null; + return { original: ref, targetNodeId: ports[0]!.id, confidence: selected!.confidence, + resolvedBy: 'qualified-name', ...(positional ? { alsoTargets: [{ targetNodeId: module.id, metadata: { binding: 'hdl-positional-dependency', endpoint: 'module' } }] } : {}), + metadata: { binding: positional ? 'hdl-positional-port' : 'hdl-named-port', moduleId: module.id, instanceId, ...(positional ? { position, moduleName } : {}) } }; +} + +/** Shared selection for named, positional and wildcard source bindings. */ +export function selectVerilogModule( + ref: UnresolvedRef, + context: ResolutionContext, + resolveModule: (ref: UnresolvedRef, context: ResolutionContext) => ResolvedRef | null, + moduleName: string, + instanceId: string, +): { module: Node; confidence: number } | null { + const instance = context.getNodeById?.(instanceId); + if (!instance || instance.language !== 'verilog' || instance.kind !== 'variable' || instance.filePath !== ref.filePath) return null; + const selected = resolveModule({ ...ref, fromNodeId: instance.id, referenceName: moduleName, + referenceKind: 'instantiates', line: instance.startLine, column: instance.startColumn }, context); + const module = selected && context.getNodeById?.(selected.targetNodeId); + if (!module || module.name !== moduleName || module.language !== 'verilog' + || !['class', 'interface'].includes(module.kind)) return null; + let candidates = context.getNodesByName(moduleName) + .filter(n => n.language === 'verilog' && ['class', 'interface'].includes(n.kind)); + const simulation = (file: string) => /(^|\/)(sim|tb|tests?|testbench|dv)\//i.test(file) + || /_(stub|tb|sim)\.s?vh?$/i.test(file); + if (!simulation(ref.filePath)) { + const synthesis = candidates.filter(n => !simulation(n.filePath)); + if (synthesis.length) candidates = synthesis; + } + // The module matcher may choose the first equal candidate. Port correspondence + // is stricter: a tie in source-file/directory proximity stays unresolved. + const dirs = ref.filePath.split('/').slice(0, -1); + const score = (file: string): number => { + const other = file.split('/').slice(0, -1); + let shared = 0; + while (shared < Math.min(dirs.length, other.length) && dirs[shared] === other[shared]) shared++; + return (file === ref.filePath ? 100 : 0) + Math.min(shared * 15, 80); + }; + if (candidates.some(n => n.id !== module.id && score(n.filePath) >= score(module.filePath))) return null; + if (context.getNodesByQualifiedName(module.qualifiedName).filter(n => n.filePath === module.filePath + && n.language === 'verilog' && ['class', 'interface'].includes(n.kind)).length !== 1) return null; + return { module, confidence: selected!.confidence }; +} diff --git a/src/resolution/verilog-wildcard.ts b/src/resolution/verilog-wildcard.ts new file mode 100644 index 0000000000..fcce42c339 --- /dev/null +++ b/src/resolution/verilog-wildcard.ts @@ -0,0 +1,70 @@ +import type { Node } from '../types'; +import type { ResolutionContext, ResolvedRef, UnresolvedRef } from './types'; +import { selectVerilogModule } from './verilog-ports'; + +const PREFIX = 'hdl:wildcard:'; +export function isVerilogWildcardRef(ref: UnresolvedRef): boolean { + return ref.language === 'verilog' && ref.referenceKind === 'references' && ref.referenceName.startsWith(PREFIX); +} + +/** One source .* clause, with paired endpoints for only unambiguous source names. + * This records source correspondence, not elaborated nets or signal direction. */ +export function matchVerilogWildcard( + ref: UnresolvedRef, + context: ResolutionContext, + resolveModule: (ref: UnresolvedRef, context: ResolutionContext) => ResolvedRef | null, +): ResolvedRef | null { + let parts: unknown; + try { parts = JSON.parse(ref.referenceName.slice(PREFIX.length)); } catch { return null; } + if (!Array.isArray(parts) || parts.length !== 3 || typeof parts[0] !== 'string' || !parts[0] + || typeof parts[1] !== 'string' || !parts[1] || !Array.isArray(parts[2]) || !parts[2].every(n => typeof n === 'string')) return null; + const [moduleName, instanceId, exclusions] = parts as [string, string, string[]]; + const selected = selectVerilogModule(ref, context, resolveModule, moduleName, instanceId); + const instance = context.getNodeById?.(instanceId); + if (!selected || !instance) return null; + const module = selected.module; + const canonical = (name: string) => name.replace(/^\\/, ''); + const excluded = new Set(exclusions.map(canonical)); + const tag = module.decorators?.find(d => d.startsWith('hdl:port-order:')); + let order: unknown; + try { order = tag && JSON.parse(tag.slice('hdl:port-order:'.length)); } catch { order = null; } + // Non-ANSI alias/concatenation headers and unknown macro headers do not prove + // that an internal input declaration is an externally named formal port. + const names: string[] = Array.isArray(order) && order.every(n => typeof n === 'string' && canonical(n)) + && new Set(order.map(canonical)).size === order.length ? order.map(canonical) : []; + const declared = context.getNodesInFile(module.filePath).filter(n => n.language === 'verilog' + && n.kind === 'field' && n.decorators?.includes('hdl:port') + && n.qualifiedName === `${module.qualifiedName}::${n.name}` + && n.startLine >= module.startLine && n.endLine <= module.endLine); + const formals = names.flatMap(name => { + const matches = declared.filter(n => canonical(n.name) === name); + return matches.length === 1 ? matches : []; + }); + const scopes = instance.qualifiedName.split('::').slice(0, -1); + const localSignal = (name: string): Node | null => { + for (let i = scopes.length; i > 0; i--) { + const matches = [name, `\\${name}`].flatMap(n => context.getNodesByQualifiedName(`${scopes.slice(0, i).join('::')}::${n}`)) + .filter(n => n.language === 'verilog' && n.filePath === ref.filePath); + if (!matches.length) continue; + // Any nearer declaration shadows the outer scope; unsupported declarations + // and duplicates must not silently become the outer signal. + return matches.length === 1 && matches[0]!.kind === 'field' + && matches[0]!.decorators?.some(d => d === 'hdl:port' || d === 'hdl:signal') ? matches[0]! : null; + } + return null; + }; + const targets: { targetNodeId: string; metadata: Record }[] = []; + for (const formal of formals) { + const name = canonical(formal.name); + if (excluded.has(name) || formals.filter(n => canonical(n.name) === name).length !== 1) continue; + const local = localSignal(name); + if (!local) continue; + const metadata = { binding: 'hdl-wildcard-port', moduleId: module.id, instanceId, + formalNodeId: formal.id, portName: formal.name }; + targets.push({ targetNodeId: formal.id, metadata: { ...metadata, endpoint: 'formal' } }, + { targetNodeId: local.id, metadata: { ...metadata, endpoint: 'actual' } }); + } + return { original: ref, targetNodeId: module.id, confidence: selected.confidence, + resolvedBy: 'qualified-name', metadata: { binding: 'hdl-wildcard-dependency', endpoint: 'module', moduleId: module.id, instanceId }, + alsoTargets: targets }; +} From 088deb95de433dec802dbfda2faf17153adbd43a Mon Sep 17 00:00:00 2001 From: danusha2345 Date: Tue, 15 Sep 2026 15:47:43 +0300 Subject: [PATCH 03/10] feat(verilog): classify signal access roles and answer hdlAccess queries Every signal reference is tagged read, write, readwrite, control (an if / case / ternary condition) or event (an always sensitivity), and arguments passed to a known function or task take the direction of that formal. `codegraph_explore` accepts `hdlAccess` (CLI: `--hdl-access`) with one exact or qualified signal name and lists the matching access sites with their source; the wiring of the option is in the following commit. --- __tests__/hdl-access-query.test.ts | 130 ++++++++++++++++++++++++++ __tests__/verilog-access-sync.test.ts | 47 ++++++++++ __tests__/verilog-access.test.ts | 111 ++++++++++++++++++++++ __tests__/verilog-call-access.test.ts | 101 ++++++++++++++++++++ src/mcp/hdl-access.ts | 102 ++++++++++++++++++++ src/resolution/verilog-call-access.ts | 55 +++++++++++ 6 files changed, 546 insertions(+) create mode 100644 __tests__/hdl-access-query.test.ts create mode 100644 __tests__/verilog-access-sync.test.ts create mode 100644 __tests__/verilog-access.test.ts create mode 100644 __tests__/verilog-call-access.test.ts create mode 100644 src/mcp/hdl-access.ts create mode 100644 src/resolution/verilog-call-access.ts diff --git a/__tests__/hdl-access-query.test.ts b/__tests__/hdl-access-query.test.ts new file mode 100644 index 0000000000..f2ffb0644f --- /dev/null +++ b/__tests__/hdl-access-query.test.ts @@ -0,0 +1,130 @@ +import { afterAll, beforeAll, describe, expect, it } from 'vitest'; +import { spawnSync } from 'node:child_process'; +import * as fs from 'node:fs'; +import * as os from 'node:os'; +import * as path from 'node:path'; +import { CodeGraph } from '../src'; +import { ToolHandler } from '../src/mcp/tools'; +import { formatHdlAccess } from '../src/mcp/hdl-access'; + +let root: string, cg: CodeGraph, handler: ToolHandler; +const rtl = `module top(input clk, input enable, input d, output logic q); + always @(posedge clk) begin + if (enable) q <= q + d; + end + leaf u(.d(d)); +endmodule +module leaf(input d); endmodule +module other(input d, output q); assign q=d; endmodule +module updates(output int q); initial q += 1; endmodule +`; +beforeAll(async () => { + root = fs.mkdtempSync(path.join(os.tmpdir(), 'hdl-access-query-')); + fs.writeFileSync(path.join(root, 'top.sv'), rtl); + // Integral seconds survive Date/fs.utimes round trips on all supported filesystems. + const fixtureTime = new Date('2024-01-01T00:00:00.000Z'); + fs.utimesSync(path.join(root, 'top.sv'), fixtureTime, fixtureTime); + fs.writeFileSync(path.join(root, 'lib.sv'), 'package lib; task automatic fill(output int y); y=1; endtask endpackage'); + fs.writeFileSync(path.join(root, 'call.sv'), 'module call_top; int y; initial lib::fill(y); endmodule'); + fs.writeFileSync(path.join(root, 'plain.ts'), 'export function hello() { return 42; }\n'); + cg = CodeGraph.initSync(root); + expect((await cg.indexAll()).success).toBe(true); + handler = new ToolHandler(cg); +}); +afterAll(() => { cg?.close(); if (root) fs.rmSync(root, { recursive: true, force: true }); }); +async function query(signal: string, hdlAccess?: string) { + const result = await handler.execute('codegraph_explore', { query: signal, ...(hdlAccess ? { hdlAccess } : {}) }); + expect(result.isError).not.toBe(true); + return result.content.map(c => c.text).join('\n'); +} + +describe('HDL access MCP query', () => { + it('returns actual source sites and retains reads and writes on the same signal and line', async () => { + const readers = await query('top::q', 'read'); + const writers = await query('top::q', 'write'); + for (const result of [readers, writers]) { + expect(result).toContain('1 matching access site(s).'); + expect(result).toContain('3\t if (enable) q <= q + d;'); + expect(result).toContain('top.sv:3'); + } + expect(readers).toContain('[read]'); + expect(writers).toContain('[write]'); + expect(await query('top.q', 'write')).toContain('**top::q**'); + expect(await query('top::q', 'all')).toContain('2 matching access site(s).'); + expect(await query('updates::q', 'readwrite')).toContain('[readwrite]'); + }); + it('explains writes proven by a known task output formal', async () => { + const result = await query('call_top::y', 'write'); + expect(result).toContain('1 matching access site(s).'); + expect(result).toContain('[write]'); + expect(result).toContain('Formal direction: lib::fill(output y).'); + expect(result).toContain('initial lib::fill(y);'); + expect(result).toContain("known callable formal's argument direction"); + }); + it('includes control and event uses as readers and permits exact category filters', async () => { + expect(await query('top::clk', 'read')).toContain('[event]'); + expect(await query('top::clk', 'event')).toContain('[event]'); + expect(await query('top::enable', 'control')).toContain('[control]'); + expect(await query('top::enable', 'read')).toContain('[control]'); + expect(await query('top::d', 'write')).toContain('0 matching access site(s).'); + }); + it('keeps unclassified connections separate from access evidence and disambiguates exact targets', async () => { + expect(await query('top::d', 'all')).toContain('unclassified reference(s) excluded'); + const all = await query('q', 'write'); + expect(all).toContain('**top::q**'); + expect(all).toContain('**other::q**'); + expect(await query('top::q', 'write')).not.toContain('**other::q**'); + expect(await query('where is q written', 'write')).toContain('No exact HDL signal matches'); + }); + it('does not change normal non-HDL exploration and validates the filter', async () => { + const normal = await query('hello'); + expect(normal).toContain('hello'); + expect(normal).toContain('return 42'); + expect(normal).not.toContain('HDL access:'); + const bad = await handler.execute('codegraph_explore', { query: 'q', hdlAccess: 'driver' }); + expect(bad.isError).toBe(true); + expect(bad.content[0]!.text).toContain('hdlAccess must be one of'); + }); + it('rejects same-size edited source with restored mtime and labels the indexed definition', () => { + const file = path.join(root, 'top.sv'); + const stat = fs.statSync(file); + try { + fs.writeFileSync(file, rtl.replace('q <= q + d', 'q <= q - d')); + fs.utimesSync(file, stat.atime, stat.mtime); + const changed = fs.statSync(file); + expect(changed.size).toBe(stat.size); + expect(Math.floor(changed.mtimeMs)).toBe(Math.floor(stat.mtimeMs)); + const result = formatHdlAccess(cg, 'top::q', 'write'); + expect(result).toContain('1 matching access site(s).'); + expect(result).toContain('Definition location is from the index; current source is unverified'); + expect(result).toContain('Source omitted: changed/unavailable since indexing'); + expect(result).not.toContain('q <= q - d'); + expect(result).not.toContain('q <= q + d'); + } finally { fs.writeFileSync(file, rtl); fs.utimesSync(file, stat.atime, stat.mtime); } + }); + it('does not attach stale indexed access positions to modified source', () => { + const file = path.join(root, 'top.sv'); + const stat = fs.statSync(file); + try { + fs.writeFileSync(file, `// changed source\n${rtl}`); + const result = formatHdlAccess(cg, 'top::q', 'write'); + expect(result).toContain('Source omitted: changed/unavailable since indexing'); + expect(result).not.toContain('3\t if (enable)'); + } finally { fs.writeFileSync(file, rtl); fs.utimesSync(file, stat.atime, stat.mtime); } + }); +}); + +it('HDL access CLI forwards the existing explore filter and rejects invalid values', () => { + const bin = path.resolve(__dirname, '../dist/bin/codegraph.js'); + const run = (filter: string) => spawnSync(process.execPath, [bin, 'explore', '--path', root, '--hdl-access', filter, 'top::q'], { + encoding: 'utf8', timeout: 30000, + env: { ...process.env, CODEGRAPH_NO_DAEMON: '1', CODEGRAPH_WASM_RELAUNCHED: '1', NO_COLOR: '1' }, + }); + const result = run('write'); + expect(result.status, result.stderr).toBe(0); + expect(result.stdout).toContain('HDL access: top::q — write'); + expect(result.stdout).toContain('q <= q + d;'); + const invalid = run('driver'); + expect(invalid.status).toBe(1); + expect(invalid.stdout + invalid.stderr).toContain('hdlAccess must be one of'); +}); diff --git a/__tests__/verilog-access-sync.test.ts b/__tests__/verilog-access-sync.test.ts new file mode 100644 index 0000000000..3913c8c9c6 --- /dev/null +++ b/__tests__/verilog-access-sync.test.ts @@ -0,0 +1,47 @@ +import { it, expect } from 'vitest'; +import * as fs from 'node:fs'; +import * as os from 'node:os'; +import * as path from 'node:path'; +import { CodeGraph } from '../src'; + +it('reclassifies untouched caller arguments after signature changes, deletion and reappearance', async () => { + const root = fs.mkdtempSync(path.join(os.tmpdir(), 'hdl-access-sync-')); + let cg: CodeGraph | undefined; + const pkg = (dir: string) => `package lib; task move(${dir} int x); x=1; endtask endpackage`; + const top = 'module top; int value; initial lib::move(value); endmodule'; + try { + fs.writeFileSync(path.join(root, 'pkg.sv'), pkg('output')); + fs.writeFileSync(path.join(root, 'top.sv'), top); + cg = CodeGraph.initSync(root); + await cg.indexAll(); + const rows = () => (cg as any).db.db.prepare("SELECT e.metadata FROM edges e JOIN nodes t ON t.id=e.target JOIN nodes s ON s.id=e.source WHERE e.kind='references' AND t.qualified_name='top::value' AND s.file_path='top.sv'").all(); + const roles = () => rows().flatMap((r: any) => JSON.parse(r.metadata)?.hdlAccess ?? []).sort(); + expect(roles()).toEqual(['write']); + fs.writeFileSync(path.join(root, 'pkg.sv'), pkg('input')); + await cg.sync(); + expect(roles()).toEqual(['read']); + fs.unlinkSync(path.join(root, 'pkg.sv')); + await cg.sync(); + expect(rows()).toHaveLength(1); // Keep the ordinary reference without inferred direction. + expect(roles()).toEqual([]); + fs.writeFileSync(path.join(root, 'pkg.sv'), pkg('inout')); + await cg.sync(); + expect(roles()).toEqual(['readwrite']); + expect(fs.readFileSync(path.join(root, 'top.sv'), 'utf8')).toBe(top); + await cg.indexAll(); + expect(roles()).toEqual(['readwrite']); + } finally { cg?.close(); fs.rmSync(root, { recursive: true, force: true }); } +}); + +it('preserves distinct same-line read/write occurrences and their columns', async () => { + const root = fs.mkdtempSync(path.join(os.tmpdir(), 'hdl-access-sites-')); + let cg: CodeGraph | undefined; + try { + fs.writeFileSync(path.join(root, 'top.sv'), 'module top; int x; initial x=x+1; endmodule'); + cg = CodeGraph.initSync(root); await cg.indexAll(); + const rows = (cg as any).db.db.prepare("SELECT e.col, e.metadata FROM edges e JOIN nodes t ON t.id=e.target WHERE e.kind='references' AND t.qualified_name='top::x' ORDER BY e.col").all(); + expect(rows).toHaveLength(2); + expect(rows[0].col).not.toBe(rows[1].col); + expect(rows.map((r: any) => JSON.parse(r.metadata).hdlAccess)).toEqual([['write'], ['read']]); + } finally { cg?.close(); fs.rmSync(root, { recursive: true, force: true }); } +}); diff --git a/__tests__/verilog-access.test.ts b/__tests__/verilog-access.test.ts new file mode 100644 index 0000000000..7a9c278ab1 --- /dev/null +++ b/__tests__/verilog-access.test.ts @@ -0,0 +1,111 @@ +import fs from 'node:fs'; +import os from 'node:os'; +import path from 'node:path'; +import { CodeGraph } from '../src'; +import { beforeAll, describe, expect, it } from 'vitest'; +import { extractFromSource } from '../src/extraction'; +import { initGrammars, loadGrammarsForLanguages } from '../src/extraction/grammars'; +beforeAll(async()=>{await initGrammars();await loadGrammarsForLanguages(['verilog']);}); +const access=(source:string)=>extractFromSource('access.sv',source).unresolvedReferences + .filter(r=>r.referenceName.startsWith('hdl:signal:')) + .map(r=>({name:r.referenceName.slice('hdl:signal:'.length),line:r.line,access:r.candidates?.find(c=>c.startsWith('hdl:access:'))?.slice('hdl:access:'.length),event:r.candidates?.find(c=>c.startsWith('hdl:event:'))?.slice('hdl:event:'.length)})); +const compact=(source:string)=>access(source).map(({name,access})=>[name,access]); +describe('syntactic HDL signal access',()=>{ + it('distinguishes assignment destinations from indexes and RHS expressions',()=>{ + expect(compact('module m; assign x[i+:W]=y; endmodule')).toEqual([['x','write'],['i','read'],['W','read'],['y','read']]); + expect(compact('module m; initial x[i] <= y; endmodule')).toEqual([['x','write'],['i','read'],['y','read']]); + expect(compact('module m; assign {a,b[j]}=v; endmodule')).toEqual([['a','write'],['b','write'],['j','read'],['v','read']]); + }); + it('labels compound and increment accesses without classifying their indexes as writes',()=>{ + expect(compact('module m; initial begin x[i]+=y; x[j]++; --x[k]; end endmodule')).toEqual([['x','readwrite'],['i','read'],['y','read'],['x','readwrite'],['j','read'],['x','readwrite'],['k','read']]); + }); + it('separates conditions and edge event expressions from data reads',()=>{ + const refs=access(`module m; +always @(posedge clk or negedge rst) begin + if(en) q=d; + case(sel) choice: q=d; endcase + while(run) q=d; +end endmodule`); + expect(refs.filter(r=>r.line===2).map(r=>[r.name,r.access,r.event])).toEqual([['clk','event','posedge'],['rst','event','negedge']]); + expect(refs.filter(r=>r.access==='control').map(r=>r.name)).toEqual(['en','sel','choice','run']); + expect(refs.filter(r=>r.name==='q').every(r=>r.access==='write')).toBe(true); + expect(refs.filter(r=>r.name==='d').every(r=>r.access==='read')).toBe(true); + }); + it('separates loop initialization, condition, increment, and indexed body assignment',()=>{ + expect(compact('module m; initial for(i=0;i{ + expect(access('module m; always @(posedge clk iff en) q=d; endmodule').map(r=>[r.name,r.access,r.event])).toEqual([ + ['clk','event','posedge'],['en','control',undefined],['q','write',undefined],['d','read',undefined], + ]); + }); + it('records formal order and directions for grouped ANSI and legacy task declarations',()=>{ + const result=extractFromSource('formals.sv','module m; task f(output int x, int y, const ref int z, input q=0); endtask task g; output a; input b,c; endtask endmodule'); + const formals=result.nodes.filter(n=>n.decorators?.includes('hdl:formal')); + expect(formals.map(n=>[n.qualifiedName,n.decorators?.find(d=>d.startsWith('hdl:formal-index:')),n.decorators?.find(d=>d.startsWith('hdl:direction:'))])).toEqual([ + ['m::f::x','hdl:formal-index:0','hdl:direction:output'],['m::f::y','hdl:formal-index:1','hdl:direction:output'], + ['m::f::z','hdl:formal-index:2','hdl:direction:const-ref'],['m::f::q','hdl:formal-index:3','hdl:direction:input'], + ['m::g::a','hdl:formal-index:0','hdl:direction:output'],['m::g::b','hdl:formal-index:1','hdl:direction:input'],['m::g::c','hdl:formal-index:2','hdl:direction:input'], + ]); + expect(formals.find(n=>n.name==='q')?.decorators).toContain('hdl:default'); + }); + it('preserves explicit increment side effects inside call arguments',()=>{ + const result=extractFromSource('effect.sv','module m; initial consume(i++); endmodule'); + const ref=result.unresolvedReferences.find(r=>r.referenceName==='hdl:signal:i')!; + expect(ref.candidates).toContain('hdl:access:readwrite'); + expect(ref.candidates?.some(c=>c.startsWith('hdl:call-arg:'))).toBe(false); + }); + it('does not certify a recovered callable signature for access inference',()=>{ + const result=extractFromSource('recovered.sv','module m; function int f(input int x); for(int i=0,j=0;i<3;i++) x=i; return x; endfunction endmodule'); + const formal=result.nodes.find(n=>n.qualifiedName==='m::f::x')!; + expect(formal.decorators).toContain('hdl:formal'); + expect(formal.decorators?.some(d=>d.startsWith('hdl:formal-index:')||d.startsWith('hdl:direction:'))).toBe(false); + }); + it('classifies returned values and delay operands as reads',()=>{ + const refs=access(`module m; +function int f(); return d; endfunction +initial #(d) q=d; +initial q = #(delay_value) d; +initial #wait_time q=d; +endmodule`); + expect(refs.filter(r=>r.line===2).map(r=>[r.name,r.access])).toEqual([['d','read']]); + expect(refs.filter(r=>r.line===3).map(r=>[r.name,r.access])).toEqual([['d','read'],['q','write'],['d','read']]); + expect(refs.filter(r=>r.line===4).map(r=>[r.name,r.access])).toEqual([['q','write'],['delay_value','read'],['d','read']]); + expect(refs.filter(r=>r.line===5).map(r=>[r.name,r.access])).toEqual([['wait_time','read'],['q','write'],['d','read']]); + }); + it('retains readwrite and control roles for increments inside conditions',()=>{ + const refs=extractFromSource('effect-control.sv','module m; initial while(i++) q=d; initial if(j++) q=d; endmodule').unresolvedReferences; + for(const name of ['i','j']) { + const ref=refs.find(r=>r.referenceName===`hdl:signal:${name}`)!; + expect(ref.candidates).toContain('hdl:access:readwrite'); + expect(ref.candidates).toContain('hdl:access:control'); + } + }); + it('records an explicit initializer write only on initialized net/data declarators',()=>{ + const source='module m; wire feedback = crc[15] ^ bit_in; logic q=0; reg idle, ready=1; localparam WIDTH=8; logic array[WIDTH]; endmodule'; + const result=extractFromSource('initializers.sv',source); + const writes=result.unresolvedReferences.filter(r=>r.candidates?.includes('hdl:access:write')); + expect(writes.map(r=>r.referenceName)).toEqual(['hdl:signal:feedback','hdl:signal:q','hdl:signal:ready']); + for(const ref of writes) expect(result.nodes.find(n=>n.id===ref.fromNodeId)?.name).toBe(ref.referenceName.slice('hdl:signal:'.length)); + expect(result.unresolvedReferences.filter(r=>r.candidates?.includes('hdl:access:read')).map(r=>r.referenceName)).toContain('hdl:signal:crc'); + }); + it('persists declarator self-writes alongside RHS reads in the graph',async()=>{ + const root=fs.mkdtempSync(path.join(os.tmpdir(),'hdl-initializer-write-')); + let cg:CodeGraph|undefined; + try { + fs.writeFileSync(path.join(root,'crc.sv'),'module crc(input [15:0] bits, input bit_in); wire feedback=bits[15]^bit_in; logic q=0; logic idle; endmodule'); + cg=CodeGraph.initSync(root);await cg.indexAll(); + const feedback=cg.getNodesByName('feedback')[0]!; + const refs=cg.getCallees(feedback.id).filter(e=>e.edge.kind==='references'); + const self=(cg as any).db.db.prepare('SELECT metadata FROM edges WHERE source=? AND target=? AND kind=?').get(feedback.id,feedback.id,'references'); + expect(JSON.parse(self.metadata).hdlAccess).toContain('write'); + expect(refs.filter(e=>e.node.id!==feedback.id).map(e=>e.node.name).sort()).toEqual(['bit_in','bits']); + const idle=cg.getNodesByName('idle')[0]!; + expect((cg as any).db.db.prepare('SELECT id FROM edges WHERE source=? AND target=?').get(idle.id,idle.id)).toBeUndefined(); + } finally {cg?.close();fs.rmSync(root,{recursive:true,force:true});} + }); + it('keeps qualified targets suppressed while classifying their local indexes and RHS',()=>{ + expect(compact('module m; initial p::x[i]=y; endmodule')).toEqual([['i','read'],['y','read']]); + expect(compact('module m; assign obj.x[i]=y; endmodule')).toEqual([['i','read'],['y','read']]); + }); +}); diff --git a/__tests__/verilog-call-access.test.ts b/__tests__/verilog-call-access.test.ts new file mode 100644 index 0000000000..95b028868a --- /dev/null +++ b/__tests__/verilog-call-access.test.ts @@ -0,0 +1,101 @@ +import { beforeAll, it, expect } from 'vitest'; +import { extractFromSource } from '../src/extraction'; +import { initGrammars, loadGrammarsForLanguages } from '../src/extraction/grammars'; +import { resolveVerilogCallArgumentAccess } from '../src/resolution/verilog-call-access'; +import { matchVerilogMember } from '../src/resolution/verilog-members'; +import type { ResolutionContext, UnresolvedRef } from '../src/resolution/types'; +import { VERILOG_CALL_ARGUMENT_PREFIX } from '../src/extraction/languages/verilog-call-access'; +beforeAll(async()=>{await initGrammars();await loadGrammarsForLanguages(['verilog']);}); + +function accesses(files: Record) { + const results = Object.entries(files).map(([file,source]) => ({file,result:extractFromSource(file,source)})); + const nodes = results.flatMap(r=>r.result.nodes); + const context = { + getNodeById: (id:string)=>nodes.find(n=>n.id===id) ?? null, + getNodesInFile: (file:string)=>nodes.filter(n=>n.filePath===file), + getNodesByName: (name:string)=>nodes.filter(n=>n.name===name), + getNodesByQualifiedName: (q:string)=>nodes.filter(n=>n.qualifiedName===q), + } as ResolutionContext; + return results.flatMap(({file,result})=>result.unresolvedReferences + .filter(r=>r.candidates?.some(c=>c.startsWith(VERILOG_CALL_ARGUMENT_PREFIX))) + .map(r=>{ + const ref={...r,filePath:file,language:'verilog'} as UnresolvedRef; + const access=resolveVerilogCallArgumentAccess(ref,context,matchVerilogMember); + return {name:r.referenceName.replace('hdl:signal:',''),access:access?.access, + callable:nodes.find(n=>n.id===access?.callableId)?.qualifiedName}; + })); +} + +it('classifies input, output, inout, ref and const ref actuals using known formal directions',()=>{ + expect(accesses({'top.sv':`module top; +task t(input int a, output int b, inout int c, ref int d, const ref int e); endtask +int ai,ao,aio,ar,acr; +initial t(ai,ao,aio,ar,acr); +endmodule`}).map(({name,access})=>[name,access])).toEqual([ + ['ai','read'],['ao','write'],['aio','readwrite'],['ar','readwrite'],['acr','read'], + ]); +}); + +it('supports omitted defaults and named actuals with default input direction',()=>{ + expect(accesses({'top.sv':`module top; +task t(int a=0, output int b); endtask +int out; +initial begin t(,out); t(.b(out)); end +endmodule`}).map(({name,access})=>[name,access])).toEqual([['out','write'],['out','write']]); +}); + +it('keeps output indexes as reads and never marks a non-lvalue output expression as a write',()=>{ + expect(accesses({'top.sv':`module top; +task t(output int x); endtask +int data[8],idx,a,b; +initial begin t(data[idx]); t(a+b); end +endmodule`}).map(({name,access})=>[name,access])).toEqual([ + ['data','write'],['idx','read'],['a',undefined],['b',undefined], + ]); +}); + +it('uses the nearest nested call and retains unknown-call occurrences without access claims',()=>{ + expect(accesses({'top.sv':`module top; +function int inner(input int x); return x; endfunction +task outer(input int x); endtask +int a,b; +initial begin outer(inner(a)); external_call(b); end +endmodule`}).map(({name,access,callable})=>[name,access,callable])).toEqual([ + ['a','read','top::inner'],['b',undefined,undefined], + ]); +}); + +it('respects lexical package imports and does not borrow a direction from a same-name task elsewhere',()=>{ + expect(accesses({'pkg.sv':'package p; task t(output int x); endtask endpackage', + 'top.sv':`module top; +task t(input int x); endtask +int a,b; +initial begin + begin : imported import p::*; t(a); end + begin : local_scope t(b); end +end +endmodule`}).map(({name,access,callable})=>[name,access,callable])).toEqual([ + ['a','write','p::t'],['b','read','top::t'], + ]); +}); + +it('rejects too many actuals and missing required formals while retaining their references',()=>{ + expect(accesses({'top.sv':`module top; +task t(input int a, output int b); endtask +int x,y,z; +initial begin t(x); t(x,y,z); end +endmodule`}).map(({name,access})=>[name,access])).toEqual([ + ['x',undefined],['x',undefined],['y',undefined],['z',undefined], + ]); +}); + +it('permits output concatenations but does not invent a reference-variable binding for a concat actual',()=>{ + expect(accesses({'top.sv':`module top; +task output_task(output int x); endtask +task reference_task(ref int x); endtask +int a,b,c,d; +initial begin output_task({a,b}); reference_task({c,d}); end +endmodule`}).map(({name,access})=>[name,access])).toEqual([ + ['a','write'],['b','write'],['c',undefined],['d',undefined], + ]); +}); diff --git a/src/mcp/hdl-access.ts b/src/mcp/hdl-access.ts new file mode 100644 index 0000000000..9e1713ed2a --- /dev/null +++ b/src/mcp/hdl-access.ts @@ -0,0 +1,102 @@ +import type CodeGraph from '../index'; +import type { Edge, Node } from '../types'; +import { readFileSync, statSync } from 'node:fs'; +import { createHash } from 'node:crypto'; +import { validatePathWithinRoot } from '../utils'; + +export const HDL_ACCESS_FILTERS = ['read', 'write', 'readwrite', 'control', 'event', 'all'] as const; +export type HdlAccessFilter = typeof HDL_ACCESS_FILTERS[number]; +const ACCESS_KINDS = new Set(['read', 'write', 'readwrite', 'control', 'event']); + +export function hdlAccessKinds(edge: Edge): string[] { + const value = edge.metadata?.hdlAccess; + return Array.isArray(value) ? [...new Set(value.filter((v): v is string => typeof v === 'string' && ACCESS_KINDS.has(v)))].sort() : []; +} +function matches(kinds: string[], filter: HdlAccessFilter): boolean { + if (filter === 'all') return kinds.length > 0; + if (filter === 'read') return kinds.some(k => ['read', 'readwrite', 'control', 'event'].includes(k)); + if (filter === 'write') return kinds.some(k => k === 'write' || k === 'readwrite'); + if (filter === 'readwrite') return kinds.includes('readwrite') || (kinds.includes('read') && kinds.includes('write')); + return kinds.includes(filter); +} + +/** Exact HDL signal access sites, using raw edges rather than neighbour-deduped callers. */ +export function formatHdlAccess(cg: CodeGraph, query: string, filter: HdlAccessFilter, maxFiles = 12): string { + const name = query.trim(); + const exact = name.includes('::') ? cg.getNodesByQualifiedName(name) : cg.getNodesByName(name); + const matchesByName = exact.length || !name.includes('.') || name.includes('\\') + ? exact : cg.getNodesByQualifiedName(name.replace(/\./g, '::')); + const targets = matchesByName + .filter(n => n.language === 'verilog' && ['field', 'variable', 'constant'].includes(n.kind)) + .sort((a, b) => a.filePath.localeCompare(b.filePath) || a.startLine - b.startLine || a.qualifiedName.localeCompare(b.qualifiedName)); + if (!targets.length) return `No exact HDL signal matches "${name}". Use one signal name or qualified name (for example top::data).`; + const lines = [`**HDL access: ${name} — ${filter}**`, + 'Source occurrences only: read includes control/event uses; write follows a syntactic assignment/update or a known callable formal\'s argument direction, not an elaborated driver or timing result.']; + const sourceCache = new Map(); + let snippetBudget = 12000, shownSites = 0, totalSites = 0, unclassified = 0; + const sourceLines = (file: string): string[] | null => { + if (sourceCache.has(file)) return sourceCache.get(file)!; + if (sourceCache.size >= maxFiles) return null; + let source: string[] | null = null; + try { + const record = cg.getFile(file); + const absolute = validatePathWithinRoot(cg.getProjectRoot(), file); + if (record && absolute) { + const before = statSync(absolute); + if (before.size === record.size && Math.floor(before.mtimeMs) === Math.floor(record.modifiedAt)) { + const text = readFileSync(absolute, 'utf8'); + const after = statSync(absolute); + // Same SHA-256 over UTF-8 text as extraction's hashContent. Avoid + // importing the heavy extraction module on the MCP tools/list path. + const hash = createHash('sha256').update(text).digest('hex'); + if (before.size === after.size && before.mtimeMs === after.mtimeMs && hash === record.contentHash) source = text.split(/\r?\n/); + } + } + } catch { /* A missing or changed file must never be presented as the indexed occurrence. */ } + sourceCache.set(file, source); + return source; + }; + for (const target of targets) { + const sites: { edge: Edge; owner: Node; kinds: string[] }[] = []; + for (const edge of cg.getIncomingEdges(target.id)) { + if (edge.kind !== 'references') continue; + const owner = cg.getNode(edge.source); + if (!owner || owner.language !== 'verilog') continue; + const kinds = hdlAccessKinds(edge); + if (!kinds.length) { unclassified++; continue; } + if (matches(kinds, filter)) sites.push({ edge, owner, kinds }); + } + sites.sort((a, b) => a.owner.filePath.localeCompare(b.owner.filePath) || (a.edge.line ?? 0) - (b.edge.line ?? 0) || (a.edge.column ?? 0) - (b.edge.column ?? 0) || a.owner.qualifiedName.localeCompare(b.owner.qualifiedName)); + totalSites += sites.length; + const definitionVerified = sourceLines(target.filePath) !== null; + lines.push('', `**${target.qualifiedName}** — ${target.filePath}:${target.startLine}`, `${sites.length} matching access site(s).`); + if (!definitionVerified) lines.push('Definition location is from the index; current source is unverified (changed/unavailable or maxFiles reached).'); + for (const { edge, owner, kinds } of sites) { + if (shownSites >= 60) continue; + shownSites++; + lines.push(`- [${kinds.join(', ')}] ${owner.qualifiedName} — ${owner.filePath}:${edge.line ?? owner.startLine}${typeof edge.column === 'number' ? `:${edge.column + 1}` : ''}`); + const callableId = edge.metadata?.hdlCallTargetId, formalId = edge.metadata?.hdlFormalId; + if (typeof callableId === 'string' && typeof formalId === 'string') { + const callable = cg.getNode(callableId), formal = cg.getNode(formalId); + const direction = formal?.decorators?.find(d => d.startsWith('hdl:direction:'))?.slice('hdl:direction:'.length); + if (callable?.language === 'verilog' && formal?.language === 'verilog' && direction) { + const status = sourceLines(callable.filePath) === null ? ' [indexed definition; source unverified]' : ''; + lines.push(` Formal direction: ${callable.qualifiedName}(${direction} ${formal.name}).${status}`); + } + } + const source = sourceLines(owner.filePath); + if (!source) { lines.push(' Source omitted: changed/unavailable since indexing, or maxFiles reached.'); continue; } + if (!edge.line || edge.line > source.length) { lines.push(' No verified source line for this occurrence.'); continue; } + const start = Math.max(1, edge.line - 1), end = Math.min(source.length, edge.line + 1); + const excerpt = source.slice(start - 1, end).map((s, i) => `${start + i}\t${s}`).join('\n'); + if (excerpt.length > snippetBudget || excerpt.length > 2000) { lines.push(' Source snippet omitted by output budget.'); continue; } + snippetBudget -= excerpt.length; + const fence = '`'.repeat(Math.max(3, ...(excerpt.match(/`+/g) ?? []).map(s => s.length + 1))); + lines.push(`${fence}systemverilog`, excerpt, fence); + } + } + if (shownSites < totalSites) lines.push('', `Showing ${shownSites} of ${totalSites} matching sites; narrow with a qualified signal name.`); + if (unclassified) lines.push('', `${unclassified} unclassified reference(s) excluded. Connections and unknown uses do not imply reads or writes.`); + lines.push('', 'An empty result is not proof of no access outside the supported source patterns.'); + return lines.join('\n'); +} diff --git a/src/resolution/verilog-call-access.ts b/src/resolution/verilog-call-access.ts new file mode 100644 index 0000000000..4faedce822 --- /dev/null +++ b/src/resolution/verilog-call-access.ts @@ -0,0 +1,55 @@ +import { VERILOG_CALL_ARGUMENT_PREFIX, type VerilogCallArgument } from '../extraction/languages/verilog-call-access'; +import type { UnresolvedRef, ResolutionContext, ResolvedRef } from './types'; + +export interface VerilogCallAccess { + access: 'read' | 'write' | 'readwrite'; + callableId: string; + formalId: string; +} + +/** Classify a call actual only after a precise callable and complete formal list are known. */ +export function resolveVerilogCallArgumentAccess( + ref: UnresolvedRef, + context: ResolutionContext, + resolveCallable: (ref: UnresolvedRef, context: ResolutionContext) => ResolvedRef | null, +): VerilogCallAccess | undefined { + const token = ref.candidates?.find(c => c.startsWith(VERILOG_CALL_ARGUMENT_PREFIX)); + if (!token) return undefined; + let info: VerilogCallArgument; + try { info = JSON.parse(token.slice(VERILOG_CALL_ARGUMENT_PREFIX.length)); } catch { return undefined; } + if (!info || typeof info.callee !== 'string' || typeof info.scope !== 'string' || typeof info.callableId !== 'string' + || !Array.isArray(info.slots) || !['value', 'index'].includes(info.role) || typeof info.writeTarget !== 'boolean' + || typeof info.referenceTarget !== 'boolean') return undefined; + const caller = context.getNodeById?.(info.callableId); + if (!caller || caller.filePath !== ref.filePath || caller.language !== 'verilog') return undefined; + const target = resolveCallable({ ...ref, fromNodeId: caller.id, referenceName: info.callee, + referenceKind: 'calls', candidates: [`hdl:scope:${info.scope}`] }, context); + const callable = target && context.getNodeById?.(target.targetNodeId); + if (!callable || callable.language !== 'verilog' || !['function', 'method'].includes(callable.kind)) return undefined; + const formals = context.getNodesInFile(callable.filePath).filter(n => n.decorators?.includes('hdl:formal') + && n.qualifiedName === `${callable.qualifiedName}::${n.name}` && n.startLine >= callable.startLine && n.endLine <= callable.endLine); + const indexed = formals.map(node => ({node, index: Number(node.decorators?.find(d => d.startsWith('hdl:formal-index:'))?.slice('hdl:formal-index:'.length))})).sort((a,b) => a.index-b.index); + if (!indexed.length || indexed.some((f,i) => f.index !== i)) return undefined; + const canonical = (name: string) => name.replace(/^\\/, ''); + if (new Set(indexed.map(f => canonical(f.node.name))).size !== indexed.length) return undefined; + const assigned = new Set(); + let selected: typeof indexed[number] | undefined; + for (const slot of info.slots) { + if (!slot || typeof slot.omitted !== 'boolean') return undefined; + const formal = typeof slot.key === 'number' && Number.isSafeInteger(slot.key) ? indexed[slot.key] + : typeof slot.key === 'string' ? indexed.find(f => canonical(f.node.name) === canonical(slot.key as string)) : undefined; + if (!formal || assigned.has(formal.index)) return undefined; + assigned.add(formal.index); + if (slot.omitted && !formal.node.decorators?.includes('hdl:default')) return undefined; + if (slot.key === info.argument && !slot.omitted) selected = formal; + } + if (!selected || indexed.some(f => !assigned.has(f.index) && !f.node.decorators?.includes('hdl:default'))) return undefined; + const direction = selected.node.decorators?.find(d => d.startsWith('hdl:direction:'))?.slice('hdl:direction:'.length); + let access: VerilogCallAccess['access']; + if (info.role === 'index' || direction === 'input' || direction === 'const-ref') access = 'read'; + else if (!info.writeTarget) return undefined; + else if (direction === 'output') access = 'write'; + else if (direction === 'inout' || (direction === 'ref' && info.referenceTarget)) access = 'readwrite'; + else return undefined; + return {access, callableId: callable.id, formalId: selected.node.id}; +} From 430c5bc7307e1227f48e482b7db6c74ae859426b Mon Sep 17 00:00:00 2001 From: danusha2345 Date: Tue, 15 Sep 2026 15:47:48 +0300 Subject: [PATCH 04/10] feat(verilog): HDL build profiles with preprocessing context and watcher scope An optional `hdl` section in codegraph.json names profiles of source files or filelists (+incdir+, +define+, nested -f/-F), include directories, defines, top modules and language mode. The active profile selects the HDL units that are indexed and masks the conditional-compilation branches it disables while preserving offsets; includes contribute macro state and are tracked as dependencies. The index records the profile fingerprint and diagnostics, `codegraph status` and `codegraph_explore` report the configured versus the indexed profile, a context change forces a full HDL re-index even on a scoped sync, and the file watcher follows filelists, included headers and explicitly selected ignored paths. A scope change that lands while a scoped sync is in flight is now rescheduled: it adds no pending file, only the full-reconcile flag, and the post-sync check used to drop it. --- __tests__/hdl-preprocess.test.ts | 80 +++++++++ __tests__/hdl-profile-cli.test.ts | 35 ++++ __tests__/hdl-profile-index.test.ts | 87 ++++++++++ __tests__/hdl-profile-status.test.ts | 126 ++++++++++++++ __tests__/hdl-profile-watch.test.ts | 90 ++++++++++ __tests__/hdl-profile.test.ts | 119 ++++++++++++++ docs/hdl-profiles.md | 96 +++++++++++ src/bin/codegraph.ts | 23 ++- src/extraction/index.ts | 156 ++++++++++++++++-- src/hdl/index-context.ts | 132 +++++++++++++++ src/hdl/preprocess.ts | 237 +++++++++++++++++++++++++++ src/hdl/profile.ts | 213 ++++++++++++++++++++++++ src/hdl/status.ts | 129 +++++++++++++++ src/index.ts | 44 ++++- src/mcp/tools.ts | 26 ++- src/resolution/resurrect-ref.ts | 3 + src/sync/hdl-watch-scope.ts | 47 ++++++ src/sync/watcher.ts | 28 +++- 18 files changed, 1648 insertions(+), 23 deletions(-) create mode 100644 __tests__/hdl-preprocess.test.ts create mode 100644 __tests__/hdl-profile-cli.test.ts create mode 100644 __tests__/hdl-profile-index.test.ts create mode 100644 __tests__/hdl-profile-status.test.ts create mode 100644 __tests__/hdl-profile-watch.test.ts create mode 100644 __tests__/hdl-profile.test.ts create mode 100644 docs/hdl-profiles.md create mode 100644 src/hdl/index-context.ts create mode 100644 src/hdl/preprocess.ts create mode 100644 src/hdl/profile.ts create mode 100644 src/hdl/status.ts create mode 100644 src/sync/hdl-watch-scope.ts diff --git a/__tests__/hdl-preprocess.test.ts b/__tests__/hdl-preprocess.test.ts new file mode 100644 index 0000000000..631c325554 --- /dev/null +++ b/__tests__/hdl-preprocess.test.ts @@ -0,0 +1,80 @@ +import { describe, expect, it } from 'vitest'; +import { preprocessVerilog } from '../src/hdl/preprocess'; +const run=(source:string,defines:Record={})=>preprocessVerilog(source,{filePath:'top.sv',defines}); +const unchangedOffsets=(before:string,after:string)=>{ + expect(after.length).toBe(before.length); + expect([...after.matchAll(/\r|\n/g)].map(m=>m.index)).toEqual([...before.matchAll(/\r|\n/g)].map(m=>m.index)); +}; +describe('bounded HDL profile preprocessing',()=>{ + it('selects nested branches with per-unit defines and exact UTF16/CRLF positions',()=>{ + const source='// 😀\r\nmodule m(\r\n`ifdef VCS\r\ninput a\r\n`ifndef OMIT\r\n, input b\r\n`endif\r\n`else\r\ninput c\r\n`endif\r\n); endmodule'; + const selected=run(source,{VCS:null});unchangedOffsets(source,selected.source); + expect(selected.source).toContain('input a');expect(selected.source).toContain('input b');expect(selected.source).not.toContain('input c'); + expect(selected.source.indexOf('input a')).toBe(source.indexOf('input a'));expect(selected.complete).toBe(true); + const other=run(source);expect(other.source).toContain('input c');expect(other.source).not.toContain('input a'); + }); + it('supports inline conditionals, elsif and active define/undef without deleting following code',()=>{ + const source='`define A 1\nmodule m; `ifdef A wire a; `elsif B wire b; `else wire c; `endif\n`undef A\n`ifdef A wire bad; `else wire good; `endif endmodule'; + const result=run(source,{B:null});unchangedOffsets(source,result.source); + expect(result.source).toContain('`define A 1');expect(result.source).toContain('`undef A'); + expect(result.source).toContain('wire a;');expect(result.source).toContain('wire good;');expect(result.source).not.toMatch(/wire (bad|b|c);/); + }); + it('ignores directive-looking comments, strings, escaped identifiers and macro bodies',()=>{ + const source='/* `ifdef BAD */\n// `else\nmodule m; string s="`endif"; wire \\`ifdef ; endmodule\n`define MULTI(x) x \\\n `ifdef not_a_directive\n'; + const result=run(source);expect(result.source).toBe(source);expect(result.diagnostics).toEqual([]); + }); + it('does not leak macro definitions across translation units or inactive branches',()=>{ + const source='`ifdef MISSING\n`define LEAK 1\n`endif\n`ifdef LEAK\nwire bad;\n`else\nwire good;\n`endif'; + expect(run(source).source).toContain('wire good;');expect(run('`define LEAK 1').complete).toBe(true); + expect(run('`ifdef LEAK\nwire bad;\n`else\nwire good;\n`endif').source).toContain('wire good;'); + }); + it('uses nested includes for macro state while retaining original include source',()=>{ + const files:Record={ + 'a.svh':'`ifndef A_GUARD\n`define A_GUARD\n`include "b.svh"\n`endif', + 'b.svh':'`define FEATURE 1\n`include "a.svh"', + }; + const source='`include "a.svh"\n`ifdef FEATURE\nwire yes;\n`else\nwire no;\n`endif'; + const calls:string[]=[]; + const result=preprocessVerilog(source,{filePath:'top.sv',includeDirs:['inc'],readInclude:(request,_from,dirs)=>{ + expect(dirs).toEqual(['inc']);calls.push(request);return files[request]===undefined?null:{filePath:request,source:files[request]!}; + }}); + expect(result.source).toContain('`include "a.svh"');expect(result.source).toContain('wire yes;');expect(result.source).not.toContain('wire no;'); + expect(result.dependencies.sort()).toEqual(['a.svh','b.svh']);expect(result.complete).toBe(true);expect(calls.length).toBeLessThan(5); + }); + it('fails closed on unknown include macro state but keeps unrelated source',()=>{ + const source='`include "missing.svh"\nwire outside;\n`ifdef X\nwire first;\n`else\nwire second;\n`endif\n`define CERTAIN\n`ifdef CERTAIN\nwire restored;\n`endif'; + const result=run(source);expect(result.source).toContain('wire outside;');expect(result.source).toContain('wire restored;'); + expect(result.source).not.toMatch(/wire (first|second);/);expect(result.complete).toBe(false); + expect(result.diagnostics.map(d=>d.code)).toContain('unknown-conditional');unchangedOffsets(source,result.source); + }); + it('bounds unguarded include cycles with explicit diagnostics',()=>{ + const result=preprocessVerilog('`include "cycle.svh"',{filePath:'top.sv',readInclude:()=>({filePath:'cycle.svh',source:'`include "cycle.svh"'})}); + expect(result.diagnostics.map(d=>d.code)).toContain('include-cycle-or-depth');expect(result.complete).toBe(false); + }); + it.each(['`else\nwire unsafe;','`ifdef X\nwire unsafe;','`ifdef X\n`else\n`else\nwire unsafe;\n`endif'])('blanks structurally malformed conditional units: %s',source=>{ + const result=run(source);expect(result.source.trim()).toBe('');unchangedOffsets(source,result.source); + expect(result.diagnostics.map(d=>d.code)).toContain('malformed-conditional'); + }); + it('does not choose a stale branch after an opaque macro can define another macro',()=>{ + const source='`define ENABLE `define FLAG\n`ENABLE\n`ifdef FLAG\nmodule chosen; endmodule\n`else\nmodule wrong; endmodule\n`endif'; + const result=run(source);unchangedOffsets(source,result.source); + expect(result.source).toContain('`ENABLE');expect(result.source).not.toMatch(/module (chosen|wrong)/); + expect(result.diagnostics.map(d=>d.code)).toContain('unknown-conditional'); + }); + it('invalidates later nested and sibling conditions after an active opaque invocation',()=>{ + const source='`ifdef ACTIVE\n`SIDE_EFFECT\n`ifdef FLAG\nwire first;\n`else\nwire second;\n`endif\n`endif\n`ifdef ACTIVE\nwire stale;\n`endif'; + const result=run(source,{ACTIVE:null});unchangedOffsets(source,result.source); + expect(result.source).not.toMatch(/wire (first|second|stale)/);expect(result.complete).toBe(false); + }); + it('caps diagnostics while continuing macro state changes and source selection',()=>{ + const source='`OPAQUE\n'.repeat(540)+'`define RESTORED\n`ifdef RESTORED\nmodule good; endmodule\n`else\nmodule bad; endmodule\n`endif'; + const result=run(source);unchangedOffsets(source,result.source); + expect(result.diagnostics).toHaveLength(513);expect(result.diagnostics.filter(d=>d.code==='diagnostic-limit')).toHaveLength(1); + expect(result.complete).toBe(false);expect(result.source).toContain('module good;');expect(result.source).not.toContain('module bad;'); + }); + it('preserves unexpanded macros and unknown directives with diagnostics',()=>{ + const source='`define ASSUME(name, expr) name: assume property(expr);\nmodule m; `ASSUME(ok, x) `timescale 1ns/1ps\nendmodule'; + const result=run(source);expect(result.source).toBe(source); + expect(result.diagnostics.map(d=>d.code)).toEqual(['unsupported-macro-expansion','unsupported-directive']); + }); +}); diff --git a/__tests__/hdl-profile-cli.test.ts b/__tests__/hdl-profile-cli.test.ts new file mode 100644 index 0000000000..db98755e28 --- /dev/null +++ b/__tests__/hdl-profile-cli.test.ts @@ -0,0 +1,35 @@ +import { it, expect } from 'vitest'; +import * as fs from 'node:fs'; +import * as os from 'node:os'; +import * as path from 'node:path'; +import { createHash } from 'node:crypto'; +import { spawnSync } from 'node:child_process'; +import { CodeGraph } from '../src'; + +it('passes selected source through compiled workers and preserves raw hashes across CLI index/sync/status', () => { + const root=fs.mkdtempSync(path.join(os.tmpdir(),'hdl-profile-cli-')); + const bin=path.resolve(__dirname,'../dist/bin/codegraph.js'); + const run=(args:string[])=>{const r=spawnSync(process.execPath,[bin,...args],{encoding:'utf8',timeout:30000, + env:{...process.env,CODEGRAPH_NO_DAEMON:'1',NO_COLOR:'1'}});expect(r.status,r.stderr).toBe(0);return r.stdout;}; + const source='`include "flags.svh"\nmodule top;\n`ifdef ENABLED\nfunction int selected_fn(); return 1; endfunction\n`else\nfunction int fallback_fn(); return 0; endfunction\n`endif\nendmodule'; + try{ + fs.mkdirSync(path.join(root,'inc'));fs.writeFileSync(path.join(root,'inc/flags.svh'),'`define ENABLED\n'); + fs.writeFileSync(path.join(root,'top.sv'),source);fs.writeFileSync(path.join(root,'rtl.f'),'top.sv\n'); + fs.writeFileSync(path.join(root,'codegraph.json'),JSON.stringify({hdl:{activeProfile:'synth',profiles:{synth:{filelists:['rtl.f'],includeDirs:['inc'],topModules:['top']}}}})); + CodeGraph.initSync(root).close(); + run(['index',root,'--quiet']); + let cg=CodeGraph.openSync(root);try{ + expect(cg.getNodesByName('selected_fn')).toHaveLength(1);expect(cg.getNodesByName('fallback_fn')).toHaveLength(0); + expect(cg.getFile('top.sv')?.contentHash).toBe(createHash('sha256').update(source).digest('hex')); + }finally{cg.close();} + let status=JSON.parse(run(['status',root,'--json']));expect(status.index.hdlProfile.indexed.name).toBe('synth'); + fs.writeFileSync(path.join(root,'inc/flags.svh'),'`undef ENABLED\n'); + status=JSON.parse(run(['status',root,'--json']));expect(status.index.hdlProfile.reindexRecommended).toBe(true); + run(['sync',root,'--quiet']); + cg=CodeGraph.openSync(root);try{ + expect(cg.getNodesByName('selected_fn')).toHaveLength(0);expect(cg.getNodesByName('fallback_fn')).toHaveLength(1); + }finally{cg.close();} + status=JSON.parse(run(['status',root,'--json']));expect(status.index.hdlProfile.state).toBe('matches'); + expect(run(['explore','fallback_fn','--path',root])).toContain('HDL context: indexed "synth"'); + }finally{fs.rmSync(root,{recursive:true,force:true});} +}); diff --git a/__tests__/hdl-profile-index.test.ts b/__tests__/hdl-profile-index.test.ts new file mode 100644 index 0000000000..7c10edd4ac --- /dev/null +++ b/__tests__/hdl-profile-index.test.ts @@ -0,0 +1,87 @@ +import { it, expect } from 'vitest'; +import * as fs from 'node:fs'; +import * as os from 'node:os'; +import * as path from 'node:path'; +import { CodeGraph } from '../src'; + +it('switches profiles and include/filelist dependencies without mixing HDL graphs or changing source offsets', async () => { + const root = fs.mkdtempSync(path.join(os.tmpdir(), 'hdl-profile-index-')); + let cg: CodeGraph | undefined; + const write = (file: string, text: string) => { fs.mkdirSync(path.dirname(path.join(root, file)), {recursive:true}); fs.writeFileSync(path.join(root,file),text); }; + const config = (activeProfile: string) => JSON.stringify({hdl:{activeProfile,profiles:{synth:{filelists:['rtl.f'],includeDirs:['inc'],defines:{SYNTHESIS:'1'},topModules:['top']},sim:{files:['top.sv','sim.sv'],includeDirs:['inc']}}}}); + const source = '`include "defs.svh"\nmodule top;\n`ifdef SYNTHESIS\nfunction int hardware(); return 1; endfunction\n`else\nfunction int software(); return 2; endfunction\n`endif\n`ifdef EXTRA\nfunction int extra(); return 3; endfunction\n`endif\nendmodule\n'; + try { + write('top.sv',source); write('rtl.f','top.sv\n'); write('sim.sv','module sim; endmodule'); write('inc/defs.svh','// empty\n'); + write('plain.ts','export function ordinary(){return 1;}'); write('codegraph.json',config('synth')); + cg = CodeGraph.initSync(root); expect((await cg.indexAll()).success).toBe(true); + const names = () => (cg as any).db.db.prepare("SELECT name FROM nodes WHERE kind IN ('function','class') ORDER BY name").all().map((n:any)=>n.name); + expect(names()).toEqual(['hardware','ordinary','top']); + expect(cg.getNodesByName('hardware')[0].startLine).toBe(4); + expect(cg.getHdlProfileStatus()?.state).toBe('matches'); + expect(cg.getChangedFiles()).toEqual({added:[],modified:[],removed:[]}); + write('codegraph.json',config('sim')); + expect(cg.getHdlProfileStatus()?.state).toBe('mismatch'); + await cg.sync({paths:['codegraph.json']}); + expect(names()).toEqual(['ordinary','sim','software','top']); + expect(cg.getHdlProfileStatus()?.state).toBe('matches'); + write('inc/defs.svh','`define EXTRA\n'); + expect(cg.getHdlProfileStatus()?.reindexRecommended).toBe(true); + await cg.sync({paths:['inc/defs.svh']}); + expect(names()).toContain('extra'); + write('codegraph.json',config('synth')); write('rtl.f','top.sv\nsim.sv\n'); + await cg.sync({paths:['rtl.f']}); + expect(names()).toEqual(['extra','hardware','ordinary','sim','top']); + const snapshot=names(); await cg.indexAll(); expect(names()).toEqual(snapshot); + expect(fs.readFileSync(path.join(root,'top.sv'),'utf8')).toBe(source); + write('codegraph.json','{}'); await cg.sync({paths:['codegraph.json']}); + expect(names()).toContain('software'); expect(names()).toContain('hardware'); + expect(cg.getHdlProfileStatus()?.indexed.mode).toBe('raw'); + } finally { cg?.close(); fs.rmSync(root,{recursive:true,force:true}); } +}); + +it('fails closed on invalid active profile and preserves the previously indexed graph', async () => { + const root=fs.mkdtempSync(path.join(os.tmpdir(),'hdl-profile-invalid-'));let cg:CodeGraph|undefined; + try { + fs.writeFileSync(path.join(root,'top.sv'),'module top; endmodule'); + fs.writeFileSync(path.join(root,'codegraph.json'),JSON.stringify({hdl:{activeProfile:'ok',profiles:{ok:{files:['top.sv']}}}})); + cg=CodeGraph.initSync(root);await cg.indexAll(); + fs.writeFileSync(path.join(root,'codegraph.json'),JSON.stringify({hdl:{activeProfile:'missing',profiles:{ok:{files:['top.sv']}}}})); + await expect(cg.sync()).rejects.toThrow('Invalid HDL profile'); + expect(cg.getNodesByName('top')).toHaveLength(1); + expect(cg.getHdlProfileStatus()?.state).toBe('configuration-error'); + fs.writeFileSync(path.join(root,'codegraph.json'),'{'); + await expect(cg.sync()).rejects.toThrow('Invalid HDL profile'); + expect(cg.getHdlProfileStatus()?.indexed.name).toBe('ok'); + }finally{cg?.close();fs.rmSync(root,{recursive:true,force:true});} +}); + +it('stores one coherent source snapshot when a profile unit changes during a bulk index', async () => { + const root=fs.mkdtempSync(path.join(os.tmpdir(),'hdl-profile-race-'));let cg:CodeGraph|undefined; + try { + const file=path.join(root,'top.sv'); + fs.writeFileSync(file,'module old_unit; endmodule'); + fs.writeFileSync(path.join(root,'codegraph.json'),JSON.stringify({hdl:{activeProfile:'p',profiles:{p:{files:['top.sv']}}}})); + cg=CodeGraph.initSync(root);await cg.indexAll();let changed=false; + const result=await cg.indexAll({onProgress:p=>{if(!changed&&p.phase==='scanning'){changed=true;fs.writeFileSync(file,'module new_unit; endmodule');}}}); + expect(result.success).toBe(true);expect(cg.getNodesByName('old_unit')).toHaveLength(1); + expect(cg.getChangedFiles().modified).toContain('top.sv'); + await cg.sync();expect(cg.getNodesByName('new_unit')).toHaveLength(1);expect(cg.getNodesByName('old_unit')).toHaveLength(0); + }finally{cg?.close();fs.rmSync(root,{recursive:true,force:true});} +}); + +it('publishes only diagnostics for units actually updated by partial operations', async () => { + const root=fs.mkdtempSync(path.join(os.tmpdir(),'hdl-profile-partial-'));let cg:CodeGraph|undefined; + const opaque='`OPAQUE\nmodule other; endmodule'; + try{ + fs.writeFileSync(path.join(root,'top.sv'),'module top; endmodule'); + fs.writeFileSync(path.join(root,'other.sv'),opaque); + fs.writeFileSync(path.join(root,'codegraph.json'),JSON.stringify({hdl:{activeProfile:'p',profiles:{p:{files:['top.sv','other.sv']}}}})); + cg=CodeGraph.initSync(root);await cg.indexAll();expect(cg.getHdlProfileStatus()?.incomplete).toBe(true); + fs.writeFileSync(path.join(root,'other.sv'),'module other; endmodule'); + fs.writeFileSync(path.join(root,'top.sv'),'module top; wire value; endmodule'); + await cg.indexFiles(['top.sv']);expect(cg.getHdlProfileStatus()?.incomplete).toBe(true); + await cg.sync({paths:['other.sv']});expect(cg.getHdlProfileStatus()?.incomplete).toBe(false); + fs.writeFileSync(path.join(root,'top.sv'),'`OPAQUE\nmodule top; endmodule'); + await cg.indexFiles(['top.sv']);expect(cg.getHdlProfileStatus()?.incomplete).toBe(true); + }finally{cg?.close();fs.rmSync(root,{recursive:true,force:true});} +}); diff --git a/__tests__/hdl-profile-status.test.ts b/__tests__/hdl-profile-status.test.ts new file mode 100644 index 0000000000..5e509996c1 --- /dev/null +++ b/__tests__/hdl-profile-status.test.ts @@ -0,0 +1,126 @@ +import { describe, expect, it } from 'vitest'; +import { buildHdlProfileStatus, formatHdlProfileStatus, type HdlProfileConfiguration, type HdlIndexedProfileMetadata } from '../src/hdl/status'; +const active = (name='simulation',fingerprint='configured-sim'): HdlProfileConfiguration => ({status:'active',profile:{name,fingerprint},diagnostics:[]}); +const indexed = (name='simulation',configurationFingerprint='configured-sim',effective='effective-with-headers'):HdlIndexedProfileMetadata => ({ + name,fingerprint:effective,context:JSON.stringify({mode:'profile',configurationFingerprint,dependencies:[{path:'defs.svh',sha256:'header-sha'}]}), +}); +const none:HdlProfileConfiguration={status:'none',profile:null,diagnostics:[]}; +const raw:HdlIndexedProfileMetadata={name:null,fingerprint:'raw',context:JSON.stringify({mode:'raw'})}; +const legacy:HdlIndexedProfileMetadata={name:null,fingerprint:null,context:null}; + +describe('HDL configured versus indexed profile visibility',()=>{ + it('compares configured fingerprint against stored configuration context, not the effective header hash',()=>{ + const status=buildHdlProfileStatus(active(),indexed(),true)!; + expect(status.state).toBe('matches'); + expect(status.mismatch).toBe(false); + expect(status.reindexRecommended).toBe(false); + expect(status.indexed.fingerprint).toBe('effective-with-headers'); + expect(status.indexed.configurationFingerprint).toBe('configured-sim'); + }); + it('keeps indexed identity when configuration changes to another real build variant',()=>{ + const status=buildHdlProfileStatus(active('synthesis','configured-synth'),indexed(),true)!; + expect(status.state).toBe('mismatch'); + expect(status.reindexRecommended).toBe(true); + expect(status.indexed.name).toBe('simulation'); + expect(status.configured.name).toBe('synthesis'); + const text=formatHdlProfileStatus(status); + expect(text).toContain('indexed "simulation"'); + expect(text).toContain('configured "synthesis"'); + expect(text).toContain('rebuild the index'); + expect(text).toContain('not fully expanded'); + }); + it('detects defines or filelists changing under the same profile name',()=>{ + expect(buildHdlProfileStatus(active('simulation','changed-config'),indexed(),true)?.mismatch).toBe(true); + }); + it('distinguishes explicit raw-source indexing from missing legacy provenance',()=>{ + expect(buildHdlProfileStatus(none,raw,true)?.state).toBe('matches'); + expect(buildHdlProfileStatus(none,legacy,true)?.state).toBe('unknown'); + expect(buildHdlProfileStatus(none,legacy,true)?.reindexRecommended).toBe(true); + expect(formatHdlProfileStatus(buildHdlProfileStatus(none,raw,true))).toContain('multiple conditional alternatives'); + expect(buildHdlProfileStatus(active(),raw,true)?.state).toBe('mismatch'); + expect(buildHdlProfileStatus(none,indexed(),true)?.state).toBe('mismatch'); + }); + it('reports invalid configuration without claiming a rebuild alone can fix it',()=>{ + const status=buildHdlProfileStatus({status:'invalid-profile',profile:null,diagnostics:['Missing filelist build/sim.f']},indexed(),true)!; + expect(status.state).toBe('configuration-error'); + expect(status.reindexRecommended).toBe(false); + expect(status.indexed.name).toBe('simulation'); + expect(formatHdlProfileStatus(status)).toContain('Fix the HDL profile configuration'); + expect(formatHdlProfileStatus(status)).toContain('Missing filelist build/sim.f'); + }); + it('marks corrupt or partial stored context as unknown instead of trusting current configuration',()=>{ + for(const context of ['{broken','[]','{}']) { + const status=buildHdlProfileStatus(active(),{...indexed(),context},true)!; + expect(status.indexed.mode).toBe('unknown'); + expect(status.reindexRecommended).toBe(true); + } + }); + it('retains indexed preprocessing diagnostics and bounds their text rendering',()=>{ + const metadata=indexed(); + metadata.context=JSON.stringify({mode:'profile',configurationFingerprint:'configured-sim',incomplete:true, + diagnostics:[{filePath:'rtl/top.sv',line:4,message:'Unknown include macro'},'Macro expansion unsupported','Third diagnostic','Fourth diagnostic']}); + const status=buildHdlProfileStatus(active(),metadata,true)!; + expect(status.incomplete).toBe(true); + expect(status.indexedDiagnostics).toHaveLength(4); + const text=formatHdlProfileStatus(status); + expect(text).toContain('rtl/top.sv:4: Unknown include macro'); + expect(text).toContain('1 additional diagnostics'); + expect(text).not.toContain('Fourth diagnostic'); + expect(status.reindexRecommended).toBe(false); + }); + it('keeps unrelated projects quiet',()=>{ + expect(buildHdlProfileStatus(none,legacy,false)).toBeNull(); + expect(buildHdlProfileStatus(none,raw,false)).toBeNull(); + expect(formatHdlProfileStatus(null)).toBe(''); + }); +}); + +it('prefixes normal, empty and access-filtered MCP exploration with the indexed context', async()=>{ + const fs=await import('node:fs'), path=await import('node:path'), os=await import('node:os'); + const {CodeGraph}=await import('../src'); + const {ToolHandler}=await import('../src/mcp/tools'); + const root=fs.mkdtempSync(path.join(os.tmpdir(),'hdl-profile-notice-')); + let cg: InstanceType | undefined; + try { + fs.writeFileSync(path.join(root,'top.sv'),'module top(input a, output y); assign y=a; endmodule'); + cg=CodeGraph.initSync(root); expect((await cg.indexAll()).success).toBe(true); + const state=buildHdlProfileStatus(active('synthesis','configured-synth'),indexed(),true)!; + Object.assign(cg,{getHdlProfileStatus:()=>state}); + const handler=new ToolHandler(cg); + for (const args of [{query:'top'}, {query:'missing_name_that_does_not_exist'}, {query:'top::a',hdlAccess:'all'}]) { + const result=await handler.executeReadTool('codegraph_explore',args); + expect(result.isError).not.toBe(true); + const text=result.content.map(c=>c.text ?? '').join('\n'); + expect(text).toContain('HDL context: indexed "simulation"'); + expect(text).toContain('configured "synthesis"'); + expect(text).toContain('Profile mismatch: rebuild the index'); + } + } finally {cg?.close();fs.rmSync(root,{recursive:true,force:true});} +}); + +it('summarizes configured and indexed settings separately without exposing defines values or source filelists',()=>{ + const configuration=active('synthesis','configured-synth'); + configuration.profile={...configuration.profile!,files:['rtl/new_top.v'],includeDirs:['rtl/include'], + defines:{SYNTHESIS:'1',PRIVATE_VALUE:'do-not-print-this-value'},topModules:['new_top'],languageMode:'verilog'}; + const metadata=indexed(); + metadata.context=JSON.stringify({mode:'profile',configurationFingerprint:'configured-sim', + files:['sim/testbench.sv','rtl/old_top.sv'],includeDirs:['sim/include','common/include'], + defines:{SIMULATION:'1',OTHER_SECRET:'never-display-this'},topModules:['tb_top'],languageMode:'systemverilog'}); + const before=JSON.stringify({configuration,metadata}); + const status=buildHdlProfileStatus(configuration,metadata,true)!; + expect(status.configured).toMatchObject({fileCount:1,includeDirs:['rtl/include'],defineNames:['PRIVATE_VALUE','SYNTHESIS'],topModules:['new_top'],languageMode:'verilog'}); + expect(status.indexed).toMatchObject({fileCount:2,includeDirs:['sim/include','common/include'],defineNames:['OTHER_SECRET','SIMULATION'],topModules:['tb_top'],languageMode:'systemverilog'}); + const json=JSON.stringify(status), text=formatHdlProfileStatus(status); + for(const hidden of ['do-not-print-this-value','never-display-this','sim/testbench.sv','rtl/old_top.sv']) { + expect(json).not.toContain(hidden);expect(text).not.toContain(hidden); + } + expect(text).toContain('2 file(s)'); + expect(text).toContain('intended dialect systemverilog'); + expect(text).toContain('does not enforce Verilog-only conformance'); + expect(text).toContain('topModules are recorded roots'); + expect(text).not.toContain('sim/include'); + expect(text).not.toContain('OTHER_SECRET'); + expect(JSON.stringify({configuration,metadata})).toBe(before); + status.configured.includeDirs!.push('local-only-change'); + expect(configuration.profile.includeDirs).toEqual(['rtl/include']); +}); diff --git a/__tests__/hdl-profile-watch.test.ts b/__tests__/hdl-profile-watch.test.ts new file mode 100644 index 0000000000..849ef2c8c2 --- /dev/null +++ b/__tests__/hdl-profile-watch.test.ts @@ -0,0 +1,90 @@ +import { it, expect } from 'vitest'; +import * as fs from 'node:fs'; +import * as os from 'node:os'; +import * as path from 'node:path'; +import { CodeGraph } from '../src'; +import { FileWatcher } from '../src/sync/watcher'; +import { HdlWatchScope } from '../src/sync/hdl-watch-scope'; + +async function waitFor(check: () => boolean, timeout = 8000) { + const end = Date.now() + timeout; + while (!check()) { if (Date.now() > end) throw new Error('HDL watcher did not converge'); await new Promise(r => setTimeout(r, 25)); } +} +function project() { + const root = fs.mkdtempSync(path.join(os.tmpdir(), 'hdl-profile-watch-')); + const write = (file: string, text: string) => { fs.mkdirSync(path.dirname(path.join(root, file)), {recursive:true}); fs.writeFileSync(path.join(root,file),text); }; + const config = (activeProfile: string) => JSON.stringify({hdl:{activeProfile,profiles:{ + first:{filelists:['build/units.f']},second:{filelists:['alt/units.f'],includeDirs:['alt/inc']}, + }}}); + write('.gitignore', 'build/\nalt/\nprivate/\nunrelated/\n'); + write('build/top.sv', '`include "../private/flags.inc"\nmodule top;\n`ifdef EXTRA\nfunction int extra();return 1;endfunction\n`endif\nendmodule'); + write('build/spare.sv', 'module spare; endmodule'); write('build/units.f','build/top.sv\n'); + write('private/flags.inc','// empty\n'); + write('alt/top.sv','`include "flags.txt"\nmodule other;\n`ifdef SECOND\nfunction int second();return 2;endfunction\n`endif\nendmodule'); + write('alt/units.f','alt/top.sv\n'); write('alt/inc/flags.txt','// empty\n'); + write('codegraph.json',config('first')); + return {root,write,config}; +} + +it('watches profile filelists, explicit ignored sources and external-to-source header dependencies through the real event filter', async () => { + const {root,write} = project(); const calls: Array = []; + const watcher = new FileWatcher(root, async paths => { calls.push(paths); return {filesChanged:1,durationMs:1}; }, + {inertForTests:true,debounceMs:5}, undefined, () => ['private/flags.inc']); + try { + expect(watcher.start()).toBe(true); + watcher.ingestEventForTests('private/flags.inc'); + await waitFor(() => calls.length === 1); + expect(calls[0]).toContain('private/flags.inc'); + write('build/units.f','build/top.sv\nbuild/spare.sv\n'); watcher.ingestEventForTests('build/units.f'); + await waitFor(() => calls.length === 2); + expect(calls[1]).toBeUndefined(); // profile membership needs full HDL reconciliation + watcher.ingestEventForTests('build/spare.sv'); await waitFor(() => calls.length === 3); + expect(calls[2]).toContain('build/spare.sv'); + watcher.ingestEventForTests('unrelated/noise.txt'); watcher.ingestEventForTests('.codegraph/graph.db'); + await new Promise(r => setTimeout(r, 30)); expect(calls).toHaveLength(3); + } finally { watcher.stop(); fs.rmSync(root,{recursive:true,force:true}); } +}); + +it('retains the last valid HDL watch scope through missing filelists and malformed configuration', () => { + const {root,write,config} = project(); const scope = new HdlWatchScope(root, () => ['private/flags.inc']); + try { + scope.refresh(); expect(scope.matchesDirectory('build')).toBe(true); expect(scope.matchesDirectory('private')).toBe(true); + fs.unlinkSync(path.join(root,'build/units.f')); scope.refresh(); expect(scope.isFilelist('build/units.f')).toBe(true); + write('codegraph.json','{'); scope.refresh(); expect(scope.matchesFile('private/flags.inc')).toBe(true); + write('build/units.f','build/top.sv\n'); write('codegraph.json',config('second')); scope.refresh(); + expect(scope.matchesDirectory('alt/inc/nested')).toBe(true); expect(scope.matchesFile('alt/inc/new.flags')).toBe(true); + write('codegraph.json','{}'); scope.refresh(); expect(scope.matchesFile('private/flags.inc')).toBe(false); + } finally { fs.rmSync(root,{recursive:true,force:true}); } +}); + +it('auto-syncs native fs.watch events for ignored filelists, arbitrary-extension includes and newly selected directories', async () => { + const {root,write,config} = project(); let cg: CodeGraph|undefined; const errors: string[]=[]; + try { + cg=CodeGraph.initSync(root); expect((await cg.indexAll()).success).toBe(true); + expect(cg.getNodesByName('top')).toHaveLength(1); expect(cg.getNodesByName('spare')).toHaveLength(0); + expect(cg.watch({debounceMs:30,onSyncError:e=>errors.push(e.message)})).toBe(true); + write('build/units.f','build/top.sv\nbuild/spare.sv\n'); + await waitFor(()=>cg!.getNodesByName('spare').length===1); + write('private/flags.inc','`define EXTRA\n'); + await waitFor(()=>cg!.getNodesByName('extra').length===1); + write('codegraph.json',config('second')); + await waitFor(()=>cg!.getNodesByName('other').length===1&&cg!.getNodesByName('top').length===0); + write('alt/inc/flags.txt','`define SECOND\n'); + await waitFor(()=>cg!.getNodesByName('second').length===1); + expect(errors).toEqual([]); + await waitFor(()=>cg!.getHdlProfileStatus()?.state==='matches'); + } finally { cg?.close(); fs.rmSync(root,{recursive:true,force:true}); } +}); + +it('does not admit reserved or outside paths from untrusted indexed dependency metadata', () => { + const {root} = project(); + const scope = new HdlWatchScope(root, () => ['../outside/flags.inc','.codegraph-other/flags.inc','vendor/.git/config','.jj/state','private/flags.inc',123] as string[]); + try { + scope.refresh(); + expect(scope.matchesFile('private/flags.inc')).toBe(true); + expect(scope.matchesDirectory('outside')).toBe(false); + expect(scope.matchesDirectory('.codegraph-other')).toBe(false); + expect(scope.matchesFile('vendor/.git/config')).toBe(false); + expect(scope.matchesDirectory('.jj')).toBe(false); + } finally { fs.rmSync(root,{recursive:true,force:true}); } +}); diff --git a/__tests__/hdl-profile.test.ts b/__tests__/hdl-profile.test.ts new file mode 100644 index 0000000000..2df1d9d137 --- /dev/null +++ b/__tests__/hdl-profile.test.ts @@ -0,0 +1,119 @@ +import { afterEach, beforeEach, expect, it } from 'vitest'; +import * as fs from 'node:fs'; +import * as os from 'node:os'; +import * as path from 'node:path'; +import { loadHdlProfile } from '../src/hdl/profile'; + +let root: string; +beforeEach(() => { root = fs.mkdtempSync(path.join(os.tmpdir(), 'hdl-profile-')); }); +afterEach(() => { fs.rmSync(root, { recursive: true, force: true }); }); +function write(file: string, content: string) { + fs.mkdirSync(path.dirname(path.join(root, file)), { recursive: true }); + fs.writeFileSync(path.join(root, file), content); +} +function config(profile: Record, extra: Record = {}) { + write('codegraph.json', JSON.stringify({ ...extra, hdl: { activeProfile: 'synth', profiles: { synth: profile } } })); +} +function active() { + const result = loadHdlProfile(root); + expect(result.status, result.diagnostics.join('\n')).toBe('active'); + return result.profile!; +} + +it('preserves no-HDL legacy behavior and reports malformed overall JSON separately', () => { + expect(loadHdlProfile(root)).toMatchObject({ status: 'none', profile: null, configPresent: false }); + write('codegraph.json', JSON.stringify({ exclude: ['cache'] })); + expect(loadHdlProfile(root)).toMatchObject({ status: 'none', configPresent: true }); + write('codegraph.json', '{'); + expect(loadHdlProfile(root)).toMatchObject({ status: 'invalid-config', configInvalid: true, profile: null }); +}); + +it('loads explicit files in order with root-relative canonical identity and no implicit includes as source files', () => { + write('rtl/a.sv', 'module a; endmodule'); write('rtl/b.v', 'module b; endmodule'); write('inc/defs.svh', '`define W 2'); + config({ files: ['rtl/b.v', './rtl/a.sv', 'rtl/b.v'], includeDirs: ['inc'], defines: { SYNTHESIS: '1' }, topModules: ['a'], languageMode: 'systemverilog' }); + expect(active()).toMatchObject({ name: 'synth', files: ['rtl/b.v', 'rtl/a.sv'], includeDirs: ['inc'], defines: { SYNTHESIS: '1' }, topModules: ['a'], languageMode: 'systemverilog', dependencies: [] }); +}); + +it('treats an explicitly empty profile as an empty design', () => { + write('unrelated.sv', 'module unrelated; endmodule'); config({ files: [] }); + expect(active().files).toEqual([]); +}); + +it('handles nested -f/-F bases, quotes, comments and multiple include/define entries without executing anything', () => { + write('rtl/a.sv', 'module a; endmodule'); write('lists/local file.sv', 'module local_file; endmodule'); + write('inc one/defs.svh', ''); write('inc+two/defs.svh', ''); + write('root.f', '// comment\n+incdir+"inc one"+"inc+two"\n+define+ONE+BITS=1\'b1+TEXT="a+b c"\n-f lists/rootpaths.f\n-F lists/local.F\n'); + write('lists/rootpaths.f', '# comment\nrtl/a.sv /* end comment */\n'); + write('lists/local.F', '"local file.sv"\n'); + config({ files: [], filelists: ['root.f'] }); + const p = active(); + expect(p.files).toEqual(['rtl/a.sv', 'lists/local file.sv']); + expect(p.includeDirs).toEqual(['inc one', 'inc+two']); + expect(p.defines).toEqual({ ONE: '1', BITS: "1'b1", TEXT: 'a+b c' }); + expect(p.dependencies.map(d => d.path)).toEqual(['lists/local.F', 'lists/rootpaths.f', 'root.f']); + expect(p.dependencies.every(d => /^[a-f0-9]{64}$/.test(d.sha256))).toBe(true); +}); + +it('uses top-level .F paths relative to that list and rejects source paths missing under -f root semantics', () => { + write('lists/only.sv', 'module only; endmodule'); write('lists/relative.F', 'only.sv'); + config({ filelists: ['lists/relative.F'] }); expect(active().files).toEqual(['lists/only.sv']); + write('lists/root.f', 'only.sv'); config({ filelists: ['lists/root.f'] }); + expect(loadHdlProfile(root).status).toBe('invalid-profile'); +}); + +it.each([ + { files: 'rtl/a.sv' }, { files: [], unexpected: true }, { files: [], defines: { FLAG: true } }, + { files: [], languageMode: 'vhdl' }, { files: ['missing.sv'] }, +])('rejects invalid recognized HDL profiles instead of scanning everything: %j', profile => { + config(profile); expect(loadHdlProfile(root)).toMatchObject({ status: 'invalid-profile', profile: null, configInvalid: false }); +}); + +it.each(['-sv rtl/a.sv', '+libext+.v', '-f', '+incdir+', '+define+', '"unfinished', '/* unfinished'])('rejects unsupported/malformed filelist syntax: %s', text => { + write('list.f', text); config({ filelists: ['list.f'] }); + expect(loadHdlProfile(root)).toMatchObject({ status: 'invalid-profile', profile: null }); +}); + +it('rejects recursive filelists, conflicting defines and external/symlink escapes', () => { + write('a.f', '-f b.f'); write('b.f', '-f a.f'); config({ filelists: ['a.f'] }); + expect(loadHdlProfile(root).diagnostics.join()).toContain('cycle'); + write('a.f', '+define+FLAG=2'); config({ filelists: ['a.f'], defines: { FLAG: '1' } }); + expect(loadHdlProfile(root).diagnostics.join()).toContain('Conflicting'); + const external = fs.mkdtempSync(path.join(os.tmpdir(), 'hdl-profile-external-')); + try { + fs.writeFileSync(path.join(external, 'foreign.sv'), 'module foreign; endmodule'); + config({ files: [path.join(external, 'foreign.sv')] }); + expect(loadHdlProfile(root).diagnostics.join()).toContain('outside'); + fs.symlinkSync(external, path.join(root, 'escape'), 'dir'); config({ includeDirs: ['escape'], files: [] }); + expect(loadHdlProfile(root).diagnostics.join()).toContain('outside'); + } finally { fs.rmSync(external, { recursive: true, force: true }); } +}); + +it('fingerprints profile switching, filelist content and include configuration, preserving inactive/whitespace changes', () => { + write('a.sv', 'module a; endmodule'); write('src.f', 'a.sv\n'); write('inc/defs.svh', ''); write('alt/defs.svh', ''); + const cfg = { hdl: { activeProfile: 'synth', profiles: { synth: { filelists: ['src.f'], includeDirs: ['inc'] }, sim: { files: ['a.sv'] } } } }; + write('codegraph.json', JSON.stringify(cfg)); const a = active().fingerprint; + write('codegraph.json', JSON.stringify(cfg, null, 4)); expect(active().fingerprint).toBe(a); + cfg.hdl.profiles.sim.files = []; write('codegraph.json', JSON.stringify(cfg)); expect(active().fingerprint).toBe(a); + write('src.f', '// dependency edit\na.sv\n'); const b = active().fingerprint; expect(b).not.toBe(a); + cfg.hdl.profiles.synth.includeDirs = ['alt']; write('codegraph.json', JSON.stringify(cfg)); const c = active().fingerprint; expect(c).not.toBe(b); + cfg.hdl.activeProfile = 'sim'; write('codegraph.json', JSON.stringify(cfg)); expect(active().fingerprint).not.toBe(c); expect(active().files).toEqual([]); +}); + +it('enforces filelist resource limits', () => { + write('huge.f', ' '.repeat(1024 * 1024 + 1)); config({ filelists: ['huge.f'] }); + expect(loadHdlProfile(root).diagnostics.join()).toContain('1 MiB'); +}); + +it('rejects reserved VCS and CodeGraph files and include directories before indexing', () => { + write('.git/units.f',''); write('.codegraph-alt/unit.sv','module unit; endmodule'); write('.jj/headers/a.svh',''); + for (const profile of [{filelists:['.git/units.f']},{files:['.codegraph-alt/unit.sv']},{files:[],includeDirs:['.jj/headers']}]) { + config(profile); expect(loadHdlProfile(root).status).toBe('invalid-profile'); + expect(loadHdlProfile(root).diagnostics.join()).toContain('Reserved'); + } +}); + +it('rejects ordinary aliases resolving into reserved CodeGraph paths', () => { + write('.codegraph-cache/unit.sv','module unit; endmodule'); + fs.symlinkSync(path.join(root,'.codegraph-cache'),path.join(root,'alias'),'dir'); + config({files:['alias/unit.sv']}); expect(loadHdlProfile(root).diagnostics.join()).toContain('Reserved'); +}); diff --git a/docs/hdl-profiles.md b/docs/hdl-profiles.md new file mode 100644 index 0000000000..b636689c12 --- /dev/null +++ b/docs/hdl-profiles.md @@ -0,0 +1,96 @@ +# HDL build profiles + +A profile selects the HDL source units and the conditional-compilation context +they are indexed under. One index holds one active profile; the project's other +languages keep their ordinary scope. + +## Configuration + +```json +{ + "hdl": { + "activeProfile": "synth", + "profiles": { + "synth": { + "filelists": ["profiles/synth.f"], + "includeDirs": ["rtl/include"], + "defines": {"SYNTHESIS": "1"}, + "topModules": ["top"], + "languageMode": "systemverilog" + }, + "sim": { + "files": ["rtl/top.sv", "tb/top_tb.sv"], + "includeDirs": ["rtl/include"], + "defines": {}, + "topModules": ["top_tb"] + } + } + } +} +``` + +The file is `codegraph.json` at the project root. `files` and `filelists` are +combined; when both are empty or missing the HDL selection is empty, not "every +file". Explicitly listed HDL sources may live in gitignored or generated +directories. Paths must stay inside the project; VCS directories and CodeGraph's +own data directory are excluded. + +A filelist supports plain paths, quotes and comments, `+incdir+` and `+define+`, +and nested `-f` / `-F`. For `.f` / `-f` relative paths are resolved from the +project root; for `.F` / `-F` from the directory of the containing list. Unknown +flags, cycles and conflicting define values are rejected rather than guessed. +Define values are strings. The current preprocessor only uses whether a macro is +defined; a value of `"0"` still means defined. + +## Working with the index + +For an already initialized project, after adding a profile: + +```sh +codegraph index +codegraph status --json +``` + +To switch `hdl.activeProfile`, change it and run `codegraph sync`. A running +watcher observes the configuration, the filelists and the include dependencies, +including headers with unusual extensions and explicitly selected ignored paths. +A context change re-evaluates the whole HDL selection even during a scoped sync; +a partial `indexFiles` cannot switch context without a full sync or index. + +The CLI and MCP report the configured and the indexed profile separately, with +fingerprint, diagnostics and limitations. An include change is detected by +content, with the recorded size and mtime as a fast check. The fingerprint covers +the selected configuration, the filelists, include snapshots and the extraction +version. With an invalid profile, indexing stops before the graph is modified. + +Units are parsed from a prepared snapshot; stored hashes refer to the original +bytes, not to the masked text. Edits made during a pass stay pending for the +next sync. Partial operations only update the diagnostics of the units they +actually processed. + +## Supported preprocessing and limits + +- `ifdef` / `ifndef` / `elsif` / `else` / `endif` and `define` / `undef` / + `undefineall`. +- An include contributes macro state and a dependency. It does not splice the + header's contents into the source unit; a header can be listed explicitly as + its own source. +- Inactive text is replaced by spaces, preserving UTF-16 offsets and CR/LF. The + snippets shown remain the original source and may contain inactive branches; + the graph reflects the selected profile. +- There is no full macro expansion. An opaque macro invocation may change the + defines: a later conditional branch that cannot be decided is not selected but + diagnosed. Unsupported constructs and an incomplete state are visible in + `status`. +- Every listed source unit starts from the profile's defines; file order is not + used as an implicit shared macro environment across compilation units. +- `languageMode` records the intended dialect; the parser stays SystemVerilog + and does not prove Verilog-only conformance. `topModules` are recorded roots; + no reachability pruning or elaboration is performed. +- Snapshot limits: 1 MiB per source or header, 64 MiB in total; the loader also + bounds filelist size and nesting depth. Diagnostics are capped in volume + without stopping macro-state processing. + +Full include/macro expansion with compiler source mapping is what the separate +[`hdl-semantic`](hdl-semantics.md) command provides. A profile does not prove +synthesis, simulation, width compatibility, timing or CDC. diff --git a/src/bin/codegraph.ts b/src/bin/codegraph.ts index b041843ff9..adc2b4b65c 100644 --- a/src/bin/codegraph.ts +++ b/src/bin/codegraph.ts @@ -1,4 +1,5 @@ #!/usr/bin/env node +import { formatHdlProfileStatus } from '../hdl/status'; /** * CodeGraph CLI * @@ -1166,7 +1167,9 @@ program const journalMode = cg.getJournalMode(); const buildInfo = cg.getIndexBuildInfo(); - const reindexRecommended = cg.isIndexStale(); + const hdlProfile = cg.getHdlProfileStatus(); + const engineReindexRecommended = cg.isIndexStale(); + const reindexRecommended = engineReindexRecommended || !!hdlProfile?.reindexRecommended; // Frameworks a sync detected since the last full index (#2516): files // indexed before then were extracted without them. const frameworkChanges = cg.getFrameworkChangesSinceIndex(); @@ -1214,6 +1217,7 @@ program reindexRecommended: reindexRecommended || frameworkChanges !== null, // { added, removed } frameworks since the last full index, or null. frameworksChangedSinceIndex: frameworkChanges, + hdlProfile, // 'complete' | 'partial' (files silently dropped) | 'indexing' // (a run was killed mid-index — the index is truncated) | // 'failed' | null (predates the marker). @@ -1335,14 +1339,23 @@ program } const missingSymbols = describeFilesMissingSymbols(health); for (const line of missingSymbols) warn(line); - if (totalChanges === 0 && missingSymbols.length === 0) { + if (totalChanges === 0 && hdlProfile?.state === 'configuration-error') { + warn('Source files are unchanged; HDL profile configuration requires attention'); + } else if (totalChanges === 0 && hdlProfile?.reindexRecommended) { + warn('Source files are unchanged; indexed HDL context needs a rebuild'); + } else if (totalChanges === 0 && missingSymbols.length === 0) { success('Index is up to date'); } console.log(); // Re-index hint: the index was built by an older engine than the one now // running, so a rebuild would add data a migration can't backfill. - if (reindexRecommended) { + const profileNote = formatHdlProfileStatus(hdlProfile); + if (profileNote) { + console.log(profileNote); + console.log(); + } + if (engineReindexRecommended) { const builtWith = buildInfo.version ? `v${buildInfo.version.replace(/^v/, '')}` : 'an earlier version'; warn(`Index was built by ${builtWith}; re-index to pick up this engine's improvements.`); info('Run "codegraph index" (full rebuild) or "codegraph sync"'); @@ -1460,7 +1473,8 @@ program .description('Explore an area: relevant symbols\' source + call paths in one shot (same output as the codegraph_explore MCP tool)') .option('-p, --path ', 'Project path') .option('--max-files ', 'Maximum number of files to include source from') - .action(async (queryParts: string[], options: { path?: string; maxFiles?: string }) => { + .option('--hdl-access ', 'HDL signal access: read, write, readwrite, control, event, all (query is one exact signal name)') + .action(async (queryParts: string[], options: { path?: string; maxFiles?: string; hdlAccess?: string }) => { const projectPath = resolveProjectPath(options.path); try { @@ -1475,6 +1489,7 @@ program const args: Record = { query: queryParts.join(' ') }; if (options.maxFiles) args.maxFiles = parseInt(options.maxFiles, 10); + if (options.hdlAccess) args.hdlAccess = options.hdlAccess; const result = await handler.execute('codegraph_explore', args); console.log(result.content[0]?.text ?? ''); diff --git a/src/extraction/index.ts b/src/extraction/index.ts index 78b8bf2142..4bc03c87d0 100644 --- a/src/extraction/index.ts +++ b/src/extraction/index.ts @@ -5,6 +5,8 @@ */ import * as fs from 'fs'; +import { HdlIndexContext } from '../hdl/index-context'; +import { loadHdlProfile } from '../hdl/profile'; import * as fsp from 'fs/promises'; import * as path from 'path'; import * as os from 'os'; @@ -2061,6 +2063,51 @@ function pairReindexedNodes( */ export class ExtractionOrchestrator { private rootDir: string; + private hdlContext: HdlIndexContext | null = null; + private hdlForce = false; + private hdlTouched = new Set(); + + private prepareHdlContext(): void { + this.hdlTouched.clear(); + const previous = this.queries.getMetadata('hdl_profile_fingerprint'); + this.hdlContext = new HdlIndexContext(this.rootDir, !!this.queries.getMetadata('hdl_profile_name')); + this.hdlForce = previous !== this.hdlContext.fingerprint && (!!this.hdlContext.profile || !!this.queries.getMetadata('hdl_profile_name')); + } + private forceHdlFile(file: string): boolean { return this.hdlForce && !!this.hdlContext?.isHdl(file); } + private hdlSource(file: string, content: string): string { + if (!this.hdlContext) this.prepareHdlContext(); + return this.hdlContext!.source(file, content); + } + commitHdlProfile(): void { + if (!this.hdlContext) return; + this.queries.setMetadata('hdl_profile_name', this.hdlContext.profile?.name ?? ''); + this.queries.setMetadata('hdl_profile_fingerprint', this.hdlContext.fingerprint); + const context = JSON.parse(this.hdlContext.context()); + if (this.hdlContext.profile) { + if (!this.hdlForce && this.hdlTouched.size < this.hdlContext.profile.files.length) { + const previous = JSON.parse(this.queries.getMetadata('hdl_profile_context') ?? '{}'); + const units = previous.unitDiagnostics ?? {}; + for (const file of this.hdlTouched) units[file] = context.unitDiagnostics[file] ?? []; + context.unitDiagnostics = units; + const combined = Object.values(units).flat(); + context.diagnosticCount = combined.length; + context.diagnostics = combined.slice(0, 200); + context.incomplete = context.diagnostics.length > 0 || (!previous.unitDiagnostics && previous.incomplete === true); + } + const parseIssues = this.hdlContext.profile.files.flatMap(file => { + const record = this.queries.getFileByPath(file); + return record ? (record.errors ?? []).map(error => ({ filePath: file, ...error })) + : [{ filePath: file, message: 'Profile source has not been indexed.' }]; + }); + if (parseIssues.length) { + context.incomplete = true; + context.diagnostics = [...context.diagnostics, ...parseIssues].slice(0, 200); + } + } + this.queries.setMetadata('hdl_profile_context', JSON.stringify(context)); + this.hdlForce = false; + } + private queries: QueryBuilder; /** * Names of frameworks detected for this project, populated by indexAll(). @@ -2384,6 +2431,7 @@ export class ExtractionOrchestrator { // Threaded into language detection so custom-extension files load the right // grammar and store under the mapped language. const overrides = loadExtensionOverrides(this.rootDir); + this.prepareHdlContext(); const log = verbose ? (msg: string) => { console.log(`[worker] ${msg}`); } @@ -2401,7 +2449,7 @@ export class ExtractionOrchestrator { // attributed — these labels settle scan vs framework-detect vs grammars. const tScan = Date.now(); const skipStats: ScanSkipStats = { unsupportedByExtension: new Map() }; - const files = await scanDirectoryAsync(this.rootDir, (current, file) => { + const scannedFiles = await scanDirectoryAsync(this.rootDir, (current, file) => { onProgress?.({ phase: 'scanning', current, @@ -2409,6 +2457,15 @@ export class ExtractionOrchestrator { currentFile: file, }); }, skipStats); + const files = this.hdlContext!.files(scannedFiles); + const allowed = new Set(files); + for (const tracked of this.queries.getAllFiles()) { + if (tracked.language !== 'verilog' || allowed.has(tracked.path)) continue; + const refs = this.queries.getCrossFileIncomingEdgesWithTarget(tracked.path) + .map(resurrectRefFromDroppedEdge).filter((ref): ref is UnresolvedReference => !!ref); + this.queries.deleteFile(tracked.path); + if (refs.length) this.queries.replaceResolutionEdgesWithUnresolvedRefs([], refs); + } if (process.env.CODEGRAPH_SYNTH_TIMINGS) console.error(`[phase-timing] scan: ${Date.now() - tScan}ms (${files.length} files)`); /** Only meaningful when nothing was indexable — see IndexResult (#1502). */ const skipSummary = (): Pick => { @@ -2541,8 +2598,9 @@ export class ExtractionOrchestrator { const parseFile = (filePath: string, content: string): Promise => { const language = detectLanguage(filePath, content, overrides, this.rootDir); const names = this.frameworksForFile(filePath, frameworkNames); - if (!pool) return Promise.resolve(extractFromSource(filePath, content, language, names)); - return pool.requestParse({ filePath, content, language, frameworkNames: names }); + const selected = this.hdlSource(filePath, content); + if (!pool) return Promise.resolve(extractFromSource(filePath, selected, language, names)); + return pool.requestParse({ filePath, content: selected, language, frameworkNames: names }); }; // --- Bounded rolling-window dispatch, ordered commit --- @@ -2572,6 +2630,7 @@ export class ExtractionOrchestrator { const storeResult = async (filePath: string, content: string, stats: fs.Stats, result: ExtractionResult): Promise => { processed++; + if (this.hdlContext?.profile && this.hdlContext.isHdl(filePath)) this.hdlTouched.add(filePath); // WAL hard-cap backstop: between files (never mid-transaction), pause // the store until the off-thread checkpoint catches up. Resolves to @@ -2731,6 +2790,8 @@ export class ExtractionOrchestrator { // Read files in parallel (with path validation before any I/O) const fileContents = await Promise.all( batch.map(async (fp) => { + const snapshot = this.hdlContext?.sources.get(fp); + if (snapshot) return { filePath: fp, content: snapshot.original, stats: snapshot.stats, error: null as Error | null }; try { // Indexing read: follow in-root symlinks the directory walk already // descended into (the `../` guard still applies) so files reached @@ -2989,6 +3050,7 @@ export class ExtractionOrchestrator { .map(line => /^\s*\/\//.test(line) ? '' : line) .join('\n'); + if (this.hdlContext?.profile && this.hdlContext.isHdl(filePath)) continue; let result: ExtractionResult; try { result = await parseFile(filePath, stripped); @@ -3043,6 +3105,11 @@ export class ExtractionOrchestrator { * Index specific files */ async indexFiles(filePaths: string[]): Promise { + this.prepareHdlContext(); + if (this.hdlForce && (this.hdlContext!.profile || this.queries.getMetadata('hdl_profile_name'))) { + throw new Error('HDL profile context changed; use sync or index to update the complete HDL selection'); + } + filePaths = filePaths.filter(file => this.hdlContext!.accepts(file)); const startTime = Date.now(); const errors: ExtractionError[] = []; let filesIndexed = 0; @@ -3105,6 +3172,9 @@ export class ExtractionOrchestrator { }; } + const snapshot = this.hdlContext?.sources.get(relativePath); + if (snapshot) return this.indexFileWithContent(relativePath, snapshot.original, snapshot.stats); + // Read file content and stats let content: string; let stats: fs.Stats; @@ -3200,7 +3270,7 @@ export class ExtractionOrchestrator { // otherwise detect on the spot so single-file re-index paths still emit // route nodes / middleware / etc. const frameworkNames = this.frameworksForFile(relativePath, this.ensureDetectedFrameworks()); - const result = extractFromSource(relativePath, content, language, frameworkNames); + const result = extractFromSource(relativePath, this.hdlSource(relativePath, content), language, frameworkNames); // Store in database await this.storeExtractionResult(relativePath, content, language, stats, result, createYielder()); @@ -3258,6 +3328,7 @@ export class ExtractionOrchestrator { // storing — persisting the transport as-is records the file as having no // symbols at all (#1541). No-op for already-decoded results. result = materializeKernelResult(result, filePath, language); + if (this.hdlContext?.profile && language === 'verilog') this.hdlTouched.add(filePath); // Bulk inserts run in bounded sub-transactions with a yield between, so a // giant generated file (tens of thousands of symbols) can't block the @@ -3275,7 +3346,7 @@ export class ExtractionOrchestrator { // successful retry's symbols — a permanent empty file presented as // recovered (the #1541 wipe, reintroduced through the marker path). const existingFile = this.queries.getFileByPath(filePath); - if (existingFile && existingFile.contentHash === contentHash) { + if (existingFile && existingFile.contentHash === contentHash && !this.forceHdlFile(filePath)) { const existingIsMarker = existingFile.nodeCount === 0 && (existingFile.errors?.length ?? 0) > 0; const incomingHasContent = result.nodes.length > 0; @@ -3500,6 +3571,14 @@ export class ExtractionOrchestrator { const reinserted: Edge[] = []; const resurrected: UnresolvedReference[] = []; for (const e of crossFileIncomingEdges) { + const name = e.metadata?.refName; + // HDL members and ports often share short names within one file. + // Replay their qualified reference instead of reattaching by kind/name. + if (e.sourceLanguage === 'verilog' && typeof name === 'string') { + const ref = resurrectRefFromDroppedEdge(e); + if (ref) resurrected.push(ref); + continue; + } const newTargetId = replacementOf.get(e.target); if (newTargetId) { reinserted.push({ source: e.source, target: newTargetId, kind: e.kind, metadata: e.metadata, line: e.line, column: e.column, provenance: e.provenance }); @@ -3512,7 +3591,7 @@ export class ExtractionOrchestrator { this.queries.insertEdges(reinserted); } if (resurrected.length > 0) { - this.queries.insertUnresolvedRefsBatch(resurrected); + this.queries.replaceResolutionEdgesWithUnresolvedRefs([], resurrected); } } @@ -3574,6 +3653,27 @@ export class ExtractionOrchestrator { return refs.length; } + /** Reclassify argument accesses against current function/task formals. + * Existing calls are dependencies; missing signatures also need retries when + * a callee appears, so retain and revisit their plain argument references. */ + resurrectHdlCallArgumentEdges(changedFilePaths: string[], removedFiles = false): number { + if (!changedFilePaths.length && !removedFiles) return 0; + const overrides = loadExtensionOverrides(this.rootDir); + // Removed files are absent from changedFilePaths and their language records + // have already cascaded; existing HDL argument sites still need declassification. + if (!removedFiles && !changedFilePaths.some(file => detectLanguage(file, undefined, overrides) === 'verilog')) return 0; + const fresh = new Set(changedFilePaths); + const candidates = this.queries.getHdlCallArgumentEdges().filter(e => !fresh.has(e.sourceFilePath)); + const ids: number[] = []; + const refs: UnresolvedReference[] = []; + for (const edge of candidates) { + const ref = resurrectRefFromDroppedEdge(edge); + if (ref) { ids.push(edge.edgeId); refs.push(ref); } + } + if (refs.length) this.queries.replaceResolutionEdgesWithUnresolvedRefs(ids, refs); + return refs.length; + } + /** * Re-open resolution edges whose answer was READ from a file this sync * touched, although neither end of the edge changed: a python attribute typed @@ -3727,6 +3827,8 @@ export class ExtractionOrchestrator { /** Inspect changed inputs before deletion/re-extraction cascades their edges. */ onFileChange?: (filePath: string, content?: string) => void ): Promise { + this.prepareHdlContext(); + if (this.hdlForce) scopedPaths = undefined; await initGrammars(); // Initialize WASM runtime (grammars loaded lazily below) const startTime = Date.now(); let filesChecked = 0; @@ -3785,7 +3887,7 @@ export class ExtractionOrchestrator { currentFiles = unique.filter( (p) => isSourceFile(p, overrides, this.rootDir) && - !scope.ignores(p) && + (!scope.ignores(p) || this.hdlContext!.sources.has(p)) && fs.existsSync(path.join(this.rootDir, p)) ); trackedFiles = []; @@ -3812,6 +3914,9 @@ export class ExtractionOrchestrator { trackedFiles = this.queries.getAllFiles(); if (process.env.CODEGRAPH_SYNTH_TIMINGS) console.error(`[phase-timing] sync-tracked-load: ${Date.now() - tTracked}ms (${trackedFiles.length} tracked)`); } + currentFiles = scopedPaths?.length + ? currentFiles.filter(file => this.hdlContext!.accepts(file)) + : this.hdlContext!.files(currentFiles); const currentSet = new Set(currentFiles); const trackedMap = new Map(); for (const f of trackedFiles) { @@ -3841,7 +3946,7 @@ export class ExtractionOrchestrator { .map((e) => resurrectRefFromDroppedEdge(e)) .filter((r): r is UnresolvedReference => r !== null); if (resurrected.length > 0) { - this.queries.insertUnresolvedRefsBatch(resurrected); + this.queries.replaceResolutionEdgesWithUnresolvedRefs([], resurrected); } } onFileChange?.(tracked.path); @@ -3896,7 +4001,7 @@ export class ExtractionOrchestrator { // change that preserves both exactly is the blind spot every mtime-based // incremental tool accepts; `index --force` is the escape hatch. Git bumps // mtime on every file it writes during checkout/merge, so pulls are caught.) - if (tracked && !neverParsed) { + if (tracked && !neverParsed && !this.forceHdlFile(filePath)) { try { const stat = fs.statSync(fullPath); if (stat.size === tracked.size && Math.floor(stat.mtimeMs) === Math.floor(tracked.modifiedAt)) { @@ -3936,7 +4041,7 @@ export class ExtractionOrchestrator { changedFilePaths.push(filePath); addedFilePaths.push(filePath); filesAdded++; - } else if (tracked.contentHash !== contentHash || neverParsed) { + } else if (tracked.contentHash !== contentHash || neverParsed || this.forceHdlFile(filePath)) { onFileChange?.(filePath, content); filesToIndex.push(filePath); changedFilePaths.push(filePath); @@ -4067,6 +4172,10 @@ export class ExtractionOrchestrator { * Uses git status as a fast path when available, falling back to full scan. */ getChangedFiles(): { added: string[]; modified: string[]; removed: string[] } { + const profile = loadHdlProfile(this.rootDir).profile; + const profileFiles = profile ? new Set(profile.files) : null; + const profileOverrides = loadExtensionOverrides(this.rootDir); + const allowed = (file: string) => !profileFiles || detectLanguage(file, undefined, profileOverrides) !== 'verilog' || profileFiles.has(file); // The commit this index was last brought up to date at. Absent on an index // built before stamping existed — getGitChangedFiles then declines the fast // path and the full scan below answers correctly, once, until a sync or a @@ -4087,12 +4196,26 @@ export class ExtractionOrchestrator { // Git supplies candidates, never the verdict. A committed deletion may // have been recreated locally; a previously indexed dirty path may have // vanished from git status after restore. Classify current disk vs DB once. - const candidates = new Set([...gitChanges.deleted, ...gitChanges.modified, ...gitChanges.added, ...dirtyPaths!]); + const candidates = new Set([...gitChanges.deleted, ...gitChanges.modified, ...gitChanges.added, ...dirtyPaths!, ...(profile?.files ?? [])]); const scope = this.scopedSyncMatcher(); const overrides = loadExtensionOverrides(this.rootDir); for (const filePath of candidates) { const tracked = this.queries.getFileByPath(filePath); + // A profile source outside the git candidate set is still one file to + // classify; a profile source is indexed whatever its size. + if (!allowed(filePath)) continue; const fullPath = path.join(this.rootDir, filePath); + if (profileFiles?.has(filePath)) { + try { + if (fs.statSync(fullPath).size > MAX_SOURCE_FILE_SIZE_BYTES) { + (tracked ? modified : added).push(filePath); + continue; + } + } catch { + if (tracked) removed.push(filePath); + continue; + } + } if (!isSourceFile(filePath, overrides, this.rootDir) || scope.ignores(filePath) || !fs.existsSync(fullPath)) { if (tracked) removed.push(filePath); continue; @@ -4117,7 +4240,8 @@ export class ExtractionOrchestrator { } // === Fallback: full scan (non-git project or git failure) === - const currentFiles = new Set(scanDirectory(this.rootDir)); + const scanned = scanDirectory(this.rootDir).filter(allowed); + const currentFiles = new Set(profile ? [...scanned, ...profile.files] : scanned); const trackedFiles = this.queries.getAllFiles(); // Build Map for O(1) lookups @@ -4140,6 +4264,14 @@ export class ExtractionOrchestrator { // Find added and modified files for (const filePath of currentFiles) { const fullPath = path.join(this.rootDir, filePath); + if (profileFiles?.has(filePath)) { + try { + if (fs.statSync(fullPath).size > MAX_SOURCE_FILE_SIZE_BYTES) { + (trackedMap.has(filePath) ? modified : added).push(filePath); + continue; + } + } catch { continue; } + } let content: string | null; try { content = readSourceOrStamp(fullPath); diff --git a/src/hdl/index-context.ts b/src/hdl/index-context.ts new file mode 100644 index 0000000000..d3e9acdda9 --- /dev/null +++ b/src/hdl/index-context.ts @@ -0,0 +1,132 @@ +import * as fs from 'node:fs'; +import * as path from 'node:path'; +import { createHash } from 'node:crypto'; +import { loadHdlProfile, type ActiveHdlProfile } from './profile'; +import { EXTRACTION_VERSION } from '../extraction/extraction-version'; +import { preprocessVerilog, type HdlPreprocessDiagnostic } from './preprocess'; +import { detectLanguage } from '../extraction/grammars'; +import { loadExtensionOverrides } from '../project-config'; + +export interface HdlDependency { path: string; sha256: string | null } +const hash = (text: string) => createHash('sha256').update(text).digest('hex'); +function inside(root: string, file: string): string { + const relative = path.relative(root, file); + if (relative.startsWith('..' + path.sep) || relative === '..' || path.isAbsolute(relative)) throw new Error('HDL path escapes project root'); + return relative.split(path.sep).join('/'); +} + +/** Immutable per-operation conditional source view. Original bytes remain file hashes/snippets. */ +export class HdlIndexContext { + readonly profile: ActiveHdlProfile | null; + readonly diagnostics: HdlPreprocessDiagnostic[] = []; + readonly dependencies: HdlDependency[]; + readonly fingerprint: string; + readonly sources = new Map(); + readonly unitDiagnostics = new Map(); + private readonly root: string; + private readonly overrides: ReturnType; + + constructor(root: string, previouslyProfiled: boolean) { + this.root = path.resolve(root); + this.overrides = loadExtensionOverrides(root); + const loaded = loadHdlProfile(root); + if (loaded.status === 'invalid-profile' || (loaded.status === 'invalid-config' && previouslyProfiled)) { + throw new Error(`Invalid HDL profile: ${loaded.diagnostics.join('; ')}`); + } + this.profile = loaded.profile; + if (!this.profile) { this.dependencies = []; this.fingerprint = 'raw'; return; } + this.root = fs.realpathSync(root); + const dependency = new Map(); + const bytes = new Map(); + const snapshots = new Map(); + let total = 0; + const read = (relative: string): string | null => { + const lexical = path.resolve(this.root, relative); + const normalized = inside(this.root, lexical); + if (normalized.split('/').some(p => ['.git', '.jj', '.codegraph'].includes(p) || p.startsWith('.codegraph-'))) throw new Error('HDL profile cannot read VCS/index storage'); + if (bytes.has(normalized)) return bytes.get(normalized)!; + try { + inside(this.root, fs.realpathSync(lexical)); + const stat = fs.statSync(lexical); + if (!stat.isFile() || stat.size > 1024 * 1024) throw new Error(`HDL input is not a regular file of at most 1 MiB: ${normalized}`); + const text = fs.readFileSync(lexical, 'utf8'); + const after = fs.statSync(lexical); + if (stat.size !== after.size || stat.mtimeMs !== after.mtimeMs || stat.ino !== after.ino) { + throw new Error(`HDL input changed while preparing snapshot; retry: ${normalized}`); + } + snapshots.set(normalized, after); + total += Buffer.byteLength(text); + if (total > 64 * 1024 * 1024) throw new Error('HDL profile source/dependency snapshot exceeds 64 MiB'); + bytes.set(normalized, text); + return text; + } catch (error) { + if ((error as NodeJS.ErrnoException).code === 'ENOENT') return null; + throw error; + } + }; + for (const file of this.profile.files) { + if (detectLanguage(file, undefined, this.overrides) !== 'verilog') throw new Error(`HDL profile lists a non-HDL source: ${file}`); + const source = read(file); + if (source === null) throw new Error(`HDL source missing: ${file}`); + const result = preprocessVerilog(source, { filePath: file, defines: this.profile.defines, includeDirs: this.profile.includeDirs, + readInclude: (request, from, dirs) => { + if (path.isAbsolute(request) || /^[A-Za-z]:[\\/]/.test(request)) throw new Error('Absolute HDL include paths are outside the supported project-relative profile'); + const candidates = [path.posix.join(path.posix.dirname(from), request), ...dirs.map(dir => path.posix.join(dir, request))]; + for (const candidate of [...new Set(candidates)]) { + const relative = inside(this.root, path.resolve(this.root, candidate)); + const text = read(relative); + dependency.set(relative, text === null ? null : hash(text)); + if (text !== null) return { filePath: relative, source: text }; + } + return null; + } }); + if (result.source.length !== source.length) throw new Error('HDL conditional selection changed source offsets'); + this.sources.set(file, { original: source, selected: result.source, stats: snapshots.get(file)! }); + const diagnostics = result.diagnostics.slice(0, 32); + if (result.diagnostics.length > diagnostics.length) diagnostics.push({ filePath: file, line: 1, + code: 'diagnostic-limit', message: `${result.diagnostics.length - diagnostics.length} additional preprocessing diagnostics omitted for this unit.` }); + this.unitDiagnostics.set(file, diagnostics); + this.diagnostics.push(...diagnostics.slice(0, Math.max(0, 200 - this.diagnostics.length))); + } + this.dependencies = [...dependency].sort(([a], [b]) => a.localeCompare(b)).map(([path, sha256]) => ({ path, sha256 })); + this.fingerprint = hash(JSON.stringify([EXTRACTION_VERSION, this.profile.fingerprint, this.dependencies])); + } + + isHdl(file: string): boolean { return detectLanguage(file, undefined, this.overrides) === 'verilog'; } + accepts(file: string): boolean { return !this.profile || !this.isHdl(file) || this.sources.has(file); } + files(scanned: string[]): string[] { + return this.profile ? [...scanned.filter(file => !this.isHdl(file)), ...this.profile.files] : scanned; + } + source(file: string, original: string): string { + if (!this.profile || !this.isHdl(file)) return original; + const cached = this.sources.get(file); + if (!cached) throw new Error(`HDL source is outside active profile: ${file}`); + if (cached.original !== original) throw new Error(`HDL source changed during profile preparation; retry indexing: ${file}`); + return cached.selected; + } + context(): string { + return JSON.stringify(this.profile ? { mode: 'profile', configurationFingerprint: this.profile.fingerprint, + files: this.profile.files, includeDirs: this.profile.includeDirs, defines: this.profile.defines, + topModules: this.profile.topModules, languageMode: this.profile.languageMode, + dependencies: this.dependencies, unitDiagnostics: Object.fromEntries(this.unitDiagnostics), diagnostics: this.diagnostics.slice(0, 200), + diagnosticCount: this.diagnostics.length, incomplete: this.diagnostics.length > 0, + } : { mode: 'raw' }); + } +} + +/** Include changes can invalidate a profile even when codegraph.json is unchanged. */ +export function hdlDependenciesChanged(root: string, context: string | null): boolean { + let value: unknown; + try { value = context ? JSON.parse(context) : null; } catch { return true; } + if (!value || typeof value !== 'object' || !('dependencies' in value) || !Array.isArray(value.dependencies)) return false; + const canonicalRoot = fs.realpathSync(root); + return value.dependencies.some((entry: HdlDependency) => { + if (!entry || typeof entry.path !== 'string') return true; + try { + const full = path.resolve(canonicalRoot, entry.path); + inside(canonicalRoot, full); inside(canonicalRoot, fs.realpathSync(full)); + const stat = fs.statSync(full); + return !stat.isFile() || stat.size > 1024 * 1024 || hash(fs.readFileSync(full, 'utf8')) !== entry.sha256; + } catch { return entry.sha256 !== null; } + }); +} diff --git a/src/hdl/preprocess.ts b/src/hdl/preprocess.ts new file mode 100644 index 0000000000..538854a3cc --- /dev/null +++ b/src/hdl/preprocess.ts @@ -0,0 +1,237 @@ +/** Bounded, source-preserving HDL conditional selection. No macro expansion. */ +export interface HdlPreprocessDiagnostic { + filePath: string; + line: number; + code: string; + message: string; +} +export interface HdlIncludeSource { filePath: string; source: string } +export interface HdlPreprocessOptions { + filePath: string; + defines?: Record; + includeDirs?: string[]; + /** The caller owns filesystem access and must enforce its allowed roots. */ + readInclude?: (request: string, fromFile: string, includeDirs: readonly string[]) => HdlIncludeSource | null; + maxIncludeDepth?: number; +} +export interface HdlPreprocessResult { + source: string; + dependencies: string[]; + diagnostics: HdlPreprocessDiagnostic[]; + /** All encountered constructs were handled within this bounded mode. */ + complete: boolean; +} +interface Conditional { + parent: boolean; + active: boolean; + taken: boolean; + uncertain: boolean; + elseSeen: boolean; +} +const IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_$]*/; +const OTHER_DIRECTIVES = new Set(['timescale', 'default_nettype', 'celldefine', 'endcelldefine', + 'resetall', 'unconnected_drive', 'nounconnected_drive', 'line', 'begin_keywords', 'end_keywords', 'pragma']); + +/** Each call is a separate translation unit. Includes affect macro definedness, + * but are never pasted into the returned text. All offsets are original UTF-16 + * offsets; inactive text is replaced with spaces while CR/LF bytes stay put. */ +export function preprocessVerilog(source: string, options: HdlPreprocessOptions): HdlPreprocessResult { + const diagnostics: HdlPreprocessDiagnostic[] = []; + const record = (diagnostic: HdlPreprocessDiagnostic): void => { + if (diagnostics.length < 512) diagnostics.push(diagnostic); + else if (diagnostics.length === 512) diagnostics.push({ ...diagnostic, code: 'diagnostic-limit', + message: 'Additional preprocessing diagnostics were omitted after 512 entries.' }); + }; + const dependencies = new Set(); + const macros = new Map(); + let unknownMacros = false; + const trace = new Set(); + const requestedDepth = options.maxIncludeDepth; + const maxDepth = Number.isSafeInteger(requestedDepth) && requestedDepth! >= 0 ? Math.min(requestedDepth!, 256) : 64; + const invalidateMacros = (): void => { macros.clear(); unknownMacros = true; }; + const mask = (text: string): string => text.replace(/[^\r\n]/g, ' '); + for (const name of Object.keys(options.defines ?? {})) { + if (IDENTIFIER.exec(name)?.[0] === name) macros.set(name, true); + else record({ filePath: options.filePath, line: 1, code: 'invalid-profile-define', message: `Invalid macro name: ${name}` }); + } + + const process = (text: string, filePath: string, depth: number): string => { + const output = text.split(''); + const stack: Conditional[] = []; + let fatal = false; + const lineStarts = [0]; + for (let at = text.indexOf('\n'); at >= 0; at = text.indexOf('\n', at + 1)) lineStarts.push(at + 1); + const active = (): boolean => stack.length ? stack[stack.length - 1]!.active : true; + const report = (offset: number, code: string, message: string): void => { + let lo = 0, hi = lineStarts.length; + while (lo + 1 < hi) { const mid = (lo + hi) >>> 1; if (lineStarts[mid]! <= offset) lo = mid; else hi = mid; } + record({ filePath, line: lo + 1, code, message }); + }; + const blank = (start: number, end: number): void => { + for (let n = start; n < end; n++) if (text[n] !== '\n' && text[n] !== '\r') output[n] = ' '; + }; + const lineEnd = (start: number): number => { + let end = text.indexOf('\n', start); + if (end < 0) return text.length; + while (end > 0 && text[end - (text[end - 1] === '\r' ? 2 : 1)] === '\\') { + const next = text.indexOf('\n', end + 1); + if (next < 0) return text.length; + end = next; + } + return end; + }; + const nameAfter = (offset: number): { name?: string; end: number } => { + let start = offset; + while (text[start] === ' ' || text[start] === '\t') start++; + const name = IDENTIFIER.exec(text.slice(start))?.[0]; + return { name, end: name ? start + name.length : lineEnd(start) }; + }; + const defined = (name: string): boolean | undefined => macros.get(name) ?? (unknownMacros ? undefined : false); + const condition = (name: string | undefined, invert: boolean, offset: number): boolean | undefined => { + const value = name ? defined(name) : undefined; + if (value === undefined) { + report(offset, name ? 'unknown-conditional' : 'unsupported-conditional', name + ? `Cannot determine whether ${name} is defined; no branch was selected.` + : 'Only a simple macro identifier is supported in a conditional directive.'); + // Either unknown arm could define or undefine names used later. + invalidateMacros(); + return undefined; + } + return invert ? !value : value; + }; + + let i = 0; + while (i < text.length) { + const start = i; + // Directives inside comments, strings and escaped identifiers are text. + if (text.startsWith('//', i)) { + const end = text.indexOf('\n', i + 2); + i = end < 0 ? text.length : end; + } else if (text.startsWith('/*', i)) { + const end = text.indexOf('*/', i + 2); + i = end < 0 ? text.length : end + 2; + } else if (text[i] === '"') { + i++; + while (i < text.length) { + if (text[i] === '\\') { i += Math.min(2, text.length - i); continue; } + if (text[i] === '"') { i++; break; } + if (text[i] === '\n' || text[i] === '\r') break; + i++; + } + } else if (text[i] === '\\') { + i++; + while (i < text.length && !/\s/.test(text[i]!)) i++; + } else if (text[i] === '`') { + const directive = IDENTIFIER.exec(text.slice(i + 1))?.[0]; + if (!directive) { + if (active()) report(i, 'unsupported-macro-form', 'Unrecognized backtick form was preserved.'); + if (!active()) blank(i, i + 1); + i++; + continue; + } + const tokenEnd = i + 1 + directive.length; + if (['ifdef', 'ifndef', 'elsif'].includes(directive)) { + const argument = nameAfter(tokenEnd); + blank(i, argument.end); + if (directive !== 'elsif') { + const parent = active(); + const value = parent ? condition(argument.name, directive === 'ifndef', i) : false; + stack.push({ parent, active: parent && value === true, taken: value === true, + uncertain: value === undefined, elseSeen: false }); + } else { + const frame = stack[stack.length - 1]; + if (!frame || frame.elseSeen) { + report(i, 'malformed-conditional', '`elsif without a matching open conditional, or after `else.'); fatal = true; + } else if (!frame.parent || frame.taken || frame.uncertain) frame.active = false; + else { + const value = condition(argument.name, false, i); + frame.active = value === true; + frame.taken = value === true; + frame.uncertain = value === undefined; + } + } + i = argument.end; + continue; + } + if (directive === 'else' || directive === 'endif') { + blank(i, tokenEnd); + const frame = stack[stack.length - 1]; + if (!frame || (directive === 'else' && frame.elseSeen)) { + report(i, 'malformed-conditional', `Unexpected or duplicate \`${directive}.`); fatal = true; + } else if (directive === 'endif') stack.pop(); + else { frame.active = frame.parent && !frame.taken && !frame.uncertain; frame.taken ||= frame.active; frame.elseSeen = true; } + i = tokenEnd; + continue; + } + if (directive === 'define') { + const end = lineEnd(tokenEnd); + const argument = nameAfter(tokenEnd); + if (active()) { + if (argument.name) macros.set(argument.name, true); + else { report(i, 'unsupported-definition', 'Macro definition without a supported simple name was preserved.'); invalidateMacros(); } + } else blank(i, end); + i = end; + continue; + } + if (directive === 'undef') { + const argument = nameAfter(tokenEnd); + if (active()) { + if (argument.name) macros.set(argument.name, false); + else { report(i, 'unsupported-definition', 'Macro undefinition without a supported simple name was preserved.'); invalidateMacros(); } + } else blank(i, argument.end); + i = argument.end; + continue; + } + if (directive === 'undefineall') { + if (active()) { macros.clear(); unknownMacros = false; } else blank(i, tokenEnd); + i = tokenEnd; + continue; + } + if (directive === 'include') { + let cursor = tokenEnd; + while (text[cursor] === ' ' || text[cursor] === '\t') cursor++; + const opening = text[cursor]; + const closing = opening === '"' ? '"' : opening === '<' ? '>' : ''; + const end = closing ? text.indexOf(closing, cursor + 1) : -1; + const supported = end >= 0 && !/[\r\n]/.test(text.slice(cursor, end)); + const includeEnd = supported ? end + 1 : lineEnd(cursor); + if (active()) { + if (!supported) { + report(i, 'unsupported-include', 'Only literal quoted or bracketed include paths are supported.'); invalidateMacros(); + } else { + const request = text.slice(cursor + 1, end); + let included: HdlIncludeSource | null = null; + try { included = options.readInclude?.(request, filePath, options.includeDirs ?? []) ?? null; } + catch { report(i, 'include-read-failed', `Cannot read include ${request}.`); } + if (!included) { report(i, 'unresolved-include', `Include ${request} was not resolved; subsequent macro state is uncertain.`); invalidateMacros(); } + else { + dependencies.add(included.filePath); + const key = JSON.stringify([included.filePath, unknownMacros, [...macros].sort(([a], [b]) => a.localeCompare(b))]); + if (depth >= maxDepth || trace.has(key)) { + report(i, 'include-cycle-or-depth', `Include recursion cannot be resolved at ${included.filePath}.`); invalidateMacros(); + } else { trace.add(key); process(included.source, included.filePath, depth + 1); trace.delete(key); } + } + } + } else blank(i, includeEnd); + i = includeEnd; + continue; + } + if (active()) { + report(i, OTHER_DIRECTIVES.has(directive) ? 'unsupported-directive' : 'unsupported-macro-expansion', + `\`${directive} was preserved; ${OTHER_DIRECTIVES.has(directive) ? 'this compiler directive is not interpreted' : 'macro expansion is not supported'}.`); + // A replacement can itself contain `define/`undef/`include. Without + // expanding it, later macro definedness cannot be assumed unchanged. + if (!OTHER_DIRECTIVES.has(directive)) invalidateMacros(); + } else blank(i, tokenEnd); + i = tokenEnd; + continue; + } else i++; + if (!active()) blank(start, i); + } + if (stack.length) { report(text.length, 'malformed-conditional', 'Conditional directive has no matching `endif.'); fatal = true; } + if (fatal) { invalidateMacros(); return mask(text); } + return output.join(''); + }; + const selected = process(source, options.filePath, 0); + return { source: selected, dependencies: [...dependencies], diagnostics, complete: diagnostics.length === 0 }; +} diff --git a/src/hdl/profile.ts b/src/hdl/profile.ts new file mode 100644 index 0000000000..4d3babb926 --- /dev/null +++ b/src/hdl/profile.ts @@ -0,0 +1,213 @@ +import * as fs from 'node:fs'; +import * as path from 'node:path'; +import { createHash } from 'node:crypto'; + +export interface ActiveHdlProfile { + name: string; + files: string[]; + includeDirs: string[]; + defines: Record; + topModules: string[]; + languageMode: 'verilog' | 'systemverilog'; + /** Filelist contents participate in the fingerprint; include contents belong to preprocessing dependencies. */ + dependencies: Array<{ path: string; sha256: string }>; + fingerprint: string; +} +export interface HdlProfileLoadResult { + status: 'none' | 'active' | 'invalid-config' | 'invalid-profile'; + profile: ActiveHdlProfile | null; + diagnostics: string[]; + configInvalid: boolean; + configPresent: boolean; +} +interface ProfileSpec { + files: string[]; + filelists: string[]; + includeDirs: string[]; + defines: Record; + topModules: string[]; + languageMode: 'verilog' | 'systemverilog'; +} +export function isReservedHdlPath(relativePath: string): boolean { + return relativePath.split(/[\\/]/).some(part => part === '.git' || part === '.jj' || part === '.codegraph' || part.startsWith('.codegraph-')); +} +const MAX_BYTES = 1024 * 1024, MAX_LISTS = 256, MAX_DEPTH = 32, MAX_TOKENS = 100000; +const hash = (text: string) => createHash('sha256').update(text).digest('hex'); +const object = (value: unknown): value is Record => !!value && typeof value === 'object' && !Array.isArray(value); +function fail(message: string): never { throw new Error(message); } +function strings(value: unknown, label: string): string[] { + if (value === undefined) return []; + if (!Array.isArray(value) || !value.every(v => typeof v === 'string' && v.trim().length > 0)) fail(`${label}: expected an array of non-empty strings`); + return value; +} +function strictKeys(value: Record, keys: string[], label: string): void { + for (const key of Object.keys(value)) if (!keys.includes(key)) fail(`${label}: unsupported field ${key}`); +} +function spec(value: unknown, label: string): ProfileSpec { + if (!object(value)) fail(`${label}: expected an object`); + strictKeys(value, ['files', 'filelists', 'includeDirs', 'defines', 'topModules', 'languageMode'], label); + const defines: Record = Object.create(null); + if (value.defines !== undefined) { + if (!object(value.defines)) fail(`${label}.defines: expected an object with string values`); + for (const [name, val] of Object.entries(value.defines)) { + if (!/^[A-Za-z_][A-Za-z0-9_$]*$/.test(name) || typeof val !== 'string') fail(`${label}.defines: invalid macro name or non-string value`); + defines[name] = val; + } + } + const languageMode = value.languageMode ?? 'systemverilog'; + if (languageMode !== 'verilog' && languageMode !== 'systemverilog') fail(`${label}.languageMode: expected verilog or systemverilog`); + return { files: strings(value.files, `${label}.files`), filelists: strings(value.filelists, `${label}.filelists`), + includeDirs: strings(value.includeDirs, `${label}.includeDirs`), defines, + topModules: strings(value.topModules, `${label}.topModules`), languageMode }; +} + +/** Preserve quoting so '+' inside a quoted define value or directory is not a separator. */ +function tokens(text: string): string[] { + const out: string[] = []; + let token = '', quote = ''; + const flush = () => { if (token) { out.push(token); token = ''; } }; + for (let i = 0; i < text.length; i++) { + const c = text[i]!, next = text[i + 1]; + if (c === '\\' && next !== undefined) { + if (next === '\n') { i++; continue; } + if (next === '\r' && text[i + 2] === '\n') { i += 2; continue; } + token += c + next; i++; continue; + } + if (quote) { token += c; if (c === quote) quote = ''; continue; } + // An apostrophe in 1'b1 / '0 is a Verilog literal, not a path quote. + if (c === '"' || (c === "'" && (!token || token.endsWith('+')))) { quote = c; token += c; continue; } + if ((c === '/' && next === '/') || (c === '#' && !token)) { + flush(); while (i < text.length && text[i] !== '\n') i++; continue; + } + if (c === '/' && next === '*') { + flush(); const end = text.indexOf('*/', i + 2); if (end < 0) fail('Unterminated filelist block comment'); i = end + 1; continue; + } + if (/\s/.test(c)) { flush(); continue; } + token += c; + } + if (quote) fail('Unterminated filelist quote'); + flush(); + return out; +} +function splitPlus(token: string): string[] { + const parts: string[] = []; + let part = '', quote = ''; + for (let i = 0; i < token.length; i++) { + const c = token[i]!; + if (c === '\\' && i + 1 < token.length) { part += c + token[++i]; continue; } + if (quote) { part += c; if (c === quote) quote = ''; continue; } + if (c === '"' || (c === "'" && !part)) { quote = c; part += c; continue; } + if (c === '+') { parts.push(part); part = ''; } else part += c; + } + parts.push(part); return parts; +} +function unquote(token: string): string { + let out = '', quote = ''; + for (let i = 0; i < token.length; i++) { + const c = token[i]!; + if (c === '\\' && i + 1 < token.length && /[\\"'\s]/.test(token[i + 1]!)) { out += token[++i]; continue; } + if (quote) { if (c === quote) quote = ''; else out += c; continue; } + if (c === '"' || (c === "'" && i === 0)) { quote = c; continue; } + out += c; + } + if (quote) fail('Unterminated filelist quote'); + return out; +} + +/** Load only a selected, explicit source profile. Invalid HDL never means "scan everything". + * No HDL section preserves legacy behavior. Malformed overall JSON is reported separately + * so the existing config loader can retain its policy and an indexed-profile guard can fail safely. + */ +export function loadHdlProfile(projectRoot: string): HdlProfileLoadResult { + const result = (status: HdlProfileLoadResult['status'], diagnostics: string[] = [], profile: ActiveHdlProfile | null = null): HdlProfileLoadResult => + ({ status, profile, diagnostics, configInvalid: status === 'invalid-config', configPresent: present }); + let present = false; + let root: string; + try { root = fs.realpathSync(projectRoot); } catch { return result('invalid-config', ['HDL project root is unavailable']); } + const contained = (candidate: string): string => { + if (isReservedHdlPath(path.relative(root, candidate))) fail('Reserved VCS/CodeGraph paths are unsupported in HDL profiles'); + const real = fs.realpathSync(candidate); + const rel = path.relative(root, real); + if (rel === '..' || rel.startsWith(`..${path.sep}`) || path.isAbsolute(rel)) fail('Paths outside the project are unsupported in HDL profiles'); + if (isReservedHdlPath(rel)) fail('Reserved VCS/CodeGraph paths are unsupported in HDL profiles'); + return real; + }; + const relative = (absolute: string) => path.relative(root, absolute).split(path.sep).join('/') || '.'; + const read = (absolute: string) => { + const stat = fs.statSync(absolute); + if (!stat.isFile() || stat.size > MAX_BYTES) fail('Config/filelist must be a regular file of at most 1 MiB'); + return fs.readFileSync(absolute, 'utf8'); + }; + let config: unknown; + try { + const file = path.join(root, 'codegraph.json'); + if (!fs.existsSync(file)) return result('none'); + present = true; + config = JSON.parse(read(contained(file))); + if (!object(config)) return result('invalid-config', ['codegraph.json: expected a JSON object']); + } catch (error) { return result('invalid-config', [`codegraph.json could not be read: ${(error as Error).message}`]); } + if (!Object.prototype.hasOwnProperty.call(config, 'hdl')) return result('none'); + try { + const hdl = config.hdl; + if (!object(hdl)) fail('codegraph.json hdl: expected an object'); + strictKeys(hdl, ['activeProfile', 'profiles'], 'hdl'); + if (typeof hdl.activeProfile !== 'string' || !hdl.activeProfile.trim()) fail('hdl.activeProfile: expected a non-empty profile name'); + if (!object(hdl.profiles) || !Object.prototype.hasOwnProperty.call(hdl.profiles, hdl.activeProfile)) fail('hdl.activeProfile does not select an existing profile'); + const selected = spec(hdl.profiles[hdl.activeProfile], `hdl.profiles.${hdl.activeProfile}`); + const files = new Set(), includeDirs = new Set(), dependencies = new Map(); + const defines: Record = Object.assign(Object.create(null), selected.defines); + const resolve = (name: string, base: string, directory: boolean) => { + const real = contained(path.resolve(base, name)); + const stat = fs.statSync(real); + if (directory ? !stat.isDirectory() : !stat.isFile()) fail(`HDL path has the wrong file type: ${relative(real)}`); + return real; + }; + const addFile = (name: string, base: string) => files.add(relative(resolve(name, base, false))); + const addInclude = (name: string, base: string) => includeDirs.add(relative(resolve(name, base, true))); + for (const file of selected.files) addFile(file, root); + for (const directory of selected.includeDirs) addInclude(directory, root); + let tokenCount = 0, listCount = 0; + const stack = new Set(); + const visited = new Set(); + const visit = (name: string, lookupBase: string, localPaths: boolean, depth: number): void => { + if (depth > MAX_DEPTH) fail('HDL filelist nesting exceeds 32 levels'); + const file = resolve(name, lookupBase, false), key = `${file}\0${localPaths}`; + if (stack.has(file)) fail(`HDL filelist cycle: ${relative(file)}`); + if (visited.has(key)) return; + if (++listCount > MAX_LISTS) fail('HDL profile exceeds 256 filelists'); + stack.add(file); visited.add(key); + const text = read(file), entries = tokens(text); + dependencies.set(relative(file), hash(text)); + tokenCount += entries.length; + if (tokenCount > MAX_TOKENS) fail('HDL profile exceeds 100000 filelist tokens'); + const base = localPaths ? path.dirname(file) : root; + for (let i = 0; i < entries.length; i++) { + const raw = entries[i]!, token = unquote(raw); + if (token === '-f' || token === '-F') { + const next = entries[++i]; if (!next) fail(`Missing argument for ${token}`); + visit(unquote(next), base, token === '-F', depth + 1); + } else if (raw.startsWith('+incdir+')) { + const dirs = splitPlus(raw.slice('+incdir+'.length)); + if (dirs.some(d => !d)) fail('Empty +incdir+ entry'); + for (const directory of dirs) addInclude(unquote(directory), base); + } else if (raw.startsWith('+define+')) { + for (const definition of splitPlus(raw.slice('+define+'.length))) { + const decoded = unquote(definition), eq = decoded.indexOf('='); + const macro = eq < 0 ? decoded : decoded.slice(0, eq), value = eq < 0 ? '1' : decoded.slice(eq + 1); + if (!/^[A-Za-z_][A-Za-z0-9_$]*$/.test(macro)) fail('Invalid +define+ macro name'); + if (Object.prototype.hasOwnProperty.call(defines, macro) && defines[macro] !== value) fail(`Conflicting values for HDL macro ${macro}`); + defines[macro] = value; + } + } else if (/^[+-]/.test(token)) fail(`Unsupported HDL filelist option: ${token.split('+').slice(0, 2).join('+')}`); + else addFile(token, base); + } + stack.delete(file); + }; + for (const filelist of selected.filelists) visit(filelist, root, path.extname(filelist) === '.F', 1); + const resolved = { name: hdl.activeProfile, files: [...files], includeDirs: [...includeDirs], + defines: Object.fromEntries(Object.entries(defines).sort(([a], [b]) => a.localeCompare(b))), + topModules: [...new Set(selected.topModules)], languageMode: selected.languageMode, + dependencies: [...dependencies].map(([file, sha256]) => ({ path: file, sha256 })).sort((a,b) => a.path.localeCompare(b.path)) }; + return result('active', [], { ...resolved, fingerprint: hash(JSON.stringify(resolved)) }); + } catch (error) { return result('invalid-profile', [(error as Error).message]); } +} diff --git a/src/hdl/status.ts b/src/hdl/status.ts new file mode 100644 index 0000000000..7383b12005 --- /dev/null +++ b/src/hdl/status.ts @@ -0,0 +1,129 @@ +/** Public profile state is deliberately separate from the currently configured + * profile: queries describe the context stored with the index until rebuilt. */ +export interface HdlProfileDisplayIdentity { + name: string; + fingerprint: string; + files?: readonly string[]; + includeDirs?: readonly string[]; + defines?: Readonly>; + topModules?: readonly string[]; + languageMode?: 'verilog' | 'systemverilog'; +} +export interface HdlProfileSettingsSummary { + fileCount?: number; + includeDirs?: string[]; + defineNames?: string[]; + topModules?: string[]; + languageMode?: 'verilog' | 'systemverilog'; +} +export interface HdlProfileConfiguration { + status: 'none' | 'active' | 'invalid-config' | 'invalid-profile'; + profile: HdlProfileDisplayIdentity | null; + diagnostics: string[]; +} +export interface HdlIndexedProfileMetadata { + name: string | null; + fingerprint: string | null; + context: string | null; +} +export interface HdlProfileStatus { + configured: { mode: 'raw' | 'profile' | 'invalid'; name: string | null; fingerprint: string | null } & HdlProfileSettingsSummary; + indexed: { mode: 'raw' | 'profile' | 'unknown'; name: string | null; fingerprint: string | null; configurationFingerprint: string | null } & HdlProfileSettingsSummary; + state: 'matches' | 'mismatch' | 'unknown' | 'configuration-error'; + mismatch: boolean | null; + reindexRecommended: boolean; + diagnostics: string[]; + indexedDiagnostics: string[]; + incomplete: boolean; + limitations: string[]; +} +const RAW_LIMIT = 'Raw source may contain multiple conditional alternatives; no HDL build profile was applied.'; +const PROFILE_LIMIT = 'HDL preprocessing selects conditional branches and include macro state; macro invocations are not fully expanded. Displayed snippets are original source and may include inactive branches; indexed symbols follow the selected profile.'; +const DIALECT_LIMIT = 'languageMode records the intended dialect; the SystemVerilog grammar does not enforce Verilog-only conformance. topModules are recorded roots, not an elaborated hierarchy.'; +const SOURCE_LIMIT = 'Source relationships are not elaboration, synthesis, simulation or timing validation.'; + +function settingsSummary(value: object | null): HdlProfileSettingsSummary { + const record = value as Record | null; + if (!record) return {}; + const strings = (candidate: unknown): candidate is string[] => Array.isArray(candidate) && candidate.every(n => typeof n === 'string'); + return { + ...(strings(record.files) ? {fileCount:record.files.length} : {}), + ...(strings(record.includeDirs) ? {includeDirs:[...record.includeDirs]} : {}), + ...(record.defines && typeof record.defines === 'object' && !Array.isArray(record.defines) + ? {defineNames:Object.keys(record.defines).sort()} : {}), + ...(strings(record.topModules) ? {topModules:[...record.topModules]} : {}), + ...(record.languageMode === 'verilog' || record.languageMode === 'systemverilog' ? {languageMode:record.languageMode} : {}), + }; +} + +export function buildHdlProfileStatus( + configuration: HdlProfileConfiguration, + metadata: HdlIndexedProfileMetadata, + hasHdlFiles: boolean, +): HdlProfileStatus | null { + if (!hasHdlFiles && configuration.status === 'none' && !metadata.context && !metadata.fingerprint) return null; + let context: unknown; + try { context = metadata.context ? JSON.parse(metadata.context) : null; } catch { context = null; } + const record = context && typeof context === 'object' && !Array.isArray(context) + ? context as Record : null; + const raw = record?.mode === 'raw'; + if (!hasHdlFiles && configuration.status === 'none' && (raw || !metadata.name)) return null; + const indexed: HdlProfileStatus['indexed'] = raw + ? {mode:'raw',name:null,fingerprint:metadata.fingerprint,configurationFingerprint:null} + : metadata.name && metadata.fingerprint && record?.mode === 'profile' && typeof record.configurationFingerprint === 'string' + ? {mode:'profile',name:metadata.name,fingerprint:metadata.fingerprint,configurationFingerprint:record.configurationFingerprint,...settingsSummary(record)} + : {mode:'unknown',name:metadata.name,fingerprint:metadata.fingerprint,configurationFingerprint:null}; + const indexedDiagnostics = Array.isArray(record?.diagnostics) ? record.diagnostics.flatMap(value => { + if (typeof value === 'string') return [value]; + if (value && typeof value === 'object' && typeof value.message === 'string') { + const location = typeof value.filePath === 'string' ? `${value.filePath}${typeof value.line === 'number' ? ':' + value.line : ''}: ` : ''; + return [location + value.message]; + } + return []; + }) : []; + const invalid = configuration.status === 'invalid-config' || configuration.status === 'invalid-profile' + || (configuration.status === 'active' && !configuration.profile); + const configured: HdlProfileStatus['configured'] = invalid + ? {mode:'invalid',name:configuration.profile?.name ?? null,fingerprint:null} + : configuration.status === 'none' + ? {mode:'raw',name:null,fingerprint:null} + : {mode:'profile',name:configuration.profile!.name,fingerprint:configuration.profile!.fingerprint,...settingsSummary(configuration.profile)}; + const unknown = indexed.mode === 'unknown'; + const mismatch = invalid || unknown ? null : configured.mode !== indexed.mode + || (configured.mode === 'profile' && (configured.fingerprint !== indexed.configurationFingerprint || configured.name !== indexed.name)); + return {configured,indexed,state:invalid ? 'configuration-error' : unknown ? 'unknown' : mismatch ? 'mismatch' : 'matches', + mismatch,reindexRecommended:!invalid && (unknown || mismatch === true),diagnostics:[...configuration.diagnostics], + indexedDiagnostics,incomplete:record?.incomplete === true || indexedDiagnostics.length > 0, + limitations:[...(indexed.mode === 'raw' ? [RAW_LIMIT] : indexed.mode === 'profile' ? [PROFILE_LIMIT,DIALECT_LIMIT] : []), SOURCE_LIMIT]}; +} + +/** Shared compact note for CLI status and MCP explore responses. */ +export function formatHdlProfileStatus(status: HdlProfileStatus | null): string { + if (!status) return ''; + const label = (identity: HdlProfileStatus['indexed'] | HdlProfileStatus['configured']): string => { + if (identity.mode === 'raw') return 'raw source (no profile)'; + if (identity.mode === 'unknown') return 'unknown'; + if (identity.mode === 'invalid') return 'invalid configuration'; + return `${JSON.stringify(identity.name)} (${identity.fingerprint?.slice(0,12)})`; + }; + const lines = [`HDL context: indexed ${label(status.indexed)}; configured ${label(status.configured)}.`]; + if (status.indexed.mode === 'profile') { + const summary = status.indexed; + const parts = [summary.fileCount == null ? undefined : `${summary.fileCount} file(s)`, + summary.includeDirs ? `${summary.includeDirs.length} include path(s)` : undefined, + summary.defineNames ? `${summary.defineNames.length} define(s)` : undefined, + summary.topModules ? `${summary.topModules.length} recorded top module(s)` : undefined, + summary.languageMode ? `intended dialect ${summary.languageMode}` : undefined].filter(Boolean); + if (parts.length) lines.push(`Indexed HDL settings: ${parts.join('; ')}.`); + } + if (status.state === 'mismatch') lines.push('Profile mismatch: rebuild the index before interpreting results as the configured profile.'); + if (status.state === 'unknown') lines.push('Indexed profile provenance is unknown; rebuild the index to establish its HDL context.'); + if (status.state === 'configuration-error') lines.push('Fix the HDL profile configuration before rebuilding; results retain the indexed context.'); + if (status.incomplete) lines.push('Indexed HDL preprocessing is incomplete; unresolved regions are not evidence of an inactive branch.'); + for (const [label, diagnostics] of [['HDL configuration', status.diagnostics], ['Indexed HDL', status.indexedDiagnostics]] as const) { + lines.push(...diagnostics.slice(0,3).map(d=>`${label}: ${d.length > 240 ? d.slice(0,237) + '...' : d}`)); + if (diagnostics.length > 3) lines.push(`${label}: ${diagnostics.length - 3} additional diagnostics; inspect codegraph status --json.`); + } + lines.push(...status.limitations); + return lines.join('\n'); +} diff --git a/src/index.ts b/src/index.ts index ae27c17aaf..3da7091d9b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -32,6 +32,9 @@ import { DatabaseConnection, getDatabasePath, removeDatabaseFiles } from './db'; import { WalCheckpointValve, resolveWalValveMb } from './db/wal-valve'; import { QueryBuilder, type DeprioritizedPathMatcher } from './db/queries'; import { importPathKeys, moduleReferenceKeys } from './db/reference-tail'; +import { loadHdlProfile } from './hdl/profile'; +import { hdlDependenciesChanged } from './hdl/index-context'; +import { buildHdlProfileStatus, type HdlProfileStatus } from './hdl/status'; import { isInitialized, createDirectory, @@ -862,6 +865,8 @@ export class CodeGraph { } } catch { /* metadata is advisory — never fail an index over it */ } + if (result.success && result.filesErrored === 0) this.orchestrator.commitHdlProfile(); + // The time covers the whole run, like the totals above. The // orchestrator's covers extraction alone, and the summary printed it // as the run's, leaving out resolution and linking (#2334). @@ -910,7 +915,9 @@ export class CodeGraph { // are stored, as indexAll and sync hold it: returned unawaited, the // promise left the `try` at once and the `finally` let the lock go as // soon as indexing started, so another process could write meanwhile. - return await this.orchestrator.indexFiles(filePaths).finally(() => this.resolver.clearCaches()); + const result = await this.orchestrator.indexFiles(filePaths).finally(() => this.resolver.clearCaches()); + if (result.success && result.filesErrored === 0) this.orchestrator.commitHdlProfile(); + return result; } finally { this.fileLock.release(); } @@ -1452,6 +1459,11 @@ export class CodeGraph { result.changedFilePaths ?? [], edgesBeforeRetry ); + // A deleted duplicate module can make an HDL binding unique again. + // Deletion-only syncs skip the changed-file failed-ref retry above. + const hdlRetry = this.queries.getRetryableFailedReferences(result.definitionDelta) + .filter(ref => ref.referenceName.startsWith('hdl:wildcard:') || ref.referenceName.startsWith('hdl:port-position:')); + if (hdlRetry.length > 0) await this.resolver.resolveAndPersistListYielding(hdlRetry); if (process.env.CODEGRAPH_SYNTH_TIMINGS) { console.error( `[phase-timing] sync-rebind: ${Date.now() - tRebind}ms (${result.definitionDelta.length} changed names, ${rebound} edges re-opened)` @@ -1524,6 +1536,10 @@ export class CodeGraph { if (before !== now) this.stampPythonRootFingerprint(now); } + // Access direction is signature-dependent even if no node name changed. + // Re-open typed and still-unclassified HDL argument sites in untouched files. + this.orchestrator.resurrectHdlCallArgumentEdges(result.changedFilePaths ?? [], result.filesRemoved > 0); + // Orphan sweep (#1187). A resolution pass that dies mid-run — the #850 // daemon liveness watchdog's SIGKILL (#1122), Ctrl-C, a crash — leaves // the refs it never reached in unresolved_refs, and the git-scoped fast @@ -1639,6 +1655,7 @@ export class CodeGraph { try { this.queries.setMetadata('index_state', 'complete'); } catch { /* advisory */ } } + this.orchestrator.commitHdlProfile(); this.orchestrator.finishGitIndexState(gitState, fullReconcile, result.failedFilePaths); if (fullReconcile && result.filesChecked > 0) this.pendingFullReconcile = false; @@ -1717,7 +1734,8 @@ export class CodeGraph { options, process.platform === 'win32' ? (filePath) => this.isIndexedFileStateCurrent(filePath) - : undefined + : undefined, + () => this.getHdlDependencyPaths() ); return this.watcher.start(); @@ -1866,6 +1884,28 @@ export class CodeGraph { * index built before stamping existed (treated as stale). See * `extraction-version.ts` and `isIndexStale()`. */ + getHdlDependencyPaths(): string[] { + try { + const context = JSON.parse(this.queries.getMetadata('hdl_profile_context') ?? 'null'); + return Array.isArray(context?.dependencies) ? context.dependencies.flatMap((d: unknown) => + d && typeof d === 'object' && 'path' in d && typeof d.path === 'string' ? [d.path] : []) : []; + } catch { return []; } + } + + getHdlProfileStatus(): HdlProfileStatus | null { + const configuration = loadHdlProfile(this.projectRoot); + const metadata = { name: this.queries.getMetadata('hdl_profile_name') || null, + fingerprint: this.queries.getMetadata('hdl_profile_fingerprint'), context: this.queries.getMetadata('hdl_profile_context') }; + const hasHdl = this.queries.hasLanguage('verilog'); + if (!hasHdl && !metadata.name && configuration.status === 'invalid-config') return null; + const status = buildHdlProfileStatus(configuration, metadata, hasHdl); + if (status?.state === 'matches' && status.indexed.mode === 'profile' && hdlDependenciesChanged(this.projectRoot, metadata.context)) { + status.state = 'mismatch'; status.mismatch = true; status.reindexRecommended = true; + status.diagnostics.push('HDL include dependency changed since indexing.'); + } + return status; + } + getIndexBuildInfo(): { version: string | null; extractionVersion: number | null } { const version = this.queries.getMetadata('indexed_with_version'); const ev = this.queries.getMetadata('indexed_with_extraction_version'); diff --git a/src/mcp/tools.ts b/src/mcp/tools.ts index 89fa53101f..c268b39011 100644 --- a/src/mcp/tools.ts +++ b/src/mcp/tools.ts @@ -4,7 +4,9 @@ * Defines the tools exposed by the CodeGraph MCP server. */ +import { formatHdlProfileStatus } from '../hdl/status'; import type CodeGraph from '../index'; +import { formatHdlAccess, HDL_ACCESS_FILTERS, type HdlAccessFilter } from './hdl-access'; import type { QueryPool } from './query-pool'; import { findNearestCodeGraphRoot, isSameIndexRoot } from '../directory'; import { WslSharedIndexError } from '../db/wsl-shared-index'; @@ -1838,6 +1840,11 @@ export const tools: ToolDefinition[] = [ type: 'number', description: 'Maximum number of files to return source from, 1–20. Omit it to use a default sized to the project (4 files below 150 indexed files, 5 below 500, 8 otherwise). Total output is also capped by characters (about 13K–24K by project size), so a higher maxFiles spreads that budget over more files rather than returning more text.', }, + hdlAccess: { + type: 'string', + description: 'HDL signal access filter. With this option query must be one exact signal name or qualified name; read includes control/event uses, write includes readwrite. Returns access sites and source, not elaborated drivers.', + enum: [...HDL_ACCESS_FILTERS], + }, projectPath: projectPathProperty, }, required: ['query'], @@ -3164,7 +3171,17 @@ export class ToolHandler { case 'codegraph_callers': return await this.handleCallers(args); case 'codegraph_callees': return await this.handleCallees(args); case 'codegraph_impact': return await this.handleImpact(args); - case 'codegraph_explore': return await this.handleExplore(args); + case 'codegraph_explore': { + const result = await this.handleExplore(args); + if (result.isError) return result; + const profile = this.getCodeGraph(args.projectPath as string | undefined).getHdlProfileStatus?.() ?? null; + const note = formatHdlProfileStatus(profile); + const first = result.content[0]; + if (!note || first?.type !== 'text') return result; + const emission = result[EXPLORE_EMISSION_KEY]; + return { ...result, content: [{type:'text', text:`${note}\n\n${first.text}`}, ...result.content.slice(1)], + ...(emission ? {[EXPLORE_EMISSION_KEY]: {...emission,responseBytes:emission.responseBytes + note.length + 2}} : {}) }; + } case 'codegraph_node': return await this.handleNode(args); case 'codegraph_files': return await this.handleFiles(args); default: return this.errorResult(`Unknown tool: ${toolName}`); @@ -4214,6 +4231,13 @@ export class ToolHandler { const cg = this.getCodeGraph(args.projectPath as string | undefined); const projectRoot = cg.getProjectRoot(); + if (args.hdlAccess !== undefined) { + if (typeof args.hdlAccess !== 'string' || !HDL_ACCESS_FILTERS.includes(args.hdlAccess as HdlAccessFilter)) { + return this.errorResult(`hdlAccess must be one of: ${HDL_ACCESS_FILTERS.join(', ')}`); + } + return this.textResult(this.truncateOutput(formatHdlAccess(cg, rawQuery, args.hdlAccess as HdlAccessFilter, + clamp((args.maxFiles as number) || 12, 1, 20)))); + } // Resolve adaptive output budget from project size. Falls back to the // largest-tier defaults if stats aren't available, which preserves diff --git a/src/resolution/resurrect-ref.ts b/src/resolution/resurrect-ref.ts index 52cb8bc4de..fa502d2022 100644 --- a/src/resolution/resurrect-ref.ts +++ b/src/resolution/resurrect-ref.ts @@ -30,6 +30,9 @@ export function resurrectRefFromDroppedEdge( fromNodeId: e.source, referenceName: refName, referenceKind: refKind, + ...(e.sourceLanguage === 'verilog' && Array.isArray(e.metadata?.refCandidates) + && e.metadata.refCandidates.every((c: unknown) => typeof c === 'string') + ? { candidates: e.metadata.refCandidates as string[] } : {}), line: e.line ?? 0, column: e.column ?? 0, filePath: e.sourceFilePath, diff --git a/src/sync/hdl-watch-scope.ts b/src/sync/hdl-watch-scope.ts new file mode 100644 index 0000000000..009def0983 --- /dev/null +++ b/src/sync/hdl-watch-scope.ts @@ -0,0 +1,47 @@ +import * as path from 'node:path'; +import { loadHdlProfile, isReservedHdlPath, type ActiveHdlProfile } from '../hdl/profile'; + +/** Watch inputs to a selected HDL profile, including files outside the ordinary source filter. + * Retain the last valid scope after a transient deletion/invalid config so a repair is observable. */ +export class HdlWatchScope { + private profile: ActiveHdlProfile | null = null; + private files = new Set(); + private filelists = new Set(); + private includeDirs: string[] = []; + private sourceDirs = new Set(); + private identity = ''; + constructor(private readonly root: string, private readonly getDependencies?: () => string[]) {} + refresh(): boolean { + const loaded = loadHdlProfile(this.root); + if (loaded.status === 'active') this.profile = loaded.profile; + else if (loaded.status === 'none') this.profile = null; + const profile = this.profile; + const files = new Set(profile?.files ?? []); + this.filelists = new Set(profile?.dependencies.map(d => d.path) ?? []); + for (const file of this.filelists) files.add(file); + const dependencies = profile ? this.getDependencies?.() : []; + if (Array.isArray(dependencies)) for (const file of dependencies) { + if (typeof file !== 'string') continue; + const rel = path.relative(this.root, path.resolve(this.root, file)).split(path.sep).join('/'); + if (rel && rel !== '..' && !rel.startsWith('../') && !path.isAbsolute(rel) && !isReservedHdlPath(rel)) files.add(rel); + } + this.files = files; + this.includeDirs = profile?.includeDirs ?? []; + this.sourceDirs = new Set(profile?.files.map(file => path.posix.dirname(file)) ?? []); + const identity = JSON.stringify([[...files].sort(), [...this.filelists].sort(), this.includeDirs, [...this.sourceDirs].sort()]); + const changed = identity !== this.identity; + this.identity = identity; + return changed; + } + isFilelist(rel: string): boolean { return this.filelists.has(rel); } + matchesFile(rel: string): boolean { + if (isReservedHdlPath(rel)) return false; + return this.files.has(rel) || this.sourceDirs.has(path.posix.dirname(rel)) + || this.includeDirs.some(dir => dir === '.' || rel.startsWith(`${dir}/`)); + } + matchesDirectory(rel: string): boolean { + if (!this.profile || isReservedHdlPath(rel)) return false; + return [...this.files].some(file => file.startsWith(`${rel}/`)) + || this.includeDirs.some(dir => dir === '.' || dir === rel || dir.startsWith(`${rel}/`) || rel.startsWith(`${dir}/`)); + } +} diff --git a/src/sync/watcher.ts b/src/sync/watcher.ts index 612c8596d5..e9447e36a9 100644 --- a/src/sync/watcher.ts +++ b/src/sync/watcher.ts @@ -41,6 +41,7 @@ import { logDebug, logWarn } from '../errors'; import { normalizePath } from '../utils'; import { isCodeGraphDataDir } from '../directory'; import { watchDisabledReason } from './watch-policy'; +import { HdlWatchScope } from './hdl-watch-scope'; /** * Number of consecutive lock-contention retries the watcher tolerates before @@ -385,6 +386,7 @@ export class FileWatcher { // scope (#1728). An embedded repo created after start() joins the scope on // the next scope refresh / watcher restart / re-index. private ignoreMatcher: ScopeIgnore | null = null; + private readonly hdlScope: HdlWatchScope; private readonly projectRoot: string; private readonly debounceMs: number; @@ -405,9 +407,11 @@ export class FileWatcher { projectRoot: string, syncFn: (paths?: string[]) => Promise<{ filesChanged: number; durationMs: number }>, options: WatchOptions = {}, - isFileStateCurrent?: (relativePath: string) => boolean + isFileStateCurrent?: (relativePath: string) => boolean, + getHdlDependencyPaths?: () => string[] ) { this.projectRoot = projectRoot; + this.hdlScope = new HdlWatchScope(projectRoot, getHdlDependencyPaths); this.syncFn = syncFn; this.debounceMs = options.debounceMs ?? 2000; this.onSyncComplete = options.onSyncComplete; @@ -443,6 +447,7 @@ export class FileWatcher { // Reuse the indexer's ignore set so the watcher and indexer agree on scope. this.ignoreMatcher = buildScopeIgnore(this.projectRoot); + this.hdlScope.refresh(); try { if (this.inertForTests) { @@ -676,7 +681,12 @@ export class FileWatcher { this.refreshScope(rel); return; } - if (this.ignoreMatcher && this.ignoreMatcher.ignores(rel)) return; + const hdlChange = this.hdlScope.matchesFile(rel) || this.hdlScope.matchesDirectory(rel); + if (this.hdlScope.isFilelist(rel)) { + this.refreshHdlScope(); + this.needsFullScan = true; + } + if (!hdlChange && this.ignoreMatcher && this.ignoreMatcher.ignores(rel)) return; // A nested `.gitignore` (an embedded child repo's own rules, #514, or a // subdirectory rule the git-backed full scan honors) is only a scope // change when it sits INSIDE the current scope — checked after the matcher @@ -687,7 +697,7 @@ export class FileWatcher { this.refreshScope(rel); return; } - if (!isSourceFile(rel, loadExtensionOverrides(this.projectRoot), this.projectRoot)) { + if (!hdlChange && !isSourceFile(rel, loadExtensionOverrides(this.projectRoot), this.projectRoot)) { this.maybeScheduleForRemovedDir(rel); return; } @@ -742,11 +752,18 @@ export class FileWatcher { private refreshScope(rel: string): void { logDebug('Scope config changed; rebuilding watcher scope', { file: rel }); this.ignoreMatcher = buildScopeIgnore(this.projectRoot); + this.hdlScope.refresh(); this.scheduleTreeRefresh(); this.needsFullScan = true; this.scheduleSync(); } + private refreshHdlScope(): void { + // A profile switch can admit a formerly ignored directory; the walk adds + // its watches (and drops ones no longer in scope). + if (this.hdlScope.refresh()) this.refreshWatchTree(); + } + /** * A deleted DIRECTORY arrives as one event on the directory's own path — * no source extension, so the source-file filter drops it, and the files @@ -849,6 +866,7 @@ export class FileWatcher { const rel = normalizePath(path.relative(this.projectRoot, dirPath)); if (!rel || rel === '.' || rel.startsWith('..')) return false; // root / outside if (this.isAlwaysIgnored(rel)) return true; + if (this.hdlScope.matchesDirectory(rel)) return false; if (!this.ignoreMatcher) return false; return this.ignoreMatcher.ignores(rel + '/'); } @@ -1096,6 +1114,7 @@ export class FileWatcher { if (!scoped) this.needsFullScan = false; try { const result = await this.syncFn(scoped); + this.refreshHdlScope(); if (this.recoveringFromLock && !scoped && !this.needsFullScan) { this.degradedReason = null; this.recoveringFromLock = false; @@ -1177,7 +1196,8 @@ export class FileWatcher { // above already set `stopped`, so this won't reschedule a watcher that // has given up. A directory removal whose full sync failed adds no // pending file, only `needsFullScan` — it still owes the full reconcile - // it asked for (#1964). + // it asked for (#1964). So does a scope change (`codegraph.json`, an HDL + // filelist) that landed while a SCOPED sync was in flight. if ((this.pendingFiles.size > 0 || this.needsFullScan) && !this.stopped) { const retryCount = Math.max(this.lockRetryCount, this.syncFailureRetryCount); if (retryCount > 0) { From 1cc6808109cbf00d9c56264a37eef7904fd504ef Mon Sep 17 00:00:00 2001 From: danusha2345 Date: Tue, 15 Sep 2026 15:47:48 +0300 Subject: [PATCH 05/10] feat(verilog): compute parameters and widths through slang or pyslang MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `codegraph hdl-semantic [query]` (and `CodeGraph.getHdlSemantics()`) runs an installed slang executable — or, with `--python`, a Python with pinned pyslang — on a snapshot of the active HDL profile and returns evaluated parameters, port widths and, for the pyslang backend, the macro origins of declarations, initializers and types. Facts carry full provenance (frontend version and hashes, profile and configuration fingerprints, top, overrides, compiler limits) and link to a source node only when the indexed file still matches. Nothing runs automatically and a compiler failure never touches the source graph. The MCP server instructions gain a Verilog/SystemVerilog section covering the hierarchy, port-connection, hdlAccess, profile and semantic queries. --- CHANGELOG.md | 8 + __tests__/hdl-expression-origin.test.ts | 74 +++++ __tests__/hdl-semantic-cli.test.ts | 53 +++ __tests__/hdl-semantic-import.test.ts | 80 +++++ __tests__/hdl-semantic-runner.test.ts | 144 +++++++++ __tests__/hdl-semantics-review.test.ts | 57 ++++ __tests__/hdl-semantics.test.ts | 72 +++++ __tests__/hdl-source-map-asset.test.ts | 8 + __tests__/hdl-source-map-import.test.ts | 41 +++ __tests__/hdl-source-map-review.test.ts | 67 ++++ docs/hdl-macro-source-map.md | 101 ++++++ docs/hdl-semantics.md | 89 ++++++ package.json | 2 +- scripts/verify-hdl-source-map-export.py | 246 ++++++++++++++ src/bin/codegraph.ts | 45 +++ src/hdl/semantic-import.ts | 234 ++++++++++++++ src/hdl/semantic-runner.ts | 263 +++++++++++++++ src/hdl/semantics.ts | 76 +++++ src/hdl/source-map-export.py | 407 ++++++++++++++++++++++++ src/hdl/source-map-import.ts | 99 ++++++ src/index.ts | 10 + src/mcp/server-instructions.ts | 4 + 22 files changed, 2179 insertions(+), 1 deletion(-) create mode 100644 __tests__/hdl-expression-origin.test.ts create mode 100644 __tests__/hdl-semantic-cli.test.ts create mode 100644 __tests__/hdl-semantic-import.test.ts create mode 100644 __tests__/hdl-semantic-runner.test.ts create mode 100644 __tests__/hdl-semantics-review.test.ts create mode 100644 __tests__/hdl-semantics.test.ts create mode 100644 __tests__/hdl-source-map-asset.test.ts create mode 100644 __tests__/hdl-source-map-import.test.ts create mode 100644 __tests__/hdl-source-map-review.test.ts create mode 100644 docs/hdl-macro-source-map.md create mode 100644 docs/hdl-semantics.md create mode 100644 scripts/verify-hdl-source-map-export.py create mode 100644 src/hdl/semantic-import.ts create mode 100644 src/hdl/semantic-runner.ts create mode 100644 src/hdl/semantics.ts create mode 100644 src/hdl/source-map-export.py create mode 100644 src/hdl/source-map-import.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index f58218b4c7..0395005849 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,14 @@ and adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - CodeGraph's refusal to use a sensitive folder such as `~/.ssh`, `~/.config`, `/etc` or `C:\Windows` as a project can no longer be sidestepped: a link or junction that leads to one, a differently capitalized name on Windows and macOS, a `\\?\` spelling on Windows, and a path to a missing folder inside one are now refused like the folder itself. Before, any of these let an AI agent's query read the files inside. Thanks @mixxer for finding it. +### New Features + +- **Verilog and SystemVerilog are indexed.** Modules, packages, interfaces and modports, named instances, ports and signals, always/assign blocks and generate scopes are searchable, and `codegraph_explore` surfaces the instantiation path from a top module down to a nested one; based on the extractor contributed in #402 by @FHYQ-Dong. Re-index projects that contain Verilog files. +- **HDL port bindings resolve to their formal ports.** Named, positional and wildcard (`.*`) connections link an instance's local signals to the instantiated module's ports, and bit or part selects keep their base signal. +- **Signal readers and writers on request.** `codegraph_explore` with `hdlAccess` (CLI: `codegraph explore --hdl-access`) lists where a signal is read, written, used as a control condition or as a clock/reset event, including the direction of arguments passed to known functions and tasks. +- **HDL build profiles.** An optional `hdl` section in `codegraph.json` selects source files or filelists, include directories and defines; conditional-compilation branches are indexed under the active profile, `codegraph status` reports the configured versus the indexed profile, and the file watcher follows filelists and included headers. +- **Computed parameters and port widths.** `codegraph hdl-semantic` runs an installed slang (or pyslang through `--python`) on the active profile and returns evaluated parameters, port widths and macro origins as a separate answer, without touching the indexed graph. + ### Fixes - In TypeScript, an awaited call with type arguments like `await fetchApi("/me")` or `await api.get(url)` now links to the function it calls. Before, the call was dropped, so typed fetch wrappers looked like they had no callers. (#2586) diff --git a/__tests__/hdl-expression-origin.test.ts b/__tests__/hdl-expression-origin.test.ts new file mode 100644 index 0000000000..7709f93821 --- /dev/null +++ b/__tests__/hdl-expression-origin.test.ts @@ -0,0 +1,74 @@ +import { afterEach, expect, it, vi } from 'vitest'; +import { createHash } from 'node:crypto'; +import { importMappedSemantics } from '../src/hdl/source-map-import'; +import { analyzeHdlSemantics, type HdlSemanticSourceGraph } from '../src/hdl/semantics'; +import type { HdlProfileStatus } from '../src/hdl/status'; +import type { FileRecord, Node } from '../src/types'; +const {run}=vi.hoisted(()=>({run:vi.fn()})); +vi.mock('../src/hdl/semantic-runner',()=>({runSlangSemantics:run})); +afterEach(()=>run.mockReset()); +const sources={'defs.svh':'`define WIDTH 8\r\n','top.sv':'// Ω\r\nmodule top #(parameter W = `WIDTH)(); endmodule\r\n'}; +function point(file:keyof typeof sources,byteOffset:number){const prefix=Buffer.from(sources[file]).subarray(0,byteOffset);return {file,byteOffset,line:[...prefix].filter(n=>n===10).length+1,column:byteOffset-prefix.lastIndexOf(10)};} +const start=Buffer.from(sources['top.sv']).indexOf('`WIDTH'); +function origin(role='initializer') {return {role,sourceOrigin:'macro',source:{file:'top.sv',line:2,column:28},macroExpansionComplete:true, + macroExpansion:[{name:'WIDTH',argument:false,spelling:point('defs.svh',Buffer.from(sources['defs.svh']).indexOf('8')),invocation:{start:point('top.sv',start),end:point('top.sv',start+6)}}]};} +function fact(){return {kind:'parameter',name:'W',instancePath:'top',value:'8',type:'int',width:32,sourceOrigin:'direct',source:{file:'top.sv',line:2,column:24}, + expressionOrigins:[origin()],expressionOriginCoverage:{initializer:'checked',declaredInitializer:'not-applicable',type:'not-applicable',truncated:false}};} +const payload=(f:unknown=fact())=>({codegraphSemanticVersion:1,facts:[f]}); + +it('keeps a direct declaration link when its initializer comes from a macro, preserving distinct scopes of provenance',async()=>{ + const graph:HdlSemanticSourceGraph={profile:()=>({state:'matches',indexed:{configurationFingerprint:'cfg'}} as HdlProfileStatus),stale:()=>false, + file:()=>({contentHash:createHash('sha256').update(sources['top.sv']).digest('hex')} as FileRecord),nodes:()=>[{id:'decl-W',kind:'constant',name:'W',startLine:2} as Node]}; + run.mockResolvedValue({frontend:'pyslang',ast:payload(),sources,sourceRoot:'/snapshot',profileName:'p',configurationFingerprint:'cfg',fingerprint:'snapshot', + version:'fixture',executableSha256:'python',exporterSha256:'exporter',librarySha256:'native',top:'top',parameters:{},allowUseBeforeDeclare:false, + languageStandard:'1800-2023',compilationUnitMode:'separate',runnerVersion:'test',compilerLimits:[],diagnostics:[]}); + const result=await analyzeHdlSemantics('/project',{pythonExecutable:'python',query:'top.W'},graph); + expect(result.facts[0]!.sourceNodeId).toBe('decl-W'); + expect(result.facts[0]!.sourceOrigin).toBe('direct'); + expect(result.facts[0]!.expressionOrigins![0]!.sourceOrigin).toBe('macro'); + expect(result.facts[0]!.expressionOrigins![0]!.macroExpansion[0]!.spelling!.file).toBe('defs.svh'); +}); + +it('preserves separate declared-initializer and type coverage when the effective initializer is supplied on the command line',()=>{ + const f=fact();f.expressionOriginCoverage={initializer:'command-line',declaredInitializer:'checked',type:'checked',truncated:true}; + f.expressionOrigins=[origin('declared-initializer'),origin('type')]; + const normalized=importMappedSemantics(payload(f),sources)[0]!; + expect(normalized.expressionOrigins!.map(e=>e.role)).toEqual(['declared-initializer','type']); + expect(normalized.expressionOriginCoverage).toEqual(f.expressionOriginCoverage); +}); + +it.each(['initializer','declaredInitializer','type'])('rejects non-string coverage even when coercion would resemble a known enum: %s',key=>{ + const f:any=fact();f.expressionOrigins=[];f.expressionOriginCoverage[key]=['checked']; + expect(()=>importMappedSemantics(payload(f),sources)).toThrow('coverage'); +}); + +it('rejects missing coverage, invalid roles/origins, contradictory coverage and malformed truncation',()=>{ + let f:any=fact();delete f.expressionOriginCoverage;expect(()=>importMappedSemantics(payload(f),sources)).toThrow('origins'); + f=fact();f.expressionOrigins[0].sourceOrigin='direct';expect(()=>importMappedSemantics(payload(f),sources)).toThrow('role'); + f=fact();f.expressionOrigins[0].role='expression';expect(()=>importMappedSemantics(payload(f),sources)).toThrow('role'); + f=fact();f.expressionOriginCoverage.initializer='unavailable';expect(()=>importMappedSemantics(payload(f),sources)).toThrow('contradicts'); + f=fact();f.expressionOriginCoverage.declaredInitializer='command-line';expect(()=>importMappedSemantics(payload(f),sources)).toThrow('coverage'); + f=fact();f.expressionOriginCoverage.truncated='false';expect(()=>importMappedSemantics(payload(f),sources)).toThrow('coverage'); +}); + +it('uses immutable source and byte-coordinate checks for every expression macro frame and source',()=>{ + let f:any=fact();f.expressionOrigins[0].macroExpansion[0].spelling.file='../defs.svh';expect(()=>importMappedSemantics(payload(f),sources)).toThrow('snapshot'); + f=fact();f.expressionOrigins[0].macroExpansion[0].spelling.byteOffset++;expect(()=>importMappedSemantics(payload(f),sources)).toThrow('disagree'); + f=fact();f.expressionOrigins[0].source={file:'top.sv',line:1,column:5};expect(()=>importMappedSemantics(payload(f),sources)).toThrow('UTF-8'); + f=fact();f.expressionOrigins[0].macroExpansion[0].invocation.end={...point('top.sv',start),file:'defs.svh'};expect(()=>importMappedSemantics(payload(f),sources)).toThrow(); +}); + +it('rejects duplicate normalized entries even if their raw objects differ by unrecognized fields',()=>{ + const f:any=fact();f.expressionOrigins.push({...origin(),ignored:'not-an-identity'}); + expect(()=>importMappedSemantics(payload(f),sources)).toThrow('duplicate expression'); +}); + +it('enforces the per-fact expression cap and one shared frame budget for declaration and expression origins',()=>{ + const f:any=fact();f.expressionOrigins=Array.from({length:33},()=>origin());expect(()=>importMappedSemantics(payload(f),sources)).toThrow('origins'); + const chain=(name:string)=>Array.from({length:128},(_,i)=>({name:i===0?name:'nested',argument:false})); + const facts=Array.from({length:25},(_,i)=>({...fact(),name:'W'+i,sourceOrigin:'macro',macroExpansion:chain('declaration'),macroExpansionComplete:false, + expressionOrigins:Array.from({length:31},(_,j)=>({role:'initializer',sourceOrigin:'macro',macroExpansion:chain('expression'+j),macroExpansionComplete:false}))})); + // Expressions alone have 99,200 frames; only a shared declaration+expression + // budget rejects this 102,400-frame payload. + expect(()=>importMappedSemantics({codegraphSemanticVersion:1,facts},sources)).toThrow('frame count'); +}); diff --git a/__tests__/hdl-semantic-cli.test.ts b/__tests__/hdl-semantic-cli.test.ts new file mode 100644 index 0000000000..9058c51ac7 --- /dev/null +++ b/__tests__/hdl-semantic-cli.test.ts @@ -0,0 +1,53 @@ +import { expect, it } from 'vitest'; +import * as fs from 'node:fs'; +import * as os from 'node:os'; +import * as path from 'node:path'; +import { spawnSync } from 'node:child_process'; +import CodeGraph from '../src/index'; + +it.skipIf(process.platform === 'win32')('compiled hdl-semantic CLI passes explicit overrides and rejects duplicate/invalid options', () => { + const temp = fs.mkdtempSync(path.join(os.tmpdir(), 'hdl-semantic-cli-')); + const root = path.join(temp, 'project'); fs.mkdirSync(root); + const tool = path.join(temp, 'fake-slang'); + fs.writeFileSync(tool, `#!${process.execPath} +const fs=require('node:fs'),a=process.argv.slice(2),python=a[0]==='-I'; +if(a.includes('--version')) console.log(python?'codegraph pyslang 11.0.0 exporter 1 native '+'a'.repeat(64):'slang version 11.0.448'); +else { + const override=a[a.indexOf('-G')+1],value=override?.startsWith('W=')?override.slice(2):'8'; + const output=python?{codegraphSemanticVersion:1,facts:[{kind:'parameter',name:'W',instancePath:'top',value,sourceOrigin:'direct',source:{file:'top.sv',line:1,column:24}}]}: + {design:{kind:'Root',members:[{kind:'Instance',name:'top',body:{kind:'InstanceBody',members:[{kind:'Parameter',name:'W',value,type:{kind:'PredefinedIntegerType',name:'int'},source_file:'top.sv',source_line:1,source_column:24}]}}]}}; + fs.writeFileSync(a[a.indexOf('--ast-json')+1],JSON.stringify(output)); +} +`, { mode: 0o700 }); + fs.writeFileSync(path.join(root, 'top.sv'), 'module top #(parameter W=8)(); endmodule\n'); + fs.writeFileSync(path.join(root, 'codegraph.json'), JSON.stringify({ hdl: { activeProfile: 'synth', profiles: { + synth: { files: ['top.sv'], topModules: ['top'] }, + } } })); + const bin = path.resolve(__dirname, '../dist/bin/codegraph.js'); + const run = (args: string[]) => spawnSync(process.execPath, [bin, ...args], { + encoding: 'utf8', timeout: 30000, env: { ...process.env, CODEGRAPH_NO_DAEMON: '1', + CODEGRAPH_SEMANTIC_TMPDIR: path.join(temp, 'snapshots'), NO_COLOR: '1' }, + }); + try { + CodeGraph.initSync(root).close(); + const indexed = run(['index', root, '--quiet']); expect(indexed.status, indexed.stderr).toBe(0); + const result = run(['hdl-semantic', 'top.W', '--path', root, '--slang', tool, '--parameter', 'W=16']); + expect(result.status, result.stderr).toBe(0); + const body = JSON.parse(result.stdout); + expect(body.provenance.parameters).toEqual({ W: '16' }); + expect(body.provenance.compilationUnitMode).toBe('separate'); + expect(body.facts[0]).toMatchObject({ name: 'W', value: '16' }); + expect(body.facts[0].sourceNodeId).toBeTruthy(); + const mapped = run(['hdl-semantic', 'W', '--path', root, '--python', tool, '--parameter', 'W=12']); + expect(mapped.status, mapped.stderr).toBe(0); + expect(JSON.parse(mapped.stdout).provenance.frontend).toBe('pyslang'); + expect(JSON.parse(mapped.stdout).facts[0]).toMatchObject({ value: '12', sourceOrigin: 'direct' }); + const dual = run(['hdl-semantic', '--path', root, '--slang', tool, '--python', tool]); + expect(dual.status).toBe(1); expect(dual.stderr).toContain('exactly one'); + const duplicate = run(['hdl-semantic', '--path', root, '--slang', tool, '--parameter', 'W=1', 'W=2']); + expect(duplicate.status).toBe(1); expect(duplicate.stderr).toContain('Duplicate HDL parameter'); + const invalid = run(['hdl-semantic', '--path', root, '--slang', tool, '--limit', '1junk']); + expect(invalid.status).toBe(1); expect(invalid.stderr).toContain('1..1000'); + expect(fs.readdirSync(path.join(temp, 'snapshots'))).toHaveLength(0); + } finally { fs.rmSync(temp, { recursive: true, force: true }); } +}); diff --git a/__tests__/hdl-semantic-import.test.ts b/__tests__/hdl-semantic-import.test.ts new file mode 100644 index 0000000000..a41abbaff6 --- /dev/null +++ b/__tests__/hdl-semantic-import.test.ts @@ -0,0 +1,80 @@ +import { describe, expect, it } from 'vitest'; +import { importSlangSemantics } from '../src/hdl/semantic-import'; +const scalar={kind:'ScalarType',name:'logic',addr:1,isSigned:false}; +const parameter=(name:string,value:string)=>({kind:'Parameter',name,value,type:{kind:'PredefinedIntegerType',name:'int'}}); +const instance=(name:string,body:unknown)=>({kind:'Instance',name,body}); +const body=(members:unknown[],addr?:number)=>({kind:'InstanceBody',name:'leaf',members,...(addr?{addr}:{})}); +const design=(...members:unknown[])=>({design:{kind:'Root',name:'$root',members}}); + +describe('bounded slang semantic importer',()=>{ + it('imports primitive facts with source points and detailed packed widths',()=>{ + const facts=importSlangSemantics(design(instance('top',body([ + {...parameter('N',"32'd2"),source_file:'rtl/top.sv',source_line:4,source_column:9}, + {kind:'Port',name:'q',direction:'Out',type:{kind:'PackedArrayType',name:'',elementType:scalar,range:'[15:0]'},source_file:'rtl/top.sv',source_line:8,source_column:0}, + ]))),'/project'); + expect(facts).toEqual([ + {kind:'parameter',name:'N',instancePath:'top',value:"32'd2",type:'int',width:32,source:{file:'rtl/top.sv',line:4,column:9}}, + {kind:'port',name:'q',instancePath:'top',type:'logic[15:0]',width:16,direction:'Out',source:{file:'rtl/top.sv',line:8,column:null}}, + ]); + }); + it('revisits shared bodies per instance and keeps specialized parameter values separate',()=>{ + const shared=body([parameter('P','2')],10); + const ast=design(instance('top',body([instance('u1',shared),instance('u2','10 leaf'),instance('u3',body([parameter('P','4')],11))]))); + expect(importSlangSemantics(ast,'/project').map(f=>[f.instancePath,f.value])).toEqual([['top.u1','2'],['top.u2','2'],['top.u3','4']]); + }); + it('uses implicit generate index values, not iteration ordinals, and skips uninstantiated branches',()=>{ + const loop={kind:'GenerateBlockArray',name:'lanes',loopVariable:'999 i',members:[{kind:'Genvar',name:'i'}, + {kind:'GenerateBlock',name:'',constructIndex:0,isUninstantiated:false,members:[parameter('i','2'),instance('u',body([parameter('P','8')]))]}, + {kind:'GenerateBlock',name:'',constructIndex:1,isUninstantiated:false,members:[parameter('i','4'),instance('u',body([parameter('P','8')]))]}, + ]}; + const ast=design(instance('top',body([loop,{kind:'GenerateBlock',name:'inactive',isUninstantiated:true,members:[instance('bad','404 missing')]}]))); + expect(importSlangSemantics(ast,'/project').filter(f=>f.name==='P').map(f=>f.instancePath)).toEqual(['top.lanes[2].u','top.lanes[4].u']); + }); + it('maps instance arrays in Slang numeric ascending element order',()=>{ + const array={kind:'InstanceArray',name:'a',range:'[3:2]',members:[instance('',body([parameter('P','10')])),instance('',body([parameter('P','20')]))]}; + expect(importSlangSemantics(design(instance('top',body([array]))),'/project').map(f=>[f.instancePath,f.value])).toEqual([['top.a[2]','10'],['top.a[3]','20']]); + }); + it('does not guess complex/unpacked widths or retain process addresses in type text',()=>{ + const ast=design(instance('top',body([ + {kind:'Port',name:'s',type:{kind:'PackedStructType',name:'Packet',members:[]}}, + {kind:'Port',name:'a',type:{kind:'FixedSizeUnpackedArrayType',name:'',elementType:scalar,range:'[7:0]'}}, + {kind:'Port',name:'pretty',type:'logic[7:0]'}, + {kind:'Port',name:'alias',type:{kind:'TypeAlias',name:'word_t',addr:5,target:{kind:'PackedArrayType',name:'',elementType:scalar,range:'[3:0]'}}}, + {kind:'Port',name:'ref',type:'5 top.word_t'}, + ]))); + const facts=importSlangSemantics(ast,'/project');expect(facts.slice(0,3).map(f=>f.width)).toEqual([undefined,undefined,undefined]); + expect(facts[4]).toMatchObject({type:'top.word_t',width:4});expect(JSON.stringify(facts)).not.toContain('5 top'); + }); + it('confines sources and preserves frontend Unicode columns without conversion',()=>{ + const facts=importSlangSemantics(design(instance('top',body([ + {...parameter('unicode','1'),source_file:'rtl/😀.sv',source_line:2,source_column:17}, + {...parameter('outside','1'),source_file:'../external.sv',source_line:2,source_column:17}, + {...parameter('absolute','1'),source_file:'/elsewhere/file.sv',source_line:2,source_column:17}, + {...parameter('windows','1'),source_file:'C:\\elsewhere\\file.sv',source_line:2,source_column:17}, + {...parameter('relativeWindows','1'),source_file:'..\\elsewhere\\file.sv',source_line:2,source_column:17}, + ]))),'/project'); + expect(facts[0]?.source).toEqual({file:'rtl/😀.sv',line:2,column:17});expect(facts.slice(1).map(f=>f.source)).toEqual([undefined,undefined,undefined,undefined]); + }); + it('does not treat Object prototype names as known integer widths',()=>{ + const facts=importSlangSemantics(design(instance('top',body([{kind:'Port',name:'x',type:'constructor'}]))),'/project'); + expect(facts[0]?.width).toBeUndefined(); + }); + it('escapes hierarchy segments that contain literal dots',()=>{ + const facts=importSlangSemantics(design(instance('top',body([instance('a.b',body([parameter('P','1')]))]))),'/project'); + expect(facts[0]?.instancePath).toBe('top.\\a.b '); + }); + it('rejects malformed schema, missing references, cycles and excessive hierarchy names',()=>{ + expect(()=>importSlangSemantics({},'/project')).toThrow(); + expect(()=>importSlangSemantics({design:{kind:'Root',members:new Array(1_000_001)}},'/project')).toThrow('node limit'); + expect(()=>importSlangSemantics(design(instance('top','99 missing')),'/project')).toThrow('unresolved'); + expect(()=>importSlangSemantics(design(instance('x'.repeat(4097),body([]))),'/project')).toThrow('oversized'); + const cyclic=body([],10);cyclic.members.push(instance('again','10 leaf')); + expect(()=>importSlangSemantics(design(instance('top',cyclic)),'/project')).toThrow('cyclic instance'); + const input:any=design();input.extra=input; + expect(()=>importSlangSemantics(input,'/project')).toThrow('cyclic input'); + }); + it('rejects ambiguous generated indices and array shape mismatches',()=>{ + expect(()=>importSlangSemantics(design(instance('top',body([{kind:'GenerateBlockArray',name:'g',loopVariable:'1 i',members:[{kind:'GenerateBlock',name:'',members:[]}]}]))),'/project')).toThrow('index parameter'); + expect(()=>importSlangSemantics(design(instance('top',body([{kind:'InstanceArray',name:'a',range:'[3:0]',members:[]}]))),'/project')).toThrow('length disagrees'); + }); +}); diff --git a/__tests__/hdl-semantic-runner.test.ts b/__tests__/hdl-semantic-runner.test.ts new file mode 100644 index 0000000000..06b43e8f6c --- /dev/null +++ b/__tests__/hdl-semantic-runner.test.ts @@ -0,0 +1,144 @@ +import { afterEach, beforeEach, describe, expect, it } from 'vitest'; +import * as fs from 'node:fs'; +import * as os from 'node:os'; +import * as path from 'node:path'; +import { runSlangSemantics } from '../src/hdl/semantic-runner'; + +const suite = process.platform==='win32' ? describe.skip : describe; +suite('isolated optional slang runner',()=>{ + let base:string,root:string,temp:string,exe:string,oldTemp:string|undefined; + const write=(file:string,text:string)=>{fs.mkdirSync(path.dirname(path.join(root,file)),{recursive:true});fs.writeFileSync(path.join(root,file),text);}; + const fake=(body='')=>{ + const script=`#!${process.execPath}\nconst fs=require('node:fs'),cp=require('node:child_process');const args=process.argv.slice(2);if(args.includes('--version')){console.log('slang version 11.0.448+e222e7dc0');process.exit(0);}const output=args[args.indexOf('--ast-json')+1];${body}\nfs.writeFileSync(output,JSON.stringify({kind:'Root',argv:args,source:fs.readFileSync('rtl/top.sv','utf8'),include:fs.readFileSync('inc/common.flags','utf8'),cwd:process.cwd()}));`; + fs.writeFileSync(exe,script,{mode:0o700}); + }; + const fakePython=(body='',version=`codegraph pyslang 11.0.0 exporter 1 native ${'a'.repeat(64)}`)=>{ + const script=`#!${process.execPath}\nconst fs=require('node:fs');const args=process.argv.slice(2);if(args.includes('--version')){console.log(${JSON.stringify(version)});process.exit(0);}if(args[0]!=='-I'||!args[1].endsWith('source-map-export.py'))process.exit(3);const output=args[args.indexOf('--ast-json')+1];${body}\nfs.writeFileSync(output,JSON.stringify({codegraphSemanticVersion:1,facts:[],argv:args,launcher:process.argv[1]}));`; + fs.writeFileSync(exe,script,{mode:0o700}); + }; + beforeEach(()=>{ + const storage=path.join(os.homedir(),'storage');fs.mkdirSync(storage,{recursive:true}); + base=fs.mkdtempSync(path.join(storage,'cg-semantic-test-'));root=path.join(base,'project');temp=path.join(base,'snapshots');exe=path.join(base,'fake-slang'); + fs.mkdirSync(root);oldTemp=process.env.CODEGRAPH_SEMANTIC_TMPDIR;process.env.CODEGRAPH_SEMANTIC_TMPDIR=temp; + write('rtl/top.sv','`include "../inc/common.flags"\nmodule top; endmodule\n');write('inc/common.flags','`define VALUE 1\n'); + write('codegraph.json',JSON.stringify({hdl:{activeProfile:'synth',profiles:{synth:{files:['rtl/top.sv'],includeDirs:['inc'],topModules:['top'],defines:{SAFE:'1'}}}}}));fake(); + }); + afterEach(()=>{if(oldTemp===undefined)delete process.env.CODEGRAPH_SEMANTIC_TMPDIR;else process.env.CODEGRAPH_SEMANTIC_TMPDIR=oldTemp;fs.rmSync(base,{recursive:true,force:true});}); + it('requires exactly one explicit backend selector',async()=>{ + await expect(runSlangSemantics(root,{})).rejects.toThrow('exactly one'); + await expect(runSlangSemantics(root,{executable:exe,pythonExecutable:exe})).rejects.toThrow('exactly one'); + }); + it('runs only isolated Python and records exporter/native hashes with normalized facts',async()=>{ + fakePython(); + const launcher=path.join(base,'venv/bin/python');fs.mkdirSync(path.dirname(launcher),{recursive:true});fs.symlinkSync(exe,launcher); + const result=await runSlangSemantics(root,{pythonExecutable:launcher,parameters:{WIDTH:'4'}}); + expect(result.frontend).toBe('pyslang');expect(result.exporterSha256).toMatch(/^[a-f0-9]{64}$/);expect(result.librarySha256).toBe('a'.repeat(64)); + expect((result.ast as any).codegraphSemanticVersion).toBe(1);expect((result.ast as any).argv[0]).toBe('-I'); + expect((result.ast as any).launcher).toBe(launcher);expect((result.ast as any).argv).toContain('WIDTH=4');expect(fs.readdirSync(temp)).toEqual([]); + }); + it('rejects unsupported Python exporter/library versions and malformed envelopes',async()=>{ + fakePython('','codegraph pyslang 12.0.0 exporter 1 native '+ 'a'.repeat(64)); + await expect(runSlangSemantics(root,{pythonExecutable:exe})).rejects.toThrow('schema family'); + fakePython("fs.writeFileSync(output,JSON.stringify({codegraphSemanticVersion:2,facts:[]}));process.exit(0);"); + await expect(runSlangSemantics(root,{pythonExecutable:exe})).rejects.toThrow('exporter envelope'); + }); + it('rejects a Python native library fingerprint that changes across the run',async()=>{ + const marker=path.join(base,'library-changed'); + const script=`#!${process.execPath}\nconst fs=require('node:fs'),args=process.argv.slice(2);if(args.includes('--version')){console.log('codegraph pyslang 11.0.0 exporter 1 native '+(fs.existsSync(${JSON.stringify(marker)})?'b':'a').repeat(64));process.exit(0);}fs.writeFileSync(${JSON.stringify(marker)},'changed');fs.writeFileSync(args[args.indexOf('--ast-json')+1],JSON.stringify({codegraphSemanticVersion:1,facts:[]}));`; + fs.writeFileSync(exe,script,{mode:0o700});await expect(runSlangSemantics(root,{pythonExecutable:exe})).rejects.toThrow('library changed'); + expect(fs.readdirSync(temp)).toEqual([]); + }); + it('applies the same output and cancellation bounds to Python',async()=>{ + fakePython("process.stdout.write('x'.repeat(1024*1024+1));setInterval(()=>{},1000);return;"); + await expect(runSlangSemantics(root,{pythonExecutable:exe})).rejects.toThrow('output exceeds'); + fakePython("setInterval(()=>{},1000);return;"); + const controller=new AbortController(),pending=runSlangSemantics(root,{pythonExecutable:exe,signal:controller.signal}); + setTimeout(()=>controller.abort(),100);await expect(pending).rejects.toThrow('cancelled');expect(fs.readdirSync(temp)).toEqual([]); + }); + it('copies literal headers and argv safely, returns provenance/source map and removes snapshots',async()=>{ + const result=await runSlangSemantics(root,{executable:exe,parameters:{WIDTH:'8'},allowUseBeforeDeclare:true}); + const ast=result.ast as any; + expect(ast.source).toBe(result.sources['rtl/top.sv']);expect(ast.include).toBe(result.sources['inc/common.flags']); + expect(ast.argv).toContain('-DSAFE=1');expect(ast.argv).toContain('WIDTH=8');expect(ast.argv).toContain('--allow-use-before-declare'); + expect(result.configurationFingerprint).toMatch(/^[a-f0-9]{64}$/);expect(result.executableSha256).toMatch(/^[a-f0-9]{64}$/); + expect(result.sourceRoot).toBe(ast.cwd);expect(fs.existsSync(result.sourceRoot)).toBe(false);expect(fs.readdirSync(temp)).toEqual([]); + expect((await runSlangSemantics(root,{executable:exe,parameters:{WIDTH:'8'},allowUseBeforeDeclare:true})).fingerprint).toBe(result.fingerprint); + }); + it('captures caller options before awaits and records the explicit compilation mode',async()=>{ + const replacement=new AbortController();replacement.abort(); + const options={executable:exe,allowUseBeforeDeclare:false,parameters:{WIDTH:'4'},signal:new AbortController().signal}; + const pending=runSlangSemantics(root,options); + options.allowUseBeforeDeclare=true;options.parameters.WIDTH='9';options.signal=replacement.signal; + const result=await pending;expect(result.allowUseBeforeDeclare).toBe(false);expect(result.parameters.WIDTH).toBe('4'); + expect(result.languageStandard).toBe('1800-2023');expect(result.compilationUnitMode).toBe('separate'); + expect((result.ast as any).argv).not.toContain('--allow-use-before-declare'); + expect((result.ast as any).argv).toContain('--max-generate-steps=10000'); + }); + it('rejects include directives injected through configured macro values',async()=>{ + const file=path.join(root,'codegraph.json'),cfg=JSON.parse(fs.readFileSync(file,'utf8')); + cfg.hdl.profiles.synth.defines.LOAD='`include "/etc/passwd"';fs.writeFileSync(file,JSON.stringify(cfg)); + await expect(runSlangSemantics(root,{executable:exe})).rejects.toThrow('Absolute include'); + }); + it('preserves UTF-8 BOM and source-relative headers outside include directories',async()=>{ + write('rtl/top.sv','\ufeff`include "../private/local.inc"\nmodule top; endmodule\n');write('private/local.inc','// header\n'); + const result=await runSlangSemantics(root,{executable:exe});expect(result.sources['rtl/top.sv'].charCodeAt(0)).toBe(0xfeff); + expect(result.sources['private/local.inc']).toBe('// header\n'); + }); + it('requires an available approved version and an explicit profile/top',async()=>{ + await expect(runSlangSemantics(root,{executable:path.join(base,'missing')})).rejects.toThrow('unavailable'); + fs.writeFileSync(exe,`#!${process.execPath}\nconsole.log('slang version 12.0');`,{mode:0o700}); + await expect(runSlangSemantics(root,{executable:exe})).rejects.toThrow('schema family'); + write('codegraph.json','{}');await expect(runSlangSemantics(root,{executable:exe,top:'top'})).rejects.toThrow('active HDL profile'); + }); + it.each(['`include "/etc/passwd"','`include "../../../outside"','`include `FILE'])('rejects unsafe/unresolved snapshot include forms %s',async line=>{ + write('rtl/top.sv',line+'\nmodule top; endmodule');await expect(runSlangSemantics(root,{executable:exe})).rejects.toThrow(/include|escapes/); + }); + it('rejects symlink headers and oversized individual inputs',async()=>{ + fs.symlinkSync(path.join(base,'external'),path.join(root,'inc/link.flags')); + await expect(runSlangSemantics(root,{executable:exe})).rejects.toThrow('Symbolic links'); + fs.unlinkSync(path.join(root,'inc/link.flags'));write('inc/large.flags','x'.repeat(1024*1024+1)); + await expect(runSlangSemantics(root,{executable:exe})).rejects.toThrow('input size'); + }); + it('rejects original-content changes even with restored size/mtime',async()=>{ + const file=path.join(root,'inc/common.flags'); + fake(`const p=${JSON.stringify(file)},s=fs.statSync(p);fs.writeFileSync(p,'\x60define VALUE 2\\n');fs.utimesSync(p,s.atime,s.mtime);`); + await expect(runSlangSemantics(root,{executable:exe})).rejects.toThrow('sources or configuration changed'); + expect(fs.readdirSync(temp)).toEqual([]); + }); + it('rejects creation of a previously missing source-relative shadow candidate',async()=>{ + write('rtl/top.sv','`include "common.flags"\nmodule top; endmodule'); + fake(`fs.writeFileSync(${JSON.stringify(path.join(root,'rtl/common.flags'))},'// new shadow');`); + await expect(runSlangSemantics(root,{executable:exe})).rejects.toThrow('sources or configuration changed'); + }); + it('rejects a frontend that edits the snapshot, malformed AST and oversized output',async()=>{ + fake("fs.writeFileSync('rtl/top.sv','module changed; endmodule');"); + await expect(runSlangSemantics(root,{executable:exe})).rejects.toThrow('modified its source snapshot'); + fake("fs.writeFileSync(output,'not JSON');process.exit(0);"); + await expect(runSlangSemantics(root,{executable:exe})).rejects.toThrow(); + fake("fs.writeFileSync(output,'');fs.truncateSync(output,64*1024*1024+1);process.exit(0);"); + await expect(runSlangSemantics(root,{executable:exe})).rejects.toThrow(/oversized|exceeds/); + expect(fs.readdirSync(temp)).toEqual([]); + }); + it('times out and cancels its own process group without leaving snapshots',async()=>{ + fake("setInterval(()=>{},1000);return;"); + await expect(runSlangSemantics(root,{executable:exe,timeoutMs:100})).rejects.toThrow('timed out'); + const controller=new AbortController();const promise=runSlangSemantics(root,{executable:exe,signal:controller.signal}); + setTimeout(()=>controller.abort(),100);await expect(promise).rejects.toThrow('cancelled');expect(fs.readdirSync(temp)).toEqual([]); + }); + it('cancels descendants in the owned process group',async()=>{ + const heartbeat=path.join(base,'heartbeat'); + const childCode=`setInterval(()=>require('node:fs').appendFileSync(${JSON.stringify(heartbeat)},'x'),20)`; + fake(`cp.spawn(process.execPath,['-e',${JSON.stringify(childCode)}],{stdio:'ignore'});setInterval(()=>{},1000);return;`); + const controller=new AbortController(),pending=runSlangSemantics(root,{executable:exe,signal:controller.signal}); + const end=Date.now()+4000;while(!fs.existsSync(heartbeat)){if(Date.now()>end)throw new Error('descendant did not start');await new Promise(r=>setTimeout(r,20));} + controller.abort();await expect(pending).rejects.toThrow('cancelled'); + const before=fs.statSync(heartbeat).size;await new Promise(r=>setTimeout(r,100));expect(fs.statSync(heartbeat).size).toBe(before); + expect(fs.readdirSync(temp)).toEqual([]); + }); + it('bounds stdout/stderr and rejects frontend errors',async()=>{ + fake("process.stdout.write('x'.repeat(1024*1024+1));setInterval(()=>{},1000);return;"); + await expect(runSlangSemantics(root,{executable:exe})).rejects.toThrow('output exceeds'); + fake("process.stderr.write('invalid design');process.exit(2);"); + await expect(runSlangSemantics(root,{executable:exe})).rejects.toThrow('invalid design'); + }); +}); diff --git a/__tests__/hdl-semantics-review.test.ts b/__tests__/hdl-semantics-review.test.ts new file mode 100644 index 0000000000..9cb4191640 --- /dev/null +++ b/__tests__/hdl-semantics-review.test.ts @@ -0,0 +1,57 @@ +import { afterEach, expect, it, vi } from 'vitest'; +import { createHash } from 'node:crypto'; +import type { Node, FileRecord } from '../src/types'; +import type { HdlProfileStatus } from '../src/hdl/status'; +import { analyzeHdlSemantics, type HdlSemanticOptions, type HdlSemanticSourceGraph } from '../src/hdl/semantics'; +const { run }=vi.hoisted(()=>({run:vi.fn()})); +vi.mock('../src/hdl/semantic-runner',()=>({runSlangSemantics:run})); +afterEach(()=>run.mockReset()); +const text='module top #(parameter W = 8)(input logic data); endmodule'; +function result(source=text,column=24,kind:'Parameter'|'Port'='Parameter',name='W') { + return {ast:{design:{kind:'Root',members:[{kind:'Instance',name:'top',body:{kind:'InstanceBody',members:[{ + kind,name,...(kind==='Parameter'?{value:'8',type:'int'}:{type:'logic',direction:'In'}), + source_file:'/snapshot/top.sv',source_line:1,source_column:column, + }]}}]}},sourceRoot:'/snapshot',profileName:'p',configurationFingerprint:'cfg',fingerprint:'captured', + version:'slang fixture',executableSha256:'sha',sources:{'top.sv':source},top:'top',parameters:{W:'8'},allowUseBeforeDeclare:false,diagnostics:[]}; +} +function sourceGraph(nodes:Partial[],source=text):HdlSemanticSourceGraph { + return {profile:()=>({state:'matches',indexed:{configurationFingerprint:'cfg'}} as HdlProfileStatus),stale:()=>false, + file:()=>({contentHash:createHash('sha256').update(source).digest('hex')} as FileRecord), + nodes:()=>nodes.map(n=>({id:'node',name:'W',startLine:1,filePath:'top.sv',language:'verilog',...n} as Node))}; +} + +it('reports the captured compiler options and initial query even if the caller mutates options during the run',async()=>{ + const options:HdlSemanticOptions={executable:'slang',query:'top.W',parameters:{W:'8'},allowUseBeforeDeclare:false}; + run.mockImplementation(async()=>{ + options.parameters!.W='12';options.allowUseBeforeDeclare=true;options.query='missing'; + return result(); + }); + const value=await analyzeHdlSemantics('/project',options,sourceGraph([{kind:'constant'}])); + expect(value.facts).toHaveLength(1); + expect(value.facts[0]!.value).toBe('8'); + expect(value.provenance.parameters).toEqual({W:'8'}); + expect(value.provenance.allowUseBeforeDeclare).toBe(false); +}); + +it.each([ + {kind:'Parameter' as const,name:'W',column:24,nodes:[{kind:'function' as const}],linked:false}, + {kind:'Port' as const,name:'data',column:42,nodes:[{kind:'field' as const,name:'data'}],linked:false}, + {kind:'Port' as const,name:'data',column:42,nodes:[{kind:'field' as const,name:'data',decorators:['hdl:port']}],linked:true}, + {kind:'Parameter' as const,name:'W',column:100000,nodes:[{kind:'constant' as const}],linked:false}, + {kind:'Parameter' as const,name:'W',column:0,nodes:[{kind:'constant' as const}],linked:false}, + {kind:'Parameter' as const,name:'W',column:24,nodes:[{id:'one',kind:'constant' as const},{id:'two',kind:'constant' as const}],linked:false}, +])('links only compatible unambiguous source declarations: %j',async({kind,name,column,nodes,linked})=>{ + run.mockResolvedValue(result(text,column,kind,name)); + const value=await analyzeHdlSemantics('/project',{executable:'slang'},sourceGraph(nodes)); + expect(!!value.facts[0]!.sourceNodeId).toBe(linked); +}); + +it('accepts frontend byte coordinates beyond the UTF-16 line length without reinterpreting their units',async()=>{ + const unicode='/* '+'😀'.repeat(40)+' */ '+text; + const column=Buffer.byteLength(unicode.slice(0,unicode.indexOf('W')))+1; + expect(column).toBeGreaterThan(unicode.length); + run.mockResolvedValue(result(unicode,column)); + const value=await analyzeHdlSemantics('/project',{executable:'slang'},sourceGraph([{kind:'constant'}],unicode)); + expect(value.facts[0]!.sourceNodeId).toBe('node'); + expect(value.facts[0]!.source?.column).toBe(column); +}); diff --git a/__tests__/hdl-semantics.test.ts b/__tests__/hdl-semantics.test.ts new file mode 100644 index 0000000000..bce988a0cc --- /dev/null +++ b/__tests__/hdl-semantics.test.ts @@ -0,0 +1,72 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; +import * as fs from 'node:fs'; +import * as os from 'node:os'; +import * as path from 'node:path'; +import CodeGraph from '../src/index'; +import { loadHdlProfile } from '../src/hdl/profile'; +const { run } = vi.hoisted(() => ({ run: vi.fn() })); +vi.mock('../src/hdl/semantic-runner', () => ({ runSlangSemantics: run })); + +let root: string; +let cg: CodeGraph; +const source = 'module top #(parameter W = 8)(input logic [W-1:0] data);\nendmodule\n'; +function ast(width = 8, column: number = 24) { + return { design: { kind: 'Root', name: '$root', members: [{ kind: 'Instance', name: 'top', body: { + kind: 'InstanceBody', name: 'top', members: [ + { kind: 'Parameter', name: 'W', value: String(width), type: { kind: 'PredefinedIntegerType', name: 'int' }, + source_file: path.join(root, 'top.sv'), source_line: 1, source_column: column }, + { kind: 'Port', name: 'data', type: { kind: 'PackedArrayType', range: `[${width - 1}:0]`, elementType: { kind: 'ScalarType', name: 'logic' } }, + direction: 'In', source_file: path.join(root, 'top.sv'), source_line: 1, source_column: 49 }, + ], + } }] } }; +} +function result(value = ast()) { + return { ast: value, sourceRoot: root, profileName: 'synth', configurationFingerprint: loadHdlProfile(root).profile!.fingerprint, + fingerprint: 'semantic-snapshot', version: 'slang version 11.0.448', executableSha256: 'executable-hash', + sources: { 'top.sv': source }, top: 'top', diagnostics: [], parameters: {}, allowUseBeforeDeclare: false }; +} +beforeEach(async () => { + root = fs.mkdtempSync(path.join(os.tmpdir(), 'hdl-semantics-')); + fs.writeFileSync(path.join(root, 'top.sv'), source); + fs.writeFileSync(path.join(root, 'codegraph.json'), JSON.stringify({ hdl: { activeProfile: 'synth', profiles: { + synth: { files: ['top.sv'], topModules: ['top'] }, + } } })); + cg = await CodeGraph.init(root, { index: true }); + run.mockResolvedValue(result()); +}); +afterEach(() => { cg?.close(); fs.rmSync(root, { recursive: true, force: true }); run.mockReset(); }); + +describe('on-demand HDL semantics on the source graph', () => { + it('returns computed facts and links the matching source declaration', async () => { + const value = await cg.getHdlSemantics({ executable: 'slang', query: 'top.W' }); + expect(value.sourceGraphProfileMatches).toBe(true); + expect(value.facts).toHaveLength(1); + expect(value.facts[0]).toMatchObject({ name: 'W', value: '8', sourceNodeId: cg.getNodesByName('W')[0].id }); + expect(value.provenance.top).toBe('top'); + }); + it('does not link an index from another profile or different source bytes', async () => { + const changed = result(); changed.configurationFingerprint = 'different-profile'; + run.mockResolvedValue(changed); + expect((await cg.getHdlSemantics({ executable: 'slang' })).facts.every(f => !f.sourceNodeId)).toBe(true); + run.mockResolvedValue({ ...result(), sources: { 'top.sv': source.replace('8', '9') } }); + expect((await cg.getHdlSemantics({ executable: 'slang' })).facts.every(f => !f.sourceNodeId)).toBe(true); + }); + it('preserves unknown macro columns, exact queries and truncation', async () => { + run.mockResolvedValue(result(ast(8, 0))); + const value = await cg.getHdlSemantics({ executable: 'slang', query: 'top', limit: 1 }); + expect(value.totalMatches).toBe(2); expect(value.truncated).toBe(true); + expect(value.facts[0].source?.column).toBeNull(); expect(value.facts[0].sourceNodeId).toBeUndefined(); + expect((await cg.getHdlSemantics({ executable: 'slang', query: 'missing' })).facts).toHaveLength(0); + await expect(cg.getHdlSemantics({ executable: 'slang', limit: 0 })).rejects.toThrow('1..1000'); + }); + it('recomputes overrides and keeps source graph after compiler failure', async () => { + run.mockResolvedValue(result(ast(12))); + expect((await cg.getHdlSemantics({ executable: 'slang', parameters: { W: '12' }, query: 'W' })).facts[0].value).toBe('12'); + expect(run.mock.calls[0][1].parameters).toEqual({ W: '12' }); + const before = cg.getNodesByName('W'); + run.mockRejectedValue(new Error('slang unavailable')); + await expect(cg.getHdlSemantics({ executable: 'missing' })).rejects.toThrow('unavailable'); + expect(cg.getNodesByName('W')).toEqual(before); + expect(cg.getHdlProfileStatus()?.state).toBe('matches'); + }); +}); diff --git a/__tests__/hdl-source-map-asset.test.ts b/__tests__/hdl-source-map-asset.test.ts new file mode 100644 index 0000000000..6888c3847d --- /dev/null +++ b/__tests__/hdl-source-map-asset.test.ts @@ -0,0 +1,8 @@ +import { expect, it } from 'vitest'; +import * as fs from 'node:fs'; +import * as path from 'node:path'; +it('ships the Python exporter byte-for-byte with the compiled engine', () => { + const root = path.resolve(__dirname, '..'); + expect(fs.readFileSync(path.join(root, 'dist/hdl/source-map-export.py'))) + .toEqual(fs.readFileSync(path.join(root, 'src/hdl/source-map-export.py'))); +}); diff --git a/__tests__/hdl-source-map-import.test.ts b/__tests__/hdl-source-map-import.test.ts new file mode 100644 index 0000000000..7d9da77f6a --- /dev/null +++ b/__tests__/hdl-source-map-import.test.ts @@ -0,0 +1,41 @@ +import { expect, it } from 'vitest'; +import { importMappedSemantics } from '../src/hdl/source-map-import'; +const sources = { 'inc/ports.svh': '`define P(N) input logic N\r\n', 'top.sv': '// Ω\r\nmodule top(`P(data)); endmodule\r\n' }; +const point = (file: keyof typeof sources, offset: number) => { + const prefix = Buffer.from(sources[file]).subarray(0, offset); + const line = [...prefix].filter(v => v === 10).length + 1; + return { file, line, column: offset - prefix.lastIndexOf(10), byteOffset: offset }; +}; +const start = Buffer.from(sources['top.sv']).indexOf('`P'); +const payload = () => ({ codegraphSemanticVersion: 1, facts: [{ kind: 'port', name: 'data', instancePath: 'top', type: 'logic', width: 1, + sourceOrigin: 'macro', source: { file: 'top.sv', line: 2, column: 15 }, macroExpansionComplete: true, + macroExpansion: [{ name: 'P', argument: false, spelling: point('inc/ports.svh', 24), invocation: { start: point('top.sv', start), end: point('top.sv', start + 8) } }], +}] }); +it('preserves compiler byte coordinates and macro call/spelling across headers, UTF8 and CRLF', () => { + const result = importMappedSemantics(payload(), sources); + expect(result[0].macroExpansion?.[0]).toEqual(payload().facts[0]!.macroExpansion[0]); + expect(result[0].sourceOrigin).toBe('macro'); +}); +it('rejects tampered source paths, byte offsets, reversed ranges and UTF8 continuation positions', () => { + let p = payload(); p.facts[0]!.macroExpansion[0]!.spelling.file = '../secret' as any; + expect(() => importMappedSemantics(p, sources)).toThrow('outside snapshot'); + p = payload(); p.facts[0]!.macroExpansion[0]!.spelling.byteOffset++; + expect(() => importMappedSemantics(p, sources)).toThrow('disagree'); + p = payload(); const range = p.facts[0]!.macroExpansion[0]!.invocation; [range.start, range.end] = [range.end, range.start]; + expect(() => importMappedSemantics(p, sources)).toThrow('order'); + p = payload(); p.facts[0]!.macroExpansion[0]!.spelling = point('top.sv', 4); + expect(() => importMappedSemantics(p, sources)).toThrow('UTF-8'); +}); +it('does not accept invented complete chains or duplicate identities', () => { + const p = payload(); p.facts[0]!.macroExpansion = []; + expect(() => importMappedSemantics(p, sources)).toThrow('complete'); + p.facts[0]!.macroExpansionComplete = false; + expect(importMappedSemantics(p, sources)[0].macroExpansionComplete).toBe(false); + p.facts.push(p.facts[0]!); + expect(() => importMappedSemantics(p, sources)).toThrow('duplicate'); +}); +it('rejects line/offset disagreement at a newline and unsupported schema', () => { + const p = payload(); p.facts[0]!.macroExpansion[0]!.spelling = { file: 'top.sv', line: 1, column: 8, byteOffset: 7 }; + expect(() => importMappedSemantics(p, sources)).toThrow('column'); + expect(() => importMappedSemantics({ codegraphSemanticVersion: 2, facts: [] }, sources)).toThrow('schema'); +}); diff --git a/__tests__/hdl-source-map-review.test.ts b/__tests__/hdl-source-map-review.test.ts new file mode 100644 index 0000000000..1c448ba200 --- /dev/null +++ b/__tests__/hdl-source-map-review.test.ts @@ -0,0 +1,67 @@ +import { afterEach, expect, it, vi } from 'vitest'; +import { createHash } from 'node:crypto'; +import { importMappedSemantics } from '../src/hdl/source-map-import'; +import { analyzeHdlSemantics, type HdlSemanticSourceGraph } from '../src/hdl/semantics'; +import type { FileRecord, Node } from '../src/types'; +import type { HdlProfileStatus } from '../src/hdl/status'; +const {run}=vi.hoisted(()=>({run:vi.fn()})); +vi.mock('../src/hdl/semantic-runner',()=>({runSlangSemantics:run})); +afterEach(()=>run.mockReset()); +const source='// Ω\r\nmodule top(input logic data);\r\nendmodule\r\n'; +const sources={'top.sv':source}; +const fact=()=>({kind:'port',name:'data',instancePath:'top',width:1,direction:'In',sourceOrigin:'direct', + source:{file:'top.sv',line:2,column:24}}); +const payload=(item:unknown=fact())=>({codegraphSemanticVersion:1,facts:[item]}); +const graph:HdlSemanticSourceGraph={profile:()=>({state:'matches',indexed:{configurationFingerprint:'cfg'}} as HdlProfileStatus),stale:()=>false, + file:()=>({contentHash:createHash('sha256').update(source).digest('hex')} as FileRecord), + nodes:()=>[{id:'decl-data',kind:'field',name:'data',startLine:2,decorators:['hdl:port']} as Node]}; +function result(ast:unknown){return {ast,frontend:'pyslang',sourceRoot:'/deleted-snapshot',profileName:'p',configurationFingerprint:'cfg',fingerprint:'snapshot', + version:'pyslang fixture',executableSha256:'python-sha',exporterSha256:'exporter-sha',librarySha256:'native-sha',sources,top:'top',parameters:{},allowUseBeforeDeclare:false, + diagnostics:[],languageStandard:'1800-2023',compilationUnitMode:'separate',runnerVersion:'review',compilerLimits:[]};} + +it('never links macro-origin facts despite precise same-point coordinates, while direct declarations can link',async()=>{ + run.mockResolvedValue(result(payload())); + const direct=await analyzeHdlSemantics('/project',{pythonExecutable:'python'},graph); + expect(direct.facts[0]!.sourceNodeId).toBe('decl-data'); + run.mockResolvedValue(result(payload({...fact(),sourceOrigin:'macro',macroExpansion:[],macroExpansionComplete:false}))); + const macro=await analyzeHdlSemantics('/project',{pythonExecutable:'python'},graph); + expect(macro.facts[0]!.source).toEqual(direct.facts[0]!.source); + expect(macro.facts[0]!.sourceOrigin).toBe('macro'); + expect(macro.facts[0]!.sourceNodeId).toBeUndefined(); + expect(macro.provenance).toMatchObject({frontend:'pyslang',exporterSha256:'exporter-sha',librarySha256:'native-sha'}); +}); + +it('normalizes away unsolicited source links and does not trust unknown snapshot filenames',()=>{ + const normalized=importMappedSemantics(payload({...fact(),sourceNodeId:'forged',extra:'untrusted'}),sources)[0]!; + expect(normalized).not.toHaveProperty('sourceNodeId');expect(normalized).not.toHaveProperty('extra'); + for(const file of ['../top.sv','./top.sv','top.sv/../top.sv','__proto__','C:/top.sv','top\\file.sv']) { + expect(()=>importMappedSemantics(payload({...fact(),source:{...fact().source,file}}),sources)).toThrow('snapshot'); + } +}); + +it('rejects UTF8 continuation and previous-line aliases of the next CRLF line, including macro byte-offset tampering',()=>{ + expect(()=>importMappedSemantics(payload({...fact(),source:{file:'top.sv',line:1,column:5}}),sources)).toThrow('UTF-8'); + expect(()=>importMappedSemantics(payload({...fact(),source:{file:'top.sv',line:1,column:8}}),sources)).toThrow('column'); + const point={file:'top.sv',line:2,column:1,byteOffset:7}; + const mapped={...fact(),sourceOrigin:'macro',macroExpansionComplete:false, + macroExpansion:[{name:'P',argument:false,spelling:point,invocation:{start:point,end:point}}]}; + expect(importMappedSemantics(payload(mapped),sources)[0]!.macroExpansion![0]!.spelling!.byteOffset).toBe(7); + expect(()=>importMappedSemantics(payload({...mapped,macroExpansionComplete:true}),sources)).toThrow('complete'); + const tampered={...mapped,macroExpansion:[{...mapped.macroExpansion[0]!,spelling:{...point,byteOffset:8}}]}; + expect(()=>importMappedSemantics(payload(tampered),sources)).toThrow('disagree'); +}); + +it('bounds normalized fact counts, fields and chains before accepting exporter output',()=>{ + expect(()=>importMappedSemantics({codegraphSemanticVersion:1,facts:Array(100001).fill(fact())},sources)).toThrow('count'); + expect(()=>importMappedSemantics(payload({...fact(),value:'x'.repeat(65537)}),sources)).toThrow('value'); + expect(()=>importMappedSemantics(payload({...fact(),sourceOrigin:'macro',macroExpansionComplete:false,macroExpansion:Array(129).fill({name:null,argument:false})}),sources)).toThrow('chain'); + expect(()=>importMappedSemantics(payload({...fact(),sourceOrigin:'macro',macroExpansionComplete:true,macroExpansion:[]}),sources)).toThrow('complete'); +}); + +it('links direct typedefs by type_alias kind, never through a same-name field',async()=>{ + const typeFact={...fact(),kind:'type',type:'logic[31:0]',width:32}; + run.mockResolvedValue(result(payload(typeFact))); + expect((await analyzeHdlSemantics('/project',{pythonExecutable:'python'},graph)).facts[0]!.sourceNodeId).toBeUndefined(); + const types={...graph,nodes:()=>[{id:'type-data',kind:'type_alias',name:'data',startLine:2} as Node]}; + expect((await analyzeHdlSemantics('/project',{pythonExecutable:'python'},types)).facts[0]!.sourceNodeId).toBe('type-data'); +}); diff --git a/docs/hdl-macro-source-map.md b/docs/hdl-macro-source-map.md new file mode 100644 index 0000000000..3cd426bfc8 --- /dev/null +++ b/docs/hdl-macro-source-map.md @@ -0,0 +1,101 @@ +# HDL macro provenance through pyslang + +An optional backend reports where a macro-generated declaration was spelled and +the ranges of the invocations that produced it. It uses the `SourceManager` of +`pyslang==11.0.0`; it does not search macro definitions with regular +expressions and does not guess unknown columns. + +## Running it + +You need a separate Python >= 3.11 with pyslang 11.0.0 installed (validated with +Python 3.14). CodeGraph does not install it and does not touch the project's +Python dependencies. From the root of an initialized project with an active HDL +profile: + +```sh +codegraph hdl-semantic data --python /absolute/path/to/venv/bin/python +``` + +Through the API: + +```ts +const result = await cg.getHdlSemantics({ + pythonExecutable: '/absolute/path/to/venv/bin/python', + query: 'top.data', +}); +``` + +Choose exactly one frontend: `--python` / `pythonExecutable`, or `--slang` / +`executable`. The Python backend performs the compilation and the fact export +itself; results of different compiler runs are never merged. The active +profile, the overrides, separate compilation units, the limits and the snapshot +checks all apply as with slang. + +## What is returned + +Names of `parameter` / `port` / `typedef` declarations keep their `sourceOrigin` +and `macroExpansion`. A macro inside an initializer or a type does not turn the +name itself into a macro origin: a link to the direct source declaration stays +valid. + +In addition, `expressionOrigins` lists the unique compiler macro-token origins +with the roles `initializer`, `declared-initializer` and `type`. For `type` the +available declared type syntax is checked, including supported dimensions. The +effective initializer is not mixed with the declaration's default after an +override. These are the direct macro tokens of the corresponding syntax, not a +transitive analysis of every constant the result depends on. + +`expressionOriginCoverage` describes `initializer`, `declaredInitializer` and +`type` separately as `checked`, `not-applicable` or `unavailable`; an +initializer may also be `command-line`. An empty list under `unavailable` does +not prove the absence of macros. `truncated=true` means the output limit was +reached. At most 32 expression origins are returned per fact; whether the +individual macro frames are complete is stated by `macroExpansionComplete`. + +- `provenance.frontend = pyslang`, the protocol/exporter version and the hashes + of Python, the exporter and the native pyslang module. Python runs with `-I`; + the venv path is recorded so that another interpreter's site-packages are + never picked up. +- `sourceOrigin`: `direct` or `macro`. `source` is the physical point in the + source or the available invocation point, not automatically the declaration's + full range. +- `macroExpansion`: a bounded set of provenance frames. Each carries the macro + name, whether it is an argument, the spelling point and the compiler's + invocation range, when the frontend could map them. +- Every point has a project-relative file, physical line/column and + `byteOffset`. Columns count from 1 in UTF-8 bytes, the offset from 0; this is + not CodeGraph's UTF-16 column. Coordinates are verified against the snapshot + bytes. +- `macroExpansionComplete` states explicitly whether every frame could be + mapped. Collapsed or unknown ranges make it `false`. A missing part is not + reconstructed heuristically. + +Frames are not a linear stack. `SourceManager` keeps separate original and +expansion links; nested macros need both. A spelling point inside an argument +or a macro body does not mean the whole resulting name is written there +contiguously — in particular with token concatenation: the point of `bus` is +not the range of the name `bus_data`. + +Macro-origin facts carry no `sourceNodeId`, even with an exact spelling column: +it may point at a call argument or a definition body rather than the port's +own declaration. Navigation goes through `macroExpansion`. Direct facts keep +their verified source node links. + +## Verifiability and limits + +The exporter is a small shipped Python helper (`dist/hdl/source-map-export.py`) +that uses the compiler API rather than its own HDL preprocessor. The normalized +JSON carries its own `codegraphSemanticVersion: 1` and is validated before any +fact is emitted. A compiler error, an unknown library version, a corrupt +payload, a source path outside the snapshot, inconsistent coordinates or inputs +that changed during the run are all rejected. + +Computed include paths, files outside the root and the other snapshot-runner +limits still apply. This is not an OS sandbox for running an untrusted +compiler. There is no persistent cache, no transitive dependency map of all +expressions, no complete source map for every constructed token and no +automatic MCP compilation. The Windows backend is disabled for now; the macOS +runtime has not been validated. + +`SourceManager` behaviour follows the +[official API](https://www.sv-lang.com/classslang_1_1_source_manager.html). diff --git a/docs/hdl-semantics.md b/docs/hdl-semantics.md new file mode 100644 index 0000000000..7fd403e214 --- /dev/null +++ b/docs/hdl-semantics.md @@ -0,0 +1,89 @@ +# Computed HDL parameters and widths through slang + +The `hdl-semantic` command and the `CodeGraph.getHdlSemantics()` API run an +installed [slang](https://github.com/MikePopoloski/slang) on explicit request. +They need an initialized project and an active HDL build profile in +`codegraph.json`. Facts are returned separately from the source graph; graph +data is never overwritten. slang is not installed automatically. For compiler +macro provenance a [separate pyslang backend](hdl-macro-source-map.md) is +available through `--python`; choose exactly one frontend executable. + +## CLI + +```sh +codegraph hdl-semantic top.W --path /path/to/project --slang /path/to/slang +codegraph hdl-semantic crc_out --path /path/to/project --slang /path/to/slang +codegraph hdl-semantic NoSlvMst --path /path/to/project --slang /path/to/slang \ + --top synth_axi_lite_xbar --parameter NoSlvMst=4 +``` + +The answer is JSON with facts and provenance. The query selects an exact name, +an instance path or `instancePath.name`; without a query the first bounded +selection is returned. `--limit` sets 1..1000 facts (default 100); +`totalMatches` / `truncated` report the cut. For several overrides list +`NAME=VALUE` pairs after `--parameter`. Names and values are passed as separate +arguments, never through a shell. + +If slang rejects a design because of use-before-declare, compatibility can be +enabled explicitly with `--allow-use-before-declare`. It is part of the +provenance and fingerprint and is never switched on automatically after a +compiler error. + +## API + +```ts +const result = await cg.getHdlSemantics({ + executable: '/path/to/slang', + top: 'top', + parameters: { W: '16' }, + query: 'top.data', + limit: 20, + signal: abortController.signal, +}); +``` + +Parameters are returned as strings of evaluated values so that large integers +and unknown bits are not lost. A port width is returned only for types the +importer can compute reliably; a missing width does not mean 0. +Instance-specific facts are not merged across instances of one module. + +Every answer records the slang version, the executable hash, the active profile, +the configuration and semantic fingerprints, the top, the overrides, the language +standard, the separate-compilation-unit mode, the runner version, the compiler +limits and the compatibility mode. `sourceNodeId` is added only when the profile +matches, the file's raw hash matches and exactly one source declaration matches +by name and line. With a stale or different source graph the computed facts stay +available without guessed node links. + +A source location keeps the frontend's coordinates; it is not a promise of +CodeGraph's UTF-16 offsets. A `null` column means the column is unknown, for +example for a macro-generated declaration. A macro invocation line is not +presented as an exact expanded token range. + +## Limits of the first implementation + +- Computation is on demand: no persistent semantic cache and no automatic run + during index, sync or explore. The next query uses a fresh snapshot. +- The supported slang contract is checked by the runner and importer; an + unknown version or AST shape is rejected. An AST written alongside a compiler + error is not accepted. +- Snapshot: 1 MiB per input, 64 MiB in total; the AST at most 64 MiB, stdout + and stderr 1 MiB together. Compiler limits for hierarchy, generate and + constant evaluation are fixed; this is not a hard OS memory limit. Temporary + data lives in the OS temp directory (override with + `CODEGRAPH_SEMANTIC_TMPDIR`, outside the project root) and is removed after + the query. +- The snapshot contains the selected inputs and their literal include + dependencies. Paths that are invalid or leave the project root, and + unsupported include forms, are rejected. This is not a sandbox for running an + untrusted compiler executable. +- Full macro expansion is done by the compiler inside the allowed snapshot + context; the exact expansion chain and spelling locations come from the + pyslang backend only. +- A failure, a missing slang or a cancellation never changes the source graph. + The Windows runner is not enabled yet; process cancellation on that OS needs + its own validation. +- This is about parameters and ports and their compiler context — not + simulation, synthesis, timing, CDC or a proof of hardware correctness. + Semantics are not added to the ordinary MCP explore; use the CLI or API above + for an explicit query. diff --git a/package.json b/package.json index 3faaa192d3..5f89e0dd99 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "build:ui": "cd ui && npm run build && cd .. && node scripts/check-ui-build.mjs", "build:lib": "cd ui && npm run build:lib", "preuninstall": "node dist/bin/uninstall.js", - "copy-assets": "node -e \"const fs=require('fs');fs.mkdirSync('dist/db',{recursive:true});fs.copyFileSync('src/db/schema.sql','dist/db/schema.sql');fs.mkdirSync('dist/extraction/wasm',{recursive:true});fs.readdirSync('src/extraction/wasm').filter(f=>f.endsWith('.wasm')).forEach(f=>fs.copyFileSync('src/extraction/wasm/'+f,'dist/extraction/wasm/'+f))\"", + "copy-assets": "node -e \"const fs=require('fs');fs.mkdirSync('dist/db',{recursive:true});fs.copyFileSync('src/db/schema.sql','dist/db/schema.sql');fs.mkdirSync('dist/extraction/wasm',{recursive:true});fs.readdirSync('src/extraction/wasm').filter(f=>f.endsWith('.wasm')).forEach(f=>fs.copyFileSync('src/extraction/wasm/'+f,'dist/extraction/wasm/'+f));fs.mkdirSync('dist/hdl',{recursive:true});fs.copyFileSync('src/hdl/source-map-export.py','dist/hdl/source-map-export.py')\"", "dev": "tsc --watch", "build:kernel": "bash scripts/build-kernel.sh", "cli": "npm run build && node dist/bin/codegraph.js", diff --git a/scripts/verify-hdl-source-map-export.py b/scripts/verify-hdl-source-map-export.py new file mode 100644 index 0000000000..b343d5c832 --- /dev/null +++ b/scripts/verify-hdl-source-map-export.py @@ -0,0 +1,246 @@ +#!/usr/bin/env python3 +"""Bounded real-world tests for the exporter; run with a Python environment that has pyslang 11.0.0. + +Installs no dependencies. Creates only isolated temporary fixtures. +""" +import argparse +import json +from pathlib import Path +import subprocess +import sys +import tempfile +import unittest + +HELPER = Path(__file__).resolve().parents[1] / 'src/hdl/source-map-export.py' +WORK_ROOT = None + + +class SourceMapExportTests(unittest.TestCase): + def setUp(self): + self.directory = tempfile.TemporaryDirectory(prefix='hdl-source-map-test-', dir=WORK_ROOT) + self.root = Path(self.directory.name) + + def tearDown(self): + self.directory.cleanup() + + def write(self, name, text, crlf=False, bom=False): + target = self.root / name + target.parent.mkdir(parents=True, exist_ok=True) + target.write_bytes((b'\xef\xbb\xbf' if bom else b'') + text.replace('\n', '\r\n' if crlf else '\n').encode('utf8')) + + def compile(self, source, extra=(), success=True): + out = self.root / 'facts.json' + result = subprocess.run([sys.executable, '-I', str(HELPER), '--ast-json', str(out), + '--ast-json-source-info', '--ast-json-detailed-types', '--std=1800-2023', + '--threads=1', '--error-limit=20', '--top', 'top', *extra, '--', source], + cwd=self.root, text=True, capture_output=True, timeout=60) + self.assertEqual(result.returncode == 0, success, result.stderr) + if not success: + self.assertFalse(out.exists(), 'failed frontend must not emit semantic facts') + return result + payload = json.loads(out.read_text()) + self.assertEqual(payload['codegraphSemanticVersion'], 1) + return payload['facts'] + + def assertPoint(self, point): + file = (self.root / point['file']).resolve() + self.assertTrue(file.is_relative_to(self.root)) + data = file.read_bytes() + offset = point['byteOffset'] + self.assertGreaterEqual(offset, 0) + self.assertLessEqual(offset, len(data)) + self.assertEqual(point['line'], data.count(b'\n', 0, offset) + 1) + self.assertEqual(point['column'], offset - data.rfind(b'\n', 0, offset)) + + def test_nested_arguments_include_utf8_crlf_and_four_state_value(self): + self.write('defs/inner.svh', '`define LEAF(name,value) localparam int name=value;\n', crlf=True) + self.write('defs/outer.svh', '`include "inner.svh"\n`define WRAP(name,value) `LEAF(name,value)\n', crlf=True) + source = "top space'quote.sv" + self.write(source, '`include "defs/outer.svh"\nmodule top #(parameter int N=1);\n /* 😀 */ `WRAP(P, 7)\n localparam logic [3:0] XZ=4\'b10xz;\nendmodule\n', crlf=True, bom=True) + facts = self.compile(source, ['-G', "N=32'd4"]) + byname = {fact['name']: fact for fact in facts} + self.assertEqual(byname['N']['value'], '4') + self.assertEqual(byname['P']['value'], '7') + self.assertEqual(byname['XZ']['value'].lower(), "4'b10xz") + p = byname['P'] + self.assertEqual(p['sourceOrigin'], 'macro') + self.assertFalse(p['macroExpansionComplete']) + frames = p['macroExpansion'] + self.assertEqual({frame['name'] for frame in frames}, {'LEAF', 'WRAP'}) + self.assertTrue(any(frame['name'] == 'LEAF' and frame['argument'] for frame in frames)) + self.assertTrue(any(frame['name'] == 'WRAP' and frame['argument'] for frame in frames)) + data = (self.root / source).read_bytes() + offset = data.index(b'P, 7') + self.assertEqual(p['source'], {'file': source, 'line': 3, 'column': offset - data.rfind(b'\n', 0, offset)}) + for frame in frames: + if 'spelling' in frame: + self.assertPoint(frame['spelling']) + if 'invocation' in frame: + self.assertPoint(frame['invocation']['start']) + self.assertPoint(frame['invocation']['end']) + self.assertTrue(any(frame.get('spelling', {}).get('file') == 'defs/inner.svh' for frame in frames)) + + def test_token_concat_is_prefix_point_not_a_generated_name_range(self): + self.write('defs.svh', '`define CAT(a,b) a``b\n`define DECL(p) localparam int `CAT(p,_param)=3;\n') + self.write('top.sv', '`include "defs.svh"\nmodule top;\n `DECL(bus)\nendmodule\n') + fact = next(f for f in self.compile('top.sv') if f['name'] == 'bus_param') + self.assertEqual(fact['value'], '3') + self.assertEqual(fact['sourceOrigin'], 'macro') + self.assertNotIn('nameRange', fact) + self.assertFalse(fact['macroExpansionComplete']) + data = (self.root / 'top.sv').read_bytes() + prefix = [frame['spelling'] for frame in fact['macroExpansion'] + if frame.get('spelling', {}).get('file') == 'top.sv' + and data[frame['spelling']['byteOffset']:].startswith(b'bus')] + self.assertTrue(prefix) + self.assertFalse(data[prefix[0]['byteOffset']:].startswith(b'bus_param')) + + def test_zero_empty_string_and_physical_line_directive_coordinates(self): + self.write('top.sv', '`line 700 "virtual.sv" 0\nmodule top; parameter int ZERO=0; parameter string EMPTY=""; endmodule\n') + facts = {f['name']: f for f in self.compile('top.sv')} + self.assertEqual(facts['ZERO']['value'], '0') + self.assertEqual(facts['EMPTY']['value'], '""') + for fact in facts.values(): + self.assertEqual(fact['sourceOrigin'], 'direct') + self.assertEqual(fact['source']['file'], 'top.sv') + self.assertEqual(fact['source']['line'], 2) + + def test_type_alias_facts_have_integral_width_and_declaration_origin(self): + self.write('types.svh', '`define DECLTYPE(name) typedef logic [7:0] name;\n') + self.write('top.sv', '`include "types.svh"\nmodule top;\n `DECLTYPE(byte_t)\n typedef logic [3:0] nibble_t;\nendmodule\n') + facts = {fact['name']: fact for fact in self.compile('top.sv')} + self.assertEqual(facts['byte_t']['kind'], 'type') + self.assertEqual(facts['byte_t']['width'], 8) + self.assertEqual(facts['byte_t']['sourceOrigin'], 'macro') + self.assertTrue(facts['byte_t']['macroExpansion']) + self.assertEqual(facts['nibble_t']['kind'], 'type') + self.assertEqual(facts['nibble_t']['width'], 4) + self.assertEqual(facts['nibble_t']['sourceOrigin'], 'direct') + self.assertNotIn('direction', facts['byte_t']) + + @staticmethod + def origin_names(fact, role): + return {frame['name'] for origin in fact['expressionOrigins'] if origin['role'] == role + for frame in origin.get('macroExpansion', [])} + + def test_literal_parameter_tracks_its_macro_initializer_not_declaration_name(self): + self.write('defs.svh', '`define VALUE 7\n') + self.write('top.sv', '`include "defs.svh"\nmodule top; localparam int P=`VALUE; endmodule\n') + fact = next(f for f in self.compile('top.sv') if f['name'] == 'P') + self.assertEqual(fact['sourceOrigin'], 'direct') + self.assertEqual(self.origin_names(fact, 'initializer'), {'VALUE'}) + self.assertEqual(fact['expressionOriginCoverage']['initializer'], 'checked') + self.assertEqual(fact['expressionOriginCoverage']['declaredInitializer'], 'not-applicable') + + def test_port_and_type_dimensions_have_compiler_macro_origins_with_physical_coordinates(self): + self.write('defs.svh', '`define WIDTH 8\n', crlf=True) + self.write('top.sv', '`include "defs.svh"\n/* 😀 */ module top(output logic [`WIDTH-1:0] data);\n typedef logic [`WIDTH-1:0] word_t;\nendmodule\n', crlf=True, bom=True) + facts = {f['name']: f for f in self.compile('top.sv')} + for name in ['data', 'word_t']: + fact = facts[name] + self.assertEqual(fact['sourceOrigin'], 'direct') + self.assertEqual(fact['width'], 8) + self.assertEqual(self.origin_names(fact, 'type'), {'WIDTH'}) + self.assertEqual(fact['expressionOriginCoverage']['type'], 'checked') + for origin in fact['expressionOrigins']: + for frame in origin.get('macroExpansion', []): + if 'spelling' in frame: + self.assertPoint(frame['spelling']) + if 'invocation' in frame: + self.assertPoint(frame['invocation']['start']) + self.assertPoint(frame['invocation']['end']) + + def test_nonansi_and_ansi_unpacked_port_dimensions_keep_macro_type_origins(self): + self.write('defs.svh', '`define W 4\n') + for declaration in ['module top(a); input logic a[`W]; endmodule', + 'module top(input logic a[`W]); endmodule']: + self.write('top.sv', '`include "defs.svh"\n' + declaration + '\n') + fact = next(f for f in self.compile('top.sv') if f['kind'] == 'port' and f['name'] == 'a') + self.assertEqual(self.origin_names(fact, 'type'), {'W'}) + self.assertEqual(fact['expressionOriginCoverage']['type'], 'checked') + self.assertFalse(fact['expressionOriginCoverage']['truncated']) + self.assertEqual(len(fact['expressionOrigins']), 1) + for frame in fact['expressionOrigins'][0]['macroExpansion']: + if 'spelling' in frame: + self.assertPoint(frame['spelling']) + if 'invocation' in frame: + self.assertPoint(frame['invocation']['start']) + self.assertPoint(frame['invocation']['end']) + + def test_instance_override_separates_actual_and_declared_default_macro_origins(self): + self.write('defs.svh', '`define DEFAULT 7\n`define ACTUAL 11\n') + self.write('top.sv', '`include "defs.svh"\nmodule leaf #(parameter int P=`DEFAULT); endmodule\nmodule top; leaf #(.P(`ACTUAL)) u(); endmodule\n') + fact = next(f for f in self.compile('top.sv') if f['instancePath'] == 'top.u' and f['name'] == 'P') + self.assertEqual(fact['value'], '11') + self.assertEqual(self.origin_names(fact, 'initializer'), {'ACTUAL'}) + self.assertEqual(self.origin_names(fact, 'declared-initializer'), {'DEFAULT'}) + self.assertEqual(fact['expressionOriginCoverage']['declaredInitializer'], 'checked') + + def test_command_line_override_never_reports_macro_default_as_effective(self): + self.write('top.sv', '`define DEFAULT 7\nmodule top #(parameter int P=`DEFAULT); endmodule\n') + fact = next(f for f in self.compile('top.sv', ['-G', 'P=11']) if f['name'] == 'P') + self.assertEqual(fact['value'], '11') + self.assertEqual(fact['expressionOriginCoverage']['initializer'], 'command-line') + self.assertFalse(self.origin_names(fact, 'initializer')) + self.assertEqual(self.origin_names(fact, 'declared-initializer'), {'DEFAULT'}) + + def test_checked_type_syntax_does_not_claim_transitive_typedef_dependencies(self): + self.write('top.sv', '`define WIDTH 8\ntypedef logic [`WIDTH-1:0] word_t;\nmodule top(output word_t data); endmodule\n') + fact = next(f for f in self.compile('top.sv') if f['name'] == 'data') + self.assertEqual(fact['width'], 8) + self.assertEqual(fact['expressionOriginCoverage']['type'], 'checked') + self.assertEqual(fact['expressionOrigins'], []) + + def test_expression_origin_budget_is_explicit_and_keeps_compiled_value(self): + self.write('top.sv', '`define V 1\nmodule top; localparam int P=' + '+'.join(['`V'] * 40) + '; endmodule\n') + fact = next(f for f in self.compile('top.sv') if f['name'] == 'P') + self.assertEqual(fact['value'], '40') + self.assertEqual(len(fact['expressionOrigins']), 32) + self.assertTrue(fact['expressionOriginCoverage']['truncated']) + + def test_normalized_origins_are_deduplicated_when_frame_budget_is_exhausted(self): + self.write('top.sv', '`define V 1\nmodule top; localparam int P=`V+`V; endmodule\n') + out = self.root / 'facts.json' + probe = """import importlib.util,sys +sys.dont_write_bytecode=True +spec=importlib.util.spec_from_file_location('test_exporter',sys.argv[1]) +module=importlib.util.module_from_spec(spec);spec.loader.exec_module(module) +module.MAX_PROVENANCE_FRAMES=0 +raise SystemExit(module.main(['--ast-json',sys.argv[2],'--std=1800-2023','--top','top','--','top.sv'])) +""" + result = subprocess.run([sys.executable, '-I', '-c', probe, str(HELPER), str(out)], + cwd=self.root, capture_output=True, text=True, timeout=60) + self.assertEqual(result.returncode, 0, result.stderr) + fact = next(f for f in json.loads(out.read_text())['facts'] if f['name'] == 'P') + self.assertEqual(fact['value'], '2') + self.assertEqual(len(fact['expressionOrigins']), 1) + self.assertTrue(fact['expressionOriginCoverage']['truncated']) + self.assertEqual(fact['expressionOrigins'][0]['macroExpansion'], []) + self.assertFalse(fact['expressionOrigins'][0]['macroExpansionComplete']) + + def test_line_directive_cannot_spoof_command_line_origin(self): + self.write('top.sv', '`define VALUE 7\n`line 700 "" 0\nmodule top; parameter int P=`VALUE; endmodule\n') + fact = next(f for f in self.compile('top.sv') if f['name'] == 'P') + self.assertEqual(fact['expressionOriginCoverage']['initializer'], 'checked') + self.assertEqual(self.origin_names(fact, 'initializer'), {'VALUE'}) + + def test_rejects_semantic_errors_instead_of_exporting_partial_ast(self): + self.write('top.sv', 'module top; missing_dependency u(); endmodule\n') + result = self.compile('top.sv', success=False) + self.assertIn('unknown module', result.stderr) + + def test_shared_bodies_and_generate_indices_have_instance_specific_paths(self): + self.write('top.sv', 'module leaf #(parameter int P=2); endmodule\nmodule top; leaf u1(); leaf u2(); for(genvar i=2;i<4;i++) begin : lanes leaf u(); end endmodule\n') + facts = self.compile('top.sv') + paths = {f['instancePath'] for f in facts if f['name'] == 'P'} + self.assertEqual(paths, {'top.u1', 'top.u2', 'top.lanes[2].u', 'top.lanes[3].u'}) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--helper', type=Path, default=HELPER) + parser.add_argument('--work-root', type=Path) + args = parser.parse_args() + HELPER = args.helper.resolve() + WORK_ROOT = args.work_root + unittest.main(argv=[sys.argv[0], '-v']) diff --git a/src/bin/codegraph.ts b/src/bin/codegraph.ts index adc2b4b65c..fe2fe36d4d 100644 --- a/src/bin/codegraph.ts +++ b/src/bin/codegraph.ts @@ -1468,6 +1468,51 @@ program * subagents (which don't inherit MCP tools, #704) and non-MCP harnesses — * can reach the graph through a plain shell command. */ +program + .command('hdl-semantic [query]') + .description('Compute HDL parameters and port widths with optional slang (exact symbol or instance query)') + .option('--slang ', 'Path to the installed slang executable') + .option('--python ', 'Python with pinned pyslang for compiler macro source mapping (instead of --slang)') + .option('-p, --path ', 'Project path') + .option('--top ', 'Single top module (defaults to the active profile top)') + .option('--parameter ', 'Top-level parameter overrides') + .option('--allow-use-before-declare', 'Explicit slang compatibility mode') + .option('--limit ', 'Maximum facts (1..1000)', '100') + .action(async (query: string | undefined, options: { slang?: string; python?: string; path?: string; top?: string; + parameter?: string[]; allowUseBeforeDeclare?: boolean; limit: string }) => { + const projectPath = resolveProjectPath(options.path); + try { + if (!isInitialized(projectPath)) throw new Error('HDL semantic queries require an initialized CodeGraph project'); + const parameters: Record = Object.create(null); + for (const argument of options.parameter ?? []) { + const separator = argument.indexOf('='); + if (separator < 1 || !argument.slice(separator + 1)) throw new Error('Parameter must be NAME=VALUE'); + const name = argument.slice(0, separator); + if (Object.prototype.hasOwnProperty.call(parameters, name)) throw new Error('Duplicate HDL parameter override: ' + name); + parameters[name] = argument.slice(separator + 1); + } + const { default: CodeGraph } = await loadCodeGraph(); + const cg = await CodeGraph.open(projectPath); + const controller = new AbortController(); + const interrupt = () => controller.abort(); + process.once('SIGINT', interrupt); + process.once('SIGTERM', interrupt); + try { + const result = await cg.getHdlSemantics({ executable: options.slang, pythonExecutable: options.python, top: options.top, + parameters, allowUseBeforeDeclare: options.allowUseBeforeDeclare, query, limit: Number(options.limit), + signal: controller.signal }); + console.log(JSON.stringify(result)); + } finally { + process.removeListener('SIGINT', interrupt); + process.removeListener('SIGTERM', interrupt); + cg.close(); + } + } catch (err) { + error(`HDL semantics failed: ${err instanceof Error ? err.message : String(err)}`); + process.exitCode = 1; + } + }); + program .command('explore ') .description('Explore an area: relevant symbols\' source + call paths in one shot (same output as the codegraph_explore MCP tool)') diff --git a/src/hdl/semantic-import.ts b/src/hdl/semantic-import.ts new file mode 100644 index 0000000000..bab8abcb85 --- /dev/null +++ b/src/hdl/semantic-import.ts @@ -0,0 +1,234 @@ +import * as path from 'node:path'; + +export interface HdlMacroPoint { file: string; line: number; column: number; byteOffset: number } +export interface HdlMacroFrame { name: string | null; argument: boolean; spelling?: HdlMacroPoint; invocation?: { start: HdlMacroPoint; end: HdlMacroPoint } } + +export type HdlExpressionRole = 'initializer' | 'declared-initializer' | 'type'; +export interface HdlExpressionOrigin { + role: HdlExpressionRole; + sourceOrigin: 'macro'; + source?: { file: string; line: number; column: number | null }; + macroExpansion: HdlMacroFrame[]; + macroExpansionComplete: boolean; +} +export interface HdlExpressionCoverage { + initializer: 'checked' | 'not-applicable' | 'unavailable' | 'command-line'; + declaredInitializer: 'checked' | 'not-applicable' | 'unavailable'; + type: 'checked' | 'not-applicable' | 'unavailable'; + truncated: boolean; +} + +export interface HdlSemanticFact { + kind: 'parameter' | 'port' | 'type'; + name: string; + instancePath: string; + value?: string; + type?: string; + width?: number; + direction?: string; + source?: { file: string; line: number; column: number | null }; + sourceOrigin?: 'direct' | 'macro'; + macroExpansion?: HdlMacroFrame[]; + macroExpansionComplete?: boolean; + expressionOrigins?: HdlExpressionOrigin[]; + expressionOriginCoverage?: HdlExpressionCoverage; +} + +type AstObject = Record; +const object = (value: unknown): value is AstObject => typeof value === 'object' && value !== null && !Array.isArray(value); +function fail(message: string): never { throw new Error(`Invalid or unsupported slang AST: ${message}`); } +const MAX_DEPTH = 128; +const MAX_NODES = 1_000_000; +const MAX_FACTS = 100_000; +const MAX_TEXT = 64 * 1024 * 1024; +const INTEGER_WIDTHS = new Map(Object.entries({ bit: 1, logic: 1, reg: 1, byte: 8, shortint: 16, int: 32, integer: 32, longint: 64, time: 64 })); + +/** Import facts from successful frontend output; the caller must check compiler + * exit/diagnostics first (slang can emit JSON even when compilation failed). + * Addresses are temporary reference keys only, never public identities. */ +export function importSlangSemantics(ast: unknown, sourceRoot: string): HdlSemanticFact[] { + if (!object(ast) || !object(ast.design) || ast.design.kind !== 'Root' || !Array.isArray(ast.design.members)) fail('expected design Root with members'); + const design = ast.design as AstObject; + const root = path.resolve(sourceRoot); + const catalog = new Map(); + const active = new Set(); + const seen = new Set(); + const pending: Array<{ value: unknown; depth: number; exit?: boolean }> = [{ value: ast, depth: 0 }]; + let nodeCount = 0, textSize = 0; + while (pending.length) { + const { value, depth, exit } = pending.pop()!; + if (exit) { active.delete(value as object); continue; } + if (++nodeCount > MAX_NODES || depth > MAX_DEPTH) fail('input size/depth limit exceeded'); + if (typeof value === 'string') { textSize += value.length; if (textSize > MAX_TEXT) fail('input text limit exceeded'); } + if (!object(value) && !Array.isArray(value)) continue; + if (active.has(value)) fail('cyclic input object'); + if (seen.has(value)) continue; + seen.add(value); active.add(value); + pending.push({ value, depth, exit: true }); + if (object(value) && value.addr !== undefined) { + const addr = typeof value.addr === 'number' && Number.isSafeInteger(value.addr) && value.addr >= 0 + ? String(value.addr) : typeof value.addr === 'string' && /^\d+$/.test(value.addr) ? value.addr : fail('malformed address'); + const existing = catalog.get(addr); + if (existing && (existing.kind !== value.kind || existing.name !== value.name)) fail('conflicting address definitions'); + if (!existing || Object.keys(value).length > Object.keys(existing).length) catalog.set(addr, value); + } + const values = Array.isArray(value) ? value : Object.values(value); + if (values.length > MAX_NODES - nodeCount - pending.length) fail('input node limit exceeded'); + for (let i = values.length - 1; i >= 0; i--) pending.push({ value: values[i], depth: depth + 1 }); + } + const resolve = (value: unknown): AstObject => { + if (object(value)) return value; + if (typeof value === 'string') { + const match = /^(\d+)\s/.exec(value); + if (match && catalog.has(match[1]!)) return catalog.get(match[1]!)!; + } + return fail('unresolved symbol/body reference'); + }; + const members = (scope: AstObject): unknown[] => { + if (scope.members === undefined) return []; + if (!Array.isArray(scope.members)) return fail('members must be an array'); + return scope.members; + }; + const nameOf = (node: AstObject): string => { + if (typeof node.name !== 'string' || !node.name || node.name.length > 4096) return fail('missing or oversized symbol name'); + return node.name; + }; + const segment = (name: string): string => /^[A-Za-z_][A-Za-z0-9_$]*$/.test(name) ? name : `\\${name} `; + const join = (parent: string, name: string): string => parent ? `${parent}.${segment(name)}` : segment(name); + const range = (value: unknown): [number, number] => { + const match = typeof value === 'string' && /^\[\s*(-?\d+)\s*:\s*(-?\d+)\s*\]$/.exec(value); + if (!match) return fail('expected a constant numeric range'); + const left = Number(match[1]), right = Number(match[2]); + if (!Number.isSafeInteger(left) || !Number.isSafeInteger(right) || !Number.isSafeInteger(Math.abs(left - right) + 1)) return fail('range exceeds exact numeric bounds'); + return [left, right]; + }; + const stripAddresses = (text: string): string | undefined => { + let unknown = false; + const cleaned = text.replace(/\b(\d+)\s+(?=[A-Za-z_$\\])/g, (match, addr: string) => { + if (catalog.has(addr)) return ''; + unknown = true; return match; + }); + return unknown ? undefined : cleaned; + }; + const typeInfo = (value: unknown, ancestors = new Set()): { type?: string; width?: number } => { + if (typeof value === 'string') { + const ref = /^(\d+)\s/.exec(value); + if (ref) { + const target = catalog.get(ref[1]!); + if (!target) return {}; + return { ...typeInfo(target, ancestors), type: stripAddresses(value) }; + } + // Composite pretty-printed strings do not prove packed vs unpacked shape. + const base = value.replace(/\s+(signed|unsigned)$/, ''); + return { type: stripAddresses(value), ...(INTEGER_WIDTHS.has(base) ? { width: INTEGER_WIDTHS.get(base)! } : {}) }; + } + if (!object(value)) return {}; + if (ancestors.size >= MAX_DEPTH || ancestors.has(value)) return fail('cyclic or overly deep type'); + const next = new Set(ancestors); next.add(value); + const name = typeof value.name === 'string' && value.name ? stripAddresses(value.name) : undefined; + if (value.kind === 'TypeAlias') return { ...typeInfo(value.target, next), ...(name ? { type: name } : {}) }; + if (value.kind === 'ScalarType' || value.kind === 'PredefinedIntegerType') { + const base = name?.replace(/\s+(signed|unsigned)$/, '') ?? ''; + return { type: name, ...(INTEGER_WIDTHS.has(base) ? { width: INTEGER_WIDTHS.get(base)! } : {}) }; + } + if (value.kind === 'PackedArrayType') { + const [left, right] = range(value.range); + const element = typeInfo(value.elementType, next); + const width = element.width === undefined ? undefined : element.width * (Math.abs(left - right) + 1); + if (width !== undefined && !Number.isSafeInteger(width)) fail('packed width exceeds exact numeric bounds'); + return { ...(element.type ? { type: `${element.type}[${left}:${right}]` } : {}), ...(width !== undefined ? { width } : {}) }; + } + return name ? { type: name } : {}; + }; + const sourceOf = (node: AstObject): HdlSemanticFact['source'] => { + const file = node.source_file; + if (file === undefined) return undefined; + if (typeof file !== 'string') return fail('invalid source filename'); + if (!file || file.startsWith('<') || (!path.isAbsolute(file) && path.win32.isAbsolute(file))) return undefined; + const full = path.resolve(root, file.replace(/\\/g, '/')); + const relative = path.relative(root, full); + if (!relative || relative === '..' || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative)) return undefined; + const line = node.source_line, column = node.source_column; + if (!Number.isSafeInteger(line) || (line as number) < 0 || (column !== undefined && (!Number.isSafeInteger(column) || (column as number) < 0))) return fail('invalid source coordinates'); + if (line === 0) return undefined; + return { file: relative.split(path.sep).join('/'), line: line as number, column: column === undefined || column === 0 ? null : column as number }; + }; + const indexValue = (value: unknown): string => { + if (typeof value !== 'string' || !/^-?\d+$/.test(value) || !Number.isSafeInteger(Number(value))) return fail('generate index is not a known decimal integer'); + return String(Number(value)); + }; + + const facts: HdlSemanticFact[] = []; + const keys = new Set(); + let visits = 0, factText = 0; + const visit = (node: AstObject, scopePath: string, ancestry: Set, depth: number): void => { + if (++visits > MAX_FACTS || depth > MAX_DEPTH || scopePath.length > 16384) fail('reachable hierarchy size/depth limit exceeded'); + if (ancestry.has(node)) fail('cyclic instance hierarchy'); + const chain = new Set(ancestry); chain.add(node); + if (node.kind === 'Parameter' || node.kind === 'Port') { + const name = nameOf(node); + const fact: HdlSemanticFact = { kind: node.kind === 'Parameter' ? 'parameter' : 'port', name, instancePath: scopePath, ...typeInfo(node.type) }; + if (node.kind === 'Parameter' && ['string', 'number', 'boolean'].includes(typeof node.value)) fact.value = String(node.value); + if (node.kind === 'Port' && typeof node.direction === 'string') fact.direction = node.direction; + const source = sourceOf(node); if (source) fact.source = source; + const key = JSON.stringify([fact.kind, scopePath, name]); + if (keys.has(key)) fail('duplicate fact identity'); + keys.add(key); factText += JSON.stringify(fact).length; + if (facts.length >= MAX_FACTS || factText > MAX_TEXT) fail('fact output size limit exceeded'); + facts.push(fact); return; + } + if (node.kind === 'Instance') { + const body = resolve(node.body); + if (body.kind !== 'InstanceBody') fail('instance body has wrong kind'); + visit(body, scopePath, chain, depth + 1); return; + } + if (node.kind === 'GenerateBlock' && node.isUninstantiated === true) return; + if (node.kind === 'GenerateBlockArray') { + // Slang's loopVariable can refer to an evaluator-only symbol absent + // from the serialized catalog. Its explicit name still identifies the + // matching implicit local Parameter in every materialized iteration. + const variableName = object(node.loopVariable) ? nameOf(node.loopVariable) + : typeof node.loopVariable === 'string' ? /^\d+ (.+)$/.exec(node.loopVariable)?.[1] : undefined; + if (!variableName) fail('missing generate loop variable name'); + const indices = new Set(); + for (const entry of members(node)) { + const block = resolve(entry); + if (block.kind === 'Genvar') continue; + if (block.kind !== 'GenerateBlock') fail('invalid generate array member'); + if (block.isUninstantiated === true) continue; + const parameters = members(block).map(resolve).filter(n => n.kind === 'Parameter' && n.name === variableName); + if (parameters.length !== 1) fail('missing or ambiguous generate index parameter'); + const index = indexValue(parameters[0]!.value); + if (indices.has(index)) fail('duplicate generate index'); + indices.add(index); visit(block, `${scopePath}[${index}]`, chain, depth + 1); + } + return; + } + if (node.kind === 'InstanceArray') { + const [left, right] = range(node.range); + const entries = members(node); + if (entries.length !== Math.abs(left - right) + 1) fail('instance array length disagrees with range'); + // Slang serializes elements in ascending numeric index order, including + // descending declarations; verified with distinct per-index defparams. + for (let i = 0; i < entries.length; i++) { + const child = resolve(entries[i]); + if (!['Instance', 'InstanceArray'].includes(String(child.kind))) fail('invalid instance array member'); + visit(child, `${scopePath}[${Math.min(left, right) + i}]`, chain, depth + 1); + } + return; + } + if (!['InstanceBody', 'GenerateBlock', 'Root'].includes(String(node.kind))) return; + for (const entry of members(node)) { + const child = resolve(entry); + if (['Instance', 'InstanceArray', 'GenerateBlockArray', 'GenerateBlock'].includes(String(child.kind))) { + if (child.kind === 'GenerateBlock' && child.isUninstantiated === true) continue; + visit(child, join(scopePath, nameOf(child)), chain, depth + 1); + } else if (child.kind === 'Parameter' || child.kind === 'Port') visit(child, scopePath, chain, depth + 1); + } + }; + for (const entry of members(design)) { + const node = resolve(entry); + if (node.kind === 'Instance' || node.kind === 'InstanceArray') visit(node, segment(nameOf(node)), new Set(), 0); + } + return facts; +} diff --git a/src/hdl/semantic-runner.ts b/src/hdl/semantic-runner.ts new file mode 100644 index 0000000000..cde378d874 --- /dev/null +++ b/src/hdl/semantic-runner.ts @@ -0,0 +1,263 @@ +import * as fs from 'node:fs'; +import * as path from 'node:path'; +import * as os from 'node:os'; +import { createHash } from 'node:crypto'; +import { spawn } from 'node:child_process'; +import { loadHdlProfile, isReservedHdlPath, type ActiveHdlProfile } from './profile'; + +export interface RunSlangOptions { + executable?: string; + pythonExecutable?: string; + top?: string; + parameters?: Record; + allowUseBeforeDeclare?: boolean; + signal?: AbortSignal; + timeoutMs?: number; +} +export interface RunSlangResult { + ast: unknown; + /** The deleted immutable snapshot root; use only to remap AST paths to sources keys. */ + sourceRoot: string; + profileName: string; + configurationFingerprint: string; + fingerprint: string; + version: string; + executableSha256: string; + frontend: 'slang' | 'pyslang'; + exporterSha256?: string; + librarySha256?: string; + diagnostics: string[]; + sources: Record; + top: string; + parameters: Record; + allowUseBeforeDeclare: boolean; + languageStandard: '1364-2005' | '1800-2023'; + compilationUnitMode: 'separate'; + runnerVersion: string; + compilerLimits: readonly string[]; +} +const RUNNER_VERSION = 'slang-snapshot-v2'; +const COMPILER_LIMITS = Object.freeze(['--max-hierarchy-depth=128','--max-generate-steps=10000','--max-instance-array=10000','--max-constexpr-steps=1000000','--max-constant-size=1048576']); +const FILE_LIMIT = 1024 * 1024, TOTAL_LIMIT = 64 * 1024 * 1024, AST_LIMIT = 64 * 1024 * 1024; +const OUTPUT_LIMIT = 1024 * 1024, FILE_COUNT_LIMIT = 20000; +const digest = (content: Buffer | string) => createHash('sha256').update(content).digest('hex'); +function abort(signal?: AbortSignal): void { if (signal?.aborted) throw new Error('slang semantic run cancelled'); } +function resolveExecutable(name: string, preserveLauncherPath = false): string { + if (!name || name.includes('\0')) throw new Error('A slang executable must be specified'); + const candidates = name.includes('/') ? [path.resolve(name)] : (process.env.PATH ?? '').split(path.delimiter).map(dir => path.join(dir, name)); + for (const candidate of candidates) { + try { fs.accessSync(candidate, fs.constants.X_OK); const real = fs.realpathSync(candidate); if (fs.statSync(real).isFile()) return preserveLauncherPath ? path.resolve(candidate) : real; } catch { /* try next PATH entry */ } + } + throw new Error(`slang executable is unavailable: ${name}`); +} +async function executableHash(file: string): Promise { + const hash = createHash('sha256'); + for await (const chunk of fs.createReadStream(file)) hash.update(chunk); + return hash.digest('hex'); +} + +/** Literal includes only. Macro-computed includes cannot be snapshotted without a compiler filesystem API. */ +function includes(source: string): Array<{ name: string; local: boolean }> { + const result: Array<{name: string; local: boolean}> = []; + for (let i = 0; i < source.length;) { + if (source.startsWith('//', i)) { const end = source.indexOf('\n', i); i = end < 0 ? source.length : end; continue; } + if (source.startsWith('/*', i)) { const end = source.indexOf('*/', i + 2); i = end < 0 ? source.length : end + 2; continue; } + if (source[i] === '"') { i++; while (i < source.length) { if (source[i] === '\\') i += 2; else if (source[i++] === '"') break; } continue; } + if (source[i] === '\\') { i++; while (i < source.length && !/\s/.test(source[i]!)) i++; continue; } + const match = source.slice(i).match(/^`include\b[ \t]*/); + if (!match) { i++; continue; } + i += match[0].length; + const opening = source[i], closing = opening === '"' ? '"' : opening === '<' ? '>' : ''; + if (!closing) throw new Error('Macro-computed include paths are unsupported by the slang snapshot runner'); + const end = source.indexOf(closing, i + 1); + if (end < 0 || /[\r\n\\`]/.test(source.slice(i + 1, end))) throw new Error('Unsupported literal include path in slang snapshot'); + result.push({name: source.slice(i + 1, end), local: opening === '"'}); i = end + 1; + } + return result; +} +interface Snapshot { + sources: Record; + hashes: Record; + missing: string[]; +} +function collect(root: string, profile: ActiveHdlProfile, signal?: AbortSignal, deadline?: number): Snapshot { + const check = () => { abort(signal); if(deadline && Date.now() >= deadline)throw new Error('slang semantic run timed out'); }; + const macroIncludes = Object.values(profile.defines).flatMap(includes); + const sources: Record = Object.create(null), hashes: Record = Object.create(null); + const missing = new Set(), visitedDirs = new Set(); + const queue: string[] = []; + let bytes = 0, includeCandidates = 0; + const relative = (file: string) => path.relative(root, file).split(path.sep).join('/'); + const confined = (file: string): string => { + const rel = relative(file); + if (!rel || rel === '..' || rel.startsWith('../') || path.isAbsolute(rel) || isReservedHdlPath(rel)) throw new Error('slang snapshot input escapes the project or uses a reserved path'); + let current = root; + for (const part of rel.split('/')) { + current = path.join(current, part); + try { if (fs.lstatSync(current).isSymbolicLink()) throw new Error('Symbolic links are unsupported in slang snapshot inputs'); } + catch (error) { if ((error as NodeJS.ErrnoException).code === 'ENOENT') break; throw error; } + } + return rel; + }; + const add = (file: string, required: boolean): void => { + check(); + if(!required && ++includeCandidates > 100000)throw new Error('slang snapshot exceeds the include candidate limit'); + const rel = confined(file); + if (Object.prototype.hasOwnProperty.call(hashes, rel)) return; + let stat: fs.Stats; + try { stat = fs.statSync(file); } catch (error) { + if (!required && (error as NodeJS.ErrnoException).code === 'ENOENT') { missing.add(rel); return; } + throw error; + } + if (!stat.isFile()) throw new Error('slang snapshot input is not a regular file'); + if (stat.size > FILE_LIMIT || bytes + stat.size > TOTAL_LIMIT || queue.length >= FILE_COUNT_LIMIT) throw new Error('slang snapshot exceeds the input size/file count limit'); + const content = fs.readFileSync(file); + if (content.length > FILE_LIMIT || bytes + content.length > TOTAL_LIMIT) throw new Error('slang snapshot exceeds the input size limit'); + let text: string; + try { text = new TextDecoder('utf-8', {fatal:true,ignoreBOM:true}).decode(content); } catch { throw new Error(`Non-UTF-8 file in slang snapshot: ${rel}`); } + sources[rel] = text; hashes[rel] = digest(content); bytes += content.length; queue.push(rel); + }; + const tree = (dir: string, depth = 0): void => { + check(); + if(depth > 128 || visitedDirs.size >= FILE_COUNT_LIMIT)throw new Error('slang snapshot exceeds the directory traversal limit'); + if (visitedDirs.has(dir)) return; visitedDirs.add(dir); + for (const entry of fs.readdirSync(dir, {withFileTypes:true})) { + const file = path.join(dir, entry.name), rel = relative(file); + if (isReservedHdlPath(rel)) continue; + confined(file); + if (entry.isDirectory()) tree(file,depth+1); else if (entry.isFile()) add(file, true); else throw new Error('Special files are unsupported in slang snapshot inputs'); + } + }; + for (const file of profile.files) add(path.resolve(root,file), true); + for (const dir of profile.includeDirs) { + const absolute = path.resolve(root,dir); + if (absolute !== root) confined(absolute); + tree(absolute); + } + // Read every literal candidate, including inactive branches and lower-priority + // shadow candidates. Missing candidates are fingerprinted and checked again. + for (let index = 0; index < queue.length; index++) { + const file = queue[index]!; + for (const include of [...includes(sources[file]!), ...macroIncludes]) { + if (!include.name || path.isAbsolute(include.name) || /^[A-Za-z]:/.test(include.name)) throw new Error('Absolute include paths are unsupported by the slang snapshot runner'); + const bases = [...(include.local ? [path.dirname(path.join(root,file))] : []), ...profile.includeDirs.map(dir => path.join(root,dir))]; + for (const base of bases) add(path.resolve(base,include.name), false); + } + } + return {sources,hashes:Object.fromEntries(Object.entries(hashes).sort(([a],[b])=>a.localeCompare(b))),missing:[...missing].sort()}; +} + +function run(executable: string, args: string[], cwd: string, timeout: number, signal?: AbortSignal, astFile?: string): Promise<{stdout:string;stderr:string}> { + abort(signal); + return new Promise((resolve,reject) => { + const child = spawn(executable,args,{cwd,detached:true,shell:false,stdio:['ignore','pipe','pipe']}); + let stdout = '', stderr = '', size = 0, failure: Error | undefined, finished = false; + const stop = (message: string): void => { + failure ??= new Error(message); + if (child.pid) { try { process.kill(-child.pid,'SIGKILL'); } catch { try { child.kill('SIGKILL'); } catch { /* already exited */ } } } + }; + const timer = setTimeout(()=>stop('slang semantic run timed out'),timeout); + const onAbort = () => stop('slang semantic run cancelled'); + signal?.addEventListener('abort',onAbort,{once:true}); + const monitor = astFile ? setInterval(()=>{ + try { if (fs.statSync(astFile).size > AST_LIMIT) stop('slang AST output exceeds 64 MiB'); } catch { /* not created yet */ } + },25) : undefined; + const finish = (error?: Error): void => { + if (finished) return; finished=true; clearTimeout(timer); if(monitor)clearInterval(monitor); signal?.removeEventListener('abort',onAbort); + if(error)reject(error); else resolve({stdout,stderr}); + }; + child.stdout.on('data',(chunk:Buffer)=>{size+=chunk.length;if(size>OUTPUT_LIMIT)stop('slang output exceeds 1 MiB');else stdout+=chunk.toString('utf8');}); + child.stderr.on('data',(chunk:Buffer)=>{size+=chunk.length;if(size>OUTPUT_LIMIT)stop('slang output exceeds 1 MiB');else stderr+=chunk.toString('utf8');}); + child.on('error',error=>finish(error)); + child.on('close',(code)=>{ + // Do not leave detached descendants alive after the owned frontend exits. + if(child.pid)try{process.kill(-child.pid,'SIGKILL');}catch{/* group already gone */} + finish(failure ?? (code===0 ? undefined : new Error(`slang failed (${code}): ${stderr.slice(0,4000) || stdout.slice(0,4000)}`))); + }); + if(signal?.aborted)onAbort(); + }); +} + +/** Optional on-demand frontend. Snapshot confinement is not an adversarial OS compiler sandbox. */ +export async function runSlangSemantics(projectRoot: string, options: RunSlangOptions): Promise { + if(process.platform==='win32')throw new Error('slang semantic runner is not supported on Windows until process-tree cancellation is verified'); + const requestedSlang=options.executable, requestedPython=options.pythonExecutable; + if((requestedSlang!==undefined)===(requestedPython!==undefined))throw new Error('Specify exactly one of executable or pythonExecutable'); + const frontend:RunSlangResult['frontend']=requestedPython!==undefined?'pyslang':'slang'; + const requestedExecutable=requestedPython??requestedSlang; + if(typeof requestedExecutable!=='string'||!requestedExecutable.trim())throw new Error('A frontend executable must be specified'); + const signal=options.signal, allowUseBeforeDeclare=!!options.allowUseBeforeDeclare; + abort(signal); + const timeout=options.timeoutMs??30000; + if(!Number.isSafeInteger(timeout)||timeout<1||timeout>300000)throw new Error('slang timeoutMs must be between 1 and 300000'); + const deadline=Date.now()+timeout, remaining=()=>Math.max(1,deadline-Date.now()); + const root=fs.realpathSync(projectRoot), loaded=loadHdlProfile(root); + if(loaded.status!=='active'||!loaded.profile)throw new Error(`slang semantics requires a valid active HDL profile: ${loaded.diagnostics.join('; ')||loaded.status}`); + const profile=loaded.profile; + const top=options.top??(profile.topModules.length===1?profile.topModules[0]:undefined); + if(!top||!/^[A-Za-z_][A-Za-z0-9_$]*$/.test(top))throw new Error('slang semantics requires one explicit simple top module'); + if(!profile.files.length)throw new Error('slang semantics requires at least one source unit'); + const parameters:Record=Object.create(null); + for(const [name,value] of Object.entries(options.parameters??{}).sort(([a],[b])=>a.localeCompare(b))) { + if(!/^[A-Za-z_][A-Za-z0-9_$]*$/.test(name)||typeof value!=='string'||value.includes('\0'))throw new Error('Invalid slang parameter override'); + parameters[name]=value; + } + // Preserve the venv launch path: realpath'ing bin/python before exec would + // select the base interpreter's site-packages instead of the configured venv. + const executable=resolveExecutable(requestedExecutable,frontend==='pyslang'); + const exporter=frontend==='pyslang'?path.join(__dirname,'source-map-export.py'):undefined; + if(exporter) { + try { const stat=fs.statSync(exporter); if(!stat.isFile()||stat.size>FILE_LIMIT)throw new Error('invalid exporter'); } + catch { throw new Error('Shipped pyslang exporter is unavailable or exceeds 1 MiB'); } + } + const commandPrefix=exporter?['-I',exporter]:[]; + const executableSha256=await executableHash(executable); + const exporterSha256=exporter?await executableHash(exporter):undefined; + const before=collect(root,profile,signal,deadline); + const base=process.env.CODEGRAPH_SEMANTIC_TMPDIR||path.join(os.tmpdir(),'codegraph-semantic-runs'); + fs.mkdirSync(base,{recursive:true,mode:0o700}); + const baseRelative=path.relative(root,fs.realpathSync(base)); + if(!baseRelative||(!baseRelative.startsWith(`..${path.sep}`)&&baseRelative!=='..'&&!path.isAbsolute(baseRelative)))throw new Error('Semantic snapshot directory must be outside the source project'); + const temp=fs.mkdtempSync(path.join(base,'run-')),sourceRoot=path.join(temp,'sources'),astFile=path.join(temp,'ast.json'); + try { + fs.mkdirSync(sourceRoot,{mode:0o700}); + for(const dir of profile.includeDirs) fs.mkdirSync(path.join(sourceRoot,dir),{recursive:true,mode:0o700}); + for(const [file,source] of Object.entries(before.sources)) {const dest=path.join(sourceRoot,file);fs.mkdirSync(path.dirname(dest),{recursive:true,mode:0o700});fs.writeFileSync(dest,source,{mode:0o600});} + const version=(await run(executable,[...commandPrefix,'--version'],sourceRoot,Math.min(remaining(),5000),signal)).stdout.trim(); + const pythonVersion=version.match(/^codegraph pyslang 11\.0\.0 exporter 1 native ([a-f0-9]{64})$/); + const supportedVersion=frontend==='pyslang'?!!pythonVersion:/^slang version 11\.0(?:\.\d+)?(?:\+[A-Za-z0-9]+)?(?:\s.*)?$/.test(version); + if(!supportedVersion)throw new Error(`Unsupported ${frontend} schema family: ${version.slice(0,200)}`); + const librarySha256=pythonVersion?.[1]; + const languageStandard=profile.languageMode==='verilog'?'1364-2005':'1800-2023'; + const args=['--ast-json',astFile,'--ast-json-source-info','--ast-json-detailed-types','--threads=1','--error-limit=20',`--std=${languageStandard}`,'--top',top]; + args.push(...COMPILER_LIMITS); + if(allowUseBeforeDeclare)args.push('--allow-use-before-declare'); + for(const dir of profile.includeDirs)args.push('-I',path.join(sourceRoot,dir)); + for(const [name,value] of Object.entries(profile.defines))args.push(`-D${name}=${value}`); + for(const [name,value] of Object.entries(parameters).sort(([a],[b])=>a.localeCompare(b)))args.push('-G',`${name}=${value}`); + args.push('--',...profile.files); + const output=await run(executable,[...commandPrefix,...args],sourceRoot,remaining(),signal,astFile); + const stat=fs.lstatSync(astFile); + if(!stat.isFile()||stat.isSymbolicLink()||stat.size>AST_LIMIT)throw new Error('Invalid or oversized slang AST output'); + const astText=fs.readFileSync(astFile,'utf8');if(Buffer.byteLength(astText)>AST_LIMIT)throw new Error('slang AST output exceeds 64 MiB'); + const ast:unknown=JSON.parse(astText); + if(!ast||typeof ast!=='object'||Array.isArray(ast))throw new Error('slang AST root must be an object'); + if(frontend==='pyslang'&&((ast as Record).codegraphSemanticVersion!==1||!Array.isArray((ast as Record).facts)))throw new Error('Invalid pyslang semantic exporter envelope'); + if(await executableHash(executable)!==executableSha256)throw new Error('slang executable changed during the run; result discarded'); + if(exporter&&await executableHash(exporter)!==exporterSha256)throw new Error('pyslang exporter changed during the run; result discarded'); + if(frontend==='pyslang') { + const verifiedVersion=(await run(executable,[...commandPrefix,'--version'],sourceRoot,Math.min(remaining(),5000),signal)).stdout.trim(); + if(verifiedVersion!==version)throw new Error('pyslang library changed during the run; result discarded'); + } + const snapshotAfter=collect(sourceRoot,profile,signal,deadline); + if(JSON.stringify(before.hashes)!==JSON.stringify(snapshotAfter.hashes)||JSON.stringify(before.missing)!==JSON.stringify(snapshotAfter.missing))throw new Error('slang modified its source snapshot; result discarded'); + const afterConfig=loadHdlProfile(root); + const after=collect(root,profile,signal,deadline); + if(afterConfig.status!=='active'||afterConfig.profile?.fingerprint!==profile.fingerprint||JSON.stringify(before.hashes)!==JSON.stringify(after.hashes)||JSON.stringify(before.missing)!==JSON.stringify(after.missing))throw new Error('HDL sources or configuration changed during the slang run; result discarded'); + abort(signal); + if(Date.now()>=deadline)throw new Error('slang semantic run timed out'); + const provenance={configurationFingerprint:profile.fingerprint,hashes:before.hashes,missing:before.missing,version,executableSha256,frontend,exporterSha256,librarySha256,top,parameters,allowUseBeforeDeclare,languageStandard,compilationUnitMode:'separate' as const,runnerVersion:RUNNER_VERSION,compilerLimits:COMPILER_LIMITS}; + return {ast,sourceRoot,profileName:profile.name,configurationFingerprint:profile.fingerprint,fingerprint:digest(JSON.stringify(provenance)),version,executableSha256,frontend,...(exporterSha256?{exporterSha256}:{}),...(librarySha256?{librarySha256}:{}), + diagnostics:[output.stdout,output.stderr].map(s=>s.trim()).filter(Boolean),sources:before.sources,top,parameters,allowUseBeforeDeclare,languageStandard,compilationUnitMode:'separate' as const,runnerVersion:RUNNER_VERSION,compilerLimits:COMPILER_LIMITS}; + } finally {fs.rmSync(temp,{recursive:true,force:true});} +} diff --git a/src/hdl/semantics.ts b/src/hdl/semantics.ts new file mode 100644 index 0000000000..ee7e27c5bf --- /dev/null +++ b/src/hdl/semantics.ts @@ -0,0 +1,76 @@ +import { createHash } from 'node:crypto'; +import { runSlangSemantics, type RunSlangOptions } from './semantic-runner'; +import { importSlangSemantics, type HdlSemanticFact } from './semantic-import'; +import { importMappedSemantics } from './source-map-import'; +import type { HdlProfileStatus } from './status'; +import type { Node, FileRecord } from '../types'; + +export interface HdlSemanticOptions extends RunSlangOptions { + /** Exact fact name, instance path, or instance-qualified fact name. */ + query?: string; + limit?: number; +} +export interface HdlSemanticResult { + schemaVersion: 1; + provenance: { frontend: 'slang' | 'pyslang'; exporterSha256?: string; librarySha256?: string; version: string; executableSha256: string; + profile: string; configurationFingerprint: string; fingerprint: string; top: string; + parameters: Record; allowUseBeforeDeclare: boolean; + languageStandard: string; compilationUnitMode: 'separate'; runnerVersion: string; compilerLimits: readonly string[] }; + sourceGraphProfileMatches: boolean; + facts: Array; + totalMatches: number; + truncated: boolean; + diagnostics: string[]; + limitations: string[]; +} +export interface HdlSemanticSourceGraph { + profile(): HdlProfileStatus | null; + stale(): boolean; + file(file: string): FileRecord | null | undefined; + nodes(file: string): Node[]; +} + +/** On-demand semantic view; no graph writes or persistent compiler cache. */ +export async function analyzeHdlSemantics(root: string, options: HdlSemanticOptions, + graph: HdlSemanticSourceGraph): Promise { + const limit = options.limit ?? 100; + const query = options.query; + if (!Number.isInteger(limit) || limit < 1 || limit > 1000) throw new Error('HDL semantic limit must be 1..1000'); + const result = await runSlangSemantics(root, options); + const facts = result.frontend === 'pyslang' ? importMappedSemantics(result.ast, result.sources) : importSlangSemantics(result.ast, result.sourceRoot); + const profile = graph.profile(); + const linked = !graph.stale() && profile?.state === 'matches' && + profile.indexed.configurationFingerprint === result.configurationFingerprint; + const byFile = new Map(); + const matches = facts.filter(fact => !query || fact.name === query || + fact.instancePath === query || `${fact.instancePath}.${fact.name}` === query); + const selected = matches.slice(0, limit).map(fact => { + const source = fact.source; + if (!source) return fact; + const text = result.sources[source.file]; + const line = text?.split(/\r?\n/)[source.line - 1]; + // Column 0 / macro invocation remains line-only; never fabricate a source node link. + if (text === undefined || line === undefined) { const { source: _source, ...rest } = fact; return rest; } + if (fact.sourceOrigin === 'macro' || !linked || source.column === null || source.column < 1 || source.column > Buffer.byteLength(line) + 1 || !line.includes(fact.name)) return fact; + if (!byFile.has(source.file)) { + const hash = createHash('sha256').update(text).digest('hex'); + byFile.set(source.file, graph.file(source.file)?.contentHash === hash ? graph.nodes(source.file) : []); + } + const nodes = byFile.get(source.file)!.filter(node => node.name === fact.name && node.startLine === source.line && + (fact.kind === 'parameter' ? node.kind === 'constant' : fact.kind === 'type' ? node.kind === 'type_alias' : node.kind === 'field' && !!node.decorators?.includes('hdl:port'))); + return nodes.length === 1 ? { ...fact, sourceNodeId: nodes[0]!.id } : fact; + }); + return { schemaVersion: 1, provenance: { frontend: result.frontend, exporterSha256: result.exporterSha256, librarySha256: result.librarySha256, version: result.version, + executableSha256: result.executableSha256, profile: result.profileName, + configurationFingerprint: result.configurationFingerprint, fingerprint: result.fingerprint, + top: result.top, parameters: { ...result.parameters }, allowUseBeforeDeclare: result.allowUseBeforeDeclare, + languageStandard: result.languageStandard, compilationUnitMode: result.compilationUnitMode, + runnerVersion: result.runnerVersion, compilerLimits: result.compilerLimits }, + sourceGraphProfileMatches: !!linked, facts: selected, totalMatches: matches.length, + truncated: matches.length > selected.length, diagnostics: result.diagnostics, + limitations: ['Computed on demand from a source snapshot; no persistent semantic cache.', + 'Source columns retain frontend coordinates; null means unavailable, including macro-generated declarations.', + 'Expression origins cover directly visited compiler syntax tokens; coverage/truncation is explicit, not a transitive constant-dependency proof.', + 'Only supported parameter/port facts are returned; absent or unknown widths are not zero.', + 'Compiler semantics are not simulation, synthesis, timing or hardware validation.'] }; +} diff --git a/src/hdl/source-map-export.py b/src/hdl/source-map-export.py new file mode 100644 index 0000000000..a0d448cd41 --- /dev/null +++ b/src/hdl/source-map-export.py @@ -0,0 +1,407 @@ +#!/usr/bin/env python3 +"""Compiler-backed, bounded pyslang export; no textual macro-position recovery. + +macroExpansion contains a set of provenance frames reached through BOTH original +and expansion parent relations. It is not an ordered invocation stack. Points +are physical UTF-8 byte positions in root-confined source files. A pasted token's +spelling point can identify its prefix argument; it is never a name range. +Expression origins describe only macro tokens in the selected direct syntax, +not transitive value/type dependencies. 'checked' plus truncated=true is a +bounded partial scan; command-line initializers remain separate from defaults. +""" +import hashlib +import json +from pathlib import Path +import shlex +import sys + +MAX_FACTS = 100_000 +MAX_DEPTH = 128 +MAX_BYTES = 64 * 1024 * 1024 +MAX_DIAGNOSTICS = 256 * 1024 +MAX_EXPRESSION_ORIGINS = 32 +MAX_PROVENANCE_FRAMES = 100_000 +MAX_SYNTAX_VISITS = 1_000_000 + + +def native_version(pyslang): + if pyslang.__version__ != '11.0.0': + raise RuntimeError('This exporter requires explicitly installed pyslang 11.0.0') + native = Path(pyslang.pyslang.__file__).resolve(strict=True) + with native.open('rb') as stream: + digest = hashlib.file_digest(stream, 'sha256').hexdigest() + return f'codegraph pyslang 11.0.0 exporter 1 native {digest}' + + +class Exporter: + def __init__(self, manager, root): + self.manager = manager + self.root = root.resolve(strict=True) + self.sources = {} + self.source_bytes = 0 + self.origins = {} + self.facts = [] + self.identities = set() + self.visits = 0 + self.output_bytes = 0 + self.syntax_cache = {} + self.syntax_visits = 0 + self.provenance_frames = 0 + + def point(self, location): + try: + if not location.buffer.id or not self.manager.isFileLoc(location): + return None + file = Path(self.manager.getFullPath(location.buffer)).resolve(strict=True) + relative = file.relative_to(self.root).as_posix() + if file not in self.sources: + if not file.is_file() or file.stat().st_size > 8 * 1024 * 1024: + return None + data = file.read_bytes() + self.source_bytes += len(data) + if self.source_bytes > MAX_BYTES: + raise RuntimeError('Source mapping byte limit exceeded') + self.sources[file] = data + data = self.sources[file] + offset = location.offset + if offset < 0 or offset > len(data): + return None + # Do not use logical `line remappings or display/Unicode columns. + line = data.count(b'\n', 0, offset) + 1 + column = offset - data.rfind(b'\n', 0, offset) + return {'file': relative, 'line': line, 'column': column, 'byteOffset': offset} + except (OSError, ValueError): + return None + + def provenance(self, location): + key = (location.buffer.id, location.offset) + if key in self.origins: + return self.origins[key] + sm = self.manager + macro = bool(location.buffer.id and sm.isMacroLoc(location)) + result = {'sourceOrigin': 'macro' if macro else 'direct'} + source = self.point(sm.getFullyOriginalLoc(location)) if location.buffer.id else None + if source is None and location.buffer.id: + source = self.point(sm.getFullyExpandedLoc(location)) + if source: + result['source'] = {k: source[k] for k in ['file', 'line', 'column']} + if macro: + pending, visited, frames = [location], set(), [] + complete = True + while pending: + current = pending.pop() + current_key = (current.buffer.id, current.offset) + if current_key in visited or not sm.isMacroLoc(current): + continue + if len(visited) >= MAX_DEPTH: + complete = False + break + visited.add(current_key) + original = sm.getOriginalLoc(current) + expanded = sm.getExpansionLoc(current) + expansion = sm.getExpansionRange(current) + frame = {'name': sm.getMacroName(current) or None, 'argument': sm.isMacroArgLoc(current)} + spelling = self.point(sm.getFullyOriginalLoc(original)) + if spelling: + frame['spelling'] = spelling + start = self.point(sm.getFullyExpandedLoc(expansion.start)) + end = self.point(sm.getFullyExpandedLoc(expansion.end)) + if start and end and start['file'] == end['file'] and end['byteOffset'] >= start['byteOffset']: + frame['invocation'] = {'start': start, 'end': end} + if not spelling or 'invocation' not in frame or start['byteOffset'] == end['byteOffset']: + complete = False + frames.append(frame) + # Original links preserve argument provenance; expansion links + # preserve nested replacement provenance. Neither alone is full. + for parent in [original, expanded]: + if parent.buffer.id and sm.isMacroLoc(parent): + pending.append(parent) + result['macroExpansion'] = frames + result['macroExpansionComplete'] = complete + self.origins[key] = result + return result + + def bounded_origin(self, origin): + result = dict(origin) + frames = origin.get('macroExpansion', []) + remaining = max(0, MAX_PROVENANCE_FRAMES - self.provenance_frames) + truncated = len(frames) > remaining + if 'macroExpansion' in origin: + result['macroExpansion'] = frames[:remaining] + self.provenance_frames += len(result['macroExpansion']) + if truncated: + result['macroExpansionComplete'] = False + return result, truncated + + @staticmethod + def syntax_key(syntax): + if syntax is None: + return None + span = syntax.sourceRange + return (syntax.kind.name, span.start.buffer.id, span.start.offset, + span.end.buffer.id, span.end.offset) + + def command_line_syntax(self, syntax): + if syntax is None: + return False + location = self.manager.getFullyExpandedLoc(syntax.getFirstToken().location) + if not location.buffer.id: + return False + # Driver's override buffer has an explicit command-line line mapping + # and an unnamed synthetic path, unlike a physical `line spoof. + return (self.manager.getFileName(location) == '' + and self.manager.getRawFileName(location.buffer).startswith(' 20_000 or self.syntax_visits > MAX_SYNTAX_VISITS: + truncated = True + return VisitAction.Interrupt + if isinstance(item, Token) and item.location.buffer.id and self.manager.isMacroLoc(item.location): + token_key = (item.location.buffer.id, item.location.offset) + if token_key not in seen: + if len(locations) >= MAX_EXPRESSION_ORIGINS: + truncated = True + return VisitAction.Interrupt + seen.add(token_key) + locations.append(item.location) + return VisitAction.Advance + + syntax.visit(visit) + # Retain the syntax wrapper: a bare Python id could otherwise be reused + # after collection, yielding origins for an unrelated syntax node. + self.syntax_cache[key] = (syntax, locations, truncated) + return locations, truncated + + def expression_origins(self, symbol): + coverage = {'initializer': 'not-applicable', 'declaredInitializer': 'not-applicable', + 'type': 'unavailable', 'truncated': False} + plans = [] + declared_type = getattr(symbol, 'declaredType', None) + declaration = symbol.syntax + type_declarations = [declaration] if declaration is not None else [] + if symbol.kind.name == 'Port': + internal = symbol.internalSymbol + if declared_type is None: + declared_type = getattr(internal, 'declaredType', None) if internal else None + # A non-ANSI PortReference is just the header name. The actual + # declarator (including unpacked dimensions) belongs to its net/var. + internal_syntax = getattr(internal, 'syntax', None) if internal else None + if internal_syntax is not None: + type_declarations.insert(0, internal_syntax) + if symbol.kind.name == 'Parameter': + expression = symbol.initializer + effective = expression.syntax if expression is not None else None + if effective is None and expression is not None and declared_type is not None: + effective = declared_type.initializerSyntax + clause = getattr(declaration, 'initializer', None) if declaration is not None else None + default = getattr(clause, 'expr', None) if clause is not None else None + if effective is None: + coverage['initializer'] = 'unavailable' + else: + coverage['initializer'] = 'command-line' if self.command_line_syntax(effective) else 'checked' + plans.append(('initializer', effective)) + # isOverridden alone is insufficient: Driver -G overrides currently + # leave it false, but their effective syntax is a distinct buffer. + overridden = symbol.isOverridden or (effective is not None and default is not None + and self.syntax_key(effective) != self.syntax_key(default)) + if overridden and default is not None: + coverage['declaredInitializer'] = 'checked' + plans.append(('declared-initializer', default)) + type_syntax = declared_type.typeSyntax if declared_type is not None else None + dimensions = [] + dimensions_known = symbol.kind.name != 'Port' + for candidate in type_declarations: + declared_dimensions = getattr(candidate, 'dimensions', None) + if declared_dimensions is not None: + dimensions_known = True + dimensions.extend(declared_dimensions) + type_inputs = ([type_syntax] if type_syntax is not None else []) + dimensions + if type_inputs and dimensions_known: + coverage['type'] = 'checked' + seen_types = set() + for node in type_inputs: + key = self.syntax_key(node) + if key not in seen_types: + seen_types.add(key) + plans.append(('type', node)) + origins, seen, normalized_seen = [], set(), set() + for role, syntax in plans: + locations, truncated = self.scan_macro_tokens(syntax, role) + coverage['truncated'] |= truncated + for location in locations: + key = (role, location.buffer.id, location.offset) + if key in seen: + continue + seen.add(key) + if len(origins) >= MAX_EXPRESSION_ORIGINS: + coverage['truncated'] = True + break + origin, limited = self.bounded_origin(self.provenance(location)) + coverage['truncated'] |= limited + entry = {'role': role, **origin} + normalized = json.dumps(entry, sort_keys=True, ensure_ascii=False, separators=(',', ':')) + if normalized in normalized_seen: + continue + normalized_seen.add(normalized) + origins.append(entry) + return {'expressionOrigins': origins, 'expressionOriginCoverage': coverage} + + @staticmethod + def segment(name): + import re + if not name or len(name) > 4096: + raise RuntimeError('Unsupported empty/oversized hierarchy name') + return name if re.fullmatch(r'[A-Za-z_][A-Za-z0-9_$]*', name) else '\\' + name + ' ' + + def append(self, symbol, instance_path): + kind = symbol.kind.name + semantic_type = symbol.canonicalType if kind == 'TypeAlias' else symbol.type + origin, _ = self.bounded_origin(self.provenance(symbol.location)) + fact = {'kind': {'Parameter': 'parameter', 'Port': 'port', 'TypeAlias': 'type'}[kind], + 'name': symbol.name, 'instancePath': instance_path, + 'type': str(semantic_type), **origin, **self.expression_origins(symbol)} + if semantic_type.isIntegral: + width = semantic_type.bitWidth + if 0 < width <= 2**53 - 1: + fact['width'] = width + if kind == 'Parameter': + value = symbol.value + if bool(value) and not value.isContainer(): + fact['value'] = str(value) # Preserve SV width/base and X/Z text. + elif kind == 'Port': + fact['direction'] = symbol.direction.name + identity = (fact['kind'], instance_path, symbol.name) + if identity in self.identities: + raise RuntimeError('Duplicate semantic fact identity') + self.identities.add(identity) + self.output_bytes += len(json.dumps(fact, ensure_ascii=False).encode('utf8')) + if len(self.facts) >= MAX_FACTS or self.output_bytes > MAX_BYTES: + raise RuntimeError('Semantic fact output limit exceeded') + self.facts.append(fact) + + def scope(self, scope, instance_path, depth=0, active=None): + if depth > MAX_DEPTH or len(instance_path) > 16384: + raise RuntimeError('Semantic hierarchy depth/path limit exceeded') + active = set() if active is None else active + key = id(scope) + if key in active: + raise RuntimeError('Cyclic instance hierarchy') + active = active | {key} + for symbol in scope: + self.visits += 1 + if self.visits > 1_000_000: + raise RuntimeError('Semantic traversal size limit exceeded') + kind = symbol.kind.name + if kind in ['Parameter', 'Port', 'TypeAlias']: + self.append(symbol, instance_path) + elif kind == 'Instance': + self.scope(symbol.body, instance_path + '.' + self.segment(symbol.name), depth + 1, active) + elif kind == 'GenerateBlock': + if not symbol.isUninstantiated: + self.scope(symbol, instance_path + '.' + self.segment(symbol.externalName), depth + 1, active) + elif kind == 'GenerateBlockArray': + name = instance_path + '.' + self.segment(symbol.externalName) + for block in symbol.entries: + if block.isUninstantiated: + continue + index = block.arrayIndex + if index is None or index.hasUnknown: + raise RuntimeError('Unknown generate iteration index') + self.scope(block, name + '[' + str(int(index)) + ']', depth + 1, active) + elif kind == 'InstanceArray': + self.array(symbol, instance_path + '.' + self.segment(symbol.name), depth + 1, active) + + def array(self, array, array_path, depth, active): + if depth > MAX_DEPTH: + raise RuntimeError('Instance array depth limit exceeded') + for entry in array.elements: + if entry.kind.name == 'InstanceArray': + self.array(entry, array_path, depth + 1, active) + elif entry.kind.name == 'Instance': + indices = ''.join('[' + str(index) + ']' for index in entry.arrayPath) + self.scope(entry.body, array_path + indices, depth + 1, active) + else: + raise RuntimeError('Unsupported instance array member') + + +def main(argv): + import pyslang + from pyslang.driver import Driver, CommandLineOptions + version = native_version(pyslang) + if argv == ['--version']: + print(version) + return 0 + output = None + compiler_argv = [] + index = 0 + while index < len(argv): + arg = argv[index] + if arg == '--': + compiler_argv.extend(argv[index:]) + break + if arg == '--ast-json': + if index + 1 >= len(argv) or output is not None: + raise RuntimeError('Expected one --ast-json output path') + output = Path(argv[index + 1]) + index += 2 + continue + if arg.startswith('--ast-json='): + if output is not None: + raise RuntimeError('Expected one --ast-json output path') + output = Path(arg.split('=', 1)[1]) + elif arg not in ['--ast-json-source-info', '--ast-json-detailed-types']: + compiler_argv.append(arg) + index += 1 + if output is None or str(output) == '-': + raise RuntimeError('A file --ast-json output path is required') + driver = Driver() + driver.addStandardArgs() + options = CommandLineOptions() + options.ignoreProgramName = True + options.expandEnvVars = False + # Binding accepts one command-line string; shlex.join quotes every original + # argv atom. No shell is invoked, no environment interpolation is enabled. + if not driver.parseCommandLine(shlex.join(compiler_argv), options) or not driver.processOptions() or not driver.parseAllSources(): + driver.reportDiagnostics(True) + return 1 + compilation = driver.createCompilation() + driver.reportCompilation(compilation, True) + analysis = driver.runAnalysis(compilation) # Keep native analysis alive through export. + diagnostics = driver.textDiagClient.getString() + if diagnostics: + sys.stderr.write(diagnostics[:MAX_DIAGNOSTICS]) + if len(diagnostics) > MAX_DIAGNOSTICS: + sys.stderr.write('\nAdditional compiler diagnostics truncated.\n') + if driver.diagEngine.numErrors or compilation.hasFatalErrors or compilation.hasIssuedErrors: + return 1 + exporter = Exporter(driver.sourceManager, Path.cwd()) + for instance in compilation.getRoot().topInstances: + exporter.scope(instance.body, exporter.segment(instance.name)) + payload = {'codegraphSemanticVersion': 1, 'facts': exporter.facts} + encoded = json.dumps(payload, ensure_ascii=False, separators=(',', ':')).encode('utf8') + if len(encoded) > MAX_BYTES: + raise RuntimeError('Semantic JSON size limit exceeded') + output.write_bytes(encoded) + return 0 + + +if __name__ == '__main__': + try: + sys.exit(main(sys.argv[1:])) + except (Exception, ImportError) as error: + print('CodeGraph pyslang exporter: ' + str(error), file=sys.stderr) + sys.exit(2) diff --git a/src/hdl/source-map-import.ts b/src/hdl/source-map-import.ts new file mode 100644 index 0000000000..67f7571187 --- /dev/null +++ b/src/hdl/source-map-import.ts @@ -0,0 +1,99 @@ +import * as path from 'node:path'; +import type { HdlSemanticFact, HdlMacroPoint, HdlMacroFrame, HdlExpressionCoverage, HdlExpressionOrigin } from './semantic-import'; +const object = (v: unknown): v is Record => !!v && typeof v === 'object' && !Array.isArray(v); +function fail(message: string): never { throw new Error('Invalid pyslang semantic export: ' + message); } + +/** Validate the separately versioned exporter protocol against immutable source bytes. */ +export function importMappedSemantics(value: unknown, sources: Record): HdlSemanticFact[] { + if (!object(value) || value.codegraphSemanticVersion !== 1 || !Array.isArray(value.facts) || value.facts.length > 100000) fail('unsupported schema or fact count'); + const cache = new Map(); + const fileData = (file: unknown) => { + if (typeof file !== 'string' || !file || file.includes('\\') || file.includes('\0') || path.posix.isAbsolute(file) || /^[A-Za-z]:/.test(file) || path.posix.normalize(file) !== file || file.split('/').includes('..') || !Object.prototype.hasOwnProperty.call(sources, file)) fail('source outside snapshot'); + if (!cache.has(file)) { + const bytes = Buffer.from(sources[file]!, 'utf8'), starts = [0]; + for (let i = 0; i < bytes.length; i++) if (bytes[i] === 10) starts.push(i + 1); + cache.set(file, { bytes, starts }); + } + return { file, ...cache.get(file)! }; + }; + const source = (v: unknown): NonNullable => { + if (!object(v)) fail('source must be an object'); + const data = fileData(v.file), line = v.line, column = v.column; + if (!Number.isSafeInteger(line) || (line as number) < 1 || (line as number) > data.starts.length || (column !== null && (!Number.isSafeInteger(column) || (column as number) < 1))) fail('invalid source coordinates'); + if (column !== null) { + const offset = data.starts[(line as number) - 1]! + (column as number) - 1; + const end = data.starts[line as number] ?? data.bytes.length; + if (((line as number) < data.starts.length && offset >= end) || offset > end || offset > data.bytes.length || (offset < data.bytes.length && (data.bytes[offset]! & 0xc0) === 0x80)) fail('column outside source line or inside UTF-8 code point'); + } + return { file: data.file, line: line as number, column: column as number | null }; + }; + const point = (v: unknown): HdlMacroPoint => { + const location = source(v); + if (!object(v) || location.column === null || !Number.isSafeInteger(v.byteOffset) || (v.byteOffset as number) < 0) fail('invalid source byte offset'); + const data = fileData(location.file); + if (data.starts[location.line - 1]! + location.column! - 1 !== v.byteOffset) fail('source coordinates disagree with byte offset'); + return { ...location, column: location.column!, byteOffset: v.byteOffset as number }; + }; + const text = (v: unknown, label: string, max = 4096): string => { + if (typeof v !== 'string' || !v || v.length > max || v.includes('\0')) fail('invalid ' + label); + return v; + }; + const result: HdlSemanticFact[] = []; + const identities = new Set(); + let frames = 0; + const macro = (item: Record): Omit => { + if (!Array.isArray(item.macroExpansion) || item.macroExpansion.length > 128 || typeof item.macroExpansionComplete !== 'boolean') fail('invalid macro chain'); + frames += item.macroExpansion.length; + if (frames > 100000) fail('macro frame count limit'); + const macroExpansion = item.macroExpansion.map((frame: unknown): HdlMacroFrame => { + if (!object(frame) || typeof frame.argument !== 'boolean') fail('invalid macro frame'); + const out: HdlMacroFrame = { name: frame.name === null ? null : text(frame.name, 'macro name'), argument: frame.argument }; + if (frame.spelling !== undefined) out.spelling = point(frame.spelling); + if (frame.invocation !== undefined) { + if (!object(frame.invocation)) fail('invalid invocation range'); + out.invocation = { start: point(frame.invocation.start), end: point(frame.invocation.end) }; + if (out.invocation.start.file !== out.invocation.end.file || out.invocation.start.byteOffset > out.invocation.end.byteOffset) fail('invalid invocation order'); + } + return out; + }); + const macroExpansionComplete = item.macroExpansionComplete; + if (macroExpansionComplete && (!macroExpansion.length || macroExpansion.some(f => !f.spelling || !f.invocation || f.invocation.start.byteOffset === f.invocation.end.byteOffset))) fail('incomplete chain marked complete'); + return { macroExpansion, macroExpansionComplete, ...(item.source !== undefined ? { source: source(item.source) } : {}) }; + }; + for (const item of value.facts) { + if (!object(item) || (item.kind !== 'parameter' && item.kind !== 'port' && item.kind !== 'type') || (item.sourceOrigin !== 'direct' && item.sourceOrigin !== 'macro')) fail('invalid fact kind/origin'); + const fact: HdlSemanticFact = { kind: item.kind, name: text(item.name, 'name'), instancePath: text(item.instancePath, 'instance path'), sourceOrigin: item.sourceOrigin }; + const id = JSON.stringify([fact.instancePath, fact.kind, fact.name]); + if (identities.has(id)) fail('duplicate instance fact'); identities.add(id); + if (item.value !== undefined) fact.value = text(item.value, 'value', 65536); + if (item.type !== undefined) fact.type = text(item.type, 'type', 65536); + if (item.width !== undefined) { + if (!Number.isSafeInteger(item.width) || (item.width as number) < 1) fail('invalid width'); + fact.width = item.width as number; + } + if (item.direction !== undefined) fact.direction = text(item.direction, 'direction'); + if (item.source !== undefined) fact.source = source(item.source); + if (item.sourceOrigin === 'macro') Object.assign(fact, macro(item)); + else if (item.macroExpansion !== undefined || item.macroExpansionComplete !== undefined) fail('direct fact carries macro chain'); + if (item.expressionOrigins !== undefined || item.expressionOriginCoverage !== undefined) { + if (!Array.isArray(item.expressionOrigins) || item.expressionOrigins.length > 32 || !object(item.expressionOriginCoverage)) fail('invalid expression origins'); + const coverage = item.expressionOriginCoverage; + const statuses = ['checked', 'not-applicable', 'unavailable']; + if (typeof coverage.initializer !== 'string' || typeof coverage.declaredInitializer !== 'string' || typeof coverage.type !== 'string' || ![...statuses, 'command-line'].includes(coverage.initializer) || !statuses.includes(coverage.declaredInitializer) || !statuses.includes(coverage.type) || typeof coverage.truncated !== 'boolean') fail('invalid expression coverage'); + fact.expressionOriginCoverage = { initializer: coverage.initializer, declaredInitializer: coverage.declaredInitializer, type: coverage.type, truncated: coverage.truncated } as HdlExpressionCoverage; + const keys = { initializer: 'initializer', 'declared-initializer': 'declaredInitializer', type: 'type' } as const; + const seen = new Set(); + fact.expressionOrigins = item.expressionOrigins.map((entry: unknown): HdlExpressionOrigin => { + if (!object(entry) || (entry.role !== 'initializer' && entry.role !== 'declared-initializer' && entry.role !== 'type') || entry.sourceOrigin !== 'macro') fail('invalid expression origin role'); + const status = coverage[keys[entry.role]]; + if (status !== 'checked' && status !== 'command-line') fail('expression origin contradicts coverage'); + const normalized: HdlExpressionOrigin = { role: entry.role, sourceOrigin: 'macro', ...macro(entry) }; + const key = JSON.stringify(normalized); + if (seen.has(key)) fail('duplicate expression origin'); seen.add(key); + return normalized; + }); + } + result.push(fact); + } + return result; +} diff --git a/src/index.ts b/src/index.ts index 3da7091d9b..7309714867 100644 --- a/src/index.ts +++ b/src/index.ts @@ -35,6 +35,8 @@ import { importPathKeys, moduleReferenceKeys } from './db/reference-tail'; import { loadHdlProfile } from './hdl/profile'; import { hdlDependenciesChanged } from './hdl/index-context'; import { buildHdlProfileStatus, type HdlProfileStatus } from './hdl/status'; +import { analyzeHdlSemantics, type HdlSemanticOptions, type HdlSemanticResult } from './hdl/semantics'; +export type { HdlSemanticOptions, HdlSemanticResult } from './hdl/semantics'; import { isInitialized, createDirectory, @@ -1892,6 +1894,14 @@ export class CodeGraph { } catch { return []; } } + /** Explicit optional compiler query; source graph remains available if compilation fails. */ + async getHdlSemantics(options: HdlSemanticOptions): Promise { + return analyzeHdlSemantics(this.projectRoot, options, { + profile: () => this.getHdlProfileStatus(), stale: () => this.isIndexStale(), + file: file => this.queries.getFileByPath(file), nodes: file => this.queries.getNodesByFile(file), + }); + } + getHdlProfileStatus(): HdlProfileStatus | null { const configuration = loadHdlProfile(this.projectRoot); const metadata = { name: this.queries.getMetadata('hdl_profile_name') || null, diff --git a/src/mcp/server-instructions.ts b/src/mcp/server-instructions.ts index 80a6247a80..f25c250bbf 100644 --- a/src/mcp/server-instructions.ts +++ b/src/mcp/server-instructions.ts @@ -59,6 +59,10 @@ calls; a grep/read exploration is dozens. - Named-symbol call paths require exact matches; partial or mistyped names are never silently substituted as flow endpoints. If a graph query reports a missing symbol with did-you-mean suggestions, query the suggested name explicitly. - Explore matches names and indexed code words lexically, not by meaning; an empty result reports word matches and may suggest indexed candidate names to retry with \`codegraph_explore\`. +## Verilog / SystemVerilog + +Modules, instances, ports, signals, packages, interfaces/modports, always/assign blocks and generate scopes are indexed; \`codegraph_explore\` follows instantiation from a top module down. Pass one exact signal name with \`hdlAccess\` (\`read\`, \`write\`, \`readwrite\`, \`control\`, \`event\`, \`all\`) to list where it is read or written; an empty result is not proof of no access. Relationships are syntactic: no elaboration, no macro expansion, no timing. An optional \`hdl\` profile in \`codegraph.json\` selects source units and conditional branches, and the explore header reports the indexed profile versus the configured one — on a mismatch, sync before reading the result as the new profile. Evaluated parameters and port widths come only from the explicit \`codegraph hdl-semantic\` CLI with an installed slang. + ## Anti-patterns - **Trust codegraph's results — don't re-verify them with grep.** They come from a full AST parse; re-checking with grep is slower, less accurate, and wastes context. From b902df3be6ad0ab7c30671e01857a22b7e5045e0 Mon Sep 17 00:00:00 2001 From: danusha2345 Date: Sat, 19 Sep 2026 11:30:15 +0300 Subject: [PATCH 06/10] feat(verilog): a parameter references the parameters its value is computed from `handleParam` only created the constant node, so `localparam K = (N + 1) * 2;` had no edge to `N` and impact on a width parameter stopped at the parameter itself. The value expression now goes through the same scoped signal walk the processes use: identifiers become `hdl:signal:` references FROM the parameter, callee names and package qualifiers are left out, and the resolver binds them in the parameter's lexical scope only, so a same-named parameter of another module is never the target. Idea and shape by FHYQ-Dong (comment on #402). Measured on two real designs, nodes unchanged: a Tang Nano 9k card reader +16 edges, pulp-platform AXI +222 edges; every sampled edge stays inside its module. Co-authored-by: FHYQ-Dong Co-Authored-By: Claude Fable 5.1 --- CHANGELOG.md | 1 + __tests__/verilog-param-deps.test.ts | 64 ++++++++++++++++++++++++++++ src/extraction/languages/verilog.ts | 13 +++++- 3 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 __tests__/verilog-param-deps.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 0395005849..e63ba6b180 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ and adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - **Signal readers and writers on request.** `codegraph_explore` with `hdlAccess` (CLI: `codegraph explore --hdl-access`) lists where a signal is read, written, used as a control condition or as a clock/reset event, including the direction of arguments passed to known functions and tasks. - **HDL build profiles.** An optional `hdl` section in `codegraph.json` selects source files or filelists, include directories and defines; conditional-compilation branches are indexed under the active profile, `codegraph status` reports the configured versus the indexed profile, and the file watcher follows filelists and included headers. - **Computed parameters and port widths.** `codegraph hdl-semantic` runs an installed slang (or pyslang through `--python`) on the active profile and returns evaluated parameters, port widths and macro origins as a separate answer, without touching the indexed graph. +- **A derived parameter depends on the parameters it is computed from.** `localparam K = (N + 1) * 2;` links `K` to `N`, so impact on a width or depth parameter follows the whole chain of `localparam`s built on it, inside its own module. Suggested by @FHYQ-Dong. ### Fixes diff --git a/__tests__/verilog-param-deps.test.ts b/__tests__/verilog-param-deps.test.ts new file mode 100644 index 0000000000..310dacb0ef --- /dev/null +++ b/__tests__/verilog-param-deps.test.ts @@ -0,0 +1,64 @@ +import { afterEach, beforeAll, describe, expect, it } from 'vitest'; +import * as fs from 'fs'; +import * as os from 'os'; +import * as path from 'path'; +import { CodeGraph } from '../src'; +import { extractFromSource } from '../src/extraction'; +import { initGrammars, loadAllGrammars } from '../src/extraction/grammars'; + +beforeAll(async () => { await initGrammars(); await loadAllGrammars(); }); + +describe('HDL parameter dependencies', () => { + let dir: string | undefined; + afterEach(() => { if (dir) fs.rmSync(dir, { recursive: true, force: true }); dir = undefined; }); + + it('a parameter references the identifiers of its value, never its own name or a callee', () => { + const code = `module m; + parameter N = 8; + localparam K = (N + 1) * 2; + localparam M = K << 1, W = $clog2(N) + width_of(K); + localparam P = pkg::BASE + N; +endmodule`; + const result = extractFromSource('m.sv', code); + const byName = Object.fromEntries(result.nodes.filter(n => n.kind === 'constant').map(n => [n.name, n])); + const refsFrom = (name: string) => result.unresolvedReferences + .filter(r => r.fromNodeId === byName[name]!.id && r.referenceName.startsWith('hdl:signal:')) + .map(r => r.referenceName.slice('hdl:signal:'.length)); + expect(refsFrom('N')).toEqual([]); + expect(refsFrom('K')).toEqual(['N']); + expect(refsFrom('M')).toEqual(['K']); + // $clog2 is a system task, width_of a callee: only their arguments count. + expect(refsFrom('W').sort()).toEqual(['K', 'N']); + // pkg::BASE is a package item, not evidence for a local named BASE. + expect(refsFrom('P')).toEqual(['N']); + }); + + it('impact on a parameter follows the derived-parameter chain, and stays inside its module', async () => { + dir = fs.mkdtempSync(path.join(os.tmpdir(), 'codegraph-hdl-params-')); + fs.writeFileSync(path.join(dir, 'a.sv'), `module a; + parameter N = 8; + localparam K = (N + 1) * 2; + localparam M = K << 1; +endmodule +module b; + parameter N = 4; + localparam Q = N * 3; +endmodule +`); + const cg = await CodeGraph.init(dir, { index: true }); + try { + const constant = (qualified: string) => cg.getNodesByKind('constant').find(n => n.qualifiedName === qualified)!; + const dependents = (qualified: string) => cg.getCallers(constant(qualified).id) + .filter(c => c.edge.kind === 'references').map(c => c.node.qualifiedName).sort(); + expect(dependents('a::N')).toEqual(['a::K']); + expect(dependents('a::K')).toEqual(['a::M']); + // Same-named parameter of another module: bound lexically, not by name. + expect(dependents('b::N')).toEqual(['b::Q']); + const impacted = [...cg.getImpactRadius(constant('a::N').id, 3).nodes.values()].map(n => n.qualifiedName); + expect(impacted).toEqual(expect.arrayContaining(['a::K', 'a::M'])); + expect(impacted).not.toContain('b::Q'); + } finally { + cg.close(); + } + }); +}); diff --git a/src/extraction/languages/verilog.ts b/src/extraction/languages/verilog.ts index 4bb471a49b..4d0ba7a735 100644 --- a/src/extraction/languages/verilog.ts +++ b/src/extraction/languages/verilog.ts @@ -315,7 +315,18 @@ function handleParam(node: SyntaxNode, ctx: ExtractorContext): boolean { const assign = list.namedChild(i); if (!assign || assign.type !== 'param_assignment') continue; const id = firstSimpleIdentifier(assign); - if (id) ctx.createNode('constant', getNodeText(id, ctx.source), assign); + if (!id) continue; + const created = ctx.createNode('constant', getNodeText(id, ctx.source), assign); + if (!created) continue; + // `localparam K = (N + 1) * 2;` depends on N: the value expression's + // identifiers become scoped references FROM the parameter, so impact on + // N follows the derived-parameter chain (N -> K -> M). The declared name + // itself is skipped; the shared walk already leaves out callee names and + // package qualifiers, and the resolver binds only in the lexical scope. + for (let j = 0; j < assign.namedChildCount; j++) { + const part = assign.namedChild(j); + if (part && part.id !== id.id) addVerilogSignalReferences(part, ctx, created.id); + } } } return true; From cb427cfba620d796e52cd8c02f8a5bcdf59ca8f6 Mon Sep 17 00:00:00 2001 From: danusha2345 Date: Wed, 23 Sep 2026 18:53:08 +0300 Subject: [PATCH 07/10] test(hdl): give the CLI round-trip test room for its child processes It spawns the built CLI several times (index, sync, status), each with a 30s spawn timeout, under Vitest's default 5s test timeout. On a loaded machine the full suite timed it out while it passes alone. Co-Authored-By: Claude Opus 5.5 --- __tests__/hdl-profile-cli.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/__tests__/hdl-profile-cli.test.ts b/__tests__/hdl-profile-cli.test.ts index db98755e28..6fd1ee65d4 100644 --- a/__tests__/hdl-profile-cli.test.ts +++ b/__tests__/hdl-profile-cli.test.ts @@ -32,4 +32,4 @@ it('passes selected source through compiled workers and preserves raw hashes acr status=JSON.parse(run(['status',root,'--json']));expect(status.index.hdlProfile.state).toBe('matches'); expect(run(['explore','fallback_fn','--path',root])).toContain('HDL context: indexed "synth"'); }finally{fs.rmSync(root,{recursive:true,force:true});} -}); +}, 120_000); From eb4b5bab65a3ca357b42ff810fa350c2e502b790 Mon Sep 17 00:00:00 2001 From: danusha2345 Date: Sun, 27 Sep 2026 17:46:58 +0300 Subject: [PATCH 08/10] test(hdl): give the MCP exploration status test room for its cold imports It dynamically imports the engine and the MCP tool handler, then indexes a project, under Vitest's default 5s test timeout. On the rebased tree the cold transform of those imports alone took it past 5s on a loaded machine (5.1s on the previous base, 7.2s now), while it passes alone once warm. Co-Authored-By: Claude Opus 5.5 --- __tests__/hdl-profile-status.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/__tests__/hdl-profile-status.test.ts b/__tests__/hdl-profile-status.test.ts index 5e509996c1..e14e559db8 100644 --- a/__tests__/hdl-profile-status.test.ts +++ b/__tests__/hdl-profile-status.test.ts @@ -96,7 +96,7 @@ it('prefixes normal, empty and access-filtered MCP exploration with the indexed expect(text).toContain('Profile mismatch: rebuild the index'); } } finally {cg?.close();fs.rmSync(root,{recursive:true,force:true});} -}); +}, 30_000); it('summarizes configured and indexed settings separately without exposing defines values or source filelists',()=>{ const configuration=active('synthesis','configured-synth'); From a5fc56ee9d3c2332d5d0782116a28d5a91f53300 Mon Sep 17 00:00:00 2001 From: danusha2345 Date: Sat, 3 Oct 2026 11:10:23 +0300 Subject: [PATCH 09/10] fix(hdl): spawn the slang/pyslang runner with windowsHide Every child process started from src/ now sets windowsHide: true, and the child-process guard test fails closed on any spawn it cannot prove hidden. Set it on the semantic runner's spawn too, so the HDL code follows the same rule and the guard passes. Co-Authored-By: Claude Opus 5.5 --- src/hdl/semantic-runner.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hdl/semantic-runner.ts b/src/hdl/semantic-runner.ts index cde378d874..78a68af0a4 100644 --- a/src/hdl/semantic-runner.ts +++ b/src/hdl/semantic-runner.ts @@ -150,7 +150,7 @@ function collect(root: string, profile: ActiveHdlProfile, signal?: AbortSignal, function run(executable: string, args: string[], cwd: string, timeout: number, signal?: AbortSignal, astFile?: string): Promise<{stdout:string;stderr:string}> { abort(signal); return new Promise((resolve,reject) => { - const child = spawn(executable,args,{cwd,detached:true,shell:false,stdio:['ignore','pipe','pipe']}); + const child = spawn(executable,args,{cwd,detached:true,shell:false,stdio:['ignore','pipe','pipe'],windowsHide:true}); let stdout = '', stderr = '', size = 0, failure: Error | undefined, finished = false; const stop = (message: string): void => { failure ??= new Error(message); From edb652fd051955c91fbf73de5ac9451cd77fff6c Mon Sep 17 00:00:00 2001 From: danusha2345 Date: Tue, 6 Oct 2026 10:57:55 +0300 Subject: [PATCH 10/10] fix(hdl): keep a profile switch pending when its sources could not be parsed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A changed HDL profile re-indexes every profile source, because the same bytes parse differently under other defines. Since #2346 a file whose grammar failed to load is not stored, so it keeps the symbols of the previous profile — but the sync still recorded the new profile as the indexed one. With size, mtime and hash all unchanged, no later sync revisited the file and `status` reported the profile as matching. The profile is now recorded only when every source it forced was stored; otherwise the next sync forces them again. Co-Authored-By: Claude Opus 5.5 --- __tests__/hdl-profile-grammar-failure.test.ts | 56 +++++++++++++++++++ src/extraction/index.ts | 10 +++- 2 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 __tests__/hdl-profile-grammar-failure.test.ts diff --git a/__tests__/hdl-profile-grammar-failure.test.ts b/__tests__/hdl-profile-grammar-failure.test.ts new file mode 100644 index 0000000000..fce841a93e --- /dev/null +++ b/__tests__/hdl-profile-grammar-failure.test.ts @@ -0,0 +1,56 @@ +/** + * An HDL profile change re-indexes every profile source, since the same bytes + * parse differently under other defines. If the Verilog grammar cannot be + * loaded during that sync, nothing is stored for those files (#2335) — so the + * index must not record the new profile as indexed either, or no later sync + * would revisit files whose size, mtime and hash all still match. + */ +import { it, expect, vi } from 'vitest'; +import * as fs from 'node:fs'; +import * as os from 'node:os'; +import * as path from 'node:path'; +import { CodeGraph } from '../src'; +import type { Language } from '../src/types'; + +const { failing } = vi.hoisted(() => ({ failing: new Set() })); + +vi.mock('../src/extraction/grammars', async (importOriginal) => { + const actual = await importOriginal(); + return { + ...actual, + getParser: (language: Language) => (failing.has(language) ? null : actual.getParser(language)), + }; +}); + +it('a profile switch whose sources could not be parsed stays pending until they are', async () => { + const root = fs.mkdtempSync(path.join(os.tmpdir(), 'hdl-profile-grammar-')); + let cg: CodeGraph | undefined; + const config = (activeProfile: string) => JSON.stringify({ hdl: { activeProfile, profiles: { + synth: { files: ['top.sv'], defines: { SYNTHESIS: '1' } }, + sim: { files: ['top.sv'] }, + } } }); + const functions = () => cg!.getNodesInFile('top.sv').filter((n) => n.kind === 'function').map((n) => n.name); + try { + fs.writeFileSync(path.join(root, 'top.sv'), + 'module top;\n`ifdef SYNTHESIS\nfunction int hardware(); return 1; endfunction\n`else\nfunction int software(); return 2; endfunction\n`endif\nendmodule\n'); + fs.writeFileSync(path.join(root, 'codegraph.json'), config('synth')); + cg = CodeGraph.initSync(root); + expect((await cg.indexAll()).success).toBe(true); + expect(functions()).toEqual(['hardware']); + + fs.writeFileSync(path.join(root, 'codegraph.json'), config('sim')); + failing.add('verilog'); + await cg.sync(); + expect(functions()).toEqual(['hardware']); + expect(cg.getHdlProfileStatus()?.state).toBe('mismatch'); + + failing.clear(); + await cg.sync(); + expect(functions()).toEqual(['software']); + expect(cg.getHdlProfileStatus()?.state).toBe('matches'); + } finally { + failing.clear(); + cg?.close(); + fs.rmSync(root, { recursive: true, force: true }); + } +}); diff --git a/src/extraction/index.ts b/src/extraction/index.ts index 4bc03c87d0..0c9eff3f24 100644 --- a/src/extraction/index.ts +++ b/src/extraction/index.ts @@ -2065,10 +2065,13 @@ export class ExtractionOrchestrator { private rootDir: string; private hdlContext: HdlIndexContext | null = null; private hdlForce = false; + /** A source the changed profile re-reads was not stored, so that profile is not the indexed one yet. */ + private hdlForceUnstored = false; private hdlTouched = new Set(); private prepareHdlContext(): void { this.hdlTouched.clear(); + this.hdlForceUnstored = false; const previous = this.queries.getMetadata('hdl_profile_fingerprint'); this.hdlContext = new HdlIndexContext(this.rootDir, !!this.queries.getMetadata('hdl_profile_name')); this.hdlForce = previous !== this.hdlContext.fingerprint && (!!this.hdlContext.profile || !!this.queries.getMetadata('hdl_profile_name')); @@ -2079,7 +2082,7 @@ export class ExtractionOrchestrator { return this.hdlContext!.source(file, content); } commitHdlProfile(): void { - if (!this.hdlContext) return; + if (!this.hdlContext || this.hdlForceUnstored) return; this.queries.setMetadata('hdl_profile_name', this.hdlContext.profile?.name ?? ''); this.queries.setMetadata('hdl_profile_fingerprint', this.hdlContext.fingerprint); const context = JSON.parse(this.hdlContext.context()); @@ -3321,7 +3324,10 @@ export class ExtractionOrchestrator { // this would replace the file's symbols with an empty row under the new // content hash, which no hash-based sync revisits. Keep whatever the index // has; the stale (or missing) row makes the next sync retry the file. - if (hasGrammarLoadFailure(result.errors)) return; + if (hasGrammarLoadFailure(result.errors)) { + if (this.forceHdlFile(filePath)) this.hdlForceUnstored = true; + return; + } // A kernel result can arrive as an undecoded buffer transport (empty // node/edge arrays, tables riding in kernelBuffers). Decode it before

h*fNRi@|^;PG(#i^@qH+=n1N=4o7!D^RM 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%0Drv;q*ROr)QH zNYf5Oil=}nkzOZq=YBB`Vd5#b{JAT1x$(bMv*&j z5_2HZ?zkRAnyouTnyrhU3X!I@fk@MukdjsaB9)2s^AKs;VMy^5FeTC-61nrWVh%*w z9oK_Mvvr3^vvu)PA=0!q5NTQyQql@Qq%x6S%~wRz4nvBkfGLr_PUOzli#ZT!cU%u5 z&DI?v&DOh>^-M(jR;!E99p=h7@9?Cf~KU6C-_-Nb;us3Xx_j z2$5#%;-^BSX>B0Vv?ipa6(B}Rj5O^P{gL7-Mw(~VzFqlS3X)dHjJsPE?rHum8)>h< z{rsl(gv|4>_5&)~?@<1JS98xS8`?h%~K9Kd1cJOV(Vt=E84Z(5}IU_8*@+KG&Wao^NdgM>CCOm-$Dt zo5P&4|Hi*-|Aq^rtC{hxcza`eV@D%63Uh*J>6t6S^W^Wr#=(|SQTi({&PqL$u$*f= zv`wj*#*|ljSF8rVZKaM*D|Ke|gBz5ZYTR7Ee<;{j&P;jsQ;lOo$A)~X!)sr>?(o{L zZ1s=h+rE1IEc-a!>uftx^%U4Lm9&#)?Qa!%;%#CMv-U}CU7blZ=c@hu?Lefb)oD+* zr_|Hx*_M1~)br{EH89|x)&~52aA0}!tYzS*d%IFQy+2kAtZK`PtS()W;)#()YDGs7 zX`}^5vI5N7%d__9^JbImIDMU?`)1S04R!C|1@-!<_h-0$&HERI-WD$@3#7I5qTbtjme~td1;dV;x7=1D>LgKg>kzO*oIFU{Y zcTS>dPErc!6X~!w0&FOdr9c!TU2|ntetFa4G14F+8C*-T7->-*p06MEVw*vX^xoM2 z>Eb=|>s~BIx@+Wub-PA>*o(C$x4U;F&pETNz=pOM>1-?F8K3*yB}PFz*}sq(lSG<# z*8Vo3uVL*)h;(j=CkJ|sNUIqmz2O3XkNah|_sJG+h_t;|leNLxq_+p@r_^+OK-X&d5ygtBmMHZ$=-JEEKa0zZ7kTCS^KwM zq%&(jwlHgdPv)$B?YyOC?I-H*sZZ3;PZ24z_MP(<-I{b~?Qa)IPpJc94zu>UqtIEq zkbXK_tIgV&wTDP;`d6{K`;$nEY1PlAdYee?jf@VFZfDls-T;)kX5CqP={eFnMDDyx z%z;R|<1!Fww(i78vvu)Pd9x|44MdvOgp{-b5UKne=?AZ6^{2GQkdk-xr=z3sxzFX^ zjN?5bcmA}P1Ce&e^B~e}-67I!UHnvtG_4Ipn%0Drv;q*ROr#%$NYf5Oil=~SjC5Y) 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