eff-u-code 2.0.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 (245) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +256 -0
  3. package/bin/fuck-u-code-mcp.js +2 -0
  4. package/bin/fuck-u-code.js +2 -0
  5. package/bin/postinstall.js +53 -0
  6. package/dist/ai/index.d.ts +34 -0
  7. package/dist/ai/index.d.ts.map +1 -0
  8. package/dist/ai/index.js +227 -0
  9. package/dist/ai/index.js.map +1 -0
  10. package/dist/ai/prompts/code-review.d.ts +9 -0
  11. package/dist/ai/prompts/code-review.d.ts.map +1 -0
  12. package/dist/ai/prompts/code-review.js +61 -0
  13. package/dist/ai/prompts/code-review.js.map +1 -0
  14. package/dist/ai/providers/anthropic.d.ts +11 -0
  15. package/dist/ai/providers/anthropic.d.ts.map +1 -0
  16. package/dist/ai/providers/anthropic.js +60 -0
  17. package/dist/ai/providers/anthropic.js.map +1 -0
  18. package/dist/ai/providers/fetch.d.ts +10 -0
  19. package/dist/ai/providers/fetch.d.ts.map +1 -0
  20. package/dist/ai/providers/fetch.js +50 -0
  21. package/dist/ai/providers/fetch.js.map +1 -0
  22. package/dist/ai/providers/gemini.d.ts +12 -0
  23. package/dist/ai/providers/gemini.d.ts.map +1 -0
  24. package/dist/ai/providers/gemini.js +66 -0
  25. package/dist/ai/providers/gemini.js.map +1 -0
  26. package/dist/ai/providers/ollama.d.ts +11 -0
  27. package/dist/ai/providers/ollama.d.ts.map +1 -0
  28. package/dist/ai/providers/ollama.js +54 -0
  29. package/dist/ai/providers/ollama.js.map +1 -0
  30. package/dist/ai/providers/openai.d.ts +11 -0
  31. package/dist/ai/providers/openai.d.ts.map +1 -0
  32. package/dist/ai/providers/openai.js +52 -0
  33. package/dist/ai/providers/openai.js.map +1 -0
  34. package/dist/ai/selector.d.ts +19 -0
  35. package/dist/ai/selector.d.ts.map +1 -0
  36. package/dist/ai/selector.js +145 -0
  37. package/dist/ai/selector.js.map +1 -0
  38. package/dist/ai/types.d.ts +120 -0
  39. package/dist/ai/types.d.ts.map +1 -0
  40. package/dist/ai/types.js +6 -0
  41. package/dist/ai/types.js.map +1 -0
  42. package/dist/analyzer/concurrent-analyzer.d.ts +11 -0
  43. package/dist/analyzer/concurrent-analyzer.d.ts.map +1 -0
  44. package/dist/analyzer/concurrent-analyzer.js +67 -0
  45. package/dist/analyzer/concurrent-analyzer.js.map +1 -0
  46. package/dist/analyzer/file-discovery.d.ts +23 -0
  47. package/dist/analyzer/file-discovery.d.ts.map +1 -0
  48. package/dist/analyzer/file-discovery.js +64 -0
  49. package/dist/analyzer/file-discovery.js.map +1 -0
  50. package/dist/analyzer/index.d.ts +27 -0
  51. package/dist/analyzer/index.d.ts.map +1 -0
  52. package/dist/analyzer/index.js +64 -0
  53. package/dist/analyzer/index.js.map +1 -0
  54. package/dist/cli/commands/ai-review.d.ts +6 -0
  55. package/dist/cli/commands/ai-review.d.ts.map +1 -0
  56. package/dist/cli/commands/ai-review.js +213 -0
  57. package/dist/cli/commands/ai-review.js.map +1 -0
  58. package/dist/cli/commands/analyze.d.ts +6 -0
  59. package/dist/cli/commands/analyze.d.ts.map +1 -0
  60. package/dist/cli/commands/analyze.js +145 -0
  61. package/dist/cli/commands/analyze.js.map +1 -0
  62. package/dist/cli/commands/config.d.ts +6 -0
  63. package/dist/cli/commands/config.d.ts.map +1 -0
  64. package/dist/cli/commands/config.js +147 -0
  65. package/dist/cli/commands/config.js.map +1 -0
  66. package/dist/cli/commands/mcp-install.d.ts +9 -0
  67. package/dist/cli/commands/mcp-install.d.ts.map +1 -0
  68. package/dist/cli/commands/mcp-install.js +102 -0
  69. package/dist/cli/commands/mcp-install.js.map +1 -0
  70. package/dist/cli/index.d.ts +7 -0
  71. package/dist/cli/index.d.ts.map +1 -0
  72. package/dist/cli/index.js +69 -0
  73. package/dist/cli/index.js.map +1 -0
  74. package/dist/cli/output/ai-review-output.d.ts +20 -0
  75. package/dist/cli/output/ai-review-output.d.ts.map +1 -0
  76. package/dist/cli/output/ai-review-output.js +324 -0
  77. package/dist/cli/output/ai-review-output.js.map +1 -0
  78. package/dist/cli/output/console.d.ts +31 -0
  79. package/dist/cli/output/console.d.ts.map +1 -0
  80. package/dist/cli/output/console.js +571 -0
  81. package/dist/cli/output/console.js.map +1 -0
  82. package/dist/cli/output/html.d.ts +20 -0
  83. package/dist/cli/output/html.d.ts.map +1 -0
  84. package/dist/cli/output/html.js +339 -0
  85. package/dist/cli/output/html.js.map +1 -0
  86. package/dist/cli/output/json.d.ts +8 -0
  87. package/dist/cli/output/json.d.ts.map +1 -0
  88. package/dist/cli/output/json.js +46 -0
  89. package/dist/cli/output/json.js.map +1 -0
  90. package/dist/cli/output/markdown.d.ts +17 -0
  91. package/dist/cli/output/markdown.d.ts.map +1 -0
  92. package/dist/cli/output/markdown.js +323 -0
  93. package/dist/cli/output/markdown.js.map +1 -0
  94. package/dist/cli/output/stats.d.ts +35 -0
  95. package/dist/cli/output/stats.d.ts.map +1 -0
  96. package/dist/cli/output/stats.js +63 -0
  97. package/dist/cli/output/stats.js.map +1 -0
  98. package/dist/cli/output/terminal-markdown.d.ts +23 -0
  99. package/dist/cli/output/terminal-markdown.d.ts.map +1 -0
  100. package/dist/cli/output/terminal-markdown.js +159 -0
  101. package/dist/cli/output/terminal-markdown.js.map +1 -0
  102. package/dist/config/index.d.ts +27 -0
  103. package/dist/config/index.d.ts.map +1 -0
  104. package/dist/config/index.js +266 -0
  105. package/dist/config/index.js.map +1 -0
  106. package/dist/config/schema.d.ts +179 -0
  107. package/dist/config/schema.d.ts.map +1 -0
  108. package/dist/config/schema.js +85 -0
  109. package/dist/config/schema.js.map +1 -0
  110. package/dist/gitignore/index.d.ts +5 -0
  111. package/dist/gitignore/index.d.ts.map +1 -0
  112. package/dist/gitignore/index.js +5 -0
  113. package/dist/gitignore/index.js.map +1 -0
  114. package/dist/gitignore/parser.d.ts +32 -0
  115. package/dist/gitignore/parser.d.ts.map +1 -0
  116. package/dist/gitignore/parser.js +110 -0
  117. package/dist/gitignore/parser.js.map +1 -0
  118. package/dist/gitignore/parser.test.d.ts +2 -0
  119. package/dist/gitignore/parser.test.d.ts.map +1 -0
  120. package/dist/gitignore/parser.test.js +217 -0
  121. package/dist/gitignore/parser.test.js.map +1 -0
  122. package/dist/i18n/index.d.ts +19 -0
  123. package/dist/i18n/index.d.ts.map +1 -0
  124. package/dist/i18n/index.js +43 -0
  125. package/dist/i18n/index.js.map +1 -0
  126. package/dist/i18n/locales/en.json +320 -0
  127. package/dist/i18n/locales/ru.json +320 -0
  128. package/dist/i18n/locales/zh.json +320 -0
  129. package/dist/index.d.ts +5 -0
  130. package/dist/index.d.ts.map +1 -0
  131. package/dist/index.js +10 -0
  132. package/dist/index.js.map +1 -0
  133. package/dist/mcp/server.d.ts +9 -0
  134. package/dist/mcp/server.d.ts.map +1 -0
  135. package/dist/mcp/server.js +156 -0
  136. package/dist/mcp/server.js.map +1 -0
  137. package/dist/metrics/complexity/cognitive.d.ts +25 -0
  138. package/dist/metrics/complexity/cognitive.d.ts.map +1 -0
  139. package/dist/metrics/complexity/cognitive.js +109 -0
  140. package/dist/metrics/complexity/cognitive.js.map +1 -0
  141. package/dist/metrics/complexity/cyclomatic.d.ts +21 -0
  142. package/dist/metrics/complexity/cyclomatic.d.ts.map +1 -0
  143. package/dist/metrics/complexity/cyclomatic.js +111 -0
  144. package/dist/metrics/complexity/cyclomatic.js.map +1 -0
  145. package/dist/metrics/complexity/nesting-depth.d.ts +19 -0
  146. package/dist/metrics/complexity/nesting-depth.d.ts.map +1 -0
  147. package/dist/metrics/complexity/nesting-depth.js +97 -0
  148. package/dist/metrics/complexity/nesting-depth.js.map +1 -0
  149. package/dist/metrics/documentation/comment-ratio.d.ts +21 -0
  150. package/dist/metrics/documentation/comment-ratio.d.ts.map +1 -0
  151. package/dist/metrics/documentation/comment-ratio.js +91 -0
  152. package/dist/metrics/documentation/comment-ratio.js.map +1 -0
  153. package/dist/metrics/duplication/code-duplication.d.ts +24 -0
  154. package/dist/metrics/duplication/code-duplication.d.ts.map +1 -0
  155. package/dist/metrics/duplication/code-duplication.js +167 -0
  156. package/dist/metrics/duplication/code-duplication.js.map +1 -0
  157. package/dist/metrics/duplication/code-duplication.test.d.ts +2 -0
  158. package/dist/metrics/duplication/code-duplication.test.d.ts.map +1 -0
  159. package/dist/metrics/duplication/code-duplication.test.js +612 -0
  160. package/dist/metrics/duplication/code-duplication.test.js.map +1 -0
  161. package/dist/metrics/error/error-handling.d.ts +23 -0
  162. package/dist/metrics/error/error-handling.d.ts.map +1 -0
  163. package/dist/metrics/error/error-handling.js +164 -0
  164. package/dist/metrics/error/error-handling.js.map +1 -0
  165. package/dist/metrics/error/error-handling.test.d.ts +2 -0
  166. package/dist/metrics/error/error-handling.test.d.ts.map +1 -0
  167. package/dist/metrics/error/error-handling.test.js +349 -0
  168. package/dist/metrics/error/error-handling.test.js.map +1 -0
  169. package/dist/metrics/index.d.ts +21 -0
  170. package/dist/metrics/index.d.ts.map +1 -0
  171. package/dist/metrics/index.js +50 -0
  172. package/dist/metrics/index.js.map +1 -0
  173. package/dist/metrics/naming/convention.d.ts +22 -0
  174. package/dist/metrics/naming/convention.d.ts.map +1 -0
  175. package/dist/metrics/naming/convention.js +117 -0
  176. package/dist/metrics/naming/convention.js.map +1 -0
  177. package/dist/metrics/size/file-length.d.ts +19 -0
  178. package/dist/metrics/size/file-length.d.ts.map +1 -0
  179. package/dist/metrics/size/file-length.js +68 -0
  180. package/dist/metrics/size/file-length.js.map +1 -0
  181. package/dist/metrics/size/function-length.d.ts +20 -0
  182. package/dist/metrics/size/function-length.d.ts.map +1 -0
  183. package/dist/metrics/size/function-length.js +101 -0
  184. package/dist/metrics/size/function-length.js.map +1 -0
  185. package/dist/metrics/size/parameter-count.d.ts +19 -0
  186. package/dist/metrics/size/parameter-count.d.ts.map +1 -0
  187. package/dist/metrics/size/parameter-count.js +97 -0
  188. package/dist/metrics/size/parameter-count.js.map +1 -0
  189. package/dist/metrics/structure/structure-analysis.d.ts +24 -0
  190. package/dist/metrics/structure/structure-analysis.d.ts.map +1 -0
  191. package/dist/metrics/structure/structure-analysis.js +223 -0
  192. package/dist/metrics/structure/structure-analysis.js.map +1 -0
  193. package/dist/metrics/structure/structure-analysis.test.d.ts +2 -0
  194. package/dist/metrics/structure/structure-analysis.test.d.ts.map +1 -0
  195. package/dist/metrics/structure/structure-analysis.test.js +342 -0
  196. package/dist/metrics/structure/structure-analysis.test.js.map +1 -0
  197. package/dist/metrics/types.d.ts +71 -0
  198. package/dist/metrics/types.d.ts.map +1 -0
  199. package/dist/metrics/types.js +5 -0
  200. package/dist/metrics/types.js.map +1 -0
  201. package/dist/parser/generic-parser.d.ts +28 -0
  202. package/dist/parser/generic-parser.d.ts.map +1 -0
  203. package/dist/parser/generic-parser.js +218 -0
  204. package/dist/parser/generic-parser.js.map +1 -0
  205. package/dist/parser/index.d.ts +19 -0
  206. package/dist/parser/index.d.ts.map +1 -0
  207. package/dist/parser/index.js +52 -0
  208. package/dist/parser/index.js.map +1 -0
  209. package/dist/parser/regex-parser.d.ts +46 -0
  210. package/dist/parser/regex-parser.d.ts.map +1 -0
  211. package/dist/parser/regex-parser.js +560 -0
  212. package/dist/parser/regex-parser.js.map +1 -0
  213. package/dist/parser/tree-sitter-parser.d.ts +50 -0
  214. package/dist/parser/tree-sitter-parser.d.ts.map +1 -0
  215. package/dist/parser/tree-sitter-parser.js +707 -0
  216. package/dist/parser/tree-sitter-parser.js.map +1 -0
  217. package/dist/parser/types.d.ts +52 -0
  218. package/dist/parser/types.d.ts.map +1 -0
  219. package/dist/parser/types.js +49 -0
  220. package/dist/parser/types.js.map +1 -0
  221. package/dist/scoring/index.d.ts +14 -0
  222. package/dist/scoring/index.d.ts.map +1 -0
  223. package/dist/scoring/index.js +80 -0
  224. package/dist/scoring/index.js.map +1 -0
  225. package/dist/utils/fs.d.ts +24 -0
  226. package/dist/utils/fs.d.ts.map +1 -0
  227. package/dist/utils/fs.js +61 -0
  228. package/dist/utils/fs.js.map +1 -0
  229. package/dist/utils/logger.d.ts +13 -0
  230. package/dist/utils/logger.d.ts.map +1 -0
  231. package/dist/utils/logger.js +43 -0
  232. package/dist/utils/logger.js.map +1 -0
  233. package/dist/utils/markdown.d.ts +16 -0
  234. package/dist/utils/markdown.d.ts.map +1 -0
  235. package/dist/utils/markdown.js +303 -0
  236. package/dist/utils/markdown.js.map +1 -0
  237. package/dist/utils/progress.d.ts +24 -0
  238. package/dist/utils/progress.d.ts.map +1 -0
  239. package/dist/utils/progress.js +79 -0
  240. package/dist/utils/progress.js.map +1 -0
  241. package/dist/utils/terminal.d.ts +62 -0
  242. package/dist/utils/terminal.d.ts.map +1 -0
  243. package/dist/utils/terminal.js +207 -0
  244. package/dist/utils/terminal.js.map +1 -0
  245. package/package.json +77 -0
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Metrics system type definitions
3
+ */
4
+ import type { ParseResult } from '../parser/types.js';
5
+ /** Metric category */
6
+ export type MetricCategory = 'complexity' | 'size' | 'duplication' | 'documentation' | 'naming' | 'structure' | 'error';
7
+ /** Metric severity level */
8
+ export type Severity = 'info' | 'warning' | 'error' | 'critical';
9
+ /** Single metric result */
10
+ export interface MetricResult {
11
+ name: string;
12
+ category: MetricCategory;
13
+ value: number;
14
+ normalizedScore: number;
15
+ severity: Severity;
16
+ details?: string;
17
+ locations?: MetricLocation[];
18
+ }
19
+ /** Metric location information */
20
+ export interface MetricLocation {
21
+ filePath: string;
22
+ line: number;
23
+ column?: number;
24
+ functionName?: string;
25
+ message: string;
26
+ }
27
+ /** Metric interface */
28
+ export interface Metric {
29
+ name: string;
30
+ category: MetricCategory;
31
+ weight: number;
32
+ calculate(parseResult: ParseResult): MetricResult;
33
+ }
34
+ /** File analysis result */
35
+ export interface FileAnalysisResult {
36
+ filePath: string;
37
+ parseResult: ParseResult;
38
+ metrics: MetricResult[];
39
+ score: number;
40
+ }
41
+ /** Project analysis result */
42
+ export interface ProjectAnalysisResult {
43
+ projectPath: string;
44
+ totalFiles: number;
45
+ analyzedFiles: number;
46
+ skippedFiles: number;
47
+ fileResults: FileAnalysisResult[];
48
+ aggregatedMetrics: AggregatedMetric[];
49
+ overallScore: number;
50
+ analysisTime: number;
51
+ }
52
+ /** Aggregated metric */
53
+ export interface AggregatedMetric {
54
+ name: string;
55
+ category: MetricCategory;
56
+ average: number;
57
+ min: number;
58
+ max: number;
59
+ median: number;
60
+ weight: number;
61
+ }
62
+ /** Metric thresholds configuration */
63
+ export interface MetricThresholds {
64
+ excellent: number;
65
+ good: number;
66
+ acceptable: number;
67
+ poor: number;
68
+ }
69
+ /** Language-specific thresholds */
70
+ export type LanguageThresholds = Record<string, MetricThresholds>;
71
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/metrics/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,sBAAsB;AACtB,MAAM,MAAM,cAAc,GACtB,YAAY,GACZ,MAAM,GACN,aAAa,GACb,eAAe,GACf,QAAQ,GACR,WAAW,GACX,OAAO,CAAC;AAEZ,4BAA4B;AAC5B,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;AAEjE,2BAA2B;AAC3B,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;CAC9B;AAED,kCAAkC;AAClC,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,uBAAuB;AACvB,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,YAAY,CAAC;CACnD;AAED,2BAA2B;AAC3B,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,8BAA8B;AAC9B,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAClC,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAwB;AACxB,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,sCAAsC;AACtC,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,mCAAmC;AACnC,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Metrics system type definitions
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/metrics/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Generic parser for unsupported languages.
3
+ * Last-resort fallback that extracts basic structure using
4
+ * common cross-language patterns (function/def/fn keywords, class/struct, imports).
5
+ */
6
+ import type { Parser, ParseResult, Language } from './types.js';
7
+ /**
8
+ * Generic parser for languages without dedicated tree-sitter or regex support.
9
+ * Provides best-effort extraction using common cross-language patterns.
10
+ */
11
+ export declare class GenericParser implements Parser {
12
+ parse(filePath: string, content: string): ParseResult;
13
+ supportedLanguages(): Language[];
14
+ /** Count comment and blank lines using common comment syntax */
15
+ private countLines;
16
+ /** Extract functions using common cross-language patterns */
17
+ private extractFunctions;
18
+ /** Extract classes/structs using common cross-language patterns */
19
+ private extractClasses;
20
+ /** Extract imports using common cross-language patterns */
21
+ private extractImports;
22
+ /**
23
+ * Find end of a block using brace counting.
24
+ * Falls back to indentation-based detection for braceless languages.
25
+ */
26
+ private findBlockEnd;
27
+ }
28
+ //# sourceMappingURL=generic-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic-parser.d.ts","sourceRoot":"","sources":["../../src/parser/generic-parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAA2B,MAAM,YAAY,CAAC;AAgCzF;;;GAGG;AACH,qBAAa,aAAc,YAAW,MAAM;IAC1C,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW;IAmBrD,kBAAkB,IAAI,QAAQ,EAAE;IAIhC,gEAAgE;IAChE,OAAO,CAAC,UAAU;IAiClB,6DAA6D;IAC7D,OAAO,CAAC,gBAAgB;IA6CxB,mEAAmE;IACnE,OAAO,CAAC,cAAc;IAsCtB,2DAA2D;IAC3D,OAAO,CAAC,cAAc;IAiBtB;;;OAGG;IACH,OAAO,CAAC,YAAY;CA6BrB"}
@@ -0,0 +1,218 @@
1
+ /**
2
+ * Generic parser for unsupported languages.
3
+ * Last-resort fallback that extracts basic structure using
4
+ * common cross-language patterns (function/def/fn keywords, class/struct, imports).
5
+ */
6
+ /** Common function declaration patterns across languages */
7
+ const FUNCTION_PATTERNS = [
8
+ /^(?:export\s+)?(?:async\s+)?function\s+(\w+)/,
9
+ /^(?:pub\s+)?(?:async\s+)?fn\s+(\w+)/,
10
+ /^(?:async\s+)?def\s+(\w+)/,
11
+ /^func\s+(?:\([^)]+\)\s+)?(\w+)/,
12
+ /^(?:public|private|protected)?\s*(?:static\s+)?(?:\w+\s+)+(\w+)\s*\([^)]*\)\s*\{/,
13
+ /^(?:local\s+)?function\s+(\w+)/,
14
+ ];
15
+ /** Common class/struct declaration patterns */
16
+ const CLASS_PATTERNS = [
17
+ /^(?:export\s+)?(?:abstract\s+)?class\s+(\w+)/,
18
+ /^(?:pub\s+)?struct\s+(\w+)/,
19
+ /^type\s+(\w+)\s+struct/,
20
+ /^(?:pub\s+)?enum\s+(\w+)/,
21
+ ];
22
+ /** Common import patterns */
23
+ const IMPORT_PATTERNS = [
24
+ /^import\s+["']([^"']+)["']/,
25
+ /^import\s+.*\s+from\s+["']([^"']+)["']/,
26
+ /^from\s+(\S+)\s+import/,
27
+ /^require\s*\(\s*["']([^"']+)["']\s*\)/,
28
+ /^#include\s*[<"]([^>"]+)[>"]/,
29
+ /^use\s+(\S+)/,
30
+ /^using\s+(\S+)/,
31
+ /^import\s+"([^"]+)"/,
32
+ ];
33
+ /**
34
+ * Generic parser for languages without dedicated tree-sitter or regex support.
35
+ * Provides best-effort extraction using common cross-language patterns.
36
+ */
37
+ export class GenericParser {
38
+ parse(filePath, content) {
39
+ const lines = content.split('\n');
40
+ const totalLines = lines.length;
41
+ const { commentLines, blankLines } = this.countLines(lines);
42
+ return {
43
+ filePath,
44
+ language: 'unknown',
45
+ totalLines,
46
+ codeLines: totalLines - commentLines - blankLines,
47
+ commentLines,
48
+ blankLines,
49
+ functions: this.extractFunctions(lines),
50
+ classes: this.extractClasses(lines),
51
+ imports: this.extractImports(lines),
52
+ errors: [],
53
+ };
54
+ }
55
+ supportedLanguages() {
56
+ return ['unknown'];
57
+ }
58
+ /** Count comment and blank lines using common comment syntax */
59
+ countLines(lines) {
60
+ let commentLines = 0;
61
+ let blankLines = 0;
62
+ let inBlockComment = false;
63
+ for (const line of lines) {
64
+ const trimmed = line.trim();
65
+ if (trimmed === '') {
66
+ blankLines++;
67
+ continue;
68
+ }
69
+ if (inBlockComment) {
70
+ commentLines++;
71
+ if (trimmed.includes('*/'))
72
+ inBlockComment = false;
73
+ continue;
74
+ }
75
+ if (trimmed.startsWith('/*')) {
76
+ commentLines++;
77
+ if (!trimmed.includes('*/'))
78
+ inBlockComment = true;
79
+ continue;
80
+ }
81
+ if (trimmed.startsWith('//') || trimmed.startsWith('#') || trimmed.startsWith('--')) {
82
+ commentLines++;
83
+ }
84
+ }
85
+ return { commentLines, blankLines };
86
+ }
87
+ /** Extract functions using common cross-language patterns */
88
+ extractFunctions(lines) {
89
+ const functions = [];
90
+ let inBlockComment = false;
91
+ for (let i = 0; i < lines.length; i++) {
92
+ const trimmed = (lines[i] ?? '').trim();
93
+ if (trimmed === '')
94
+ continue;
95
+ if (inBlockComment) {
96
+ if (trimmed.includes('*/'))
97
+ inBlockComment = false;
98
+ continue;
99
+ }
100
+ if (trimmed.startsWith('/*')) {
101
+ if (!trimmed.includes('*/'))
102
+ inBlockComment = true;
103
+ continue;
104
+ }
105
+ if (trimmed.startsWith('//') || trimmed.startsWith('#') || trimmed.startsWith('--'))
106
+ continue;
107
+ for (const pattern of FUNCTION_PATTERNS) {
108
+ const match = trimmed.match(pattern);
109
+ if (match?.[1]) {
110
+ const startLine = i + 1;
111
+ const endLine = this.findBlockEnd(lines, i);
112
+ const paramMatch = /\(([^)]*)\)/.exec(trimmed);
113
+ const parameterCount = paramMatch?.[1] && paramMatch[1].trim() !== '' ? paramMatch[1].split(',').length : 0;
114
+ functions.push({
115
+ name: match[1],
116
+ startLine,
117
+ endLine,
118
+ lineCount: endLine - startLine + 1,
119
+ complexity: 1,
120
+ parameterCount,
121
+ nestingDepth: 0,
122
+ hasDocstring: false,
123
+ });
124
+ break;
125
+ }
126
+ }
127
+ }
128
+ return functions;
129
+ }
130
+ /** Extract classes/structs using common cross-language patterns */
131
+ extractClasses(lines) {
132
+ const classes = [];
133
+ let inBlockComment = false;
134
+ for (let i = 0; i < lines.length; i++) {
135
+ const trimmed = (lines[i] ?? '').trim();
136
+ if (trimmed === '')
137
+ continue;
138
+ if (inBlockComment) {
139
+ if (trimmed.includes('*/'))
140
+ inBlockComment = false;
141
+ continue;
142
+ }
143
+ if (trimmed.startsWith('/*')) {
144
+ if (!trimmed.includes('*/'))
145
+ inBlockComment = true;
146
+ continue;
147
+ }
148
+ if (trimmed.startsWith('//') || trimmed.startsWith('#') || trimmed.startsWith('--'))
149
+ continue;
150
+ for (const pattern of CLASS_PATTERNS) {
151
+ const match = trimmed.match(pattern);
152
+ if (match?.[1]) {
153
+ const startLine = i + 1;
154
+ const endLine = this.findBlockEnd(lines, i);
155
+ classes.push({
156
+ name: match[1],
157
+ startLine,
158
+ endLine,
159
+ methodCount: 0,
160
+ fieldCount: 0,
161
+ });
162
+ break;
163
+ }
164
+ }
165
+ }
166
+ return classes;
167
+ }
168
+ /** Extract imports using common cross-language patterns */
169
+ extractImports(lines) {
170
+ const imports = [];
171
+ for (const line of lines) {
172
+ const trimmed = line.trim();
173
+ for (const pattern of IMPORT_PATTERNS) {
174
+ const match = trimmed.match(pattern);
175
+ if (match?.[1]) {
176
+ imports.push(match[1]);
177
+ break;
178
+ }
179
+ }
180
+ }
181
+ return imports;
182
+ }
183
+ /**
184
+ * Find end of a block using brace counting.
185
+ * Falls back to indentation-based detection for braceless languages.
186
+ */
187
+ findBlockEnd(lines, startLine) {
188
+ let braceCount = 0;
189
+ let foundBrace = false;
190
+ for (let i = startLine; i < lines.length; i++) {
191
+ const line = lines[i] ?? '';
192
+ for (const ch of line) {
193
+ if (ch === '{') {
194
+ braceCount++;
195
+ foundBrace = true;
196
+ }
197
+ else if (ch === '}') {
198
+ braceCount--;
199
+ }
200
+ }
201
+ if (foundBrace && braceCount === 0)
202
+ return i + 1;
203
+ }
204
+ // No braces found — use indentation-based block end detection
205
+ const baseLine = lines[startLine] ?? '';
206
+ const baseIndent = baseLine.length - baseLine.trimStart().length;
207
+ for (let i = startLine + 1; i < lines.length; i++) {
208
+ const line = lines[i] ?? '';
209
+ if (line.trim() === '')
210
+ continue;
211
+ const indent = line.length - line.trimStart().length;
212
+ if (indent <= baseIndent)
213
+ return i;
214
+ }
215
+ return lines.length;
216
+ }
217
+ }
218
+ //# sourceMappingURL=generic-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic-parser.js","sourceRoot":"","sources":["../../src/parser/generic-parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,4DAA4D;AAC5D,MAAM,iBAAiB,GAAa;IAClC,8CAA8C;IAC9C,qCAAqC;IACrC,2BAA2B;IAC3B,gCAAgC;IAChC,kFAAkF;IAClF,gCAAgC;CACjC,CAAC;AAEF,+CAA+C;AAC/C,MAAM,cAAc,GAAa;IAC/B,8CAA8C;IAC9C,4BAA4B;IAC5B,wBAAwB;IACxB,0BAA0B;CAC3B,CAAC;AAEF,6BAA6B;AAC7B,MAAM,eAAe,GAAa;IAChC,4BAA4B;IAC5B,wCAAwC;IACxC,wBAAwB;IACxB,uCAAuC;IACvC,8BAA8B;IAC9B,cAAc;IACd,gBAAgB;IAChB,qBAAqB;CACtB,CAAC;AAEF;;;GAGG;AACH,MAAM,OAAO,aAAa;IACxB,KAAK,CAAC,QAAgB,EAAE,OAAe;QACrC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;QAChC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAE5D,OAAO;YACL,QAAQ;YACR,QAAQ,EAAE,SAAS;YACnB,UAAU;YACV,SAAS,EAAE,UAAU,GAAG,YAAY,GAAG,UAAU;YACjD,YAAY;YACZ,UAAU;YACV,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;YACvC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;YACnC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;YACnC,MAAM,EAAE,EAAE;SACX,CAAC;IACJ,CAAC;IAED,kBAAkB;QAChB,OAAO,CAAC,SAAS,CAAC,CAAC;IACrB,CAAC;IAED,gEAAgE;IACxD,UAAU,CAAC,KAAe;QAChC,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,cAAc,GAAG,KAAK,CAAC;QAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAE5B,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;gBACnB,UAAU,EAAE,CAAC;gBACb,SAAS;YACX,CAAC;YAED,IAAI,cAAc,EAAE,CAAC;gBACnB,YAAY,EAAE,CAAC;gBACf,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,cAAc,GAAG,KAAK,CAAC;gBACnD,SAAS;YACX,CAAC;YAED,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,YAAY,EAAE,CAAC;gBACf,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,cAAc,GAAG,IAAI,CAAC;gBACnD,SAAS;YACX,CAAC;YAED,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpF,YAAY,EAAE,CAAC;YACjB,CAAC;QACH,CAAC;QAED,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;IACtC,CAAC;IAED,6DAA6D;IACrD,gBAAgB,CAAC,KAAe;QACtC,MAAM,SAAS,GAAmB,EAAE,CAAC;QACrC,IAAI,cAAc,GAAG,KAAK,CAAC;QAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAExC,IAAI,OAAO,KAAK,EAAE;gBAAE,SAAS;YAC7B,IAAI,cAAc,EAAE,CAAC;gBACnB,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,cAAc,GAAG,KAAK,CAAC;gBACnD,SAAS;YACX,CAAC;YACD,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,cAAc,GAAG,IAAI,CAAC;gBACnD,SAAS;YACX,CAAC;YACD,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,SAAS;YAE9F,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;gBACxC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACrC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACf,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;oBACxB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;oBAC5C,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC/C,MAAM,cAAc,GAClB,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;oBAEvF,SAAS,CAAC,IAAI,CAAC;wBACb,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;wBACd,SAAS;wBACT,OAAO;wBACP,SAAS,EAAE,OAAO,GAAG,SAAS,GAAG,CAAC;wBAClC,UAAU,EAAE,CAAC;wBACb,cAAc;wBACd,YAAY,EAAE,CAAC;wBACf,YAAY,EAAE,KAAK;qBACpB,CAAC,CAAC;oBACH,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,mEAAmE;IAC3D,cAAc,CAAC,KAAe;QACpC,MAAM,OAAO,GAAgB,EAAE,CAAC;QAChC,IAAI,cAAc,GAAG,KAAK,CAAC;QAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAExC,IAAI,OAAO,KAAK,EAAE;gBAAE,SAAS;YAC7B,IAAI,cAAc,EAAE,CAAC;gBACnB,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,cAAc,GAAG,KAAK,CAAC;gBACnD,SAAS;YACX,CAAC;YACD,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,cAAc,GAAG,IAAI,CAAC;gBACnD,SAAS;YACX,CAAC;YACD,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,SAAS;YAE9F,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;gBACrC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACrC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACf,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC;oBACxB,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;oBAC5C,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;wBACd,SAAS;wBACT,OAAO;wBACP,WAAW,EAAE,CAAC;wBACd,UAAU,EAAE,CAAC;qBACd,CAAC,CAAC;oBACH,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,2DAA2D;IACnD,cAAc,CAAC,KAAe;QACpC,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;gBACtC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACrC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBACvB,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACK,YAAY,CAAC,KAAe,EAAE,SAAiB;QACrD,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,UAAU,GAAG,KAAK,CAAC;QAEvB,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5B,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;gBACtB,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;oBACf,UAAU,EAAE,CAAC;oBACb,UAAU,GAAG,IAAI,CAAC;gBACpB,CAAC;qBAAM,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;oBACtB,UAAU,EAAE,CAAC;gBACf,CAAC;YACH,CAAC;YACD,IAAI,UAAU,IAAI,UAAU,KAAK,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QACnD,CAAC;QAED,8DAA8D;QAC9D,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC;QACjE,KAAK,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;gBAAE,SAAS;YACjC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC;YACrD,IAAI,MAAM,IAAI,UAAU;gBAAE,OAAO,CAAC,CAAC;QACrC,CAAC;QAED,OAAO,KAAK,CAAC,MAAM,CAAC;IACtB,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Parser factory
3
+ */
4
+ import { type Parser, type Language } from './types.js';
5
+ /**
6
+ * Create a parser for the specified language.
7
+ * Attempts tree-sitter AST parsing first, falls back to regex-based parsing on failure.
8
+ */
9
+ export declare function createParser(language: Language): Parser;
10
+ /**
11
+ * Get all supported languages
12
+ */
13
+ export declare function getSupportedLanguages(): Language[];
14
+ /**
15
+ * Get display names of all supported languages as a comma-separated string
16
+ */
17
+ export declare function getSupportedLanguageNames(): string;
18
+ export { LANGUAGE_DISPLAY_NAMES, type Parser, type ParseResult, type Language } from './types.js';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAA0B,KAAK,MAAM,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAKhF;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAsBvD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,QAAQ,EAAE,CAElD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,CAIlD;AAED,OAAO,EAAE,sBAAsB,EAAE,KAAK,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Parser factory
3
+ */
4
+ import { TreeSitterParser, getLanguageConfig } from './tree-sitter-parser.js';
5
+ import { RegexParser } from './regex-parser.js';
6
+ import { GenericParser } from './generic-parser.js';
7
+ import { logger } from '../utils/logger.js';
8
+ import { LANGUAGE_DISPLAY_NAMES } from './types.js';
9
+ /** Cache for created parsers */
10
+ const parserCache = new Map();
11
+ /**
12
+ * Create a parser for the specified language.
13
+ * Attempts tree-sitter AST parsing first, falls back to regex-based parsing on failure.
14
+ */
15
+ export function createParser(language) {
16
+ const cached = parserCache.get(language);
17
+ if (cached)
18
+ return cached;
19
+ const config = getLanguageConfig(language);
20
+ if (config) {
21
+ try {
22
+ const parser = new TreeSitterParser(language, config);
23
+ parserCache.set(language, parser);
24
+ return parser;
25
+ }
26
+ catch (err) {
27
+ logger.warn(`Tree-sitter init failed for ${language}, falling back to regex parser: ${err}`);
28
+ }
29
+ const fallback = new RegexParser(language);
30
+ parserCache.set(language, fallback);
31
+ return fallback;
32
+ }
33
+ const genericParser = new GenericParser();
34
+ parserCache.set(language, genericParser);
35
+ return genericParser;
36
+ }
37
+ /**
38
+ * Get all supported languages
39
+ */
40
+ export function getSupportedLanguages() {
41
+ return Object.keys(LANGUAGE_DISPLAY_NAMES).filter((k) => k !== 'unknown');
42
+ }
43
+ /**
44
+ * Get display names of all supported languages as a comma-separated string
45
+ */
46
+ export function getSupportedLanguageNames() {
47
+ return getSupportedLanguages()
48
+ .map((lang) => LANGUAGE_DISPLAY_NAMES[lang])
49
+ .join(', ');
50
+ }
51
+ export { LANGUAGE_DISPLAY_NAMES } from './types.js';
52
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAA8B,MAAM,YAAY,CAAC;AAEhF,gCAAgC;AAChC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAoB,CAAC;AAEhD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,QAAkB;IAC7C,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACtD,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAClC,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,+BAA+B,QAAQ,mCAAmC,GAAG,EAAE,CAAC,CAAC;QAC/F,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC3C,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACpC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAC1C,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACzC,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAe,CAAC;AAC1F,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB;IACvC,OAAO,qBAAqB,EAAE;SAC3B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,sBAAsB,CAAC,IAAoC,CAAC,CAAC;SAC3E,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,OAAO,EAAE,sBAAsB,EAAgD,MAAM,YAAY,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Regex-based parser fallback.
3
+ * Used when tree-sitter WASM loading fails for a supported language.
4
+ */
5
+ import type { Parser, ParseResult, Language } from './types.js';
6
+ /**
7
+ * Regex-based parser fallback.
8
+ * Provides approximate code analysis when tree-sitter WASM is unavailable.
9
+ */
10
+ export declare class RegexParser implements Parser {
11
+ private language;
12
+ private config;
13
+ private complexityRegexes;
14
+ constructor(language: Language);
15
+ parse(filePath: string, content: string): ParseResult;
16
+ supportedLanguages(): Language[];
17
+ /** Count comment, blank, and code lines */
18
+ private countLines;
19
+ /** Extract functions from brace-delimited languages */
20
+ private extractFunctionsBrace;
21
+ /** Extract classes from brace-delimited languages */
22
+ private extractClassesBrace;
23
+ /** Count methods and fields within a brace-delimited class body */
24
+ private countClassMembers;
25
+ /**
26
+ * Extract functions from indent-based languages (Python).
27
+ * Uses indentation level to determine function boundaries.
28
+ */
29
+ private extractFunctionsIndent;
30
+ /**
31
+ * Extract classes from indent-based languages (Python).
32
+ * Uses indentation level to determine class boundaries and count members.
33
+ */
34
+ private extractClassesIndent;
35
+ /** Extract import statements */
36
+ private extractImports;
37
+ /** Calculate complexity contribution of a single line */
38
+ private calculateLineComplexity;
39
+ /** Count parameters from a function declaration line */
40
+ private countParameters;
41
+ /** Check if a function has a docstring (comment above or Python body docstring) */
42
+ private hasDocstring;
43
+ /** Find end of a brace-delimited block */
44
+ private findBlockEnd;
45
+ }
46
+ //# sourceMappingURL=regex-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex-parser.d.ts","sourceRoot":"","sources":["../../src/parser/regex-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAA2B,MAAM,YAAY,CAAC;AA2MzF;;;GAGG;AACH,qBAAa,WAAY,YAAW,MAAM;IACxC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,iBAAiB,CAAW;gBAExB,QAAQ,EAAE,QAAQ;IAO9B,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW;IA2BrD,kBAAkB,IAAI,QAAQ,EAAE;IAIhC,2CAA2C;IAC3C,OAAO,CAAC,UAAU;IA2ClB,uDAAuD;IACvD,OAAO,CAAC,qBAAqB;IA2E7B,qDAAqD;IACrD,OAAO,CAAC,mBAAmB;IA2B3B,mEAAmE;IACnE,OAAO,CAAC,iBAAiB;IAmCzB;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAuD9B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IA8D5B,gCAAgC;IAChC,OAAO,CAAC,cAAc;IAiBtB,yDAAyD;IACzD,OAAO,CAAC,uBAAuB;IAc/B,wDAAwD;IACxD,OAAO,CAAC,eAAe;IAQvB,mFAAmF;IACnF,OAAO,CAAC,YAAY;IA2BpB,0CAA0C;IAC1C,OAAO,CAAC,YAAY;CAuBrB"}