agentmap 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/dist/cli.js +7 -1
  2. package/dist/cli.js.map +1 -1
  3. package/dist/extract/definitions.d.ts.map +1 -1
  4. package/dist/extract/definitions.js +195 -316
  5. package/dist/extract/definitions.js.map +1 -1
  6. package/dist/extract/definitions.test.js +749 -20
  7. package/dist/extract/definitions.test.js.map +1 -1
  8. package/dist/extract/marker.d.ts.map +1 -1
  9. package/dist/extract/marker.js +74 -5
  10. package/dist/extract/marker.js.map +1 -1
  11. package/dist/extract/marker.test.js +142 -4
  12. package/dist/extract/marker.test.js.map +1 -1
  13. package/dist/index.d.ts +10 -0
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +33 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/languages/cpp.d.ts +30 -0
  18. package/dist/languages/cpp.d.ts.map +1 -0
  19. package/dist/languages/cpp.js +116 -0
  20. package/dist/languages/cpp.js.map +1 -0
  21. package/dist/languages/go.d.ts +26 -0
  22. package/dist/languages/go.d.ts.map +1 -0
  23. package/dist/languages/go.js +65 -0
  24. package/dist/languages/go.js.map +1 -0
  25. package/dist/languages/index.d.ts +90 -0
  26. package/dist/languages/index.d.ts.map +1 -0
  27. package/dist/languages/index.js +209 -0
  28. package/dist/languages/index.js.map +1 -0
  29. package/dist/languages/javascript.d.ts +18 -0
  30. package/dist/languages/javascript.d.ts.map +1 -0
  31. package/dist/languages/javascript.js +23 -0
  32. package/dist/languages/javascript.js.map +1 -0
  33. package/dist/languages/python.d.ts +23 -0
  34. package/dist/languages/python.d.ts.map +1 -0
  35. package/dist/languages/python.js +35 -0
  36. package/dist/languages/python.js.map +1 -0
  37. package/dist/languages/rust.d.ts +26 -0
  38. package/dist/languages/rust.d.ts.map +1 -0
  39. package/dist/languages/rust.js +65 -0
  40. package/dist/languages/rust.js.map +1 -0
  41. package/dist/languages/typescript.d.ts +30 -0
  42. package/dist/languages/typescript.d.ts.map +1 -0
  43. package/dist/languages/typescript.js +68 -0
  44. package/dist/languages/typescript.js.map +1 -0
  45. package/dist/languages/zig.d.ts +38 -0
  46. package/dist/languages/zig.d.ts.map +1 -0
  47. package/dist/languages/zig.js +104 -0
  48. package/dist/languages/zig.js.map +1 -0
  49. package/dist/map/builder.d.ts.map +1 -1
  50. package/dist/map/builder.js +4 -1
  51. package/dist/map/builder.js.map +1 -1
  52. package/dist/parser/languages.d.ts +2 -4
  53. package/dist/parser/languages.d.ts.map +1 -1
  54. package/dist/parser/languages.js +4 -29
  55. package/dist/parser/languages.js.map +1 -1
  56. package/dist/scanner.d.ts.map +1 -1
  57. package/dist/scanner.js +21 -49
  58. package/dist/scanner.js.map +1 -1
  59. package/dist/types.d.ts +4 -2
  60. package/dist/types.d.ts.map +1 -1
  61. package/package.json +3 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python.js","sourceRoot":"","sources":["../../src/languages/python.ts"],"names":[],"mappings":"AAAA,wCAAwC;AAIxC,MAAM,CAAC,MAAM,EAAE,GAAG,QAAiB,CAAA;AACnC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;AACzC,MAAM,CAAC,MAAM,OAAO,GAAG,4CAA4C,CAAA;AAEnE,iBAAiB;AACjB,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,qBAAqB,CAAC,CAAA;AACrD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,kBAAkB,CAAC,CAAA;AAC/C,MAAM,CAAC,MAAM,YAAY,GAAa,EAAE,CAAA;AACxC,MAAM,CAAC,MAAM,WAAW,GAAa,EAAE,CAAA;AACvC,MAAM,CAAC,MAAM,eAAe,GAAa,EAAE,CAAA;AAC3C,MAAM,CAAC,MAAM,UAAU,GAAa,EAAE,CAAA;AACtC,MAAM,CAAC,MAAM,UAAU,GAAa,EAAE,CAAA;AACtC,MAAM,CAAC,MAAM,WAAW,GAAa,EAAE,CAAA,CAAE,sCAAsC;AAE/E;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,KAAiB;IAC1C,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAgB;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAC3B,IAAI,KAAK,EAAE,IAAI,KAAK,YAAY,EAAE,CAAC;YACjC,OAAO,KAAK,CAAC,IAAI,CAAA;QACnB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,mBAAmB;AACnB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAG,CAAC,CAAA;AACpC,MAAM,CAAC,MAAM,aAAa,GAAG,QAAQ,CAAA,CAAE,yBAAyB"}
@@ -0,0 +1,26 @@
1
+ import type { SyntaxNode } from '../types.js';
2
+ export declare const id: "rust";
3
+ export declare const extensions: string[];
4
+ export declare const grammar = "tree-sitter-rust/tree-sitter-rust.wasm";
5
+ export declare const FUNCTION_TYPES: string[];
6
+ export declare const CLASS_TYPES: string[];
7
+ export declare const STRUCT_TYPES: string[];
8
+ export declare const TRAIT_TYPES: string[];
9
+ export declare const INTERFACE_TYPES: string[];
10
+ export declare const TYPE_TYPES: string[];
11
+ export declare const ENUM_TYPES: string[];
12
+ export declare const CONST_TYPES: string[];
13
+ /**
14
+ * Check if a Rust node has 'pub' visibility modifier
15
+ */
16
+ export declare function isExported(node: SyntaxNode): boolean;
17
+ /**
18
+ * Extract name from a Rust node
19
+ */
20
+ export declare function extractName(node: SyntaxNode): string | null;
21
+ /**
22
+ * Extract name from const/static declaration
23
+ */
24
+ export declare function extractConstName(node: SyntaxNode): string | null;
25
+ export declare const commentPrefixes: string[];
26
+ //# sourceMappingURL=rust.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rust.d.ts","sourceRoot":"","sources":["../../src/languages/rust.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C,eAAO,MAAM,EAAE,EAAG,MAAe,CAAA;AACjC,eAAO,MAAM,UAAU,UAAU,CAAA;AACjC,eAAO,MAAM,OAAO,2CAA2C,CAAA;AAG/D,eAAO,MAAM,cAAc,UAAoB,CAAA;AAC/C,eAAO,MAAM,WAAW,EAAE,MAAM,EAAO,CAAA;AACvC,eAAO,MAAM,YAAY,UAAkB,CAAA;AAC3C,eAAO,MAAM,WAAW,UAAiB,CAAA;AACzC,eAAO,MAAM,eAAe,EAAE,MAAM,EAAO,CAAA;AAC3C,eAAO,MAAM,UAAU,UAAgB,CAAA;AACvC,eAAO,MAAM,UAAU,UAAgB,CAAA;AACvC,eAAO,MAAM,WAAW,UAAgC,CAAA;AAExD;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CASpD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAkB3D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAEhE;AAWD,eAAO,MAAM,eAAe,UAA6B,CAAA"}
@@ -0,0 +1,65 @@
1
+ // Rust language support for agentmap.
2
+ export const id = 'rust';
3
+ export const extensions = ['.rs'];
4
+ export const grammar = 'tree-sitter-rust/tree-sitter-rust.wasm';
5
+ // AST node types
6
+ export const FUNCTION_TYPES = ['function_item'];
7
+ export const CLASS_TYPES = []; // Rust has structs/traits, not classes
8
+ export const STRUCT_TYPES = ['struct_item'];
9
+ export const TRAIT_TYPES = ['trait_item'];
10
+ export const INTERFACE_TYPES = []; // Rust traits handled in TRAIT_TYPES
11
+ export const TYPE_TYPES = ['type_item'];
12
+ export const ENUM_TYPES = ['enum_item'];
13
+ export const CONST_TYPES = ['const_item', 'static_item'];
14
+ /**
15
+ * Check if a Rust node has 'pub' visibility modifier
16
+ */
17
+ export function isExported(node) {
18
+ for (let i = 0; i < node.childCount; i++) {
19
+ const child = node.child(i);
20
+ if (child?.type === 'visibility_modifier') {
21
+ return child.text.startsWith('pub');
22
+ }
23
+ if (child?.type === 'identifier' || child?.type === 'type_identifier')
24
+ break;
25
+ }
26
+ return false;
27
+ }
28
+ /**
29
+ * Extract name from a Rust node
30
+ */
31
+ export function extractName(node) {
32
+ if (node.type === 'impl_item') {
33
+ const typeNode = node.childForFieldName('type');
34
+ if (typeNode) {
35
+ const ident = typeNode.type === 'type_identifier'
36
+ ? typeNode
37
+ : findChild(typeNode, 'type_identifier');
38
+ return ident?.text ?? null;
39
+ }
40
+ }
41
+ for (let i = 0; i < node.childCount; i++) {
42
+ const child = node.child(i);
43
+ if (child?.type === 'identifier' || child?.type === 'type_identifier') {
44
+ return child.text;
45
+ }
46
+ }
47
+ return null;
48
+ }
49
+ /**
50
+ * Extract name from const/static declaration
51
+ */
52
+ export function extractConstName(node) {
53
+ return extractName(node);
54
+ }
55
+ function findChild(node, type) {
56
+ for (let i = 0; i < node.childCount; i++) {
57
+ const child = node.child(i);
58
+ if (child?.type === type)
59
+ return child;
60
+ }
61
+ return null;
62
+ }
63
+ // Comment handling
64
+ export const commentPrefixes = ['//', '/*', '//!', '///'];
65
+ //# sourceMappingURL=rust.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rust.js","sourceRoot":"","sources":["../../src/languages/rust.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { SyntaxNode } from '../types.js';
2
+ export declare const id: "typescript";
3
+ export declare const extensions: string[];
4
+ export declare const grammar = "tree-sitter-typescript/tree-sitter-tsx.wasm";
5
+ export declare const FUNCTION_TYPES: string[];
6
+ export declare const CLASS_TYPES: string[];
7
+ export declare const STRUCT_TYPES: string[];
8
+ export declare const TRAIT_TYPES: string[];
9
+ export declare const INTERFACE_TYPES: string[];
10
+ export declare const TYPE_TYPES: string[];
11
+ export declare const ENUM_TYPES: string[];
12
+ export declare const CONST_TYPES: string[];
13
+ /**
14
+ * Check if a node is an export statement
15
+ */
16
+ export declare function isExported(node: SyntaxNode): boolean;
17
+ /**
18
+ * Unwrap export statement to get the actual declaration
19
+ */
20
+ export declare function unwrapExport(node: SyntaxNode): SyntaxNode;
21
+ /**
22
+ * Extract name from a TypeScript/JavaScript node
23
+ */
24
+ export declare function extractName(node: SyntaxNode): string | null;
25
+ /**
26
+ * Extract name from const/let declaration
27
+ */
28
+ export declare function extractConstName(node: SyntaxNode): string | null;
29
+ export declare const commentPrefixes: string[];
30
+ //# sourceMappingURL=typescript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../src/languages/typescript.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C,eAAO,MAAM,EAAE,EAAG,YAAqB,CAAA;AACvC,eAAO,MAAM,UAAU,UAAkC,CAAA;AACzD,eAAO,MAAM,OAAO,gDAAgD,CAAA;AAGpE,eAAO,MAAM,cAAc,UAAgD,CAAA;AAC3E,eAAO,MAAM,WAAW,UAAsD,CAAA;AAC9E,eAAO,MAAM,YAAY,EAAE,MAAM,EAAO,CAAA;AACxC,eAAO,MAAM,WAAW,EAAE,MAAM,EAAO,CAAA;AACvC,eAAO,MAAM,eAAe,UAA4B,CAAA;AACxD,eAAO,MAAM,UAAU,UAA6B,CAAA;AACpD,eAAO,MAAM,UAAU,UAAuB,CAAA;AAC9C,eAAO,MAAM,WAAW,UAA0B,CAAA;AAElD;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAEpD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAWzD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAY3D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAShE;AAGD,eAAO,MAAM,eAAe,UAAe,CAAA"}
@@ -0,0 +1,68 @@
1
+ // TypeScript language support for agentmap.
2
+ export const id = 'typescript';
3
+ export const extensions = ['.ts', '.tsx', '.mts', '.cts'];
4
+ export const grammar = 'tree-sitter-typescript/tree-sitter-tsx.wasm';
5
+ // AST node types
6
+ export const FUNCTION_TYPES = ['function_declaration', 'method_definition'];
7
+ export const CLASS_TYPES = ['class_declaration', 'abstract_class_declaration'];
8
+ export const STRUCT_TYPES = [];
9
+ export const TRAIT_TYPES = [];
10
+ export const INTERFACE_TYPES = ['interface_declaration'];
11
+ export const TYPE_TYPES = ['type_alias_declaration'];
12
+ export const ENUM_TYPES = ['enum_declaration'];
13
+ export const CONST_TYPES = ['lexical_declaration'];
14
+ /**
15
+ * Check if a node is an export statement
16
+ */
17
+ export function isExported(node) {
18
+ return node.type === 'export_statement';
19
+ }
20
+ /**
21
+ * Unwrap export statement to get the actual declaration
22
+ */
23
+ export function unwrapExport(node) {
24
+ if (node.type === 'export_statement') {
25
+ for (let i = 0; i < node.childCount; i++) {
26
+ const child = node.child(i);
27
+ if (!child)
28
+ continue;
29
+ if (child.type !== 'export' && !child.type.includes('comment') && child.type !== 'default') {
30
+ return child;
31
+ }
32
+ }
33
+ }
34
+ return node;
35
+ }
36
+ /**
37
+ * Extract name from a TypeScript/JavaScript node
38
+ */
39
+ export function extractName(node) {
40
+ for (let i = 0; i < node.childCount; i++) {
41
+ const child = node.child(i);
42
+ if (!child)
43
+ continue;
44
+ if (child.type === 'identifier' || child.type === 'type_identifier') {
45
+ return child.text;
46
+ }
47
+ if (child.type === 'property_identifier') {
48
+ return child.text;
49
+ }
50
+ }
51
+ return null;
52
+ }
53
+ /**
54
+ * Extract name from const/let declaration
55
+ */
56
+ export function extractConstName(node) {
57
+ for (let i = 0; i < node.childCount; i++) {
58
+ const child = node.child(i);
59
+ if (child?.type === 'variable_declarator') {
60
+ const nameNode = child.childForFieldName('name');
61
+ return nameNode?.text ?? null;
62
+ }
63
+ }
64
+ return null;
65
+ }
66
+ // Comment handling
67
+ export const commentPrefixes = ['//', '/*'];
68
+ //# sourceMappingURL=typescript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript.js","sourceRoot":"","sources":["../../src/languages/typescript.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { SyntaxNode, DefinitionType } from '../types.js';
2
+ export declare const id: "zig";
3
+ export declare const extensions: string[];
4
+ export declare const grammar = "@tree-sitter-grammars/tree-sitter-zig/tree-sitter-zig.wasm";
5
+ export declare const FUNCTION_TYPES: string[];
6
+ export declare const CLASS_TYPES: string[];
7
+ export declare const STRUCT_TYPES: string[];
8
+ export declare const TRAIT_TYPES: string[];
9
+ export declare const INTERFACE_TYPES: string[];
10
+ export declare const TYPE_TYPES: string[];
11
+ export declare const ENUM_TYPES: string[];
12
+ export declare const CONST_TYPES: string[];
13
+ /**
14
+ * Check if a Zig node has 'pub' modifier
15
+ */
16
+ export declare function isExported(node: SyntaxNode): boolean;
17
+ /**
18
+ * Check if a Zig variable_declaration uses 'const' (not 'var')
19
+ */
20
+ export declare function isConst(node: SyntaxNode): boolean;
21
+ /**
22
+ * Check if a Zig variable_declaration contains a struct/enum/union declaration
23
+ */
24
+ export declare function getTypeDeclaration(node: SyntaxNode): DefinitionType | null;
25
+ /**
26
+ * Check if a Zig function has 'extern' modifier
27
+ */
28
+ export declare function isExtern(node: SyntaxNode): boolean;
29
+ /**
30
+ * Extract name from a Zig node
31
+ */
32
+ export declare function extractName(node: SyntaxNode): string | null;
33
+ /**
34
+ * Extract name from const/var declaration
35
+ */
36
+ export declare function extractConstName(node: SyntaxNode): string | null;
37
+ export declare const commentPrefixes: string[];
38
+ //# sourceMappingURL=zig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zig.d.ts","sourceRoot":"","sources":["../../src/languages/zig.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE7D,eAAO,MAAM,EAAE,EAAG,KAAc,CAAA;AAChC,eAAO,MAAM,UAAU,UAAW,CAAA;AAClC,eAAO,MAAM,OAAO,+DAA+D,CAAA;AAGnF,eAAO,MAAM,cAAc,UAA+C,CAAA;AAC1E,eAAO,MAAM,WAAW,EAAE,MAAM,EAAO,CAAA;AACvC,eAAO,MAAM,YAAY,EAAE,MAAM,EAAO,CAAA;AACxC,eAAO,MAAM,WAAW,EAAE,MAAM,EAAO,CAAA;AACvC,eAAO,MAAM,eAAe,EAAE,MAAM,EAAO,CAAA;AAC3C,eAAO,MAAM,UAAU,EAAE,MAAM,EAAO,CAAA;AACtC,eAAO,MAAM,UAAU,EAAE,MAAM,EAAO,CAAA;AACtC,eAAO,MAAM,WAAW,UAA2B,CAAA;AAEnD;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAOpD;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAOjD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,GAAG,IAAI,CAQ1E;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAOlD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAyB3D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAEhE;AAGD,eAAO,MAAM,eAAe,UAAe,CAAA"}
@@ -0,0 +1,104 @@
1
+ // Zig language support for agentmap.
2
+ export const id = 'zig';
3
+ export const extensions = ['.zig'];
4
+ export const grammar = '@tree-sitter-grammars/tree-sitter-zig/tree-sitter-zig.wasm';
5
+ // AST node types
6
+ export const FUNCTION_TYPES = ['function_declaration', 'test_declaration'];
7
+ export const CLASS_TYPES = []; // Zig has structs/unions, not classes
8
+ export const STRUCT_TYPES = []; // Handled via variable_declaration with struct value
9
+ export const TRAIT_TYPES = [];
10
+ export const INTERFACE_TYPES = [];
11
+ export const TYPE_TYPES = [];
12
+ export const ENUM_TYPES = []; // Handled via variable_declaration with enum value
13
+ export const CONST_TYPES = ['variable_declaration'];
14
+ /**
15
+ * Check if a Zig node has 'pub' modifier
16
+ */
17
+ export function isExported(node) {
18
+ for (let i = 0; i < node.childCount; i++) {
19
+ const child = node.child(i);
20
+ if (child?.type === 'pub')
21
+ return true;
22
+ if (child?.type === 'identifier' || child?.type === 'block')
23
+ break;
24
+ }
25
+ return false;
26
+ }
27
+ /**
28
+ * Check if a Zig variable_declaration uses 'const' (not 'var')
29
+ */
30
+ export function isConst(node) {
31
+ for (let i = 0; i < node.childCount; i++) {
32
+ const child = node.child(i);
33
+ if (child?.type === 'const')
34
+ return true;
35
+ if (child?.type === 'var')
36
+ return false;
37
+ }
38
+ return false;
39
+ }
40
+ /**
41
+ * Check if a Zig variable_declaration contains a struct/enum/union declaration
42
+ */
43
+ export function getTypeDeclaration(node) {
44
+ for (let i = 0; i < node.childCount; i++) {
45
+ const child = node.child(i);
46
+ if (child?.type === 'struct_declaration')
47
+ return 'struct';
48
+ if (child?.type === 'union_declaration')
49
+ return 'union';
50
+ if (child?.type === 'enum_declaration')
51
+ return 'enum';
52
+ }
53
+ return null;
54
+ }
55
+ /**
56
+ * Check if a Zig function has 'extern' modifier
57
+ */
58
+ export function isExtern(node) {
59
+ for (let i = 0; i < node.childCount; i++) {
60
+ const child = node.child(i);
61
+ if (child?.type === 'extern')
62
+ return true;
63
+ if (child?.type === 'block' || child?.type === 'fn')
64
+ break;
65
+ }
66
+ return false;
67
+ }
68
+ /**
69
+ * Extract name from a Zig node
70
+ */
71
+ export function extractName(node) {
72
+ if (node.type === 'test_declaration') {
73
+ for (let i = 0; i < node.childCount; i++) {
74
+ const child = node.child(i);
75
+ if (child?.type === 'string') {
76
+ const text = child.text;
77
+ if (text.startsWith('"') && text.endsWith('"')) {
78
+ return text.slice(1, -1);
79
+ }
80
+ return text;
81
+ }
82
+ if (child?.type === 'identifier') {
83
+ return child.text;
84
+ }
85
+ }
86
+ return null;
87
+ }
88
+ for (let i = 0; i < node.childCount; i++) {
89
+ const child = node.child(i);
90
+ if (child?.type === 'identifier') {
91
+ return child.text;
92
+ }
93
+ }
94
+ return null;
95
+ }
96
+ /**
97
+ * Extract name from const/var declaration
98
+ */
99
+ export function extractConstName(node) {
100
+ return extractName(node);
101
+ }
102
+ // Comment handling
103
+ export const commentPrefixes = ['//', '/*'];
104
+ //# sourceMappingURL=zig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zig.js","sourceRoot":"","sources":["../../src/languages/zig.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/map/builder.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAyB,UAAU,EAAiB,OAAO,EAAE,MAAM,aAAa,CAAA;AAE5F;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CASzE;AAwFD;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM/C"}
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/map/builder.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAyB,UAAU,EAAiB,OAAO,EAAE,MAAM,aAAa,CAAA;AAE5F;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CASzE;AA4FD;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM/C"}
@@ -25,7 +25,7 @@ function formatFileDiff(diff) {
25
25
  return parts.join('');
26
26
  }
27
27
  /**
28
- * Format a definition as a string like "line 13, function, exported, updated (+5-2)"
28
+ * Format a definition as a string like "line 13, function, exported, extern, updated (+5-2)"
29
29
  */
30
30
  function formatDefinition(def) {
31
31
  const lineStr = `line ${def.line}`;
@@ -33,6 +33,9 @@ function formatDefinition(def) {
33
33
  if (def.exported) {
34
34
  parts.push('exported');
35
35
  }
36
+ if (def.extern) {
37
+ parts.push('extern');
38
+ }
36
39
  // Add diff info if present
37
40
  if (def.diff) {
38
41
  // Format as +N-M or just +N or -M
@@ -1 +1 @@
1
- {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/map/builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/map/builder.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,7 @@
1
1
  import Parser from 'web-tree-sitter';
2
2
  import type { Language } from '../types.js';
3
- /**
4
- * File extension to language mapping
5
- */
6
- export declare const LANGUAGE_EXTENSIONS: Record<string, Language>;
3
+ import { LANGUAGE_EXTENSIONS } from '../languages/index.js';
4
+ export { LANGUAGE_EXTENSIONS };
7
5
  /**
8
6
  * Detect language from file path extension
9
7
  */
@@ -1 +1 @@
1
- {"version":3,"file":"languages.d.ts","sourceRoot":"","sources":["../../src/parser/languages.ts"],"names":[],"mappings":"AAEA,OAAO,MAAM,MAAM,iBAAiB,CAAA;AACpC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAK3C;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAaxD,CAAA;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAGhE;AAoCD;;GAEG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAU9E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
1
+ {"version":3,"file":"languages.d.ts","sourceRoot":"","sources":["../../src/parser/languages.ts"],"names":[],"mappings":"AAEA,OAAO,MAAM,MAAM,iBAAiB,CAAA;AACpC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,OAAO,EAAE,mBAAmB,EAAiB,MAAM,uBAAuB,CAAA;AAK1E,OAAO,EAAE,mBAAmB,EAAE,CAAA;AAE9B;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAGhE;AAyBD;;GAEG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAU9E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
@@ -1,24 +1,10 @@
1
1
  // Language detection and grammar loading for tree-sitter.
2
2
  import Parser from 'web-tree-sitter';
3
3
  import { createRequire } from 'module';
4
+ import { LANGUAGE_EXTENSIONS, GRAMMAR_PATHS } from '../languages/index.js';
4
5
  const require = createRequire(import.meta.url);
5
- /**
6
- * File extension to language mapping
7
- */
8
- export const LANGUAGE_EXTENSIONS = {
9
- '.ts': 'typescript',
10
- '.tsx': 'typescript',
11
- '.mts': 'typescript',
12
- '.cts': 'typescript',
13
- '.js': 'javascript',
14
- '.jsx': 'javascript',
15
- '.mjs': 'javascript',
16
- '.cjs': 'javascript',
17
- '.py': 'python',
18
- '.pyi': 'python',
19
- '.rs': 'rust',
20
- '.go': 'go',
21
- };
6
+ // Re-export for backwards compatibility
7
+ export { LANGUAGE_EXTENSIONS };
22
8
  /**
23
9
  * Detect language from file path extension
24
10
  */
@@ -30,18 +16,7 @@ export function detectLanguage(filepath) {
30
16
  * Get the WASM grammar path for a language
31
17
  */
32
18
  function getGrammarPath(language) {
33
- switch (language) {
34
- case 'typescript':
35
- return require.resolve('tree-sitter-typescript/tree-sitter-tsx.wasm');
36
- case 'javascript':
37
- return require.resolve('tree-sitter-javascript/tree-sitter-javascript.wasm');
38
- case 'python':
39
- return require.resolve('tree-sitter-python/tree-sitter-python.wasm');
40
- case 'rust':
41
- return require.resolve('tree-sitter-rust/tree-sitter-rust.wasm');
42
- case 'go':
43
- return require.resolve('tree-sitter-go/tree-sitter-go.wasm');
44
- }
19
+ return require.resolve(GRAMMAR_PATHS[language]);
45
20
  }
46
21
  /**
47
22
  * Cache for loaded grammars
@@ -1 +1 @@
1
- {"version":3,"file":"languages.js","sourceRoot":"","sources":["../../src/parser/languages.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAE1D,OAAO,MAAM,MAAM,iBAAiB,CAAA;AAEpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AAEtC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAE9C;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA6B;IAC3D,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,MAAM;IACb,KAAK,EAAE,IAAI;CACZ,CAAA;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAA;IACrD,OAAO,mBAAmB,CAAC,GAAG,CAAC,IAAI,IAAI,CAAA;AACzC,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,QAAkB;IACxC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,YAAY;YACf,OAAO,OAAO,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAA;QACvE,KAAK,YAAY;YACf,OAAO,OAAO,CAAC,OAAO,CAAC,oDAAoD,CAAC,CAAA;QAC9E,KAAK,QAAQ;YACX,OAAO,OAAO,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAA;QACtE,KAAK,MAAM;YACT,OAAO,OAAO,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAA;QAClE,KAAK,IAAI;YACP,OAAO,OAAO,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAA;IAChE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,YAAY,GAAG,IAAI,GAAG,EAA6B,CAAA;AAEzD;;GAEG;AACH,IAAI,iBAAiB,GAAG,KAAK,CAAA;AAC7B,KAAK,UAAU,gBAAgB;IAC7B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;QACnB,iBAAiB,GAAG,IAAI,CAAA;IAC1B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAkB;IAClD,MAAM,gBAAgB,EAAE,CAAA;IAExB,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACzC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IAEzB,MAAM,IAAI,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;IACrC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAChD,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IACnC,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,YAAY,CAAC,KAAK,EAAE,CAAA;AACtB,CAAC"}
1
+ {"version":3,"file":"languages.js","sourceRoot":"","sources":["../../src/parser/languages.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAE1D,OAAO,MAAM,MAAM,iBAAiB,CAAA;AAEpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAE1E,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAE9C,wCAAwC;AACxC,OAAO,EAAE,mBAAmB,EAAE,CAAA;AAE9B;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAA;IACrD,OAAO,mBAAmB,CAAC,GAAG,CAAC,IAAI,IAAI,CAAA;AACzC,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,QAAkB;IACxC,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAA;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,YAAY,GAAG,IAAI,GAAG,EAA6B,CAAA;AAEzD;;GAEG;AACH,IAAI,iBAAiB,GAAG,KAAK,CAAA;AAC7B,KAAK,UAAU,gBAAgB;IAC7B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;QACnB,iBAAiB,GAAG,IAAI,CAAA;IAC1B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAkB;IAClD,MAAM,gBAAgB,EAAE,CAAA;IAExB,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACzC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IAEzB,MAAM,IAAI,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;IACrC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAChD,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IACnC,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,YAAY,CAAC,KAAK,EAAE,CAAA;AACtB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAA2B,MAAM,YAAY,CAAA;AAiFtF;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CA6DxF"}
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAA2B,MAAM,YAAY,CAAA;AAuDtF;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CA8DxF"}
package/dist/scanner.js CHANGED
@@ -1,6 +1,5 @@
1
1
  // Scan directory for files with header comments/docstrings.
2
2
  import { execSync } from 'child_process';
3
- import fg from 'fast-glob';
4
3
  import picomatch from 'picomatch';
5
4
  import { readFile } from 'fs/promises';
6
5
  import { join, normalize } from 'path';
@@ -8,6 +7,11 @@ import { extractMarker, extractMarkdownDescription } from './extract/marker.js';
8
7
  import { extractDefinitions } from './extract/definitions.js';
9
8
  import { getAllDiffData, applyDiffToDefinitions } from './extract/git-status.js';
10
9
  import { parseCode, detectLanguage, LANGUAGE_EXTENSIONS } from './parser/index.js';
10
+ /**
11
+ * Maximum number of files to process (safety limit)
12
+ * If exceeded, returns empty results to avoid scanning huge directories
13
+ */
14
+ const MAX_FILES = 5_000_000;
11
15
  /**
12
16
  * Supported file extensions (from LANGUAGE_EXTENSIONS)
13
17
  */
@@ -27,59 +31,28 @@ function isReadmeFile(filepath) {
27
31
  return filename === 'readme.md' || filename === 'readme';
28
32
  }
29
33
  /**
30
- * Check if running inside a git repository
31
- */
32
- function isGitRepo(dir) {
33
- try {
34
- execSync('git rev-parse --git-dir', { cwd: dir, stdio: 'ignore' });
35
- return true;
36
- }
37
- catch {
38
- return false;
39
- }
40
- }
41
- /**
42
- * Get files using git ls-files
43
- * Uses --cached --others to get tracked + untracked files
44
- * Uses --exclude-standard to respect .gitignore
34
+ * Get tracked files using git ls-files
35
+ * Only returns files that are tracked by git (committed or staged)
45
36
  */
46
37
  function getGitFiles(dir) {
47
38
  const maxBuffer = 1024 * 10000000;
48
39
  try {
49
- // Get tracked and untracked files (respecting .gitignore)
50
- const stdout = execSync('git ls-files --cached --others --exclude-standard', {
51
- cwd: dir,
52
- maxBuffer,
53
- encoding: 'utf8',
54
- });
55
- // Get deleted files to exclude
56
- const deleted = execSync('git ls-files --deleted', {
40
+ // Get only tracked files
41
+ const stdout = execSync('git ls-files', {
57
42
  cwd: dir,
58
43
  maxBuffer,
59
44
  encoding: 'utf8',
60
45
  });
61
- const paths = stdout.split(/\r?\n/).map(x => x.trim()).filter(Boolean);
62
- const deletedPaths = new Set(deleted.split(/\r?\n/).map(x => x.trim()).filter(Boolean));
63
- return paths
64
- .filter(p => !deletedPaths.has(p))
46
+ return stdout
47
+ .split(/\r?\n/)
48
+ .map(x => x.trim())
49
+ .filter(Boolean)
65
50
  .map(normalize);
66
51
  }
67
52
  catch {
68
53
  return [];
69
54
  }
70
55
  }
71
- /**
72
- * Get files using fast-glob (fallback when not in git repo)
73
- */
74
- async function getGlobFiles(dir) {
75
- const patterns = Object.keys(LANGUAGE_EXTENSIONS).map(ext => `**/*${ext}`);
76
- return fg(patterns, {
77
- cwd: dir,
78
- ignore: ['**/node_modules/**', '**/dist/**', '**/build/**', '**/.git/**'],
79
- absolute: false,
80
- dot: false,
81
- });
82
- }
83
56
  /**
84
57
  * Scan directory and process files with header comments
85
58
  */
@@ -88,14 +61,8 @@ export async function scanDirectory(options = {}) {
88
61
  // Filter out null/undefined/empty patterns (cac can pass [null] when option not used)
89
62
  const ignorePatterns = (options.ignore ?? []).filter((p) => !!p);
90
63
  const includeDiff = options.diff ?? false;
91
- // Get file list - prefer git, fallback to glob
92
- let files;
93
- if (isGitRepo(dir)) {
94
- files = getGitFiles(dir);
95
- }
96
- else {
97
- files = await getGlobFiles(dir);
98
- }
64
+ // Get file list from git (caller should ensure we're in a git repo)
65
+ let files = getGitFiles(dir);
99
66
  // Filter by supported extensions or README files
100
67
  files = files.filter(f => isSupportedFile(f) || isReadmeFile(f));
101
68
  // Filter by ignore patterns
@@ -103,10 +70,15 @@ export async function scanDirectory(options = {}) {
103
70
  const isIgnored = picomatch(ignorePatterns);
104
71
  files = files.filter(f => !isIgnored(f));
105
72
  }
73
+ // Safety check: bail if too many files to avoid scanning huge directories
74
+ if (files.length > MAX_FILES) {
75
+ console.error(`Warning: Too many files (${files.length} > ${MAX_FILES}), skipping scan`);
76
+ return [];
77
+ }
106
78
  // Get git diff data if needed (isolated from main processing)
107
79
  let fileStats = null;
108
80
  let fileDiffs = null;
109
- if (includeDiff && isGitRepo(dir)) {
81
+ if (includeDiff) {
110
82
  try {
111
83
  const diffData = getAllDiffData(dir);
112
84
  fileStats = diffData.fileStats;