@liendev/parser 0.44.0 → 0.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -6,7 +6,7 @@ This package provides the core parsing and analysis capabilities used by Lien's
6
6
 
7
7
  ## Features
8
8
 
9
- - **AST Parsing** — Tree-sitter-based parsing for TypeScript, JavaScript, Python, PHP, Rust, and Go
9
+ - **AST Parsing** — Tree-sitter-based parsing for TypeScript, JavaScript, Python, PHP, Rust, Go, Java, C#, and Ruby
10
10
  - **Semantic Chunking** — Split code into meaningful chunks respecting function/class boundaries
11
11
  - **Complexity Analysis** — Cyclomatic, cognitive, and Halstead complexity metrics
12
12
  - **Dependency Analysis** — Import/export tracking with transitive dependent resolution
@@ -24,8 +24,11 @@ This package provides the core parsing and analysis capabilities used by Lien's
24
24
  | PHP | Yes | Yes | Yes |
25
25
  | Rust | Yes | Yes | Yes |
26
26
  | Go | Yes | Yes | Yes |
27
+ | Java | Yes | Yes | Yes |
28
+ | C# | Yes | Yes | Yes |
29
+ | Ruby | Yes | Yes | Yes |
27
30
 
28
- Line-based chunking and symbol extraction are available for additional languages including Java, C#, Ruby, and Vue.
31
+ Line-based chunking and symbol extraction are available for additional languages including Vue, Liquid, C/C++, Swift, Kotlin, Scala, and Markdown.
29
32
 
30
33
  ## Usage
31
34
 
@@ -1 +1 @@
1
- {"version":3,"file":"symbol-helpers.d.ts","sourceRoot":"","sources":["../../../src/ast/extractors/symbol-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CA0BjF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAerF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK/F"}
1
+ {"version":3,"file":"symbol-helpers.d.ts","sourceRoot":"","sources":["../../../src/ast/extractors/symbol-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAqCjF;AASD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAerF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK/F"}
@@ -2,7 +2,22 @@
2
2
  * Extract function/method signature
3
3
  */
4
4
  export function extractSignature(node, content) {
5
- // Get the first line of the function (up to opening brace or arrow)
5
+ // Preferred: bound the signature by where the function body begins. This is
6
+ // language-agnostic — it works for brace languages (`… ) {`), colon languages
7
+ // (Python `… ):`), and `end` languages (Ruby `def … )`). The legacy brace/arrow
8
+ // scan below walked an entire no-brace body into the "signature" (e.g. Python,
9
+ // Ruby), which this avoids.
10
+ const bodyNode = node.childForFieldName('body');
11
+ if (bodyNode) {
12
+ const signature = content
13
+ .slice(node.startIndex, bodyNode.startIndex)
14
+ .replace(/\s+/g, ' ') // collapse newlines/indentation (matches the old join-with-space)
15
+ .replace(/(\{|=>|:)\s*$/, '') // drop a dangling block-opener if it was captured
16
+ .trim();
17
+ return clampSignatureLength(signature);
18
+ }
19
+ // Fallback: nodes with no `body` field (e.g. Rust trait signatures, abstract
20
+ // interface methods). Preserve the original first-line / brace-scan behavior.
6
21
  const startLine = node.startPosition.row;
7
22
  const lines = content.split('\n');
8
23
  let signature = lines[startLine] || '';
@@ -16,11 +31,13 @@ export function extractSignature(node, content) {
16
31
  }
17
32
  // Clean up signature
18
33
  signature = signature.split('{')[0].split('=>')[0].trim();
19
- // Limit length
20
- if (signature.length > 200) {
21
- signature = signature.substring(0, 197) + '...';
22
- }
23
- return signature;
34
+ return clampSignatureLength(signature);
35
+ }
36
+ /**
37
+ * Truncate an over-long signature to keep stored chunks compact.
38
+ */
39
+ function clampSignatureLength(signature) {
40
+ return signature.length > 200 ? signature.substring(0, 197) + '...' : signature;
24
41
  }
25
42
  /**
26
43
  * Extract parameter list from function node
@@ -1 +1 @@
1
- {"version":3,"file":"symbol-helpers.js","sourceRoot":"","sources":["../../../src/ast/extractors/symbol-helpers.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAuB,EAAE,OAAe;IACvE,oEAAoE;IACpE,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;IACzC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAEvC,wEAAwE;IACxE,IAAI,WAAW,GAAG,SAAS,CAAC;IAC5B,OACE,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG;QAClC,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;QACxB,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EACzB,CAAC;QACD,WAAW,EAAE,CAAC;QACd,SAAS,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,qBAAqB;IACrB,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAE1D,eAAe;IACf,IAAI,SAAS,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QAC3B,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IAClD,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAuB,EAAE,QAAgB;IACzE,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,uBAAuB;IACvB,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;IACxD,IAAI,CAAC,UAAU;QAAE,OAAO,UAAU,CAAC;IAEnC,2BAA2B;IAC3B,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;QAC7C,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACtB,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAuB,EAAE,QAAgB;IACzE,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;IAC7D,IAAI,CAAC,cAAc;QAAE,OAAO,SAAS,CAAC;IAEtC,OAAO,cAAc,CAAC,IAAI,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"symbol-helpers.js","sourceRoot":"","sources":["../../../src/ast/extractors/symbol-helpers.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAuB,EAAE,OAAe;IACvE,4EAA4E;IAC5E,8EAA8E;IAC9E,gFAAgF;IAChF,+EAA+E;IAC/E,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAChD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,SAAS,GAAG,OAAO;aACtB,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;aAC3C,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,kEAAkE;aACvF,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,kDAAkD;aAC/E,IAAI,EAAE,CAAC;QACV,OAAO,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAED,6EAA6E;IAC7E,8EAA8E;IAC9E,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;IACzC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAEvC,wEAAwE;IACxE,IAAI,WAAW,GAAG,SAAS,CAAC;IAC5B,OACE,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG;QAClC,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC;QACxB,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EACzB,CAAC;QACD,WAAW,EAAE,CAAC;QACd,SAAS,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,qBAAqB;IACrB,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAE1D,OAAO,oBAAoB,CAAC,SAAS,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,SAAiB;IAC7C,OAAO,SAAS,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAClF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAuB,EAAE,QAAgB;IACzE,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,uBAAuB;IACvB,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;IACxD,IAAI,CAAC,UAAU;QAAE,OAAO,UAAU,CAAC;IAEnC,2BAA2B;IAC3B,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;QAC7C,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACtB,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAuB,EAAE,QAAgB;IACzE,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;IAC7D,IAAI,CAAC,cAAc;QAAE,OAAO,SAAS,CAAC;IAEtC,OAAO,cAAc,CAAC,IAAI,CAAC;AAC7B,CAAC"}
@@ -4,7 +4,7 @@ import type { LanguageDefinition } from './types.js';
4
4
  * SupportedLanguage type is derived from this array.
5
5
  * To add a new language: add its ID here, then add its definition to `definitions` below.
6
6
  */
7
- export declare const LANGUAGE_IDS: readonly ["typescript", "javascript", "php", "python", "rust", "go", "java", "csharp"];
7
+ export declare const LANGUAGE_IDS: readonly ["typescript", "javascript", "php", "python", "rust", "go", "java", "csharp", "ruby"];
8
8
  export type SupportedLanguage = (typeof LANGUAGE_IDS)[number];
9
9
  /**
10
10
  * Get the full language definition for a supported language.
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/ast/languages/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAyBrD;;;;GAIG;AACH,eAAO,MAAM,YAAY,wFASf,CAAC;AACX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAmC9D;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,iBAAiB,GAAG,kBAAkB,CAM3E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAGzE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,SAAS,kBAAkB,EAAE,CAE/D;AAQD,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAKjD"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/ast/languages/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA2BrD;;;;GAIG;AACH,eAAO,MAAM,YAAY,gGAUf,CAAC;AACX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAmC9D;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,iBAAiB,GAAG,kBAAkB,CAM3E;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAGzE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,SAAS,kBAAkB,EAAE,CAE/D;AAQD,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAKjD"}
@@ -7,6 +7,7 @@ import { rustDefinition } from './rust.js';
7
7
  import { goDefinition } from './go.js';
8
8
  import { javaDefinition } from './java.js';
9
9
  import { csharpDefinition } from './csharp.js';
10
+ import { rubyDefinition } from './ruby.js';
10
11
  /**
11
12
  * All registered language definitions.
12
13
  * To add a new language, create a definition file and add it here.
@@ -20,6 +21,7 @@ const definitions = [
20
21
  goDefinition,
21
22
  javaDefinition,
22
23
  csharpDefinition,
24
+ rubyDefinition,
23
25
  ];
24
26
  /**
25
27
  * Canonical list of supported language IDs.
@@ -35,6 +37,7 @@ export const LANGUAGE_IDS = [
35
37
  'go',
36
38
  'java',
37
39
  'csharp',
40
+ 'ruby',
38
41
  ];
39
42
  /**
40
43
  * Registry keyed by language id.
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/ast/languages/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/ast/languages/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import type Parser from 'tree-sitter';
2
+ import type { SymbolInfo } from '../types.js';
3
+ import type { LanguageDefinition } from './types.js';
4
+ import type { LanguageTraverser, DeclarationFunctionInfo } from '../traversers/types.js';
5
+ import type { LanguageExportExtractor, LanguageImportExtractor, LanguageSymbolExtractor } from '../extractors/types.js';
6
+ /**
7
+ * Ruby AST traverser
8
+ *
9
+ * Ruby structure:
10
+ * - Methods are defined with `def` (`method`) or `def self.x` (`singleton_method`)
11
+ * - Classes and modules are containers whose methods we extract
12
+ * - Container bodies are `body_statement` nodes
13
+ */
14
+ export declare class RubyTraverser implements LanguageTraverser {
15
+ targetNodeTypes: string[];
16
+ containerTypes: string[];
17
+ declarationTypes: string[];
18
+ functionTypes: string[];
19
+ shouldExtractChildren(node: Parser.SyntaxNode): boolean;
20
+ isDeclarationWithFunction(_node: Parser.SyntaxNode): boolean;
21
+ getContainerBody(node: Parser.SyntaxNode): Parser.SyntaxNode | null;
22
+ shouldTraverseChildren(node: Parser.SyntaxNode): boolean;
23
+ findParentContainerName(node: Parser.SyntaxNode): string | undefined;
24
+ findFunctionInDeclaration(_node: Parser.SyntaxNode): DeclarationFunctionInfo;
25
+ }
26
+ /**
27
+ * Ruby export extractor
28
+ *
29
+ * Ruby has no explicit export syntax. All top-level (module-level) definitions
30
+ * are considered exported / loadable by other files:
31
+ * - Classes: `class User; end`
32
+ * - Modules: `module Billing; end`
33
+ * - Methods: `def helper; end` and `def self.helper; end`
34
+ * - Constants: `VERSION = '1.0'`
35
+ */
36
+ export declare class RubyExportExtractor implements LanguageExportExtractor {
37
+ private readonly exportableTypes;
38
+ extractExports(rootNode: Parser.SyntaxNode): string[];
39
+ }
40
+ /**
41
+ * Ruby import extractor
42
+ *
43
+ * Handles require-like calls:
44
+ * - require 'json'
45
+ * - require_relative './foo'
46
+ * - load 'config.rb'
47
+ * - autoload :Bar, 'bar'
48
+ */
49
+ export declare class RubyImportExtractor implements LanguageImportExtractor {
50
+ readonly importNodeTypes: string[];
51
+ extractImportPath(node: Parser.SyntaxNode): string | null;
52
+ processImportSymbols(node: Parser.SyntaxNode): {
53
+ importPath: string;
54
+ symbols: string[];
55
+ } | null;
56
+ }
57
+ /**
58
+ * Ruby symbol extractor
59
+ *
60
+ * Handles:
61
+ * - method (def foo)
62
+ * - singleton_method (def self.foo)
63
+ * - class (class Foo)
64
+ * - module (module Foo) — mapped to the 'class' symbol type
65
+ *
66
+ * Call sites: call (foo(), obj.method())
67
+ */
68
+ export declare class RubySymbolExtractor implements LanguageSymbolExtractor {
69
+ readonly symbolNodeTypes: string[];
70
+ extractSymbol(node: Parser.SyntaxNode, content: string, parentClass?: string): SymbolInfo | null;
71
+ extractCallSite(node: Parser.SyntaxNode): {
72
+ symbol: string;
73
+ line: number;
74
+ key: string;
75
+ } | null;
76
+ private extractMethodInfo;
77
+ private extractClassInfo;
78
+ }
79
+ export declare const rubyDefinition: LanguageDefinition;
80
+ //# sourceMappingURL=ruby.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ruby.d.ts","sourceRoot":"","sources":["../../../src/ast/languages/ruby.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACzF,OAAO,KAAK,EACV,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,wBAAwB,CAAC;AAmDhC;;;;;;;GAOG;AACH,qBAAa,aAAc,YAAW,iBAAiB;IACrD,eAAe,WAAkC;IAEjD,cAAc,WAGZ;IAEF,gBAAgB,EAAE,MAAM,EAAE,CAAM;IAEhC,aAAa,WAAkC;IAE/C,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO;IAIvD,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO;IAI5D,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,GAAG,IAAI;IAOnE,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO;IASxD,uBAAuB,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,GAAG,SAAS;IAYpE,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,GAAG,uBAAuB;CAM7E;AAMD;;;;;;;;;GASG;AACH,qBAAa,mBAAoB,YAAW,uBAAuB;IACjE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA8D;IAE9F,cAAc,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,EAAE;CA4BtD;AAMD;;;;;;;;GAQG;AACH,qBAAa,mBAAoB,YAAW,uBAAuB;IAEjE,QAAQ,CAAC,eAAe,WAAY;IAEpC,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,GAAG,IAAI;IAIzD,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI;CAKhG;AAMD;;;;;;;;;;GAUG;AACH,qBAAa,mBAAoB,YAAW,uBAAuB;IACjE,QAAQ,CAAC,eAAe,WAAqD;IAE7E,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAchG,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAa9F,OAAO,CAAC,iBAAiB;IAoBzB,OAAO,CAAC,gBAAgB;CAqBzB;AAMD,eAAO,MAAM,cAAc,EAAE,kBAuI5B,CAAC"}
@@ -0,0 +1,377 @@
1
+ import Ruby from 'tree-sitter-ruby';
2
+ import { extractSignature, extractParameters } from '../extractors/symbol-helpers.js';
3
+ import { calculateComplexity } from '../complexity/index.js';
4
+ // =============================================================================
5
+ // SHARED HELPERS
6
+ // =============================================================================
7
+ /**
8
+ * Ruby "import" methods. Unlike most languages, Ruby has no import *statement* —
9
+ * dependencies are loaded via ordinary method calls (`require 'json'`,
10
+ * `require_relative './foo'`, `load`, `autoload`). The grammar parses these as
11
+ * `call` nodes, so the import extractor filters call nodes by their method name.
12
+ */
13
+ const REQUIRE_METHODS = new Set(['require', 'require_relative', 'load', 'autoload']);
14
+ /**
15
+ * Return the content of the first string literal in an `argument_list`
16
+ * (e.g. the `'json'` in `require 'json'`). Returns null if absent or empty.
17
+ */
18
+ function firstStringArgument(argsNode) {
19
+ if (!argsNode)
20
+ return null;
21
+ const stringNode = argsNode.namedChildren.find(c => c.type === 'string');
22
+ const contentNode = stringNode?.namedChildren.find(c => c.type === 'string_content');
23
+ return contentNode?.text ?? null;
24
+ }
25
+ /**
26
+ * Extract the require path from a `call` node if it is a require-like call,
27
+ * otherwise null (so non-import calls are skipped by the import extractor).
28
+ */
29
+ function extractRequirePath(node) {
30
+ if (node.type !== 'call')
31
+ return null;
32
+ const method = node.childForFieldName('method');
33
+ if (!method || !REQUIRE_METHODS.has(method.text))
34
+ return null;
35
+ return firstStringArgument(node.childForFieldName('arguments'));
36
+ }
37
+ /**
38
+ * Reduce a require path to a bare module name for the imported-symbols map.
39
+ * `'../lib/foo'` → `foo`, `'active_record'` → `active_record`.
40
+ */
41
+ function moduleBasename(path) {
42
+ const base = path.split('/').pop() ?? path;
43
+ return base.replace(/\.rb$/, '');
44
+ }
45
+ // =============================================================================
46
+ // TRAVERSER
47
+ // =============================================================================
48
+ /**
49
+ * Ruby AST traverser
50
+ *
51
+ * Ruby structure:
52
+ * - Methods are defined with `def` (`method`) or `def self.x` (`singleton_method`)
53
+ * - Classes and modules are containers whose methods we extract
54
+ * - Container bodies are `body_statement` nodes
55
+ */
56
+ export class RubyTraverser {
57
+ targetNodeTypes = ['method', 'singleton_method'];
58
+ containerTypes = [
59
+ 'class', // We extract methods, not the class itself
60
+ 'singleton_class', // `class << self`
61
+ ];
62
+ declarationTypes = [];
63
+ functionTypes = ['method', 'singleton_method'];
64
+ shouldExtractChildren(node) {
65
+ return this.containerTypes.includes(node.type);
66
+ }
67
+ isDeclarationWithFunction(_node) {
68
+ return false;
69
+ }
70
+ getContainerBody(node) {
71
+ if (this.containerTypes.includes(node.type)) {
72
+ return node.childForFieldName('body');
73
+ }
74
+ return null;
75
+ }
76
+ shouldTraverseChildren(node) {
77
+ // `module` is treated as a transparent namespace: we traverse *through* it
78
+ // (without it counting as a container nesting level) so that the common
79
+ // `module → class → method` shape still yields method chunks. The shared
80
+ // chunker caps extractable targets at one container deep, and a Ruby class
81
+ // wrapped in a module would otherwise push methods out of range.
82
+ return node.type === 'program' || node.type === 'body_statement' || node.type === 'module';
83
+ }
84
+ findParentContainerName(node) {
85
+ let current = node.parent;
86
+ while (current) {
87
+ if (current.type === 'class' || current.type === 'module') {
88
+ const nameNode = current.childForFieldName('name');
89
+ return nameNode?.text;
90
+ }
91
+ current = current.parent;
92
+ }
93
+ return undefined;
94
+ }
95
+ findFunctionInDeclaration(_node) {
96
+ return {
97
+ hasFunction: false,
98
+ functionNode: null,
99
+ };
100
+ }
101
+ }
102
+ // =============================================================================
103
+ // EXPORT EXTRACTOR
104
+ // =============================================================================
105
+ /**
106
+ * Ruby export extractor
107
+ *
108
+ * Ruby has no explicit export syntax. All top-level (module-level) definitions
109
+ * are considered exported / loadable by other files:
110
+ * - Classes: `class User; end`
111
+ * - Modules: `module Billing; end`
112
+ * - Methods: `def helper; end` and `def self.helper; end`
113
+ * - Constants: `VERSION = '1.0'`
114
+ */
115
+ export class RubyExportExtractor {
116
+ exportableTypes = new Set(['method', 'singleton_method', 'class', 'module']);
117
+ extractExports(rootNode) {
118
+ const exports = [];
119
+ const seen = new Set();
120
+ const addExport = (name) => {
121
+ if (name && !seen.has(name)) {
122
+ seen.add(name);
123
+ exports.push(name);
124
+ }
125
+ };
126
+ rootNode.namedChildren.forEach(child => {
127
+ if (this.exportableTypes.has(child.type)) {
128
+ addExport(child.childForFieldName('name')?.text);
129
+ return;
130
+ }
131
+ // Top-level constant assignment: `CONST = ...`
132
+ if (child.type === 'assignment') {
133
+ const left = child.childForFieldName('left');
134
+ if (left?.type === 'constant') {
135
+ addExport(left.text);
136
+ }
137
+ }
138
+ });
139
+ return exports;
140
+ }
141
+ }
142
+ // =============================================================================
143
+ // IMPORT EXTRACTOR
144
+ // =============================================================================
145
+ /**
146
+ * Ruby import extractor
147
+ *
148
+ * Handles require-like calls:
149
+ * - require 'json'
150
+ * - require_relative './foo'
151
+ * - load 'config.rb'
152
+ * - autoload :Bar, 'bar'
153
+ */
154
+ export class RubyImportExtractor {
155
+ // Require statements are method calls in Ruby; we filter by method name.
156
+ importNodeTypes = ['call'];
157
+ extractImportPath(node) {
158
+ return extractRequirePath(node);
159
+ }
160
+ processImportSymbols(node) {
161
+ const importPath = extractRequirePath(node);
162
+ if (!importPath)
163
+ return null;
164
+ return { importPath, symbols: [moduleBasename(importPath)] };
165
+ }
166
+ }
167
+ // =============================================================================
168
+ // SYMBOL EXTRACTOR
169
+ // =============================================================================
170
+ /**
171
+ * Ruby symbol extractor
172
+ *
173
+ * Handles:
174
+ * - method (def foo)
175
+ * - singleton_method (def self.foo)
176
+ * - class (class Foo)
177
+ * - module (module Foo) — mapped to the 'class' symbol type
178
+ *
179
+ * Call sites: call (foo(), obj.method())
180
+ */
181
+ export class RubySymbolExtractor {
182
+ symbolNodeTypes = ['method', 'singleton_method', 'class', 'module'];
183
+ extractSymbol(node, content, parentClass) {
184
+ switch (node.type) {
185
+ case 'method':
186
+ case 'singleton_method':
187
+ return this.extractMethodInfo(node, content, parentClass);
188
+ case 'class':
189
+ return this.extractClassInfo(node, 'class');
190
+ case 'module':
191
+ return this.extractClassInfo(node, 'module');
192
+ default:
193
+ return null;
194
+ }
195
+ }
196
+ extractCallSite(node) {
197
+ if (node.type !== 'call')
198
+ return null;
199
+ const line = node.startPosition.row + 1;
200
+ // For both `foo(...)` and `obj.foo(...)` the called name is the `method` field.
201
+ const methodNode = node.childForFieldName('method');
202
+ if (methodNode?.type === 'identifier') {
203
+ return { symbol: methodNode.text, line, key: `${methodNode.text}:${line}` };
204
+ }
205
+ return null;
206
+ }
207
+ extractMethodInfo(node, content, parentClass) {
208
+ const nameNode = node.childForFieldName('name');
209
+ if (!nameNode)
210
+ return null;
211
+ return {
212
+ name: nameNode.text,
213
+ type: parentClass ? 'method' : 'function',
214
+ startLine: node.startPosition.row + 1,
215
+ endLine: node.endPosition.row + 1,
216
+ parentClass,
217
+ signature: extractSignature(node, content),
218
+ parameters: extractParameters(node, content),
219
+ complexity: calculateComplexity(node),
220
+ };
221
+ }
222
+ extractClassInfo(node, keyword) {
223
+ const nameNode = node.childForFieldName('name');
224
+ if (!nameNode)
225
+ return null;
226
+ // superclass node text includes the leading `<` (e.g. `< Base`).
227
+ const superclass = node.childForFieldName('superclass');
228
+ const signature = superclass
229
+ ? `${keyword} ${nameNode.text} ${superclass.text}`
230
+ : `${keyword} ${nameNode.text}`;
231
+ return {
232
+ name: nameNode.text,
233
+ type: 'class',
234
+ startLine: node.startPosition.row + 1,
235
+ endLine: node.endPosition.row + 1,
236
+ signature,
237
+ };
238
+ }
239
+ }
240
+ // =============================================================================
241
+ // LANGUAGE DEFINITION
242
+ // =============================================================================
243
+ export const rubyDefinition = {
244
+ id: 'ruby',
245
+ extensions: ['rb'],
246
+ grammar: Ruby,
247
+ traverser: new RubyTraverser(),
248
+ exportExtractor: new RubyExportExtractor(),
249
+ importExtractor: new RubyImportExtractor(),
250
+ symbolExtractor: new RubySymbolExtractor(),
251
+ complexity: {
252
+ // Structural control-flow branch points. NOTE: Ruby's logical operators
253
+ // (`&&`, `||`, `and`, `or`) are `binary` nodes, which the shared complexity
254
+ // engine only counts for the `binary_expression`/`boolean_operator` node
255
+ // types (JS/TS/Python). Counting generic `binary` here would also count
256
+ // arithmetic, so logical operators are intentionally not scored for Ruby.
257
+ decisionPoints: [
258
+ 'if',
259
+ 'elsif',
260
+ 'unless',
261
+ 'while',
262
+ 'until',
263
+ 'for',
264
+ 'when',
265
+ 'in_clause', // `case/in` pattern matching arm
266
+ 'rescue',
267
+ 'conditional', // ternary `a ? b : c`
268
+ 'if_modifier', // `x if y`
269
+ 'unless_modifier', // `x unless y`
270
+ 'while_modifier', // `x while y`
271
+ 'until_modifier', // `x until y`
272
+ ],
273
+ nestingTypes: ['if', 'unless', 'while', 'until', 'for', 'case', 'case_match', 'rescue'],
274
+ nonNestingTypes: [
275
+ 'elsif',
276
+ 'when',
277
+ 'in_clause',
278
+ 'conditional',
279
+ 'if_modifier',
280
+ 'unless_modifier',
281
+ 'while_modifier',
282
+ 'until_modifier',
283
+ ],
284
+ lambdaTypes: ['block', 'do_block', 'lambda'],
285
+ operatorSymbols: new Set([
286
+ '+',
287
+ '-',
288
+ '*',
289
+ '/',
290
+ '%',
291
+ '**',
292
+ '==',
293
+ '!=',
294
+ '<',
295
+ '>',
296
+ '<=',
297
+ '>=',
298
+ '<=>',
299
+ '=',
300
+ '+=',
301
+ '-=',
302
+ '*=',
303
+ '/=',
304
+ '%=',
305
+ '**=',
306
+ '||=',
307
+ '&&=',
308
+ '|=',
309
+ '&=',
310
+ '^=',
311
+ '<<=',
312
+ '>>=',
313
+ '&',
314
+ '|',
315
+ '^',
316
+ '~',
317
+ '<<',
318
+ '>>',
319
+ '&&',
320
+ '||',
321
+ '!',
322
+ '..',
323
+ '...',
324
+ '=>',
325
+ '->',
326
+ '::',
327
+ '.',
328
+ '&.',
329
+ '(',
330
+ ')',
331
+ '[',
332
+ ']',
333
+ '{',
334
+ '}',
335
+ ]),
336
+ operatorKeywords: new Set([
337
+ 'if',
338
+ 'elsif',
339
+ 'else',
340
+ 'unless',
341
+ 'while',
342
+ 'until',
343
+ 'for',
344
+ 'case',
345
+ 'when',
346
+ 'in',
347
+ 'do',
348
+ 'then',
349
+ 'begin',
350
+ 'rescue',
351
+ 'ensure',
352
+ 'raise',
353
+ 'return',
354
+ 'yield',
355
+ 'break',
356
+ 'next',
357
+ 'redo',
358
+ 'retry',
359
+ 'def',
360
+ 'class',
361
+ 'module',
362
+ 'self',
363
+ 'super',
364
+ 'and',
365
+ 'or',
366
+ 'not',
367
+ 'require',
368
+ 'require_relative',
369
+ 'lambda',
370
+ 'proc',
371
+ ]),
372
+ },
373
+ symbols: {
374
+ callExpressionTypes: ['call'],
375
+ },
376
+ };
377
+ //# sourceMappingURL=ruby.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ruby.js","sourceRoot":"","sources":["../../../src/ast/languages/ruby.ts"],"names":[],"mappings":"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"}
@@ -75,11 +75,13 @@ export declare function getCanonicalPath(filepath: string, workspaceRoot: string
75
75
  *
76
76
  * Uses precise regex patterns to avoid false positives:
77
77
  * - Files with .test. or .spec. extensions (e.g., foo.test.ts, bar.spec.js)
78
- * - Files in test/, tests/, or __tests__/ directories
78
+ * - Files with _test. or _spec. suffixes (e.g., user_spec.rb, math_test.go)
79
+ * - Files in test/, tests/, spec/, specs/, or __tests__/ directories
79
80
  *
80
81
  * Avoids false positives like:
81
82
  * - contest.ts (contains ".test." but isn't a test)
82
83
  * - latest/config.ts (contains "/test/" but isn't a test)
84
+ * - mytest.ts (no `_` boundary before "test")
83
85
  *
84
86
  * @param filepath - The file path to check
85
87
  * @returns True if the file is a test file
@@ -1 +1 @@
1
- {"version":3,"file":"path-matching.d.ts","sourceRoot":"","sources":["../../src/utils/path-matching.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA4BH;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAezE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAcvE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAqCvF;AA2HD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAMrF;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAMhF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAIpD"}
1
+ {"version":3,"file":"path-matching.d.ts","sourceRoot":"","sources":["../../src/utils/path-matching.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA4BH;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAezE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAcvE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAqCvF;AA2HD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAMrF;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAMhF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAMpD"}
@@ -267,16 +267,20 @@ export function getCanonicalPath(filepath, workspaceRoot) {
267
267
  *
268
268
  * Uses precise regex patterns to avoid false positives:
269
269
  * - Files with .test. or .spec. extensions (e.g., foo.test.ts, bar.spec.js)
270
- * - Files in test/, tests/, or __tests__/ directories
270
+ * - Files with _test. or _spec. suffixes (e.g., user_spec.rb, math_test.go)
271
+ * - Files in test/, tests/, spec/, specs/, or __tests__/ directories
271
272
  *
272
273
  * Avoids false positives like:
273
274
  * - contest.ts (contains ".test." but isn't a test)
274
275
  * - latest/config.ts (contains "/test/" but isn't a test)
276
+ * - mytest.ts (no `_` boundary before "test")
275
277
  *
276
278
  * @param filepath - The file path to check
277
279
  * @returns True if the file is a test file
278
280
  */
279
281
  export function isTestFile(filepath) {
280
- return (/\.(test|spec)\.[^/]+$/.test(filepath) || /(^|[/\\])(test|tests|__tests__)[/\\]/.test(filepath));
282
+ return (/\.(test|spec)\.[^/]+$/.test(filepath) ||
283
+ /_(test|spec)\.[^/]+$/.test(filepath) ||
284
+ /(^|[/\\])(test|tests|spec|specs|__tests__)[/\\]/.test(filepath));
281
285
  }
282
286
  //# sourceMappingURL=path-matching.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"path-matching.js","sourceRoot":"","sources":["../../src/utils/path-matching.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"path-matching.js","sourceRoot":"","sources":["../../src/utils/path-matching.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEtE;;;GAGG;AACH,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AAED;;;GAGG;AACH,IAAI,cAAc,GAAkB,IAAI,CAAC;AAEzC,SAAS,iBAAiB;IACxB,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,UAAU,GAAG,sBAAsB,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvE,cAAc,GAAG,IAAI,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,aAAqB;IAC/D,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAEtE,oEAAoE;IACpE,yEAAyE;IACzE,mEAAmE;IACnE,0EAA0E;IAC1E,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,EAAE,CAAC,CAAC;IAEzD,8DAA8D;IAC9D,IAAI,UAAU,CAAC,UAAU,CAAC,aAAa,GAAG,GAAG,CAAC,EAAE,CAAC;QAC/C,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW,EAAE,OAAe;IAC5D,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAE/B,iEAAiE;IACjE,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACpD,IAAI,UAAU,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAEpD,8DAA8D;IAC9D,mHAAmH;IACnH,MAAM,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IACxC,IAAI,QAAQ,KAAK,GAAG,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;IAChC,OAAO,SAAS,KAAK,GAAG,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,WAAW,CAAC,gBAAwB,EAAE,gBAAwB;IAC5E,cAAc;IACd,IAAI,gBAAgB,KAAK,gBAAgB;QAAE,OAAO,IAAI,CAAC;IAEvD,wEAAwE;IACxE,IAAI,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,EAAE,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+EAA+E;IAC/E,IAAI,iBAAiB,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,EAAE,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qEAAqE;IACrE,wCAAwC;IACxC,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAClE,IACE,iBAAiB,CAAC,aAAa,EAAE,gBAAgB,CAAC;QAClD,iBAAiB,CAAC,gBAAgB,EAAE,aAAa,CAAC,EAClD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qCAAqC;IACrC,6FAA6F;IAC7F,IAAI,mBAAmB,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qCAAqC;IACrC,kGAAkG;IAClG,IAAI,mBAAmB,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB,CAAC,YAAoB,EAAE,eAAuB;IAC9E,OAAO,CACL,eAAe,KAAK,YAAY;QAChC,eAAe,KAAK,YAAY,GAAG,WAAW;QAC9C,eAAe,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,KAAK,YAAY,CAC5D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,0BAA0B,CAAC,YAAoB,EAAE,eAAuB;IAC/E,OAAO,eAAe,CAAC,UAAU,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB,CAAC,YAAoB,EAAE,eAAuB;IAC9E,OAAO,CACL,eAAe,CAAC,QAAQ,CAAC,GAAG,GAAG,YAAY,CAAC;QAC5C,eAAe,CAAC,QAAQ,CAAC,GAAG,GAAG,YAAY,GAAG,WAAW,CAAC,CAC3D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,YAAoB,EAAE,eAAuB;IAC5E,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1D,IAAI,WAAW,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAElC,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IACzD,MAAM,aAAa,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IAEzD,8DAA8D;IAC9D,6FAA6F;IAC7F,2DAA2D;IAC3D,mEAAmE;IACnE,OAAO,aAAa,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AACvE,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,mBAAmB,CAAC,UAAkB,EAAE,UAAkB;IACjE,oFAAoF;IACpF,wGAAwG;IACxG,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACxD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,+DAA+D;IAC/D,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAEpD,iDAAiD;IACjD,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAExD,kDAAkD;IAClD,OAAO,CACL,yBAAyB,CAAC,YAAY,EAAE,eAAe,CAAC;QACxD,0BAA0B,CAAC,YAAY,EAAE,eAAe,CAAC;QACzD,yBAAyB,CAAC,YAAY,EAAE,eAAe,CAAC;QACxD,uBAAuB,CAAC,YAAY,EAAE,eAAe,CAAC,CACvD,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAS,mBAAmB,CAAC,UAAkB,EAAE,UAAkB;IACjE,6BAA6B;IAC7B,MAAM,gBAAgB,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/D,MAAM,gBAAgB,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAE/D,uCAAuC;IACvC,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,yCAAyC;IACzC,sDAAsD;IACtD,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,gBAAgB,CAAC,MAAM,IAAI,CAAC,IAAI,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClF,MAAM,OAAO,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAC5E,MAAM,UAAU,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAE/E,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;YAC3B,OAAO,EAAE,CAAC;QACZ,CAAC;aAAM,CAAC;YACN,MAAM;QACR,CAAC;IACH,CAAC;IAED,kDAAkD;IAClD,qFAAqF;IACrF,OAAO,OAAO,KAAK,gBAAgB,CAAC,MAAM,CAAC;AAC7C,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,qBAAqB,CAAC,YAAoB,EAAE,SAAiB;IAC3E,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACzE,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;AACvE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,aAAqB;IACtE,IAAI,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC7C,IAAI,SAAS,CAAC,UAAU,CAAC,aAAa,GAAG,GAAG,CAAC,EAAE,CAAC;QAC9C,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,CACL,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC;QACtC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC;QACrC,iDAAiD,CAAC,IAAI,CAAC,QAAQ,CAAC,CACjE,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@liendev/parser",
3
- "version": "0.44.0",
3
+ "version": "0.46.0",
4
4
  "description": "AST parsing, complexity analysis, and semantic chunking for Lien",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -29,6 +29,7 @@
29
29
  "tree-sitter-javascript": "0.23.1",
30
30
  "tree-sitter-php": "^0.24.2",
31
31
  "tree-sitter-python": "^0.25.0",
32
+ "tree-sitter-ruby": "^0.23.1",
32
33
  "tree-sitter-rust": "^0.24.0",
33
34
  "tree-sitter-typescript": "0.23.2"
34
35
  },