code-auditor-mcp 3.4.18 → 3.5.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 (171) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +68 -0
  3. package/README.md +5 -5
  4. package/dist/analyzers/applicability.d.ts +13 -0
  5. package/dist/analyzers/applicability.d.ts.map +1 -1
  6. package/dist/analyzers/applicability.js +37 -0
  7. package/dist/analyzers/applicability.js.map +1 -1
  8. package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts.map +1 -1
  9. package/dist/analyzers/cross-language/APIContractAnalyzer.js +23 -2
  10. package/dist/analyzers/cross-language/APIContractAnalyzer.js.map +1 -1
  11. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts +52 -9
  12. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts.map +1 -1
  13. package/dist/analyzers/cross-language/DependencyGraphBuilder.js +228 -55
  14. package/dist/analyzers/cross-language/DependencyGraphBuilder.js.map +1 -1
  15. package/dist/analyzers/cross-language/SchemaValidator.d.ts +19 -12
  16. package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -1
  17. package/dist/analyzers/cross-language/SchemaValidator.js +78 -111
  18. package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -1
  19. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts +0 -6
  20. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts.map +1 -1
  21. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js +85 -73
  22. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js.map +1 -1
  23. package/dist/analyzers/documentationAnalyzer.js +5 -5
  24. package/dist/analyzers/documentationAnalyzer.js.map +1 -1
  25. package/dist/analyzers/invariantsAnalyzer.d.ts.map +1 -1
  26. package/dist/analyzers/invariantsAnalyzer.js +1 -0
  27. package/dist/analyzers/invariantsAnalyzer.js.map +1 -1
  28. package/dist/analyzers/provenance.d.ts +7 -9
  29. package/dist/analyzers/provenance.d.ts.map +1 -1
  30. package/dist/analyzers/provenance.js +88 -124
  31. package/dist/analyzers/provenance.js.map +1 -1
  32. package/dist/analyzers/reactAnalyzer.d.ts.map +1 -1
  33. package/dist/analyzers/reactAnalyzer.js +120 -21
  34. package/dist/analyzers/reactAnalyzer.js.map +1 -1
  35. package/dist/analyzers/ruleRegistry.d.ts +21 -0
  36. package/dist/analyzers/ruleRegistry.d.ts.map +1 -1
  37. package/dist/analyzers/ruleRegistry.js +61 -12
  38. package/dist/analyzers/ruleRegistry.js.map +1 -1
  39. package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts.map +1 -1
  40. package/dist/analyzers/universal/UniversalConventionsAnalyzer.js +60 -24
  41. package/dist/analyzers/universal/UniversalConventionsAnalyzer.js.map +1 -1
  42. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -1
  43. package/dist/analyzers/universal/UniversalDRYAnalyzer.js +5 -2
  44. package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -1
  45. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -1
  46. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +82 -71
  47. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -1
  48. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts +2 -1
  49. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -1
  50. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +23 -12
  51. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -1
  52. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts +11 -1
  53. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -1
  54. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +60 -22
  55. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -1
  56. package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts +2 -3
  57. package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts.map +1 -1
  58. package/dist/analyzers/universal/UniversalStylesAnalyzer.js +258 -87
  59. package/dist/analyzers/universal/UniversalStylesAnalyzer.js.map +1 -1
  60. package/dist/analyzers/universal/schema/codeAnalysis.d.ts.map +1 -1
  61. package/dist/analyzers/universal/schema/codeAnalysis.js +7 -1
  62. package/dist/analyzers/universal/schema/codeAnalysis.js.map +1 -1
  63. package/dist/analyzers/universal/schema/jsonSchema.js +7 -11
  64. package/dist/analyzers/universal/schema/jsonSchema.js.map +1 -1
  65. package/dist/auditRouter.d.ts +41 -0
  66. package/dist/auditRouter.d.ts.map +1 -0
  67. package/dist/auditRouter.js +185 -0
  68. package/dist/auditRouter.js.map +1 -0
  69. package/dist/auditRunner.d.ts.map +1 -1
  70. package/dist/auditRunner.js +93 -57
  71. package/dist/auditRunner.js.map +1 -1
  72. package/dist/cli.js +239 -18
  73. package/dist/cli.js.map +1 -1
  74. package/dist/codeIndexDB.d.ts.map +1 -1
  75. package/dist/codeIndexDB.js +35 -1
  76. package/dist/codeIndexDB.js.map +1 -1
  77. package/dist/componentScanner.d.ts.map +1 -1
  78. package/dist/componentScanner.js +2 -1
  79. package/dist/componentScanner.js.map +1 -1
  80. package/dist/config/configLoader.d.ts +9 -0
  81. package/dist/config/configLoader.d.ts.map +1 -1
  82. package/dist/config/configLoader.js +30 -2
  83. package/dist/config/configLoader.js.map +1 -1
  84. package/dist/config/defaults.d.ts.map +1 -1
  85. package/dist/config/defaults.js +9 -2
  86. package/dist/config/defaults.js.map +1 -1
  87. package/dist/functionScanner.d.ts.map +1 -1
  88. package/dist/functionScanner.js +1 -17
  89. package/dist/functionScanner.js.map +1 -1
  90. package/dist/invariants/ruleEngine.d.ts +8 -0
  91. package/dist/invariants/ruleEngine.d.ts.map +1 -1
  92. package/dist/invariants/ruleEngine.js +35 -16
  93. package/dist/invariants/ruleEngine.js.map +1 -1
  94. package/dist/languages/LanguageOrchestrator.d.ts +9 -10
  95. package/dist/languages/LanguageOrchestrator.d.ts.map +1 -1
  96. package/dist/languages/LanguageOrchestrator.js +135 -101
  97. package/dist/languages/LanguageOrchestrator.js.map +1 -1
  98. package/dist/languages/RuntimeManager.d.ts +28 -1
  99. package/dist/languages/RuntimeManager.d.ts.map +1 -1
  100. package/dist/languages/RuntimeManager.js +158 -47
  101. package/dist/languages/RuntimeManager.js.map +1 -1
  102. package/dist/languages/go/GoAdapter.d.ts +2 -0
  103. package/dist/languages/go/GoAdapter.d.ts.map +1 -1
  104. package/dist/languages/go/GoAdapter.js +15 -22
  105. package/dist/languages/go/GoAdapter.js.map +1 -1
  106. package/dist/languages/go/analyzer +0 -0
  107. package/dist/languages/go/analyzer-src/analyzer.go +510 -0
  108. package/dist/languages/go/analyzer-src/go.mod +3 -0
  109. package/dist/languages/go/analyzer-src/indexer.go +268 -0
  110. package/dist/languages/go/analyzer-src/parser.go +461 -0
  111. package/dist/languages/go/analyzer-src/solid.go +395 -0
  112. package/dist/languages/go/analyzer-src/testconventions.go +25 -0
  113. package/dist/languages/go/analyzer-src/types.go +148 -0
  114. package/dist/languages/go/go.mod +7 -0
  115. package/dist/languages/go/main.go +203 -0
  116. package/dist/languages/testConventions.d.ts +35 -0
  117. package/dist/languages/testConventions.d.ts.map +1 -0
  118. package/dist/languages/testConventions.js +51 -0
  119. package/dist/languages/testConventions.js.map +1 -0
  120. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts +3 -0
  121. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts.map +1 -1
  122. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js +25 -18
  123. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js.map +1 -1
  124. package/dist/mcp-tools/whitelistTools.d.ts +1 -1
  125. package/dist/mcp-tools-shared.d.ts +0 -3
  126. package/dist/mcp-tools-shared.d.ts.map +1 -1
  127. package/dist/mcp-tools-shared.js +8 -117
  128. package/dist/mcp-tools-shared.js.map +1 -1
  129. package/dist/mcp.js +3 -1
  130. package/dist/mcp.js.map +1 -1
  131. package/dist/mcpAuditJobs.d.ts.map +1 -1
  132. package/dist/mcpAuditJobs.js +13 -0
  133. package/dist/mcpAuditJobs.js.map +1 -1
  134. package/dist/nextFile.d.ts +21 -0
  135. package/dist/nextFile.d.ts.map +1 -0
  136. package/dist/nextFile.js +51 -0
  137. package/dist/nextFile.js.map +1 -0
  138. package/dist/nextFileIncremental.d.ts +141 -0
  139. package/dist/nextFileIncremental.d.ts.map +1 -0
  140. package/dist/nextFileIncremental.js +314 -0
  141. package/dist/nextFileIncremental.js.map +1 -0
  142. package/dist/pipeline.d.ts.map +1 -1
  143. package/dist/pipeline.js +22 -0
  144. package/dist/pipeline.js.map +1 -1
  145. package/dist/pipelineAdapters.d.ts +17 -0
  146. package/dist/pipelineAdapters.d.ts.map +1 -1
  147. package/dist/pipelineAdapters.js +791 -40
  148. package/dist/pipelineAdapters.js.map +1 -1
  149. package/dist/reporting/jsonReportGenerator.d.ts.map +1 -1
  150. package/dist/reporting/jsonReportGenerator.js +11 -30
  151. package/dist/reporting/jsonReportGenerator.js.map +1 -1
  152. package/dist/styles/styleIndexer.d.ts +7 -0
  153. package/dist/styles/styleIndexer.d.ts.map +1 -1
  154. package/dist/styles/styleIndexer.js +44 -61
  155. package/dist/styles/styleIndexer.js.map +1 -1
  156. package/dist/types/crossLanguage.d.ts +1 -0
  157. package/dist/types/crossLanguage.d.ts.map +1 -1
  158. package/dist/types.d.ts +27 -4
  159. package/dist/types.d.ts.map +1 -1
  160. package/dist/types.js.map +1 -1
  161. package/dist/utils/fileDiscovery.d.ts +9 -0
  162. package/dist/utils/fileDiscovery.d.ts.map +1 -1
  163. package/dist/utils/fileDiscovery.js +18 -0
  164. package/dist/utils/fileDiscovery.js.map +1 -1
  165. package/package.json +6 -4
  166. package/plugin/.claude-plugin/plugin.json +1 -1
  167. package/plugin/README.md +6 -6
  168. package/plugin/hooks/hooks.json +4 -0
  169. package/plugin/scripts/hook-self-audit.sh +107 -0
  170. package/plugin/skills/code-auditor/SKILL-RULE-KINDS.md +55 -9
  171. package/plugin/skills/code-auditor/SKILL.md +20 -21
@@ -0,0 +1,203 @@
1
+ package main
2
+
3
+ import (
4
+ "bufio"
5
+ "encoding/json"
6
+ "fmt"
7
+ "io"
8
+ "os"
9
+ "strings"
10
+
11
+ "code-auditor-go/analyzer"
12
+ )
13
+
14
+ // JSON-RPC request structure
15
+ type Request struct {
16
+ Method string `json:"method"`
17
+ Params interface{} `json:"params"`
18
+ ID interface{} `json:"id"`
19
+ }
20
+
21
+ // JSON-RPC response structure
22
+ type Response struct {
23
+ Result interface{} `json:"result,omitempty"`
24
+ Error *RPCError `json:"error,omitempty"`
25
+ ID interface{} `json:"id"`
26
+ }
27
+
28
+ // RPC error structure
29
+ type RPCError struct {
30
+ Code int `json:"code"`
31
+ Message string `json:"message"`
32
+ }
33
+
34
+ // Analysis parameters structure
35
+ type AnalysisParams struct {
36
+ Files []string `json:"files"`
37
+ Options analyzer.AnalysisOptions `json:"options"`
38
+ }
39
+
40
+ // Content analysis parameters structure
41
+ type ContentAnalysisParams struct {
42
+ File string `json:"file"`
43
+ Content string `json:"content"`
44
+ Options analyzer.AnalysisOptions `json:"options"`
45
+ }
46
+
47
+ func main() {
48
+ // Log startup to stderr (won't interfere with JSON-RPC on stdout)
49
+ fmt.Fprintf(os.Stderr, "[GoAnalyzer] Starting Go analyzer server\n")
50
+
51
+ // Create a buffered reader for stdin
52
+ reader := bufio.NewReader(os.Stdin)
53
+
54
+ for {
55
+ // Read a line from stdin
56
+ line, err := reader.ReadString('\n')
57
+ if err != nil {
58
+ if err == io.EOF {
59
+ fmt.Fprintf(os.Stderr, "[GoAnalyzer] EOF reached\n")
60
+ break
61
+ }
62
+ fmt.Fprintf(os.Stderr, "[GoAnalyzer] Read error: %v\n", err)
63
+ sendError(-1, fmt.Sprintf("Error reading input: %v", err), nil)
64
+ continue
65
+ }
66
+
67
+ line = strings.TrimSpace(line)
68
+ fmt.Fprintf(os.Stderr, "[GoAnalyzer] Received: %s\n", line)
69
+
70
+ if line == "" {
71
+ fmt.Fprintf(os.Stderr, "[GoAnalyzer] Empty line, skipping\n")
72
+ continue
73
+ }
74
+
75
+ // Parse JSON-RPC request
76
+ var req Request
77
+ if err := json.Unmarshal([]byte(line), &req); err != nil {
78
+ fmt.Fprintf(os.Stderr, "[GoAnalyzer] Parse error: %v\n", err)
79
+ sendError(-32700, "Parse error", req.ID)
80
+ continue
81
+ }
82
+
83
+ fmt.Fprintf(os.Stderr, "[GoAnalyzer] Handling request: %s\n", req.Method)
84
+ // Handle the request
85
+ handleRequest(req)
86
+ }
87
+ fmt.Fprintf(os.Stderr, "[GoAnalyzer] Server shutting down\n")
88
+ }
89
+
90
+ func handleRequest(req Request) {
91
+ switch req.Method {
92
+ case "analyze":
93
+ handleAnalyze(req)
94
+ case "analyzeContent":
95
+ handleAnalyzeContent(req)
96
+ case "ping":
97
+ sendResult("pong", req.ID)
98
+ case "version":
99
+ sendResult("1.0.0", req.ID)
100
+ default:
101
+ sendError(-32601, "Method not found", req.ID)
102
+ }
103
+ }
104
+
105
+ func handleAnalyze(req Request) {
106
+ // Parse parameters
107
+ paramsBytes, err := json.Marshal(req.Params)
108
+ if err != nil {
109
+ sendError(-32602, "Invalid params", req.ID)
110
+ return
111
+ }
112
+
113
+ var params AnalysisParams
114
+ if err := json.Unmarshal(paramsBytes, &params); err != nil {
115
+ sendError(-32602, "Invalid params", req.ID)
116
+ return
117
+ }
118
+
119
+ // Filter Go files
120
+ var goFiles []string
121
+ for _, file := range params.Files {
122
+ if strings.HasSuffix(file, ".go") {
123
+ goFiles = append(goFiles, file)
124
+ }
125
+ }
126
+
127
+ if len(goFiles) == 0 {
128
+ sendError(-32603, "No Go files provided", req.ID)
129
+ return
130
+ }
131
+
132
+ // Create and run analyzer
133
+ goAnalyzer := analyzer.NewAnalyzer(params.Options)
134
+ result, err := goAnalyzer.Analyze(goFiles)
135
+ if err != nil {
136
+ sendError(-32603, fmt.Sprintf("Analysis failed: %v", err), req.ID)
137
+ return
138
+ }
139
+
140
+ // Send successful result
141
+ sendResult(result, req.ID)
142
+ }
143
+
144
+ func sendResult(result interface{}, id interface{}) {
145
+ response := Response{
146
+ Result: result,
147
+ ID: id,
148
+ }
149
+ sendResponse(response)
150
+ }
151
+
152
+ func sendError(code int, message string, id interface{}) {
153
+ response := Response{
154
+ Error: &RPCError{
155
+ Code: code,
156
+ Message: message,
157
+ },
158
+ ID: id,
159
+ }
160
+ sendResponse(response)
161
+ }
162
+
163
+ func sendResponse(response Response) {
164
+ data, err := json.Marshal(response)
165
+ if err != nil {
166
+ fmt.Fprintf(os.Stderr, "Error marshaling response: %v\n", err)
167
+ return
168
+ }
169
+
170
+ fmt.Println(string(data))
171
+ }
172
+
173
+ func handleAnalyzeContent(req Request) {
174
+ // Parse parameters
175
+ paramsBytes, err := json.Marshal(req.Params)
176
+ if err != nil {
177
+ sendError(-32602, "Invalid params", req.ID)
178
+ return
179
+ }
180
+
181
+ var params ContentAnalysisParams
182
+ if err := json.Unmarshal(paramsBytes, &params); err != nil {
183
+ sendError(-32602, "Invalid params", req.ID)
184
+ return
185
+ }
186
+
187
+ // Validate file extension
188
+ if !strings.HasSuffix(params.File, ".go") {
189
+ sendError(-32603, "Not a Go file", req.ID)
190
+ return
191
+ }
192
+
193
+ // Create and run analyzer with content
194
+ goAnalyzer := analyzer.NewAnalyzer(params.Options)
195
+ result, err := goAnalyzer.AnalyzeContent(params.File, params.Content)
196
+ if err != nil {
197
+ sendError(-32603, fmt.Sprintf("Content analysis failed: %v", err), req.ID)
198
+ return
199
+ }
200
+
201
+ // Send successful result
202
+ sendResult(result, req.ID)
203
+ }
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Per-language test-file and test-function conventions.
3
+ *
4
+ * `documentation.exemptPatterns` was a hardcoded TS/JS list of path substrings
5
+ * (`.test.`, `.spec.`, `__tests__`, `/tests?/`) that only described one
6
+ * language family. When the Go adapter shipped, none of those patterns matched
7
+ * Go's actual test convention — `*_test.go` files and `Test*`/`Benchmark*`/
8
+ * `Example*`/`Fuzz*` functions — so the documentation analyzer re-flagged every
9
+ * Go test function as "exported function lacks documentation" (618 of 762
10
+ * findings on a real Go corpus).
11
+ *
12
+ * The fix is not four more strings appended to the TS/JS list; it is a
13
+ * per-language table of test conventions that travels with the language, so a
14
+ * new language (Python's `test_*.py` / `test_*`, Rust's `#[cfg(test)]`) brings
15
+ * its own conventions instead of waiting for someone to notice the gap after a
16
+ * corpus run. A language absent from this table simply has no test convention
17
+ * and is not exempted — the failure is a visible empty result, not a silent
18
+ * wrong one.
19
+ */
20
+ export interface TestConvention {
21
+ /** Regexes matched against a file path — a match marks the file a test file. */
22
+ filePatterns: RegExp[];
23
+ /** Regexes matched against a function name — a match marks the function a test function. */
24
+ functionPatterns: RegExp[];
25
+ }
26
+ /**
27
+ * True when `filePath` is a test file under `language`'s native convention.
28
+ * Keys off the canonical adapter name (`go`, `typescript`, `javascript`).
29
+ */
30
+ export declare function isTestFile(language: string, filePath: string): boolean;
31
+ /**
32
+ * True when `name` is a test function under `language`'s native convention.
33
+ */
34
+ export declare function isTestFunction(language: string, name: string): boolean;
35
+ //# sourceMappingURL=testConventions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testConventions.d.ts","sourceRoot":"","sources":["../../src/languages/testConventions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,WAAW,cAAc;IAC7B,gFAAgF;IAChF,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,4FAA4F;IAC5F,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAmBD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGtE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAGtE"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Per-language test-file and test-function conventions.
3
+ *
4
+ * `documentation.exemptPatterns` was a hardcoded TS/JS list of path substrings
5
+ * (`.test.`, `.spec.`, `__tests__`, `/tests?/`) that only described one
6
+ * language family. When the Go adapter shipped, none of those patterns matched
7
+ * Go's actual test convention — `*_test.go` files and `Test*`/`Benchmark*`/
8
+ * `Example*`/`Fuzz*` functions — so the documentation analyzer re-flagged every
9
+ * Go test function as "exported function lacks documentation" (618 of 762
10
+ * findings on a real Go corpus).
11
+ *
12
+ * The fix is not four more strings appended to the TS/JS list; it is a
13
+ * per-language table of test conventions that travels with the language, so a
14
+ * new language (Python's `test_*.py` / `test_*`, Rust's `#[cfg(test)]`) brings
15
+ * its own conventions instead of waiting for someone to notice the gap after a
16
+ * corpus run. A language absent from this table simply has no test convention
17
+ * and is not exempted — the failure is a visible empty result, not a silent
18
+ * wrong one.
19
+ */
20
+ const TEST_CONVENTIONS = {
21
+ // typescript/javascript test files are still served by the user-configurable
22
+ // `exemptPatterns` list (`.test.`, `.spec.`, `__tests__`, …) for backward
23
+ // compatibility; they are not duplicated here. The table is the home for
24
+ // conventions that a generic path-regex list cannot express per language.
25
+ typescript: { filePatterns: [], functionPatterns: [] },
26
+ javascript: { filePatterns: [], functionPatterns: [] },
27
+ go: {
28
+ // `go test` compiles only `*_test.go`; exported Test/Benchmark/Example/Fuzz
29
+ // funcs are the testing package's entry points, never public API.
30
+ filePatterns: [/_test\.go$/i],
31
+ functionPatterns: [/^Test/, /^Benchmark/, /^Example/, /^Fuzz/],
32
+ },
33
+ // python: { filePatterns: [/^test_.*\.py$/i, /.*_test\.py$/i], functionPatterns: [/^test_/] },
34
+ // rust: { filePatterns: [], functionPatterns: [] }, // #[cfg(test)] is module-scoped, not name-scoped
35
+ };
36
+ /**
37
+ * True when `filePath` is a test file under `language`'s native convention.
38
+ * Keys off the canonical adapter name (`go`, `typescript`, `javascript`).
39
+ */
40
+ export function isTestFile(language, filePath) {
41
+ const convention = TEST_CONVENTIONS[language];
42
+ return !!convention && convention.filePatterns.some((re) => re.test(filePath));
43
+ }
44
+ /**
45
+ * True when `name` is a test function under `language`'s native convention.
46
+ */
47
+ export function isTestFunction(language, name) {
48
+ const convention = TEST_CONVENTIONS[language];
49
+ return !!convention && convention.functionPatterns.some((re) => re.test(name));
50
+ }
51
+ //# sourceMappingURL=testConventions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testConventions.js","sourceRoot":"","sources":["../../src/languages/testConventions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AASH,MAAM,gBAAgB,GAAmC;IACvD,6EAA6E;IAC7E,0EAA0E;IAC1E,yEAAyE;IACzE,0EAA0E;IAC1E,UAAU,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE;IACtD,UAAU,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE;IACtD,EAAE,EAAE;QACF,4EAA4E;QAC5E,kEAAkE;QAClE,YAAY,EAAE,CAAC,aAAa,CAAC;QAC7B,gBAAgB,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,CAAC;KAC/D;IACD,+FAA+F;IAC/F,wGAAwG;CACzG,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,QAAgB;IAC3D,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC9C,OAAO,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,IAAY;IAC3D,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC9C,OAAO,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACjF,CAAC"}
@@ -220,6 +220,9 @@ declare class TsConstantResolution extends TsDynamicStringConstruction {
220
220
  * imported constant or a `for…in`/`for…of` loop variable. Returns either a
221
221
  * declaration node or a fully resolved constant. */
222
222
  private resolveDeclarationOrConstant;
223
+ /** Resolve `name` in `scopeRoot`, falling back to the root scope when the
224
+ * local lookup misses and an enclosing non-root scope exists. */
225
+ protected resolveDeclaration(scopeRoot: ASTNode, enclosing: ASTNode | null, ast: AST, name: string): ASTNode | null;
223
226
  /** Trace a `for…in`/`for…of` loop variable whose identifier appears directly
224
227
  * under a `for_in_statement` `left` child. tree-sitter-typescript (v0.x)
225
228
  * parses both loop forms as `for_in_statement`; the loop variable is a bare
@@ -1 +1 @@
1
- {"version":3,"file":"TreeSitterTypeScriptAdapter.d.ts","sourceRoot":"","sources":["../../../src/languages/typescript/TreeSitterTypeScriptAdapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TreeSitterTypeScriptAdapter.d.ts","sourceRoot":"","sources":["../../../src/languages/typescript/TreeSitterTypeScriptAdapter.ts"],"names":[],"mappings":"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"}
@@ -499,20 +499,24 @@ class TsExtraction extends TsNameDocumentation {
499
499
  const isAbstract = this.hasModifier(node, 'abstract');
500
500
  const isExported = this.isNodeExported(node);
501
501
  const jsDoc = this.extractDocumentation(node);
502
- // Extract extends
502
+ // Extract extends / implements.
503
+ // tree-sitter-typescript nests these under a `class_heritage` child whose
504
+ // `extends_clause`/`implements_clause` children carry no field name, so
505
+ // `node.childForFieldName('extends')` returns undefined. Navigate by node
506
+ // type instead.
503
507
  let extendsName;
504
- const extendsClause = node.childForFieldName?.('extends');
505
- if (extendsClause) {
506
- const firstTypeChild = extendsClause.namedChildren[0];
508
+ let implementsList;
509
+ const heritage = node.namedChildren.find((c) => c.type === 'class_heritage');
510
+ if (heritage) {
511
+ const extendsClause = heritage.namedChildren.find((c) => c.type === 'extends_clause');
512
+ const firstTypeChild = extendsClause?.namedChildren[0];
507
513
  if (firstTypeChild) {
508
514
  extendsName = firstTypeChild.text;
509
515
  }
510
- }
511
- // Extract implements
512
- let implementsList;
513
- const implementsClause = node.childForFieldName?.('implements');
514
- if (implementsClause) {
515
- implementsList = implementsClause.namedChildren.map((c) => c.text);
516
+ const implementsClause = heritage.namedChildren.find((c) => c.type === 'implements_clause');
517
+ if (implementsClause) {
518
+ implementsList = implementsClause.namedChildren.map((c) => c.text);
519
+ }
516
520
  }
517
521
  const classBody = node.childForFieldName?.('body');
518
522
  const { methods, properties } = classBody
@@ -1500,6 +1504,15 @@ class TsConstantResolution extends TsDynamicStringConstruction {
1500
1504
  return { declNode: null, constant: forInResult };
1501
1505
  return { declNode: null, constant: null };
1502
1506
  }
1507
+ /** Resolve `name` in `scopeRoot`, falling back to the root scope when the
1508
+ * local lookup misses and an enclosing non-root scope exists. */
1509
+ resolveDeclaration(scopeRoot, enclosing, ast, name) {
1510
+ let decl = this.findDeclarationInScope(scopeRoot, name);
1511
+ if (!decl && enclosing && enclosing !== ast.root) {
1512
+ decl = this.findDeclarationInScope(ast.root, name);
1513
+ }
1514
+ return decl;
1515
+ }
1503
1516
  /** Trace a `for…in`/`for…of` loop variable whose identifier appears directly
1504
1517
  * under a `for_in_statement` `left` child. tree-sitter-typescript (v0.x)
1505
1518
  * parses both loop forms as `for_in_statement`; the loop variable is a bare
@@ -1520,10 +1533,7 @@ class TsConstantResolution extends TsDynamicStringConstruction {
1520
1533
  const right = tsCurrent.childForFieldName?.('right');
1521
1534
  if (right && right.type === 'identifier') {
1522
1535
  const iterName = right.text;
1523
- let iterDecl = this.findDeclarationInScope(scopeRoot, iterName);
1524
- if (!iterDecl && enclosing && enclosing !== ast.root) {
1525
- iterDecl = this.findDeclarationInScope(ast.root, iterName);
1526
- }
1536
+ let iterDecl = this.resolveDeclaration(scopeRoot, enclosing, ast, iterName);
1527
1537
  if (iterDecl) {
1528
1538
  const iterRaw = iterDecl.raw;
1529
1539
  const iterValue = iterRaw.childForFieldName?.('value');
@@ -1555,10 +1565,7 @@ class TsConstantResolution extends TsDynamicStringConstruction {
1555
1565
  if (!iterable || iterable.type !== 'identifier')
1556
1566
  return false;
1557
1567
  const iterName = iterable.text;
1558
- let iterDecl = this.findDeclarationInScope(scopeRoot, iterName);
1559
- if (!iterDecl && enclosing && enclosing !== ast.root) {
1560
- iterDecl = this.findDeclarationInScope(ast.root, iterName);
1561
- }
1568
+ let iterDecl = this.resolveDeclaration(scopeRoot, enclosing, ast, iterName);
1562
1569
  if (!iterDecl)
1563
1570
  return false;
1564
1571
  const iterRaw = iterDecl.raw;