code-auditor-mcp 3.10.0 → 4.0.1

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 (358) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +197 -0
  3. package/dist/__tests__/fixtures/spec-52/item-04-storage-sql-exec-in-loop.d.ts.map +1 -1
  4. package/dist/__tests__/fixtures/spec-52/item-05-upsert-forms.d.ts +4 -4
  5. package/dist/__tests__/fixtures/spec-52/item-05-upsert-forms.d.ts.map +1 -1
  6. package/dist/analyzers/analyzerUtils.d.ts.map +1 -1
  7. package/dist/analyzers/analyzerUtils.js +2 -2
  8. package/dist/analyzers/analyzerUtils.js.map +1 -1
  9. package/dist/analyzers/applicability.d.ts.map +1 -1
  10. package/dist/analyzers/applicability.js +1 -0
  11. package/dist/analyzers/applicability.js.map +1 -1
  12. package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts.map +1 -1
  13. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts +1 -1
  14. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts.map +1 -1
  15. package/dist/analyzers/cross-language/DependencyGraphBuilder.js +3 -3
  16. package/dist/analyzers/cross-language/DependencyGraphBuilder.js.map +1 -1
  17. package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -1
  18. package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -1
  19. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts +2 -2
  20. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts.map +1 -1
  21. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js +62 -17
  22. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js.map +1 -1
  23. package/dist/analyzers/documentationAnalyzer.d.ts.map +1 -1
  24. package/dist/analyzers/documentationAnalyzer.js +14 -16
  25. package/dist/analyzers/documentationAnalyzer.js.map +1 -1
  26. package/dist/analyzers/invariantsAnalyzer.d.ts.map +1 -1
  27. package/dist/analyzers/invariantsAnalyzer.js +30 -25
  28. package/dist/analyzers/invariantsAnalyzer.js.map +1 -1
  29. package/dist/analyzers/orm/adapterRegistry.d.ts.map +1 -1
  30. package/dist/analyzers/orm/drizzleAdapter.d.ts.map +1 -1
  31. package/dist/analyzers/orm/prismaAdapter.d.ts.map +1 -1
  32. package/dist/analyzers/provenance.d.ts +10 -1
  33. package/dist/analyzers/provenance.d.ts.map +1 -1
  34. package/dist/analyzers/provenance.js +138 -1
  35. package/dist/analyzers/provenance.js.map +1 -1
  36. package/dist/analyzers/reactAnalyzer.d.ts +1 -1
  37. package/dist/analyzers/reactAnalyzer.d.ts.map +1 -1
  38. package/dist/analyzers/reactAnalyzer.js +34 -116
  39. package/dist/analyzers/reactAnalyzer.js.map +1 -1
  40. package/dist/analyzers/ruleRegistry.d.ts +5 -3
  41. package/dist/analyzers/ruleRegistry.d.ts.map +1 -1
  42. package/dist/analyzers/ruleRegistry.js +199 -55
  43. package/dist/analyzers/ruleRegistry.js.map +1 -1
  44. package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts +2 -2
  45. package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts.map +1 -1
  46. package/dist/analyzers/universal/UniversalConventionsAnalyzer.js +10 -17
  47. package/dist/analyzers/universal/UniversalConventionsAnalyzer.js.map +1 -1
  48. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts +6 -6
  49. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -1
  50. package/dist/analyzers/universal/UniversalDRYAnalyzer.js +13 -13
  51. package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -1
  52. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -1
  53. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +266 -101
  54. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -1
  55. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts +3 -2
  56. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -1
  57. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +14 -13
  58. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -1
  59. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -1
  60. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +11 -11
  61. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -1
  62. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts +1 -1
  63. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -1
  64. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +19 -7
  65. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -1
  66. package/dist/analyzers/universal/UniversalSecretsAnalyzer.d.ts.map +1 -1
  67. package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts +2 -2
  68. package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts.map +1 -1
  69. package/dist/analyzers/universal/UniversalStylesAnalyzer.js +93 -46
  70. package/dist/analyzers/universal/UniversalStylesAnalyzer.js.map +1 -1
  71. package/dist/analyzers/universal/schema/codeAnalysis.d.ts +58 -34
  72. package/dist/analyzers/universal/schema/codeAnalysis.d.ts.map +1 -1
  73. package/dist/analyzers/universal/schema/codeAnalysis.js +239 -97
  74. package/dist/analyzers/universal/schema/codeAnalysis.js.map +1 -1
  75. package/dist/analyzers/universal/schema/config.d.ts +6 -6
  76. package/dist/analyzers/universal/schema/config.d.ts.map +1 -1
  77. package/dist/analyzers/universal/schema/jsonSchema.js +1 -1
  78. package/dist/analyzers/universal/schema/jsonSchema.js.map +1 -1
  79. package/dist/analyzers/universal/schema/types.d.ts +10 -0
  80. package/dist/analyzers/universal/schema/types.d.ts.map +1 -1
  81. package/dist/analyzers/universal/schema/violations.d.ts +1 -1
  82. package/dist/analyzers/universal/schema/violations.d.ts.map +1 -1
  83. package/dist/auditRouter.js +7 -7
  84. package/dist/auditRouter.js.map +1 -1
  85. package/dist/auditRunner.d.ts +1 -1
  86. package/dist/auditRunner.d.ts.map +1 -1
  87. package/dist/auditRunner.js +53 -8
  88. package/dist/auditRunner.js.map +1 -1
  89. package/dist/churn/churnExtractor.js.map +1 -1
  90. package/dist/cli.js +52 -24
  91. package/dist/cli.js.map +1 -1
  92. package/dist/codeIndexDB.d.ts +1 -1
  93. package/dist/codeIndexDB.d.ts.map +1 -1
  94. package/dist/codeIndexDB.js +164 -18
  95. package/dist/codeIndexDB.js.map +1 -1
  96. package/dist/codeIndexService.d.ts.map +1 -1
  97. package/dist/codeIndexService.js.map +1 -1
  98. package/dist/componentScanner.d.ts.map +1 -1
  99. package/dist/componentScanner.js +89 -28
  100. package/dist/componentScanner.js.map +1 -1
  101. package/dist/config/configLoader.js +1 -1
  102. package/dist/config/configLoader.js.map +1 -1
  103. package/dist/config/defaults.d.ts +2 -2
  104. package/dist/config/defaults.d.ts.map +1 -1
  105. package/dist/config/defaults.js +10 -3
  106. package/dist/config/defaults.js.map +1 -1
  107. package/dist/constants.d.ts +1 -1
  108. package/dist/constants.d.ts.map +1 -1
  109. package/dist/conventions/conventionMiner.d.ts.map +1 -1
  110. package/dist/conventions/conventionMiner.js +3 -10
  111. package/dist/conventions/conventionMiner.js.map +1 -1
  112. package/dist/coverage/lcovParser.js.map +1 -1
  113. package/dist/daemon/args.js.map +1 -1
  114. package/dist/daemon/core.d.ts.map +1 -1
  115. package/dist/daemon/core.js +50 -46
  116. package/dist/daemon/core.js.map +1 -1
  117. package/dist/daemon/lspServer.d.ts.map +1 -1
  118. package/dist/daemon/lspServer.js +1 -1
  119. package/dist/daemon/lspServer.js.map +1 -1
  120. package/dist/daemon/main.d.ts.map +1 -1
  121. package/dist/daemon/main.js +14 -4
  122. package/dist/daemon/main.js.map +1 -1
  123. package/dist/daemon/resolve.js.map +1 -1
  124. package/dist/daemon/socketServer.d.ts.map +1 -1
  125. package/dist/enforcement/gate.js +2 -2
  126. package/dist/functionScanner.d.ts.map +1 -1
  127. package/dist/functionScanner.js +47 -42
  128. package/dist/functionScanner.js.map +1 -1
  129. package/dist/generators/AWSQConfigGenerator.d.ts.map +1 -1
  130. package/dist/generators/AiderConfigGenerator.d.ts.map +1 -1
  131. package/dist/generators/BaseConfigGenerator.d.ts.map +1 -1
  132. package/dist/generators/BaseConfigGenerator.js.map +1 -1
  133. package/dist/generators/ClaudeConfigGenerator.d.ts.map +1 -1
  134. package/dist/generators/ClineConfigGenerator.d.ts.map +1 -1
  135. package/dist/generators/CodeiumConfigGenerator.d.ts.map +1 -1
  136. package/dist/generators/CodexConfigGenerator.d.ts.map +1 -1
  137. package/dist/generators/ConfigGeneratorFactory.d.ts.map +1 -1
  138. package/dist/generators/ConfigGeneratorFactory.js.map +1 -1
  139. package/dist/generators/ContinueConfigGenerator.d.ts.map +1 -1
  140. package/dist/generators/CopilotConfigGenerator.d.ts.map +1 -1
  141. package/dist/generators/CursorConfigGenerator.d.ts.map +1 -1
  142. package/dist/generators/GeminiConfigGenerator.d.ts.map +1 -1
  143. package/dist/generators/JetBrainsConfigGenerator.d.ts.map +1 -1
  144. package/dist/generators/VSCodeConfigGenerator.d.ts.map +1 -1
  145. package/dist/generators/ZCodeConfigGenerator.d.ts.map +1 -1
  146. package/dist/graph/importClassification.d.ts +114 -0
  147. package/dist/graph/importClassification.d.ts.map +1 -0
  148. package/dist/graph/importClassification.js +393 -0
  149. package/dist/graph/importClassification.js.map +1 -0
  150. package/dist/graph/importGraph.d.ts +1 -0
  151. package/dist/graph/importGraph.d.ts.map +1 -1
  152. package/dist/graph/importGraph.js +1 -1
  153. package/dist/graph/importGraph.js.map +1 -1
  154. package/dist/graph/outputFormatter.js.map +1 -1
  155. package/dist/hooks/codex.d.ts.map +1 -1
  156. package/dist/hooks/codex.js +1 -1
  157. package/dist/hooks/codex.js.map +1 -1
  158. package/dist/hooks/core.d.ts +1 -1
  159. package/dist/hooks/core.d.ts.map +1 -1
  160. package/dist/hooks/core.js +4 -4
  161. package/dist/hooks/core.js.map +1 -1
  162. package/dist/hooks/cursor.d.ts.map +1 -1
  163. package/dist/hooks/cursor.js +2 -2
  164. package/dist/hooks/cursor.js.map +1 -1
  165. package/dist/index.d.ts +1 -1
  166. package/dist/index.d.ts.map +1 -1
  167. package/dist/index.js.map +1 -1
  168. package/dist/installer.d.ts +13 -7
  169. package/dist/installer.d.ts.map +1 -1
  170. package/dist/installer.js +25 -15
  171. package/dist/installer.js.map +1 -1
  172. package/dist/invariants/invariant-rules.schema.json +1 -1
  173. package/dist/invariants/ruleEngine.js.map +1 -1
  174. package/dist/invariants/ruleValidator.js +1 -1
  175. package/dist/invariants/ruleValidator.js.map +1 -1
  176. package/dist/invariants/types.d.ts +1 -1
  177. package/dist/invariants/types.d.ts.map +1 -1
  178. package/dist/languages/LanguageOrchestrator.d.ts +3 -2
  179. package/dist/languages/LanguageOrchestrator.d.ts.map +1 -1
  180. package/dist/languages/LanguageOrchestrator.js +1 -1
  181. package/dist/languages/LanguageOrchestrator.js.map +1 -1
  182. package/dist/languages/LanguageRegistry.d.ts.map +1 -1
  183. package/dist/languages/RuntimeManager.d.ts +20 -11
  184. package/dist/languages/RuntimeManager.d.ts.map +1 -1
  185. package/dist/languages/RuntimeManager.js +151 -51
  186. package/dist/languages/RuntimeManager.js.map +1 -1
  187. package/dist/languages/UniversalAnalyzer.d.ts.map +1 -1
  188. package/dist/languages/UniversalAnalyzer.js.map +1 -1
  189. package/dist/languages/adapterBridge.d.ts +10 -0
  190. package/dist/languages/adapterBridge.d.ts.map +1 -1
  191. package/dist/languages/adapterBridge.js +30 -7
  192. package/dist/languages/adapterBridge.js.map +1 -1
  193. package/dist/languages/go/GoAdapter.d.ts +1 -19
  194. package/dist/languages/go/GoAdapter.d.ts.map +1 -1
  195. package/dist/languages/go/GoAdapter.js +33 -116
  196. package/dist/languages/go/GoAdapter.js.map +1 -1
  197. package/dist/languages/go/analyzer +0 -0
  198. package/dist/languages/go/analyzer-src/analyzer.go +8 -8
  199. package/dist/languages/go/analyzer-src/solid.go +5 -5
  200. package/dist/languages/goBinary.d.ts +46 -0
  201. package/dist/languages/goBinary.d.ts.map +1 -0
  202. package/dist/languages/goBinary.js +169 -0
  203. package/dist/languages/goBinary.js.map +1 -0
  204. package/dist/languages/tree-sitter/TreeSitterCssAdapter.d.ts +1 -28
  205. package/dist/languages/tree-sitter/TreeSitterCssAdapter.d.ts.map +1 -1
  206. package/dist/languages/tree-sitter/TreeSitterCssAdapter.js +3 -42
  207. package/dist/languages/tree-sitter/TreeSitterCssAdapter.js.map +1 -1
  208. package/dist/languages/tree-sitter/converter.d.ts.map +1 -1
  209. package/dist/languages/tree-sitter/converter.js +2 -1
  210. package/dist/languages/tree-sitter/converter.js.map +1 -1
  211. package/dist/languages/tree-sitter/parser.js.map +1 -1
  212. package/dist/languages/tree-sitter/rawNode.d.ts +31 -0
  213. package/dist/languages/tree-sitter/rawNode.d.ts.map +1 -0
  214. package/dist/languages/tree-sitter/rawNode.js +38 -0
  215. package/dist/languages/tree-sitter/rawNode.js.map +1 -0
  216. package/dist/languages/types.d.ts +15 -21
  217. package/dist/languages/types.d.ts.map +1 -1
  218. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts +12 -32
  219. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts.map +1 -1
  220. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js +103 -203
  221. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js.map +1 -1
  222. package/dist/ledger.d.ts +3 -0
  223. package/dist/ledger.d.ts.map +1 -1
  224. package/dist/ledger.js +45 -9
  225. package/dist/ledger.js.map +1 -1
  226. package/dist/mcp-tools/projectTasks.d.ts +37 -37
  227. package/dist/mcp-tools/projectTasks.js +2 -2
  228. package/dist/mcp-tools/projectTasks.js.map +1 -1
  229. package/dist/mcp-tools/whitelistTools.d.ts +17 -17
  230. package/dist/mcp-tools/whitelistTools.d.ts.map +1 -1
  231. package/dist/mcp-tools/workflowGuide.js +3 -3
  232. package/dist/mcp-tools/workflowGuide.js.map +1 -1
  233. package/dist/mcp-tools-shared.d.ts.map +1 -1
  234. package/dist/mcp-tools-shared.js +13 -13
  235. package/dist/mcp-tools-shared.js.map +1 -1
  236. package/dist/mcp-ui-simple.js +7 -7
  237. package/dist/mcp-ui-simple.js.map +1 -1
  238. package/dist/mcp.js +14 -14
  239. package/dist/mcp.js.map +1 -1
  240. package/dist/mcpAuditJobs.js +7 -7
  241. package/dist/mcpAuditJobs.js.map +1 -1
  242. package/dist/mcpAutoIndex.js +1 -1
  243. package/dist/mcpAutoIndex.js.map +1 -1
  244. package/dist/mcpToolErrors.d.ts.map +1 -1
  245. package/dist/mcpToolErrors.js.map +1 -1
  246. package/dist/native-bootstrap.js.map +1 -1
  247. package/dist/nextFile.d.ts +2 -2
  248. package/dist/nextFile.d.ts.map +1 -1
  249. package/dist/nextFile.js +19 -5
  250. package/dist/nextFile.js.map +1 -1
  251. package/dist/nextFileIncremental.d.ts +10 -2
  252. package/dist/nextFileIncremental.d.ts.map +1 -1
  253. package/dist/nextFileIncremental.js +45 -16
  254. package/dist/nextFileIncremental.js.map +1 -1
  255. package/dist/pipeline.d.ts +2 -2
  256. package/dist/pipeline.d.ts.map +1 -1
  257. package/dist/pipeline.js +35 -0
  258. package/dist/pipeline.js.map +1 -1
  259. package/dist/pipelineAdapters.d.ts +17 -0
  260. package/dist/pipelineAdapters.d.ts.map +1 -1
  261. package/dist/pipelineAdapters.js +356 -197
  262. package/dist/pipelineAdapters.js.map +1 -1
  263. package/dist/reporting/csvReportGenerator.d.ts.map +1 -1
  264. package/dist/reporting/csvReportGenerator.js +6 -6
  265. package/dist/reporting/csvReportGenerator.js.map +1 -1
  266. package/dist/reporting/htmlReportGenerator.d.ts.map +1 -1
  267. package/dist/reporting/htmlReportGenerator.js +11 -11
  268. package/dist/reporting/htmlReportGenerator.js.map +1 -1
  269. package/dist/reporting/jsonReportGenerator.d.ts.map +1 -1
  270. package/dist/reporting/jsonReportGenerator.js +2 -2
  271. package/dist/reporting/jsonReportGenerator.js.map +1 -1
  272. package/dist/reporting/reportGenerator.d.ts.map +1 -1
  273. package/dist/reporting/sarifReportGenerator.d.ts.map +1 -1
  274. package/dist/reporting/sarifReportGenerator.js +1 -1
  275. package/dist/reporting/sarifReportGenerator.js.map +1 -1
  276. package/dist/scripts/benchmarkWorkers.js +1 -1
  277. package/dist/scripts/benchmarkWorkers.js.map +1 -1
  278. package/dist/search/QueryParser.d.ts.map +1 -1
  279. package/dist/search/QueryParser.js.map +1 -1
  280. package/dist/services/CodeMapGenerator.d.ts.map +1 -1
  281. package/dist/services/CodeMapGenerator.js.map +1 -1
  282. package/dist/services/ProjectTaskRepository.d.ts.map +1 -1
  283. package/dist/services/ProjectTaskRepository.js.map +1 -1
  284. package/dist/services/auditJobService.js.map +1 -1
  285. package/dist/services/fileAccounting.d.ts.map +1 -1
  286. package/dist/services/projectTaskHelpers.js.map +1 -1
  287. package/dist/services/whitelistService.d.ts.map +1 -1
  288. package/dist/sqlite/betterSqlite3.d.ts.map +1 -1
  289. package/dist/sqlite/betterSqlite3.js.map +1 -1
  290. package/dist/sqlite/nodeSqlite.d.ts.map +1 -1
  291. package/dist/sqlite/nodeSqlite.js.map +1 -1
  292. package/dist/structuralSignature.js.map +1 -1
  293. package/dist/styles/cssAstExtractor.d.ts +2 -2
  294. package/dist/styles/cssAstExtractor.d.ts.map +1 -1
  295. package/dist/styles/cssAstExtractor.js +67 -111
  296. package/dist/styles/cssAstExtractor.js.map +1 -1
  297. package/dist/styles/styleExtractor.js.map +1 -1
  298. package/dist/styles/styleIndexer.d.ts.map +1 -1
  299. package/dist/styles/styleIndexer.js +19 -6
  300. package/dist/styles/styleIndexer.js.map +1 -1
  301. package/dist/styles/tailwindConfigLoader.js.map +1 -1
  302. package/dist/styles/tailwindProbe.d.ts.map +1 -1
  303. package/dist/styles/tailwindUtilityExpander.d.ts.map +1 -1
  304. package/dist/styles/tailwindUtilityExpander.js.map +1 -1
  305. package/dist/telemetry.d.ts +1 -1
  306. package/dist/telemetry.d.ts.map +1 -1
  307. package/dist/telemetry.js.map +1 -1
  308. package/dist/tool-registry.d.ts.map +1 -1
  309. package/dist/types/crossLanguage.d.ts +1 -1
  310. package/dist/types/crossLanguage.d.ts.map +1 -1
  311. package/dist/types.d.ts +67 -19
  312. package/dist/types.d.ts.map +1 -1
  313. package/dist/types.js +6 -5
  314. package/dist/types.js.map +1 -1
  315. package/dist/ui/InteractivePrompts.d.ts.map +1 -1
  316. package/dist/ui/InteractivePrompts.js.map +1 -1
  317. package/dist/utils/astParser.d.ts +1 -17
  318. package/dist/utils/astParser.d.ts.map +1 -1
  319. package/dist/utils/astParser.js +18 -60
  320. package/dist/utils/astParser.js.map +1 -1
  321. package/dist/utils/astUtils.d.ts +12 -12
  322. package/dist/utils/astUtils.d.ts.map +1 -1
  323. package/dist/utils/astUtils.js +83 -82
  324. package/dist/utils/astUtils.js.map +1 -1
  325. package/dist/utils/componentPatterns.js.map +1 -1
  326. package/dist/utils/componentResponsibility.d.ts +8 -8
  327. package/dist/utils/componentResponsibility.d.ts.map +1 -1
  328. package/dist/utils/componentResponsibility.js +33 -38
  329. package/dist/utils/componentResponsibility.js.map +1 -1
  330. package/dist/utils/dependencyExtractor.d.ts +3 -3
  331. package/dist/utils/dependencyExtractor.d.ts.map +1 -1
  332. package/dist/utils/dependencyExtractor.js +26 -30
  333. package/dist/utils/dependencyExtractor.js.map +1 -1
  334. package/dist/utils/fileDiscovery.d.ts.map +1 -1
  335. package/dist/utils/fileDiscovery.js +65 -0
  336. package/dist/utils/fileDiscovery.js.map +1 -1
  337. package/dist/utils/jsDocParser.d.ts +6 -6
  338. package/dist/utils/jsDocParser.d.ts.map +1 -1
  339. package/dist/utils/jsDocParser.js +18 -21
  340. package/dist/utils/jsDocParser.js.map +1 -1
  341. package/dist/utils/reactDetection.d.ts +7 -7
  342. package/dist/utils/reactDetection.d.ts.map +1 -1
  343. package/dist/utils/reactDetection.js +42 -49
  344. package/dist/utils/reactDetection.js.map +1 -1
  345. package/dist/version.generated.d.ts +1 -1
  346. package/dist/version.generated.d.ts.map +1 -1
  347. package/dist/version.generated.js +1 -1
  348. package/dist/version.generated.js.map +1 -1
  349. package/dist/workers/auditWorker.js.map +1 -1
  350. package/package.json +4 -3
  351. package/plugin/.claude-plugin/plugin.json +1 -1
  352. package/plugin/README.md +5 -4
  353. package/plugin/hooks/hooks.json +11 -0
  354. package/plugin/scripts/hook-common.sh +85 -31
  355. package/plugin/scripts/hook-warm.sh +44 -0
  356. package/plugin/skills/code-auditor/SKILL-RULE-KINDS.md +28 -21
  357. package/plugin/skills/code-auditor/SKILL.md +10 -10
  358. package/server.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"astParser.js","sourceRoot":"","sources":["../../src/utils/astParser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"astParser.js","sourceRoot":"","sources":["../../src/utils/astParser.ts"],"names":[],"mappings":"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"}
@@ -8,9 +8,9 @@
8
8
  * The `ts.SourceFile` parameter has been replaced with `ASTNode` (root node).
9
9
  * For source-code-dependent operations, `sourceCode: string` is passed separately.
10
10
  */
11
- import type { ASTNode, AST } from '../languages/types.js';
12
- import { ImportInfo, ExportInfo, ImportMapping, UsageInfo } from '../types.js';
13
- import { getNodeText as bridgeGetNodeText, getLineAndColumn as bridgeGetLineAndColumn, isExported as bridgeIsExported, calculateComplexity as bridgeCalculateComplexity } from '../languages/adapterBridge.js';
11
+ import type { ASTNode, AST, ImportInfo } from '../languages/types.js';
12
+ import { ExportInfo, ImportMapping, UsageInfo } from '../types.js';
13
+ import { getNodeText, getLineAndColumn as bridgeGetLineAndColumn, isExported as bridgeIsExported, calculateComplexity as bridgeCalculateComplexity } from '../languages/adapterBridge.js';
14
14
  /**
15
15
  * Find all nodes matching a predicate in the AST subtree.
16
16
  * Replacement for the old `findNodesByKind<T>(node, SyntaxKind)`.
@@ -20,7 +20,7 @@ export declare function findNodesByType(root: ASTNode, predicate: (node: ASTNode
20
20
  * Get the text content of a node.
21
21
  * Uses sourceCode if provided; falls back to raw tree-sitter text.
22
22
  */
23
- export { bridgeGetNodeText as getNodeText };
23
+ export { getNodeText };
24
24
  /**
25
25
  * Get line and column number for a tree-sitter ASTNode.
26
26
  */
@@ -32,12 +32,12 @@ export { bridgeCalculateComplexity as calculateComplexity };
32
32
  * Uses tree-sitter import_statement structure:
33
33
  * import_statement → import_clause? → (identifier | named_imports) → string
34
34
  */
35
- export declare function getImports(root: ASTNode): ImportInfo[];
35
+ export declare function getImports(root: ASTNode, sourceCode: string): ImportInfo[];
36
36
  /**
37
37
  * Extract export statements from an AST root node.
38
38
  * Uses tree-sitter export_statement structure.
39
39
  */
40
- export declare function getExports(root: ASTNode): ExportInfo[];
40
+ export declare function getExports(root: ASTNode, sourceCode: string): ExportInfo[];
41
41
  /**
42
42
  * Find all function declarations in the AST.
43
43
  */
@@ -49,17 +49,17 @@ export declare function findClasses(root: ASTNode): ASTNode[];
49
49
  /**
50
50
  * Get AST node for inspection/debugging.
51
51
  */
52
- export declare function getASTNode(node: ASTNode): any;
52
+ export declare function getASTNode(node: ASTNode, sourceCode: string): any;
53
53
  /**
54
54
  * Check if a node has a specific decorator.
55
55
  * Tree-sitter parses decorators as `decorator` nodes.
56
56
  */
57
- export declare function hasDecorator(node: ASTNode, decoratorName: string): boolean;
57
+ export declare function hasDecorator(node: ASTNode, decoratorName: string, sourceCode: string): boolean;
58
58
  /**
59
59
  * Get method names from a class declaration node.
60
60
  * Tree-sitter: class_declaration → class_body → method_definition / public_field_definition
61
61
  */
62
- export declare function getClassMethods(classNode: ASTNode): string[];
62
+ export declare function getClassMethods(classNode: ASTNode, sourceCode: string): string[];
63
63
  /**
64
64
  * Count lines of code (excluding comments and empty lines).
65
65
  * Takes source text directly instead of ts.SourceFile.
@@ -105,12 +105,12 @@ export declare function parseTypeScriptFile(filePath: string): Promise<{
105
105
  * Enhanced version of getImports that returns detailed ImportMapping[].
106
106
  * Uses tree-sitter import_statement traversal.
107
107
  */
108
- export declare function getImportsDetailed(root: ASTNode): ImportMapping[];
108
+ export declare function getImportsDetailed(root: ASTNode, sourceCode: string): ImportMapping[];
109
109
  /**
110
110
  * Get re-exports from a source file.
111
111
  * Tree-sitter: export_statement → string (module specifier).
112
112
  */
113
- export declare function getReExports(root: ASTNode): Array<{
113
+ export declare function getReExports(root: ASTNode, sourceCode: string): Array<{
114
114
  name: string;
115
115
  module: string;
116
116
  }>;
@@ -123,7 +123,7 @@ export declare function extractIdentifierUsage(root: ASTNode, sourceCode: string
123
123
  * Check if a function name is defined locally in the file.
124
124
  * Uses tree-sitter instead of TS API.
125
125
  */
126
- export declare function isLocalFunction(name: string, root: ASTNode): boolean;
126
+ export declare function isLocalFunction(name: string, root: ASTNode, sourceCode: string): boolean;
127
127
  /**
128
128
  * Normalize a function call target for consistent naming.
129
129
  * No TypeScript dependency — pure string manipulation.
@@ -1 +1 @@
1
- {"version":3,"file":"astUtils.d.ts","sourceRoot":"","sources":["../../src/utils/astUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"astUtils.d.ts","sourceRoot":"","sources":["../../src/utils/astUtils.ts"],"names":[],"mappings":"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"}
@@ -8,14 +8,10 @@
8
8
  * The `ts.SourceFile` parameter has been replaced with `ASTNode` (root node).
9
9
  * For source-code-dependent operations, `sourceCode: string` is passed separately.
10
10
  */
11
- import { walkAST, findNodes, getNodeText as bridgeGetNodeText, getLineAndColumn as bridgeGetLineAndColumn, isExported as bridgeIsExported, calculateComplexity as bridgeCalculateComplexity, hasModifier, } from '../languages/adapterBridge.js';
11
+ import { walkAST, findNodes, getNodeText, getLineAndColumn as bridgeGetLineAndColumn, isExported as bridgeIsExported, calculateComplexity as bridgeCalculateComplexity, hasModifier, } from '../languages/adapterBridge.js';
12
12
  // ---------------------------------------------------------------------------
13
13
  // Helpers
14
14
  // ---------------------------------------------------------------------------
15
- /** Get raw text from a tree-sitter node (stored on ASTNode.raw). */
16
- function rawText(node) {
17
- return node.raw?.text ?? '';
18
- }
19
15
  /** Find the first child of a given type. */
20
16
  function findChildOfType(node, type) {
21
17
  return node.children?.find(c => c.type === type);
@@ -37,7 +33,7 @@ export function findNodesByType(root, predicate) {
37
33
  * Get the text content of a node.
38
34
  * Uses sourceCode if provided; falls back to raw tree-sitter text.
39
35
  */
40
- export { bridgeGetNodeText as getNodeText };
36
+ export { getNodeText };
41
37
  // ---------------------------------------------------------------------------
42
38
  // Position helpers (re-exports from adapterBridge)
43
39
  // ---------------------------------------------------------------------------
@@ -61,7 +57,7 @@ export { bridgeCalculateComplexity as calculateComplexity };
61
57
  * Uses tree-sitter import_statement structure:
62
58
  * import_statement → import_clause? → (identifier | named_imports) → string
63
59
  */
64
- export function getImports(root) {
60
+ export function getImports(root, sourceCode) {
65
61
  const imports = [];
66
62
  const importNodes = findNodes(root, n => n.type === 'import_statement');
67
63
  for (const node of importNodes) {
@@ -69,18 +65,18 @@ export function getImports(root) {
69
65
  const moduleNode = findChildOfType(node, 'string');
70
66
  if (!moduleNode)
71
67
  continue;
72
- const moduleSpecifier = rawText(moduleNode).replace(/^["']|["']$/g, '');
73
- const importedNames = [];
68
+ const source = getNodeText(moduleNode, sourceCode).replace(/^["']|["']$/g, '');
69
+ const specifiers = [];
74
70
  const importClause = findChildOfType(node, 'import_clause');
75
- let isTypeOnly = false;
76
71
  if (importClause) {
77
- // Check for `type` keyword in import clause
78
- const raw = importClause.raw;
79
- isTypeOnly = raw?.children?.some(c => !c.isNamed && c.type === 'type') ?? false;
80
- // Default import (identifier child of import_clause that's not 'type' modifier)
72
+ // Default import (identifier child of import_clause that's not the `type` keyword)
81
73
  const defaultId = importClause.children?.find(c => c.type === 'identifier');
82
74
  if (defaultId) {
83
- importedNames.push(rawText(defaultId));
75
+ specifiers.push({
76
+ name: getNodeText(defaultId, sourceCode),
77
+ isDefault: true,
78
+ isNamespace: false,
79
+ });
84
80
  }
85
81
  // Named imports
86
82
  const namedImports = findChildOfType(importClause, 'named_imports');
@@ -88,10 +84,17 @@ export function getImports(root) {
88
84
  for (const child of namedImports.children ?? []) {
89
85
  if (child.type !== 'import_specifier')
90
86
  continue;
91
- // The identifier children — last one is the local name
87
+ // import { name } / { name as alias } / { default as name }
92
88
  const ids = child.children?.filter(c => c.type === 'identifier') ?? [];
93
89
  if (ids.length > 0) {
94
- importedNames.push(rawText(ids[ids.length - 1]));
90
+ const imported = getNodeText(ids[0], sourceCode);
91
+ const local = getNodeText(ids[ids.length - 1], sourceCode);
92
+ specifiers.push({
93
+ name: local,
94
+ alias: imported !== local ? imported : undefined,
95
+ isDefault: imported === 'default',
96
+ isNamespace: false,
97
+ });
95
98
  }
96
99
  }
97
100
  }
@@ -100,12 +103,15 @@ export function getImports(root) {
100
103
  if (namespaceImport) {
101
104
  const nsId = findChildOfType(namespaceImport, 'identifier');
102
105
  if (nsId) {
103
- importedNames.push(`* as ${rawText(nsId)}`);
106
+ specifiers.push({
107
+ name: getNodeText(nsId, sourceCode),
108
+ isDefault: false,
109
+ isNamespace: true,
110
+ });
104
111
  }
105
112
  }
106
113
  }
107
- const { line } = bridgeGetLineAndColumn(node);
108
- imports.push({ moduleSpecifier, importedNames, isTypeOnly, line });
114
+ imports.push({ source, specifiers, location: node.location });
109
115
  }
110
116
  return imports;
111
117
  }
@@ -116,15 +122,14 @@ export function getImports(root) {
116
122
  * Extract export statements from an AST root node.
117
123
  * Uses tree-sitter export_statement structure.
118
124
  */
119
- export function getExports(root) {
125
+ export function getExports(root, sourceCode) {
120
126
  const exports = [];
121
127
  // export declarations: export { name1, name2 }
122
128
  const exportNodes = findNodes(root, n => n.type === 'export_statement' || n.type === 'export_declaration');
123
129
  for (const node of exportNodes) {
124
130
  const { line } = bridgeGetLineAndColumn(node);
125
131
  // Check for type-only exports
126
- const raw = node.raw;
127
- const isTypeOnly = raw?.children?.some(c => !c.isNamed && c.type === 'type') ?? false;
132
+ const isTypeOnly = hasModifier(node, 'type');
128
133
  // export clause with named exports
129
134
  const exportClause = findChildOfType(node, 'export_clause');
130
135
  if (exportClause) {
@@ -136,7 +141,7 @@ export function getExports(root) {
136
141
  const ids = child.children?.filter(c => c.type === 'identifier') ?? [];
137
142
  if (ids.length > 0) {
138
143
  exports.push({
139
- name: rawText(ids[ids.length - 1]),
144
+ name: getNodeText(ids[ids.length - 1], sourceCode),
140
145
  isDefault: false,
141
146
  isTypeOnly,
142
147
  line
@@ -146,14 +151,14 @@ export function getExports(root) {
146
151
  }
147
152
  }
148
153
  // Check for `default` keyword — export default X
149
- const isDefault = raw?.children?.some(c => !c.isNamed && c.type === 'default') ?? false;
154
+ const isDefault = hasModifier(node, 'default');
150
155
  if (isDefault) {
151
156
  const exported = node.children?.find(c => c.type === 'identifier' || c.type === 'function_declaration' ||
152
157
  c.type === 'class_declaration' || c.type === 'call_expression');
153
158
  if (exported) {
154
159
  const nameNode = findChildOfType(exported, 'identifier');
155
160
  exports.push({
156
- name: nameNode ? rawText(nameNode) : 'default',
161
+ name: nameNode ? getNodeText(nameNode, sourceCode) : 'default',
157
162
  isDefault: true,
158
163
  isTypeOnly,
159
164
  line
@@ -187,11 +192,11 @@ export function findClasses(root) {
187
192
  /**
188
193
  * Get AST node for inspection/debugging.
189
194
  */
190
- export function getASTNode(node) {
195
+ export function getASTNode(node, sourceCode) {
191
196
  return {
192
197
  type: node.type,
193
- text: rawText(node),
194
- children: (node.children ?? []).map(child => getASTNode(child))
198
+ text: getNodeText(node, sourceCode),
199
+ children: (node.children ?? []).map(child => getASTNode(child, sourceCode))
195
200
  };
196
201
  }
197
202
  // ---------------------------------------------------------------------------
@@ -201,20 +206,20 @@ export function getASTNode(node) {
201
206
  * Check if a node has a specific decorator.
202
207
  * Tree-sitter parses decorators as `decorator` nodes.
203
208
  */
204
- export function hasDecorator(node, decoratorName) {
209
+ export function hasDecorator(node, decoratorName, sourceCode) {
205
210
  const decorators = findNodes(node, n => n.type === 'decorator');
206
211
  return decorators.some(decorator => {
207
212
  // decorator → call_expression → identifier (e.g., @Component())
208
213
  const callExpr = findChildOfType(decorator, 'call_expression');
209
214
  if (callExpr) {
210
215
  const callee = callExpr.children?.[0];
211
- if (callee?.type === 'identifier' && rawText(callee) === decoratorName) {
216
+ if (callee?.type === 'identifier' && getNodeText(callee, sourceCode) === decoratorName) {
212
217
  return true;
213
218
  }
214
219
  }
215
220
  // decorator → identifier (e.g., @deprecated)
216
221
  const id = findChildOfType(decorator, 'identifier');
217
- if (id && rawText(id) === decoratorName) {
222
+ if (id && getNodeText(id, sourceCode) === decoratorName) {
218
223
  return true;
219
224
  }
220
225
  return false;
@@ -227,7 +232,7 @@ export function hasDecorator(node, decoratorName) {
227
232
  * Get method names from a class declaration node.
228
233
  * Tree-sitter: class_declaration → class_body → method_definition / public_field_definition
229
234
  */
230
- export function getClassMethods(classNode) {
235
+ export function getClassMethods(classNode, sourceCode) {
231
236
  const methods = [];
232
237
  const classBody = findChildOfType(classNode, 'class_body');
233
238
  if (!classBody)
@@ -236,7 +241,7 @@ export function getClassMethods(classNode) {
236
241
  if (member.type === 'method_definition' || member.type === 'public_field_definition') {
237
242
  const nameNode = member.children?.find(c => c.type === 'identifier' || c.type === 'property_identifier');
238
243
  if (nameNode) {
239
- methods.push(rawText(nameNode));
244
+ methods.push(getNodeText(nameNode, sourceCode));
240
245
  }
241
246
  }
242
247
  }
@@ -334,7 +339,7 @@ export async function parseTypeScriptFile(filePath) {
334
339
  const ast = parseFile(filePath, content);
335
340
  if (!ast) {
336
341
  const failLocation = { start: { line: 0, column: 0 }, end: { line: 0, column: 0 } };
337
- const failAst = { root: { type: 'source_file', range: [0, 0], location: failLocation, raw: null }, language: 'unknown', filePath, errors: [{ message: 'Failed to parse file', location: failLocation, severity: 'error' }] };
342
+ const failAst = { root: { type: 'source_file', range: [0, 0], location: failLocation }, language: 'unknown', filePath, errors: [{ message: 'Failed to parse file', location: failLocation, severity: 'error' }] };
338
343
  return { ast: failAst, errors: [{ message: 'Failed to parse file', line: 0, column: 0 }] };
339
344
  }
340
345
  return { ast, errors: ast.errors ?? [] };
@@ -346,14 +351,14 @@ export async function parseTypeScriptFile(filePath) {
346
351
  * Enhanced version of getImports that returns detailed ImportMapping[].
347
352
  * Uses tree-sitter import_statement traversal.
348
353
  */
349
- export function getImportsDetailed(root) {
354
+ export function getImportsDetailed(root, sourceCode) {
350
355
  const imports = [];
351
356
  const importNodes = findNodes(root, n => n.type === 'import_statement');
352
357
  for (const node of importNodes) {
353
358
  const moduleNode = findChildOfType(node, 'string');
354
359
  if (!moduleNode)
355
360
  continue;
356
- const moduleSpecifier = rawText(moduleNode).replace(/^["']|["']$/g, '');
361
+ const moduleSpecifier = getNodeText(moduleNode, sourceCode).replace(/^["']|["']$/g, '');
357
362
  const importClause = findChildOfType(node, 'import_clause');
358
363
  if (!importClause) {
359
364
  // Side-effect import (no import clause)
@@ -366,13 +371,12 @@ export function getImportsDetailed(root) {
366
371
  });
367
372
  continue;
368
373
  }
369
- const raw = importClause.raw;
370
- const isTypeOnly = raw?.children?.some(c => !c.isNamed && c.type === 'type') ?? false;
374
+ const isTypeOnly = hasModifier(importClause, 'type');
371
375
  // Default import
372
376
  const defaultId = importClause.children?.find(c => c.type === 'identifier');
373
377
  if (defaultId) {
374
378
  imports.push({
375
- localName: rawText(defaultId),
379
+ localName: getNodeText(defaultId, sourceCode),
376
380
  importedName: 'default',
377
381
  modulePath: moduleSpecifier,
378
382
  importType: 'default',
@@ -388,8 +392,8 @@ export function getImportsDetailed(root) {
388
392
  const identifiers = child.children?.filter(c => c.type === 'identifier') ?? [];
389
393
  if (identifiers.length === 0)
390
394
  continue;
391
- const localName = rawText(identifiers[identifiers.length - 1]);
392
- const importedName = identifiers.length > 1 ? rawText(identifiers[0]) : localName;
395
+ const localName = getNodeText(identifiers[identifiers.length - 1], sourceCode);
396
+ const importedName = identifiers.length > 1 ? getNodeText(identifiers[0], sourceCode) : localName;
393
397
  imports.push({
394
398
  localName,
395
399
  importedName,
@@ -405,7 +409,7 @@ export function getImportsDetailed(root) {
405
409
  const nsId = findChildOfType(nsImport, 'identifier');
406
410
  if (nsId) {
407
411
  imports.push({
408
- localName: rawText(nsId),
412
+ localName: getNodeText(nsId, sourceCode),
409
413
  importedName: '*',
410
414
  modulePath: moduleSpecifier,
411
415
  importType: 'namespace',
@@ -423,7 +427,7 @@ export function getImportsDetailed(root) {
423
427
  * Get re-exports from a source file.
424
428
  * Tree-sitter: export_statement → string (module specifier).
425
429
  */
426
- export function getReExports(root) {
430
+ export function getReExports(root, sourceCode) {
427
431
  const reExports = [];
428
432
  const exportNodes = findNodes(root, n => n.type === 'export_statement' || n.type === 'export_declaration');
429
433
  for (const node of exportNodes) {
@@ -431,7 +435,7 @@ export function getReExports(root) {
431
435
  const moduleNode = findChildOfType(node, 'string');
432
436
  if (!moduleNode)
433
437
  continue;
434
- const moduleSpecifier = rawText(moduleNode).replace(/^["']|["']$/g, '');
438
+ const moduleSpecifier = getNodeText(moduleNode, sourceCode).replace(/^["']|["']$/g, '');
435
439
  const exportClause = findChildOfType(node, 'export_clause');
436
440
  if (exportClause) {
437
441
  const namedExports = findChildOfType(exportClause, 'named_exports');
@@ -442,8 +446,8 @@ export function getReExports(root) {
442
446
  const identifiers = child.children?.filter(c => c.type === 'identifier') ?? [];
443
447
  if (identifiers.length > 0) {
444
448
  const name = identifiers.length > 1
445
- ? rawText(identifiers[0])
446
- : rawText(identifiers[identifiers.length - 1]);
449
+ ? getNodeText(identifiers[0], sourceCode)
450
+ : getNodeText(identifiers[identifiers.length - 1], sourceCode);
447
451
  reExports.push({ name, module: moduleSpecifier });
448
452
  }
449
453
  }
@@ -601,8 +605,7 @@ function isTypeOnlyUsage(identifier) {
601
605
  if (parent.type === 'generic_type' && parent.children?.[0] === identifier) {
602
606
  const heritageClause = parent.parent;
603
607
  if (heritageClause?.type === 'heritage_clause') {
604
- const raw = heritageClause.raw;
605
- const isExtends = raw?.children?.some(c => !c.isNamed && c.type === 'extends');
608
+ const isExtends = hasModifier(heritageClause, 'extends');
606
609
  if (isExtends) {
607
610
  const interfaceNode = heritageClause.parent;
608
611
  if (interfaceNode?.type === 'interface_declaration') {
@@ -617,8 +620,7 @@ function isTypeOnlyUsage(identifier) {
617
620
  if (grandParent?.type === 'generic_type') {
618
621
  const heritageClause = grandParent.parent;
619
622
  if (heritageClause?.type === 'heritage_clause') {
620
- const raw = heritageClause.raw;
621
- const isExtends = raw?.children?.some(c => !c.isNamed && c.type === 'extends');
623
+ const isExtends = hasModifier(heritageClause, 'extends');
622
624
  if (isExtends) {
623
625
  const interfaceNode = heritageClause.parent;
624
626
  if (interfaceNode?.type === 'interface_declaration') {
@@ -640,8 +642,7 @@ function isTypeOnlyUsage(identifier) {
640
642
  for (const child of parent.children ?? []) {
641
643
  if (child.type !== 'heritage_clause')
642
644
  continue;
643
- const raw = child.raw;
644
- const isImplements = raw?.children?.some(c => !c.isNamed && c.type === 'implements');
645
+ const isImplements = hasModifier(child, 'implements');
645
646
  if (!isImplements)
646
647
  continue;
647
648
  for (const typeNode of child.children ?? []) {
@@ -799,7 +800,7 @@ export function extractIdentifierUsage(root, sourceCode, importNames) {
799
800
  walkAST(root, (node) => {
800
801
  // --- identifiers ---
801
802
  if (node.type === 'identifier') {
802
- const name = rawText(node);
803
+ const name = getNodeText(node, sourceCode);
803
804
  if (importNames.has(name)) {
804
805
  let shouldCount = true;
805
806
  // Skip if part of an import declaration
@@ -842,16 +843,16 @@ export function extractIdentifierUsage(root, sourceCode, importNames) {
842
843
  // --- spread elements ---
843
844
  else if (SPREAD_TYPES.has(node.type)) {
844
845
  const expr = node.children?.find(c => c.type !== '...');
845
- if (expr?.type === 'identifier' && importNames.has(rawText(expr))) {
846
+ if (expr?.type === 'identifier' && importNames.has(getNodeText(expr, sourceCode))) {
846
847
  const { line } = bridgeGetLineAndColumn(expr);
847
- const existing = usageMap.get(rawText(expr)) || {
848
+ const existing = usageMap.get(getNodeText(expr, sourceCode)) || {
848
849
  usageType: 'direct',
849
850
  usageCount: 0,
850
851
  lineNumbers: [],
851
852
  };
852
853
  existing.usageCount++;
853
854
  existing.lineNumbers.push(line);
854
- usageMap.set(rawText(expr), existing);
855
+ usageMap.set(getNodeText(expr, sourceCode), existing);
855
856
  }
856
857
  }
857
858
  // --- JSX elements: <Button /> or <Button.Primary /> ---
@@ -867,29 +868,29 @@ export function extractIdentifierUsage(root, sourceCode, importNames) {
867
868
  tagNameNode = node.children?.find(c => c.type === 'identifier' || c.type === 'member_expression');
868
869
  }
869
870
  if (tagNameNode) {
870
- if (tagNameNode.type === 'identifier' && importNames.has(rawText(tagNameNode))) {
871
+ if (tagNameNode.type === 'identifier' && importNames.has(getNodeText(tagNameNode, sourceCode))) {
871
872
  const { line } = bridgeGetLineAndColumn(tagNameNode);
872
- const existing = usageMap.get(rawText(tagNameNode)) || {
873
+ const existing = usageMap.get(getNodeText(tagNameNode, sourceCode)) || {
873
874
  usageType: 'direct',
874
875
  usageCount: 0,
875
876
  lineNumbers: [],
876
877
  };
877
878
  existing.usageCount++;
878
879
  existing.lineNumbers.push(line);
879
- usageMap.set(rawText(tagNameNode), existing);
880
+ usageMap.set(getNodeText(tagNameNode, sourceCode), existing);
880
881
  }
881
882
  else if (tagNameNode.type === 'member_expression') {
882
883
  const leftmost = tagNameNode.children?.[0];
883
- if (leftmost?.type === 'identifier' && importNames.has(rawText(leftmost))) {
884
+ if (leftmost?.type === 'identifier' && importNames.has(getNodeText(leftmost, sourceCode))) {
884
885
  const { line } = bridgeGetLineAndColumn(leftmost);
885
- const existing = usageMap.get(rawText(leftmost)) || {
886
+ const existing = usageMap.get(getNodeText(leftmost, sourceCode)) || {
886
887
  usageType: 'direct',
887
888
  usageCount: 0,
888
889
  lineNumbers: [],
889
890
  };
890
891
  existing.usageCount++;
891
892
  existing.lineNumbers.push(line);
892
- usageMap.set(rawText(leftmost), existing);
893
+ usageMap.set(getNodeText(leftmost, sourceCode), existing);
893
894
  }
894
895
  }
895
896
  }
@@ -898,31 +899,31 @@ export function extractIdentifierUsage(root, sourceCode, importNames) {
898
899
  else if (node.type === 'decorator') {
899
900
  // decorator → identifier (e.g., @deprecated)
900
901
  const id = findChildOfType(node, 'identifier');
901
- if (id && importNames.has(rawText(id))) {
902
+ if (id && importNames.has(getNodeText(id, sourceCode))) {
902
903
  const { line } = bridgeGetLineAndColumn(id);
903
- const existing = usageMap.get(rawText(id)) || {
904
+ const existing = usageMap.get(getNodeText(id, sourceCode)) || {
904
905
  usageType: 'direct',
905
906
  usageCount: 0,
906
907
  lineNumbers: [],
907
908
  };
908
909
  existing.usageCount++;
909
910
  existing.lineNumbers.push(line);
910
- usageMap.set(rawText(id), existing);
911
+ usageMap.set(getNodeText(id, sourceCode), existing);
911
912
  }
912
913
  // decorator → call_expression → identifier (e.g., @Component())
913
914
  const callExpr = findChildOfType(node, 'call_expression');
914
915
  if (callExpr) {
915
916
  const callee = callExpr.children?.[0];
916
- if (callee?.type === 'identifier' && importNames.has(rawText(callee))) {
917
+ if (callee?.type === 'identifier' && importNames.has(getNodeText(callee, sourceCode))) {
917
918
  const { line } = bridgeGetLineAndColumn(callee);
918
- const existing = usageMap.get(rawText(callee)) || {
919
+ const existing = usageMap.get(getNodeText(callee, sourceCode)) || {
919
920
  usageType: 'direct',
920
921
  usageCount: 0,
921
922
  lineNumbers: [],
922
923
  };
923
924
  existing.usageCount++;
924
925
  existing.lineNumbers.push(line);
925
- usageMap.set(rawText(callee), existing);
926
+ usageMap.set(getNodeText(callee, sourceCode), existing);
926
927
  }
927
928
  }
928
929
  }
@@ -930,44 +931,44 @@ export function extractIdentifierUsage(root, sourceCode, importNames) {
930
931
  else if (node.type === 'pair') {
931
932
  const key = node.children?.find(c => c.type === 'property_identifier');
932
933
  const value = node.children?.find(c => c.type === 'identifier' && c !== key);
933
- if (value && importNames.has(rawText(value))) {
934
+ if (value && importNames.has(getNodeText(value, sourceCode))) {
934
935
  const { line } = bridgeGetLineAndColumn(value);
935
- const existing = usageMap.get(rawText(value)) || {
936
+ const existing = usageMap.get(getNodeText(value, sourceCode)) || {
936
937
  usageType: 'direct',
937
938
  usageCount: 0,
938
939
  lineNumbers: [],
939
940
  };
940
941
  existing.usageCount++;
941
942
  existing.lineNumbers.push(line);
942
- usageMap.set(rawText(value), existing);
943
+ usageMap.set(getNodeText(value, sourceCode), existing);
943
944
  }
944
945
  }
945
946
  // --- Shorthand property assignments: { ComponentA, ComponentB } ---
946
947
  else if (node.type === 'shorthand_property_identifier') {
947
948
  // The value node is a reference to an imported name
948
949
  const ref = node.children?.find(c => c.type === 'identifier');
949
- if (ref && importNames.has(rawText(ref))) {
950
+ if (ref && importNames.has(getNodeText(ref, sourceCode))) {
950
951
  const { line } = bridgeGetLineAndColumn(ref);
951
- const existing = usageMap.get(rawText(ref)) || {
952
+ const existing = usageMap.get(getNodeText(ref, sourceCode)) || {
952
953
  usageType: 'direct',
953
954
  usageCount: 0,
954
955
  lineNumbers: [],
955
956
  };
956
957
  existing.usageCount++;
957
958
  existing.lineNumbers.push(line);
958
- usageMap.set(rawText(ref), existing);
959
+ usageMap.set(getNodeText(ref, sourceCode), existing);
959
960
  }
960
- else if (ref && importNames.has(rawText(ref))) {
961
+ else if (ref && importNames.has(getNodeText(ref, sourceCode))) {
961
962
  // shorthand_property_identifier might itself be just text
962
963
  const { line } = bridgeGetLineAndColumn(node);
963
- const existing = usageMap.get(rawText(node)) || {
964
+ const existing = usageMap.get(getNodeText(node, sourceCode)) || {
964
965
  usageType: 'direct',
965
966
  usageCount: 0,
966
967
  lineNumbers: [],
967
968
  };
968
969
  existing.usageCount++;
969
970
  existing.lineNumbers.push(line);
970
- usageMap.set(rawText(node), existing);
971
+ usageMap.set(getNodeText(node, sourceCode), existing);
971
972
  }
972
973
  }
973
974
  });
@@ -980,7 +981,7 @@ export function extractIdentifierUsage(root, sourceCode, importNames) {
980
981
  * Check if a function name is defined locally in the file.
981
982
  * Uses tree-sitter instead of TS API.
982
983
  */
983
- export function isLocalFunction(name, root) {
984
+ export function isLocalFunction(name, root, sourceCode) {
984
985
  let found = false;
985
986
  walkAST(root, (node) => {
986
987
  if (found)
@@ -988,7 +989,7 @@ export function isLocalFunction(name, root) {
988
989
  // function declarations
989
990
  if (node.type === 'function_declaration') {
990
991
  const nameNode = findChildOfType(node, 'identifier');
991
- if (nameNode && rawText(nameNode) === name) {
992
+ if (nameNode && getNodeText(nameNode, sourceCode) === name) {
992
993
  found = true;
993
994
  }
994
995
  }
@@ -996,14 +997,14 @@ export function isLocalFunction(name, root) {
996
997
  if (node.type === 'variable_declarator') {
997
998
  const nameNode = findChildOfType(node, 'identifier');
998
999
  const initializer = node.children?.find(c => c.type === 'arrow_function' || c.type === 'function_expression');
999
- if (nameNode && initializer && rawText(nameNode) === name) {
1000
+ if (nameNode && initializer && getNodeText(nameNode, sourceCode) === name) {
1000
1001
  found = true;
1001
1002
  }
1002
1003
  }
1003
1004
  // class declarations
1004
1005
  if (node.type === 'class_declaration') {
1005
1006
  const nameNode = findChildOfType(node, 'identifier');
1006
- if (nameNode && rawText(nameNode) === name) {
1007
+ if (nameNode && getNodeText(nameNode, sourceCode) === name) {
1007
1008
  found = true;
1008
1009
  }
1009
1010
  }