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,560 @@
1
+ /**
2
+ * Regex-based parser fallback.
3
+ * Used when tree-sitter WASM loading fails for a supported language.
4
+ */
5
+ const compiledComplexityRegexCache = new Map();
6
+ function getCompiledComplexityRegex(config, language) {
7
+ const cached = compiledComplexityRegexCache.get(language);
8
+ if (cached)
9
+ return cached;
10
+ const allKeywords = [...config.branchKeywords, ...config.loopKeywords];
11
+ const regexes = allKeywords.map((kw) => new RegExp(`\\b${kw.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\b`, 'g'));
12
+ compiledComplexityRegexCache.set(language, regexes);
13
+ return regexes;
14
+ }
15
+ const LANGUAGE_CONFIGS = {
16
+ go: {
17
+ functionPatterns: [/^func\s+(?:\([^)]+\)\s+)?(\w+)\s*\(/],
18
+ classPatterns: [/^type\s+(\w+)\s+struct\s*\{/],
19
+ commentPatterns: {
20
+ single: /^\s*\/\//,
21
+ multiStart: /\/\*/,
22
+ multiEnd: /\*\//,
23
+ },
24
+ branchKeywords: ['if', 'else if', 'case', 'default'],
25
+ loopKeywords: ['for', 'range'],
26
+ methodPatterns: [/^func\s+\([^)]+\)\s+(\w+)\s*\(/],
27
+ fieldPatterns: [/^\s+\w+\s+\S+/],
28
+ },
29
+ javascript: {
30
+ functionPatterns: [
31
+ /^(?:async\s+)?function\s+(\w+)\s*\(/,
32
+ /^(?:const|let|var)\s+(\w+)\s*=\s*(?:async\s+)?(?:function|\([^)]*\)\s*=>|\w+\s*=>)/,
33
+ /^(\w+)\s*\([^)]*\)\s*\{/,
34
+ ],
35
+ classPatterns: [/^class\s+(\w+)/],
36
+ commentPatterns: {
37
+ single: /^\s*\/\//,
38
+ multiStart: /\/\*/,
39
+ multiEnd: /\*\//,
40
+ },
41
+ branchKeywords: ['if', 'else if', 'case', 'default', '?', '&&', '||', '??'],
42
+ loopKeywords: ['for', 'while', 'do'],
43
+ methodPatterns: [/^\s+(?:async\s+)?(\w+)\s*\([^)]*\)\s*\{/],
44
+ fieldPatterns: [/^\s+(\w+)\s*[=;]/],
45
+ },
46
+ typescript: {
47
+ functionPatterns: [
48
+ /^(?:async\s+)?function\s+(\w+)\s*[<(]/,
49
+ /^(?:const|let|var)\s+(\w+)\s*(?::\s*[^=]+)?\s*=\s*(?:async\s+)?(?:function|\([^)]*\)\s*=>|\w+\s*=>)/,
50
+ /^(?:public|private|protected)?\s*(?:async\s+)?(\w+)\s*\([^)]*\)\s*(?::\s*[^{]+)?\s*\{/,
51
+ ],
52
+ classPatterns: [/^(?:export\s+)?(?:abstract\s+)?class\s+(\w+)/],
53
+ commentPatterns: {
54
+ single: /^\s*\/\//,
55
+ multiStart: /\/\*/,
56
+ multiEnd: /\*\//,
57
+ },
58
+ branchKeywords: ['if', 'else if', 'case', 'default', '?', '&&', '||', '??'],
59
+ loopKeywords: ['for', 'while', 'do'],
60
+ methodPatterns: [/^\s+(?:public|private|protected)?\s*(?:async\s+)?(\w+)\s*\([^)]*\)/],
61
+ fieldPatterns: [/^\s+(?:public|private|protected)?\s*(?:readonly\s+)?(\w+)\s*[?:;=]/],
62
+ },
63
+ python: {
64
+ functionPatterns: [/^(?:async\s+)?def\s+(\w+)\s*\(/],
65
+ classPatterns: [/^class\s+(\w+)/],
66
+ commentPatterns: {
67
+ single: /^\s*#/,
68
+ multiStart: /^"""/,
69
+ multiEnd: /"""$/,
70
+ },
71
+ branchKeywords: ['if', 'elif', 'else', 'and', 'or'],
72
+ loopKeywords: ['for', 'while'],
73
+ indentBased: true,
74
+ methodPatterns: [/^\s+(?:async\s+)?def\s+(\w+)\s*\(/],
75
+ fieldPatterns: [/^\s+self\.(\w+)\s*=/],
76
+ },
77
+ java: {
78
+ functionPatterns: [
79
+ /^(?:public|private|protected)?\s*(?:static\s+)?(?:final\s+)?(?:\w+(?:<[^>]+>)?)\s+(\w+)\s*\(/,
80
+ ],
81
+ classPatterns: [/^(?:public\s+)?(?:abstract\s+)?(?:final\s+)?class\s+(\w+)/],
82
+ commentPatterns: {
83
+ single: /^\s*\/\//,
84
+ multiStart: /\/\*/,
85
+ multiEnd: /\*\//,
86
+ },
87
+ branchKeywords: ['if', 'else if', 'case', 'default', '?', '&&', '||'],
88
+ loopKeywords: ['for', 'while', 'do'],
89
+ methodPatterns: [
90
+ /^\s+(?:public|private|protected)?\s*(?:static\s+)?(?:\w+(?:<[^>]+>)?)\s+(\w+)\s*\(/,
91
+ ],
92
+ fieldPatterns: [
93
+ /^\s+(?:public|private|protected)?\s*(?:static\s+)?(?:final\s+)?(?:\w+(?:<[^>]+>)?)\s+(\w+)\s*[;=]/,
94
+ ],
95
+ },
96
+ c: {
97
+ functionPatterns: [/^(?:\w+\s+)+(\w+)\s*\([^)]*\)\s*\{/],
98
+ classPatterns: [/^(?:typedef\s+)?struct\s+(\w+)/],
99
+ commentPatterns: {
100
+ single: /^\s*\/\//,
101
+ multiStart: /\/\*/,
102
+ multiEnd: /\*\//,
103
+ },
104
+ branchKeywords: ['if', 'else if', 'case', 'default', '?', '&&', '||'],
105
+ loopKeywords: ['for', 'while', 'do'],
106
+ fieldPatterns: [/^\s+\w+\s+\w+\s*;/],
107
+ },
108
+ cpp: {
109
+ functionPatterns: [
110
+ /^(?:virtual\s+)?(?:\w+(?:<[^>]+>)?\s+)+(\w+)\s*\([^)]*\)\s*(?:const\s*)?(?:override\s*)?\{/,
111
+ ],
112
+ classPatterns: [/^(?:template\s*<[^>]+>\s*)?class\s+(\w+)/],
113
+ commentPatterns: {
114
+ single: /^\s*\/\//,
115
+ multiStart: /\/\*/,
116
+ multiEnd: /\*\//,
117
+ },
118
+ branchKeywords: ['if', 'else if', 'case', 'default', '?', '&&', '||'],
119
+ loopKeywords: ['for', 'while', 'do'],
120
+ methodPatterns: [
121
+ /^\s+(?:virtual\s+)?(?:\w+(?:<[^>]+>)?\s+)+(\w+)\s*\([^)]*\)\s*(?:const\s*)?(?:override\s*)?\{/,
122
+ ],
123
+ fieldPatterns: [/^\s+\w+\s+\w+\s*;/],
124
+ },
125
+ rust: {
126
+ functionPatterns: [/^(?:pub\s+)?(?:async\s+)?fn\s+(\w+)/],
127
+ classPatterns: [/^(?:pub\s+)?struct\s+(\w+)/, /^(?:pub\s+)?enum\s+(\w+)/],
128
+ commentPatterns: {
129
+ single: /^\s*\/\//,
130
+ multiStart: /\/\*/,
131
+ multiEnd: /\*\//,
132
+ },
133
+ branchKeywords: ['if', 'else if', 'match', '=>', '&&', '||'],
134
+ loopKeywords: ['for', 'while', 'loop'],
135
+ fieldPatterns: [/^\s+(?:pub\s+)?\w+\s*:/],
136
+ },
137
+ csharp: {
138
+ functionPatterns: [
139
+ /^(?:public|private|protected|internal)?\s*(?:static\s+)?(?:async\s+)?(?:\w+(?:<[^>]+>)?)\s+(\w+)\s*\(/,
140
+ ],
141
+ classPatterns: [/^(?:public\s+)?(?:abstract\s+)?(?:sealed\s+)?class\s+(\w+)/],
142
+ commentPatterns: {
143
+ single: /^\s*\/\//,
144
+ multiStart: /\/\*/,
145
+ multiEnd: /\*\//,
146
+ },
147
+ branchKeywords: ['if', 'else if', 'case', 'default', '?', '&&', '||', '??'],
148
+ loopKeywords: ['for', 'foreach', 'while', 'do'],
149
+ methodPatterns: [
150
+ /^\s+(?:public|private|protected|internal)?\s*(?:static\s+)?(?:async\s+)?(?:\w+(?:<[^>]+>)?)\s+(\w+)\s*\(/,
151
+ ],
152
+ fieldPatterns: [
153
+ /^\s+(?:public|private|protected|internal)?\s*(?:static\s+)?(?:\w+(?:<[^>]+>)?)\s+(\w+)\s*[;=]/,
154
+ ],
155
+ },
156
+ lua: {
157
+ functionPatterns: [
158
+ /^(?:local\s+)?function\s+(\w+(?:\.\w+)*)\s*\(/,
159
+ /^(\w+)\s*=\s*function\s*\(/,
160
+ ],
161
+ classPatterns: [],
162
+ commentPatterns: {
163
+ single: /^\s*--(?!\[)/,
164
+ multiStart: /--\[\[/,
165
+ multiEnd: /\]\]/,
166
+ },
167
+ branchKeywords: ['if', 'elseif', 'and', 'or'],
168
+ loopKeywords: ['for', 'while', 'repeat'],
169
+ },
170
+ };
171
+ /** Common import patterns shared across languages */
172
+ const IMPORT_PATTERNS = [
173
+ /^import\s+["']([^"']+)["']/,
174
+ /^import\s+.*\s+from\s+["']([^"']+)["']/,
175
+ /^from\s+(\S+)\s+import/,
176
+ /^require\s*\(\s*["']([^"']+)["']\s*\)/,
177
+ /^#include\s*[<"]([^>"]+)[>"]/,
178
+ /^use\s+(\S+)/,
179
+ /^using\s+(\S+)/,
180
+ ];
181
+ /**
182
+ * Regex-based parser fallback.
183
+ * Provides approximate code analysis when tree-sitter WASM is unavailable.
184
+ */
185
+ export class RegexParser {
186
+ language;
187
+ config;
188
+ complexityRegexes;
189
+ constructor(language) {
190
+ this.language = language;
191
+ this.config =
192
+ LANGUAGE_CONFIGS[language] ?? LANGUAGE_CONFIGS.javascript ?? {};
193
+ this.complexityRegexes = getCompiledComplexityRegex(this.config, language);
194
+ }
195
+ parse(filePath, content) {
196
+ const lines = content.split('\n');
197
+ const totalLines = lines.length;
198
+ const { commentLines, blankLines, codeLines } = this.countLines(lines);
199
+ const functions = this.config.indentBased
200
+ ? this.extractFunctionsIndent(lines)
201
+ : this.extractFunctionsBrace(lines);
202
+ const classes = this.config.indentBased
203
+ ? this.extractClassesIndent(lines)
204
+ : this.extractClassesBrace(lines);
205
+ const imports = this.extractImports(lines);
206
+ return {
207
+ filePath,
208
+ language: this.language,
209
+ totalLines,
210
+ codeLines,
211
+ commentLines,
212
+ blankLines,
213
+ functions,
214
+ classes,
215
+ imports,
216
+ errors: [],
217
+ };
218
+ }
219
+ supportedLanguages() {
220
+ return Object.keys(LANGUAGE_CONFIGS);
221
+ }
222
+ /** Count comment, blank, and code lines */
223
+ countLines(lines) {
224
+ let commentLines = 0;
225
+ let blankLines = 0;
226
+ let inBlockComment = false;
227
+ for (const line of lines) {
228
+ const trimmed = line.trim();
229
+ if (trimmed === '') {
230
+ blankLines++;
231
+ continue;
232
+ }
233
+ if (inBlockComment) {
234
+ commentLines++;
235
+ if (this.config.commentPatterns.multiEnd.test(trimmed)) {
236
+ inBlockComment = false;
237
+ }
238
+ continue;
239
+ }
240
+ if (this.config.commentPatterns.multiStart.test(trimmed)) {
241
+ commentLines++;
242
+ if (!this.config.commentPatterns.multiEnd.test(trimmed)) {
243
+ inBlockComment = true;
244
+ }
245
+ continue;
246
+ }
247
+ if (this.config.commentPatterns.single.test(trimmed)) {
248
+ commentLines++;
249
+ continue;
250
+ }
251
+ }
252
+ const codeLines = lines.length - commentLines - blankLines;
253
+ return { commentLines, blankLines, codeLines };
254
+ }
255
+ /** Extract functions from brace-delimited languages */
256
+ extractFunctionsBrace(lines) {
257
+ const functions = [];
258
+ const braceStack = [];
259
+ let currentFunction = null;
260
+ for (let i = 0; i < lines.length; i++) {
261
+ const line = lines[i] ?? '';
262
+ const trimmed = line.trim();
263
+ if (this.config.commentPatterns.single.test(trimmed) ||
264
+ this.config.commentPatterns.multiStart.test(trimmed)) {
265
+ continue;
266
+ }
267
+ if (!currentFunction) {
268
+ for (const pattern of this.config.functionPatterns) {
269
+ const match = trimmed.match(pattern);
270
+ if (match?.[1]) {
271
+ currentFunction = {
272
+ name: match[1],
273
+ startLine: i + 1,
274
+ complexity: 1,
275
+ parameterCount: this.countParameters(trimmed),
276
+ nestingDepth: 0,
277
+ hasDocstring: this.hasDocstring(lines, i),
278
+ };
279
+ break;
280
+ }
281
+ }
282
+ }
283
+ let openBraces = 0;
284
+ let closeBraces = 0;
285
+ for (const ch of line) {
286
+ if (ch === '{')
287
+ openBraces++;
288
+ else if (ch === '}')
289
+ closeBraces++;
290
+ }
291
+ for (let j = 0; j < openBraces; j++) {
292
+ braceStack.push(i);
293
+ }
294
+ for (let j = 0; j < closeBraces; j++) {
295
+ braceStack.pop();
296
+ }
297
+ if (currentFunction) {
298
+ currentFunction.complexity =
299
+ (currentFunction.complexity ?? 1) + this.calculateLineComplexity(trimmed);
300
+ currentFunction.nestingDepth = Math.max(currentFunction.nestingDepth ?? 0, braceStack.length);
301
+ if (braceStack.length === 0 && closeBraces > 0) {
302
+ functions.push({
303
+ name: currentFunction.name ?? 'anonymous',
304
+ startLine: currentFunction.startLine ?? i + 1,
305
+ endLine: i + 1,
306
+ lineCount: i + 1 - (currentFunction.startLine ?? i + 1) + 1,
307
+ complexity: currentFunction.complexity ?? 1,
308
+ parameterCount: currentFunction.parameterCount ?? 0,
309
+ nestingDepth: currentFunction.nestingDepth ?? 0,
310
+ hasDocstring: currentFunction.hasDocstring ?? false,
311
+ });
312
+ currentFunction = null;
313
+ }
314
+ }
315
+ }
316
+ return functions;
317
+ }
318
+ /** Extract classes from brace-delimited languages */
319
+ extractClassesBrace(lines) {
320
+ const classes = [];
321
+ for (let i = 0; i < lines.length; i++) {
322
+ const line = lines[i] ?? '';
323
+ const trimmed = line.trim();
324
+ for (const pattern of this.config.classPatterns) {
325
+ const match = trimmed.match(pattern);
326
+ if (match?.[1]) {
327
+ const endLine = this.findBlockEnd(lines, i);
328
+ const { methodCount, fieldCount } = this.countClassMembers(lines, i + 1, endLine - 1);
329
+ classes.push({
330
+ name: match[1],
331
+ startLine: i + 1,
332
+ endLine,
333
+ methodCount,
334
+ fieldCount,
335
+ });
336
+ break;
337
+ }
338
+ }
339
+ }
340
+ return classes;
341
+ }
342
+ /** Count methods and fields within a brace-delimited class body */
343
+ countClassMembers(lines, startIdx, endIdx) {
344
+ let methodCount = 0;
345
+ let fieldCount = 0;
346
+ const methodPatterns = this.config.methodPatterns ?? this.config.functionPatterns;
347
+ const fieldPatterns = this.config.fieldPatterns ?? [];
348
+ for (let i = startIdx; i < endIdx && i < lines.length; i++) {
349
+ const trimmed = (lines[i] ?? '').trim();
350
+ if (trimmed === '' || this.config.commentPatterns.single.test(trimmed))
351
+ continue;
352
+ let matched = false;
353
+ for (const pattern of methodPatterns) {
354
+ if (pattern.test(trimmed)) {
355
+ methodCount++;
356
+ matched = true;
357
+ break;
358
+ }
359
+ }
360
+ if (!matched) {
361
+ for (const pattern of fieldPatterns) {
362
+ if (pattern.test(trimmed)) {
363
+ fieldCount++;
364
+ break;
365
+ }
366
+ }
367
+ }
368
+ }
369
+ return { methodCount, fieldCount };
370
+ }
371
+ /**
372
+ * Extract functions from indent-based languages (Python).
373
+ * Uses indentation level to determine function boundaries.
374
+ */
375
+ extractFunctionsIndent(lines) {
376
+ const functions = [];
377
+ for (let i = 0; i < lines.length; i++) {
378
+ const line = lines[i] ?? '';
379
+ const trimmed = line.trim();
380
+ for (const pattern of this.config.functionPatterns) {
381
+ const match = trimmed.match(pattern);
382
+ if (match?.[1]) {
383
+ const defIndent = line.length - line.trimStart().length;
384
+ const startLine = i + 1;
385
+ let endLine = i + 1;
386
+ let complexity = 1;
387
+ let nestingDepth = 0;
388
+ // Scan body: lines with greater indentation or blank lines within the block
389
+ for (let j = i + 1; j < lines.length; j++) {
390
+ const bodyLine = lines[j] ?? '';
391
+ const bodyTrimmed = bodyLine.trim();
392
+ if (bodyTrimmed === '') {
393
+ endLine = j + 1;
394
+ continue;
395
+ }
396
+ const bodyIndent = bodyLine.length - bodyLine.trimStart().length;
397
+ if (bodyIndent <= defIndent)
398
+ break;
399
+ endLine = j + 1;
400
+ complexity += this.calculateLineComplexity(bodyTrimmed);
401
+ // Approximate nesting by indentation depth relative to function body
402
+ const relativeIndent = Math.floor((bodyIndent - defIndent - 4) / 4);
403
+ if (relativeIndent > nestingDepth)
404
+ nestingDepth = relativeIndent;
405
+ }
406
+ functions.push({
407
+ name: match[1],
408
+ startLine,
409
+ endLine,
410
+ lineCount: endLine - startLine + 1,
411
+ complexity,
412
+ parameterCount: this.countParameters(trimmed),
413
+ nestingDepth: Math.max(0, nestingDepth),
414
+ hasDocstring: this.hasDocstring(lines, i),
415
+ });
416
+ break;
417
+ }
418
+ }
419
+ }
420
+ return functions;
421
+ }
422
+ /**
423
+ * Extract classes from indent-based languages (Python).
424
+ * Uses indentation level to determine class boundaries and count members.
425
+ */
426
+ extractClassesIndent(lines) {
427
+ const classes = [];
428
+ for (let i = 0; i < lines.length; i++) {
429
+ const line = lines[i] ?? '';
430
+ const trimmed = line.trim();
431
+ for (const pattern of this.config.classPatterns) {
432
+ const match = trimmed.match(pattern);
433
+ if (match?.[1]) {
434
+ const classIndent = line.length - line.trimStart().length;
435
+ const startLine = i + 1;
436
+ let endLine = i + 1;
437
+ let methodCount = 0;
438
+ let fieldCount = 0;
439
+ const methodPatterns = this.config.methodPatterns ?? [];
440
+ const fieldPatterns = this.config.fieldPatterns ?? [];
441
+ for (let j = i + 1; j < lines.length; j++) {
442
+ const bodyLine = lines[j] ?? '';
443
+ const bodyTrimmed = bodyLine.trim();
444
+ if (bodyTrimmed === '') {
445
+ endLine = j + 1;
446
+ continue;
447
+ }
448
+ const bodyIndent = bodyLine.length - bodyLine.trimStart().length;
449
+ if (bodyIndent <= classIndent)
450
+ break;
451
+ endLine = j + 1;
452
+ for (const mp of methodPatterns) {
453
+ if (mp.test(bodyTrimmed)) {
454
+ methodCount++;
455
+ break;
456
+ }
457
+ }
458
+ for (const fp of fieldPatterns) {
459
+ if (fp.test(bodyTrimmed)) {
460
+ fieldCount++;
461
+ break;
462
+ }
463
+ }
464
+ }
465
+ classes.push({
466
+ name: match[1],
467
+ startLine,
468
+ endLine,
469
+ methodCount,
470
+ fieldCount,
471
+ });
472
+ break;
473
+ }
474
+ }
475
+ }
476
+ return classes;
477
+ }
478
+ /** Extract import statements */
479
+ extractImports(lines) {
480
+ const imports = [];
481
+ for (const line of lines) {
482
+ const trimmed = line.trim();
483
+ for (const pattern of IMPORT_PATTERNS) {
484
+ const match = trimmed.match(pattern);
485
+ if (match?.[1]) {
486
+ imports.push(match[1]);
487
+ break;
488
+ }
489
+ }
490
+ }
491
+ return imports;
492
+ }
493
+ /** Calculate complexity contribution of a single line */
494
+ calculateLineComplexity(line) {
495
+ let complexity = 0;
496
+ for (const regex of this.complexityRegexes) {
497
+ regex.lastIndex = 0;
498
+ const matches = line.match(regex);
499
+ if (matches) {
500
+ complexity += matches.length;
501
+ }
502
+ }
503
+ return complexity;
504
+ }
505
+ /** Count parameters from a function declaration line */
506
+ countParameters(line) {
507
+ const match = /\(([^)]*)\)/.exec(line);
508
+ if (!match?.[1] || match[1].trim() === '') {
509
+ return 0;
510
+ }
511
+ return match[1].split(',').length;
512
+ }
513
+ /** Check if a function has a docstring (comment above or Python body docstring) */
514
+ hasDocstring(lines, functionLine) {
515
+ // Check comment directly above the function
516
+ if (functionLine > 0) {
517
+ const prevLine = lines[functionLine - 1]?.trim() ?? '';
518
+ if (prevLine.startsWith('/**') ||
519
+ prevLine.startsWith('///') ||
520
+ prevLine.startsWith('//') ||
521
+ prevLine.startsWith('"""') ||
522
+ prevLine.startsWith("'''") ||
523
+ prevLine.startsWith('--[')) {
524
+ return true;
525
+ }
526
+ }
527
+ // Python: check for docstring as first statement in function body
528
+ if (this.config.indentBased && functionLine + 1 < lines.length) {
529
+ const nextLine = lines[functionLine + 1]?.trim() ?? '';
530
+ if (nextLine.startsWith('"""') || nextLine.startsWith("'''")) {
531
+ return true;
532
+ }
533
+ }
534
+ return false;
535
+ }
536
+ /** Find end of a brace-delimited block */
537
+ findBlockEnd(lines, startLine) {
538
+ let braceCount = 0;
539
+ let started = false;
540
+ for (let i = startLine; i < lines.length; i++) {
541
+ const line = lines[i] ?? '';
542
+ let openBraces = 0;
543
+ let closeBraces = 0;
544
+ for (const ch of line) {
545
+ if (ch === '{')
546
+ openBraces++;
547
+ else if (ch === '}')
548
+ closeBraces++;
549
+ }
550
+ if (openBraces > 0)
551
+ started = true;
552
+ braceCount += openBraces - closeBraces;
553
+ if (started && braceCount === 0) {
554
+ return i + 1;
555
+ }
556
+ }
557
+ return lines.length;
558
+ }
559
+ }
560
+ //# sourceMappingURL=regex-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regex-parser.js","sourceRoot":"","sources":["../../src/parser/regex-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Tree-sitter AST-based parser
3
+ * Uses web-tree-sitter WASM bindings for precise code analysis
4
+ */
5
+ import type { Parser as IParser, ParseResult, Language } from './types.js';
6
+ /** Per-language AST node type configuration */
7
+ interface LanguageQueryConfig {
8
+ wasmFile: string;
9
+ functionNodeTypes: string[];
10
+ classNodeTypes: string[];
11
+ importNodeTypes: string[];
12
+ complexityNodeTypes: string[];
13
+ nestingNodeTypes: string[];
14
+ commentNodeTypes: string[];
15
+ functionNameField: string;
16
+ functionParamsField: string;
17
+ functionBodyField: string;
18
+ classNameField: string;
19
+ classBodyField: string;
20
+ methodNodeTypes: string[];
21
+ fieldNodeTypes: string[];
22
+ }
23
+ /**
24
+ * Get the LanguageQueryConfig for a given language, or null if unsupported
25
+ */
26
+ export declare function getLanguageConfig(language: Language): LanguageQueryConfig | null;
27
+ /**
28
+ * Tree-sitter AST-based parser.
29
+ * Provides precise function/class extraction, complexity calculation,
30
+ * and nesting depth analysis via real AST traversal.
31
+ */
32
+ export declare class TreeSitterParser implements IParser {
33
+ private language;
34
+ private config;
35
+ constructor(language: Language, config: LanguageQueryConfig);
36
+ parse(filePath: string, content: string): Promise<ParseResult>;
37
+ supportedLanguages(): Language[];
38
+ private countLines;
39
+ private extractImports;
40
+ private extractFunctions;
41
+ private extractFunctionName;
42
+ private extractClasses;
43
+ private countParameters;
44
+ private hasDocstring;
45
+ private calculateComplexity;
46
+ private calculateMaxNesting;
47
+ private collectNodesByTypes;
48
+ }
49
+ export {};
50
+ //# sourceMappingURL=tree-sitter-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-sitter-parser.d.ts","sourceRoot":"","sources":["../../src/parser/tree-sitter-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,MAAM,IAAI,OAAO,EAAE,WAAW,EAAE,QAAQ,EAA2B,MAAM,YAAY,CAAC;AAIpG,+CAA+C;AAC/C,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAmXD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,mBAAmB,GAAG,IAAI,CAEhF;AAED;;;;GAIG;AACH,qBAAa,gBAAiB,YAAW,OAAO;IAC9C,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,MAAM,CAAsB;gBAExB,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,mBAAmB;IAKrD,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAgCpE,kBAAkB,IAAI,QAAQ,EAAE;IAIhC,OAAO,CAAC,UAAU;IA6BlB,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,gBAAgB;IAgCxB,OAAO,CAAC,mBAAmB;IA0B3B,OAAO,CAAC,cAAc;IAsDtB,OAAO,CAAC,eAAe;IA0DvB,OAAO,CAAC,YAAY;IAgCpB,OAAO,CAAC,mBAAmB;IA6B3B,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,mBAAmB;CAyB5B"}