@nahisaho/musubix-codegraph 2.3.0 → 2.3.3

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 (109) hide show
  1. package/README.md +45 -23
  2. package/dist/cli.d.ts +13 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +200 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/index.d.ts +1 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +8 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/parser/ast-parser.d.ts +29 -1
  11. package/dist/parser/ast-parser.d.ts.map +1 -1
  12. package/dist/parser/ast-parser.js +142 -19
  13. package/dist/parser/ast-parser.js.map +1 -1
  14. package/dist/parser/extractors/base-extractor.d.ts +252 -0
  15. package/dist/parser/extractors/base-extractor.d.ts.map +1 -0
  16. package/dist/parser/extractors/base-extractor.js +267 -0
  17. package/dist/parser/extractors/base-extractor.js.map +1 -0
  18. package/dist/parser/extractors/c-cpp.d.ts +38 -0
  19. package/dist/parser/extractors/c-cpp.d.ts.map +1 -0
  20. package/dist/parser/extractors/c-cpp.js +411 -0
  21. package/dist/parser/extractors/c-cpp.js.map +1 -0
  22. package/dist/parser/extractors/csharp.d.ts +28 -0
  23. package/dist/parser/extractors/csharp.d.ts.map +1 -0
  24. package/dist/parser/extractors/csharp.js +283 -0
  25. package/dist/parser/extractors/csharp.js.map +1 -0
  26. package/dist/parser/extractors/go.d.ts +25 -0
  27. package/dist/parser/extractors/go.d.ts.map +1 -0
  28. package/dist/parser/extractors/go.js +247 -0
  29. package/dist/parser/extractors/go.js.map +1 -0
  30. package/dist/parser/extractors/hcl.d.ts +22 -0
  31. package/dist/parser/extractors/hcl.d.ts.map +1 -0
  32. package/dist/parser/extractors/hcl.js +155 -0
  33. package/dist/parser/extractors/hcl.js.map +1 -0
  34. package/dist/parser/extractors/index.d.ts +68 -0
  35. package/dist/parser/extractors/index.d.ts.map +1 -0
  36. package/dist/parser/extractors/index.js +187 -0
  37. package/dist/parser/extractors/index.js.map +1 -0
  38. package/dist/parser/extractors/java.d.ts +28 -0
  39. package/dist/parser/extractors/java.d.ts.map +1 -0
  40. package/dist/parser/extractors/java.js +294 -0
  41. package/dist/parser/extractors/java.js.map +1 -0
  42. package/dist/parser/extractors/kotlin.d.ts +27 -0
  43. package/dist/parser/extractors/kotlin.d.ts.map +1 -0
  44. package/dist/parser/extractors/kotlin.js +269 -0
  45. package/dist/parser/extractors/kotlin.js.map +1 -0
  46. package/dist/parser/extractors/lua.d.ts +26 -0
  47. package/dist/parser/extractors/lua.d.ts.map +1 -0
  48. package/dist/parser/extractors/lua.js +244 -0
  49. package/dist/parser/extractors/lua.js.map +1 -0
  50. package/dist/parser/extractors/php.d.ts +27 -0
  51. package/dist/parser/extractors/php.d.ts.map +1 -0
  52. package/dist/parser/extractors/php.js +270 -0
  53. package/dist/parser/extractors/php.js.map +1 -0
  54. package/dist/parser/extractors/python.d.ts +22 -0
  55. package/dist/parser/extractors/python.d.ts.map +1 -0
  56. package/dist/parser/extractors/python.js +184 -0
  57. package/dist/parser/extractors/python.js.map +1 -0
  58. package/dist/parser/extractors/ruby.d.ts +25 -0
  59. package/dist/parser/extractors/ruby.d.ts.map +1 -0
  60. package/dist/parser/extractors/ruby.js +193 -0
  61. package/dist/parser/extractors/ruby.js.map +1 -0
  62. package/dist/parser/extractors/rust.d.ts +27 -0
  63. package/dist/parser/extractors/rust.d.ts.map +1 -0
  64. package/dist/parser/extractors/rust.js +262 -0
  65. package/dist/parser/extractors/rust.js.map +1 -0
  66. package/dist/parser/extractors/scala.d.ts +27 -0
  67. package/dist/parser/extractors/scala.d.ts.map +1 -0
  68. package/dist/parser/extractors/scala.js +265 -0
  69. package/dist/parser/extractors/scala.js.map +1 -0
  70. package/dist/parser/extractors/swift.d.ts +30 -0
  71. package/dist/parser/extractors/swift.d.ts.map +1 -0
  72. package/dist/parser/extractors/swift.js +326 -0
  73. package/dist/parser/extractors/swift.js.map +1 -0
  74. package/dist/parser/extractors/typescript.d.ts +30 -0
  75. package/dist/parser/extractors/typescript.d.ts.map +1 -0
  76. package/dist/parser/extractors/typescript.js +230 -0
  77. package/dist/parser/extractors/typescript.js.map +1 -0
  78. package/dist/pr/git-operations.d.ts +186 -0
  79. package/dist/pr/git-operations.d.ts.map +1 -0
  80. package/dist/pr/git-operations.js +441 -0
  81. package/dist/pr/git-operations.js.map +1 -0
  82. package/dist/pr/github-adapter.d.ts +163 -0
  83. package/dist/pr/github-adapter.d.ts.map +1 -0
  84. package/dist/pr/github-adapter.js +467 -0
  85. package/dist/pr/github-adapter.js.map +1 -0
  86. package/dist/pr/index.d.ts +19 -0
  87. package/dist/pr/index.d.ts.map +1 -0
  88. package/dist/pr/index.js +24 -0
  89. package/dist/pr/index.js.map +1 -0
  90. package/dist/pr/pr-creator.d.ts +135 -0
  91. package/dist/pr/pr-creator.d.ts.map +1 -0
  92. package/dist/pr/pr-creator.js +387 -0
  93. package/dist/pr/pr-creator.js.map +1 -0
  94. package/dist/pr/pr-template.d.ts +105 -0
  95. package/dist/pr/pr-template.d.ts.map +1 -0
  96. package/dist/pr/pr-template.js +273 -0
  97. package/dist/pr/pr-template.js.map +1 -0
  98. package/dist/pr/refactoring-applier.d.ts +143 -0
  99. package/dist/pr/refactoring-applier.d.ts.map +1 -0
  100. package/dist/pr/refactoring-applier.js +412 -0
  101. package/dist/pr/refactoring-applier.js.map +1 -0
  102. package/dist/pr/types.d.ts +362 -0
  103. package/dist/pr/types.d.ts.map +1 -0
  104. package/dist/pr/types.js +63 -0
  105. package/dist/pr/types.js.map +1 -0
  106. package/dist/types.d.ts +2 -1
  107. package/dist/types.d.ts.map +1 -1
  108. package/dist/types.js.map +1 -1
  109. package/package.json +26 -2
@@ -0,0 +1,184 @@
1
+ /**
2
+ * @nahisaho/musubix-codegraph - Python Extractor
3
+ *
4
+ * AST extractor for Python source files
5
+ *
6
+ * @see REQ-CG-AST-001
7
+ * @see DES-CG-PYTHON
8
+ */
9
+ import { BaseExtractor, } from './base-extractor.js';
10
+ /**
11
+ * Python language extractor
12
+ */
13
+ export class PythonExtractor extends BaseExtractor {
14
+ config = {
15
+ name: 'python',
16
+ extensions: ['.py', '.pyw'],
17
+ treeSitterName: 'python',
18
+ functionNodes: ['function_definition'],
19
+ classNodes: ['class_definition'],
20
+ importNodes: ['import_statement', 'import_from_statement'],
21
+ interfaceNodes: [],
22
+ moduleNodes: [],
23
+ };
24
+ extract(tree, filePath, sourceCode) {
25
+ const entities = [];
26
+ const relations = [];
27
+ const startTime = Date.now();
28
+ // Add file entity
29
+ entities.push(this.createFileEntity(filePath, sourceCode));
30
+ const fileEntityId = entities[0].id;
31
+ let currentClassId = null;
32
+ this.walkTree(tree.rootNode, (node) => {
33
+ switch (node.type) {
34
+ case 'function_definition': {
35
+ const entity = this.extractFunction(node, filePath);
36
+ if (entity) {
37
+ entities.push(entity);
38
+ relations.push(this.createRelation({
39
+ type: currentClassId ? 'member_of' : 'contains',
40
+ sourceId: entity.id,
41
+ targetId: currentClassId || fileEntityId,
42
+ }));
43
+ }
44
+ break;
45
+ }
46
+ case 'class_definition': {
47
+ const entity = this.extractClass(node, filePath);
48
+ if (entity) {
49
+ entities.push(entity);
50
+ currentClassId = entity.id;
51
+ relations.push(this.createRelation({
52
+ type: 'contains',
53
+ sourceId: fileEntityId,
54
+ targetId: entity.id,
55
+ }));
56
+ // Extract inheritance
57
+ const heritage = this.extractInheritance(node, entity.id);
58
+ relations.push(...heritage);
59
+ }
60
+ break;
61
+ }
62
+ case 'import_statement':
63
+ case 'import_from_statement': {
64
+ const importRelations = this.extractImport(node, fileEntityId);
65
+ relations.push(...importRelations);
66
+ break;
67
+ }
68
+ case 'decorated_definition': {
69
+ // Handle decorated functions/classes
70
+ const definition = this.findChildByType(node, 'function_definition') ||
71
+ this.findChildByType(node, 'class_definition');
72
+ if (definition) {
73
+ // Will be processed in next iteration
74
+ }
75
+ break;
76
+ }
77
+ }
78
+ });
79
+ return {
80
+ entities,
81
+ relations,
82
+ errors: [],
83
+ stats: {
84
+ linesOfCode: sourceCode.split('\n').length,
85
+ parseTimeMs: Date.now() - startTime,
86
+ },
87
+ };
88
+ }
89
+ extractFunction(node, filePath) {
90
+ const nameNode = this.getChildByField(node, 'name');
91
+ const name = nameNode?.text || '<anonymous>';
92
+ // Extract docstring (first string in body)
93
+ const body = this.getChildByField(node, 'body');
94
+ let docstring;
95
+ if (body?.namedChildren[0]?.type === 'expression_statement') {
96
+ const expr = body.namedChildren[0].namedChildren[0];
97
+ if (expr?.type === 'string') {
98
+ docstring = this.cleanDocstring(expr.text);
99
+ }
100
+ }
101
+ return this.createEntity({
102
+ type: 'function',
103
+ name,
104
+ filePath,
105
+ startLine: this.getLineNumber(node, 'start'),
106
+ endLine: this.getLineNumber(node, 'end'),
107
+ language: 'python',
108
+ docstring,
109
+ });
110
+ }
111
+ extractClass(node, filePath) {
112
+ const nameNode = this.getChildByField(node, 'name');
113
+ const name = nameNode?.text || '<anonymous>';
114
+ // Extract docstring
115
+ const body = this.getChildByField(node, 'body');
116
+ let docstring;
117
+ if (body?.namedChildren[0]?.type === 'expression_statement') {
118
+ const expr = body.namedChildren[0].namedChildren[0];
119
+ if (expr?.type === 'string') {
120
+ docstring = this.cleanDocstring(expr.text);
121
+ }
122
+ }
123
+ return this.createEntity({
124
+ type: 'class',
125
+ name,
126
+ filePath,
127
+ startLine: this.getLineNumber(node, 'start'),
128
+ endLine: this.getLineNumber(node, 'end'),
129
+ language: 'python',
130
+ docstring,
131
+ });
132
+ }
133
+ extractInheritance(node, classId) {
134
+ const relations = [];
135
+ const argumentList = this.getChildByField(node, 'superclasses');
136
+ if (argumentList) {
137
+ for (const arg of argumentList.namedChildren) {
138
+ const baseName = arg.type === 'identifier' ? arg.text : arg.text;
139
+ if (baseName) {
140
+ relations.push(this.createRelation({
141
+ type: 'extends',
142
+ sourceId: classId,
143
+ targetId: `external:${baseName}`,
144
+ }));
145
+ }
146
+ }
147
+ }
148
+ return relations;
149
+ }
150
+ extractImport(node, fileEntityId) {
151
+ const relations = [];
152
+ if (node.type === 'import_statement') {
153
+ // import x, y, z
154
+ for (const child of node.namedChildren) {
155
+ if (child.type === 'dotted_name' || child.type === 'aliased_import') {
156
+ const moduleName = child.type === 'aliased_import'
157
+ ? this.findChildByType(child, 'dotted_name')?.text
158
+ : child.text;
159
+ if (moduleName) {
160
+ relations.push(this.createRelation({
161
+ type: 'imports',
162
+ sourceId: fileEntityId,
163
+ targetId: `module:${moduleName}`,
164
+ }));
165
+ }
166
+ }
167
+ }
168
+ }
169
+ else {
170
+ // from x import y
171
+ const moduleNode = this.getChildByField(node, 'module_name');
172
+ const moduleName = moduleNode?.text;
173
+ if (moduleName) {
174
+ relations.push(this.createRelation({
175
+ type: 'imports',
176
+ sourceId: fileEntityId,
177
+ targetId: `module:${moduleName}`,
178
+ }));
179
+ }
180
+ }
181
+ return relations;
182
+ }
183
+ }
184
+ //# sourceMappingURL=python.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python.js","sourceRoot":"","sources":["../../../src/parser/extractors/python.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @nahisaho/musubix-codegraph - Ruby Extractor
3
+ *
4
+ * AST extractor for Ruby source files
5
+ *
6
+ * @see REQ-CG-MULTILANG-008
7
+ * @see DES-CG-RUBY
8
+ * @see TSK-CG-024
9
+ */
10
+ import type { ParseResult } from '../../types.js';
11
+ import { BaseExtractor, type LanguageConfig, type SyntaxTree } from './base-extractor.js';
12
+ /**
13
+ * Ruby language extractor
14
+ */
15
+ export declare class RubyExtractor extends BaseExtractor {
16
+ readonly config: LanguageConfig;
17
+ extract(tree: SyntaxTree, filePath: string, sourceCode: string): ParseResult;
18
+ private extractModule;
19
+ private extractClass;
20
+ private extractMethod;
21
+ private extractHeritage;
22
+ private extractRequire;
23
+ private extractRubyDocComment;
24
+ }
25
+ //# sourceMappingURL=ruby.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ruby.d.ts","sourceRoot":"","sources":["../../../src/parser/extractors/ruby.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,gBAAgB,CAAC;AACpE,OAAO,EACL,aAAa,EACb,KAAK,cAAc,EACnB,KAAK,UAAU,EAEhB,MAAM,qBAAqB,CAAC;AAE7B;;GAEG;AACH,qBAAa,aAAc,SAAQ,aAAa;IAC9C,QAAQ,CAAC,MAAM,EAAE,cAAc,CAS7B;IAEF,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW;IA2F5E,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,cAAc;IAqBtB,OAAO,CAAC,qBAAqB;CAmB9B"}
@@ -0,0 +1,193 @@
1
+ /**
2
+ * @nahisaho/musubix-codegraph - Ruby Extractor
3
+ *
4
+ * AST extractor for Ruby source files
5
+ *
6
+ * @see REQ-CG-MULTILANG-008
7
+ * @see DES-CG-RUBY
8
+ * @see TSK-CG-024
9
+ */
10
+ import { BaseExtractor, } from './base-extractor.js';
11
+ /**
12
+ * Ruby language extractor
13
+ */
14
+ export class RubyExtractor extends BaseExtractor {
15
+ config = {
16
+ name: 'ruby',
17
+ extensions: ['.rb', '.rake', '.gemspec'],
18
+ treeSitterName: 'ruby',
19
+ functionNodes: ['method', 'singleton_method'],
20
+ classNodes: ['class'],
21
+ importNodes: ['call'],
22
+ interfaceNodes: [],
23
+ moduleNodes: ['module'],
24
+ };
25
+ extract(tree, filePath, sourceCode) {
26
+ const entities = [];
27
+ const relations = [];
28
+ const startTime = Date.now();
29
+ entities.push(this.createFileEntity(filePath, sourceCode));
30
+ const fileEntityId = entities[0].id;
31
+ let currentClassId = null;
32
+ let currentModuleId = null;
33
+ this.walkTree(tree.rootNode, (node) => {
34
+ switch (node.type) {
35
+ case 'module': {
36
+ const entity = this.extractModule(node, filePath);
37
+ if (entity) {
38
+ entities.push(entity);
39
+ currentModuleId = entity.id;
40
+ relations.push(this.createRelation({
41
+ type: 'contains',
42
+ sourceId: fileEntityId,
43
+ targetId: entity.id,
44
+ }));
45
+ }
46
+ break;
47
+ }
48
+ case 'class': {
49
+ const entity = this.extractClass(node, filePath);
50
+ if (entity) {
51
+ entities.push(entity);
52
+ currentClassId = entity.id;
53
+ const parentId = currentModuleId || fileEntityId;
54
+ relations.push(this.createRelation({
55
+ type: 'contains',
56
+ sourceId: parentId,
57
+ targetId: entity.id,
58
+ }));
59
+ const heritage = this.extractHeritage(node, entity.id);
60
+ relations.push(...heritage);
61
+ }
62
+ break;
63
+ }
64
+ case 'method':
65
+ case 'singleton_method': {
66
+ const entity = this.extractMethod(node, filePath);
67
+ if (entity) {
68
+ entities.push(entity);
69
+ const parentId = currentClassId || currentModuleId || fileEntityId;
70
+ relations.push(this.createRelation({
71
+ type: currentClassId ? 'member_of' : 'contains',
72
+ sourceId: entity.id,
73
+ targetId: parentId,
74
+ }));
75
+ }
76
+ break;
77
+ }
78
+ case 'call': {
79
+ // Check for require/require_relative
80
+ const methodNode = this.getChildByField(node, 'method');
81
+ if (methodNode) {
82
+ const methodName = methodNode.text;
83
+ if (methodName === 'require' || methodName === 'require_relative') {
84
+ const importRelations = this.extractRequire(node, fileEntityId);
85
+ relations.push(...importRelations);
86
+ }
87
+ }
88
+ break;
89
+ }
90
+ }
91
+ });
92
+ return {
93
+ entities,
94
+ relations,
95
+ errors: [],
96
+ stats: {
97
+ linesOfCode: sourceCode.split('\n').length,
98
+ parseTimeMs: Date.now() - startTime,
99
+ },
100
+ };
101
+ }
102
+ extractModule(node, filePath) {
103
+ const nameNode = this.getChildByField(node, 'name');
104
+ const name = nameNode?.text || '<anonymous>';
105
+ return this.createEntity({
106
+ type: 'module',
107
+ name,
108
+ filePath,
109
+ startLine: this.getLineNumber(node, 'start'),
110
+ endLine: this.getLineNumber(node, 'end'),
111
+ language: 'ruby',
112
+ docstring: this.extractRubyDocComment(node),
113
+ });
114
+ }
115
+ extractClass(node, filePath) {
116
+ const nameNode = this.getChildByField(node, 'name');
117
+ const name = nameNode?.text || '<anonymous>';
118
+ return this.createEntity({
119
+ type: 'class',
120
+ name,
121
+ filePath,
122
+ startLine: this.getLineNumber(node, 'start'),
123
+ endLine: this.getLineNumber(node, 'end'),
124
+ language: 'ruby',
125
+ docstring: this.extractRubyDocComment(node),
126
+ });
127
+ }
128
+ extractMethod(node, filePath) {
129
+ const nameNode = this.getChildByField(node, 'name');
130
+ const name = nameNode?.text || '<anonymous>';
131
+ const isSingleton = node.type === 'singleton_method';
132
+ return this.createEntity({
133
+ type: 'method',
134
+ name: isSingleton ? `self.${name}` : name,
135
+ filePath,
136
+ startLine: this.getLineNumber(node, 'start'),
137
+ endLine: this.getLineNumber(node, 'end'),
138
+ language: 'ruby',
139
+ docstring: this.extractRubyDocComment(node),
140
+ metadata: {
141
+ singleton: isSingleton,
142
+ },
143
+ });
144
+ }
145
+ extractHeritage(node, classId) {
146
+ const relations = [];
147
+ const superclassNode = this.getChildByField(node, 'superclass');
148
+ if (superclassNode) {
149
+ const name = superclassNode.text;
150
+ relations.push(this.createRelation({
151
+ type: 'extends',
152
+ sourceId: classId,
153
+ targetId: `external:${name}`,
154
+ }));
155
+ }
156
+ return relations;
157
+ }
158
+ extractRequire(node, fileEntityId) {
159
+ const relations = [];
160
+ const argsNode = this.getChildByField(node, 'arguments');
161
+ if (argsNode) {
162
+ const stringNode = this.findChildByType(argsNode, 'string');
163
+ if (stringNode) {
164
+ const path = stringNode.text.replace(/['"]/g, '');
165
+ relations.push(this.createRelation({
166
+ type: 'imports',
167
+ sourceId: fileEntityId,
168
+ targetId: `module:${path}`,
169
+ }));
170
+ }
171
+ }
172
+ return relations;
173
+ }
174
+ extractRubyDocComment(node) {
175
+ const parent = node.parent;
176
+ if (!parent)
177
+ return undefined;
178
+ const siblings = parent.children;
179
+ const nodeIndex = siblings.indexOf(node);
180
+ const docLines = [];
181
+ for (let i = nodeIndex - 1; i >= 0; i--) {
182
+ const sibling = siblings[i];
183
+ if (sibling.type === 'comment') {
184
+ docLines.unshift(sibling.text.replace(/^#\s?/, ''));
185
+ }
186
+ else {
187
+ break;
188
+ }
189
+ }
190
+ return docLines.length > 0 ? docLines.join('\n') : undefined;
191
+ }
192
+ }
193
+ //# sourceMappingURL=ruby.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ruby.js","sourceRoot":"","sources":["../../../src/parser/extractors/ruby.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EACL,aAAa,GAId,MAAM,qBAAqB,CAAC;AAE7B;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,aAAa;IACrC,MAAM,GAAmB;QAChC,IAAI,EAAE,MAAM;QACZ,UAAU,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC;QACxC,cAAc,EAAE,MAAM;QACtB,aAAa,EAAE,CAAC,QAAQ,EAAE,kBAAkB,CAAC;QAC7C,UAAU,EAAE,CAAC,OAAO,CAAC;QACrB,WAAW,EAAE,CAAC,MAAM,CAAC;QACrB,cAAc,EAAE,EAAE;QAClB,WAAW,EAAE,CAAC,QAAQ,CAAC;KACxB,CAAC;IAEF,OAAO,CAAC,IAAgB,EAAE,QAAgB,EAAE,UAAkB;QAC5D,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAe,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;QAC3D,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEpC,IAAI,cAAc,GAAkB,IAAI,CAAC;QACzC,IAAI,eAAe,GAAkB,IAAI,CAAC;QAE1C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;YACpC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;gBAClB,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBAClD,IAAI,MAAM,EAAE,CAAC;wBACX,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBACtB,eAAe,GAAG,MAAM,CAAC,EAAE,CAAC;wBAC5B,SAAS,CAAC,IAAI,CACZ,IAAI,CAAC,cAAc,CAAC;4BAClB,IAAI,EAAE,UAAU;4BAChB,QAAQ,EAAE,YAAY;4BACtB,QAAQ,EAAE,MAAM,CAAC,EAAE;yBACpB,CAAC,CACH,CAAC;oBACJ,CAAC;oBACD,MAAM;gBACR,CAAC;gBAED,KAAK,OAAO,CAAC,CAAC,CAAC;oBACb,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBACjD,IAAI,MAAM,EAAE,CAAC;wBACX,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBACtB,cAAc,GAAG,MAAM,CAAC,EAAE,CAAC;wBAC3B,MAAM,QAAQ,GAAG,eAAe,IAAI,YAAY,CAAC;wBACjD,SAAS,CAAC,IAAI,CACZ,IAAI,CAAC,cAAc,CAAC;4BAClB,IAAI,EAAE,UAAU;4BAChB,QAAQ,EAAE,QAAQ;4BAClB,QAAQ,EAAE,MAAM,CAAC,EAAE;yBACpB,CAAC,CACH,CAAC;wBACF,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;wBACvD,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;oBAC9B,CAAC;oBACD,MAAM;gBACR,CAAC;gBAED,KAAK,QAAQ,CAAC;gBACd,KAAK,kBAAkB,CAAC,CAAC,CAAC;oBACxB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBAClD,IAAI,MAAM,EAAE,CAAC;wBACX,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBACtB,MAAM,QAAQ,GAAG,cAAc,IAAI,eAAe,IAAI,YAAY,CAAC;wBACnE,SAAS,CAAC,IAAI,CACZ,IAAI,CAAC,cAAc,CAAC;4BAClB,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU;4BAC/C,QAAQ,EAAE,MAAM,CAAC,EAAE;4BACnB,QAAQ,EAAE,QAAQ;yBACnB,CAAC,CACH,CAAC;oBACJ,CAAC;oBACD,MAAM;gBACR,CAAC;gBAED,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,qCAAqC;oBACrC,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBACxD,IAAI,UAAU,EAAE,CAAC;wBACf,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC;wBACnC,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,kBAAkB,EAAE,CAAC;4BAClE,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;4BAChE,SAAS,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC;wBACrC,CAAC;oBACH,CAAC;oBACD,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,QAAQ;YACR,SAAS;YACT,MAAM,EAAE,EAAE;YACV,KAAK,EAAE;gBACL,WAAW,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM;gBAC1C,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACpC;SACF,CAAC;IACJ,CAAC;IAEO,aAAa,CAAC,IAAgB,EAAE,QAAgB;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,QAAQ,EAAE,IAAI,IAAI,aAAa,CAAC;QAE7C,OAAO,IAAI,CAAC,YAAY,CAAC;YACvB,IAAI,EAAE,QAAQ;YACd,IAAI;YACJ,QAAQ;YACR,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC;YAC5C,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC;YACxC,QAAQ,EAAE,MAAM;YAChB,SAAS,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;SAC5C,CAAC,CAAC;IACL,CAAC;IAEO,YAAY,CAAC,IAAgB,EAAE,QAAgB;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,QAAQ,EAAE,IAAI,IAAI,aAAa,CAAC;QAE7C,OAAO,IAAI,CAAC,YAAY,CAAC;YACvB,IAAI,EAAE,OAAO;YACb,IAAI;YACJ,QAAQ;YACR,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC;YAC5C,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC;YACxC,QAAQ,EAAE,MAAM;YAChB,SAAS,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;SAC5C,CAAC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,IAAgB,EAAE,QAAgB;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,QAAQ,EAAE,IAAI,IAAI,aAAa,CAAC;QAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,KAAK,kBAAkB,CAAC;QAErD,OAAO,IAAI,CAAC,YAAY,CAAC;YACvB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI;YACzC,QAAQ;YACR,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC;YAC5C,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC;YACxC,QAAQ,EAAE,MAAM;YAChB,SAAS,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;YAC3C,QAAQ,EAAE;gBACR,SAAS,EAAE,WAAW;aACvB;SACF,CAAC,CAAC;IACL,CAAC;IAEO,eAAe,CAAC,IAAgB,EAAE,OAAe;QACvD,MAAM,SAAS,GAAe,EAAE,CAAC;QACjC,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAEhE,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC;YACjC,SAAS,CAAC,IAAI,CACZ,IAAI,CAAC,cAAc,CAAC;gBAClB,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,OAAO;gBACjB,QAAQ,EAAE,YAAY,IAAI,EAAE;aAC7B,CAAC,CACH,CAAC;QACJ,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,cAAc,CAAC,IAAgB,EAAE,YAAoB;QAC3D,MAAM,SAAS,GAAe,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAEzD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC5D,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAClD,SAAS,CAAC,IAAI,CACZ,IAAI,CAAC,cAAc,CAAC;oBAClB,IAAI,EAAE,SAAS;oBACf,QAAQ,EAAE,YAAY;oBACtB,QAAQ,EAAE,UAAU,IAAI,EAAE;iBAC3B,CAAC,CACH,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,qBAAqB,CAAC,IAAgB;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAE9B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACjC,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,KAAK,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC/B,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACN,MAAM;YACR,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/D,CAAC;CACF"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @nahisaho/musubix-codegraph - Rust Extractor
3
+ *
4
+ * AST extractor for Rust source files
5
+ *
6
+ * @see REQ-CG-MULTILANG-001
7
+ * @see DES-CG-RUST
8
+ * @see TSK-CG-010
9
+ */
10
+ import type { ParseResult } from '../../types.js';
11
+ import { BaseExtractor, type LanguageConfig, type SyntaxTree } from './base-extractor.js';
12
+ /**
13
+ * Rust language extractor
14
+ */
15
+ export declare class RustExtractor extends BaseExtractor {
16
+ readonly config: LanguageConfig;
17
+ extract(tree: SyntaxTree, filePath: string, sourceCode: string): ParseResult;
18
+ private extractFunction;
19
+ private extractStruct;
20
+ private extractEnum;
21
+ private extractTrait;
22
+ private extractImpl;
23
+ private extractModule;
24
+ private extractUse;
25
+ private extractRustDocComment;
26
+ }
27
+ //# sourceMappingURL=rust.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rust.d.ts","sourceRoot":"","sources":["../../../src/parser/extractors/rust.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,gBAAgB,CAAC;AACpE,OAAO,EACL,aAAa,EACb,KAAK,cAAc,EACnB,KAAK,UAAU,EAEhB,MAAM,qBAAqB,CAAC;AAE7B;;GAEG;AACH,qBAAa,aAAc,SAAQ,aAAa;IAC9C,QAAQ,CAAC,MAAM,EAAE,cAAc,CAS7B;IAEF,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW;IA4H5E,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,WAAW;IAyCnB,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,UAAU;IAsBlB,OAAO,CAAC,qBAAqB;CAwB9B"}