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.
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +68 -0
- package/README.md +5 -5
- package/dist/analyzers/applicability.d.ts +13 -0
- package/dist/analyzers/applicability.d.ts.map +1 -1
- package/dist/analyzers/applicability.js +37 -0
- package/dist/analyzers/applicability.js.map +1 -1
- package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/cross-language/APIContractAnalyzer.js +23 -2
- package/dist/analyzers/cross-language/APIContractAnalyzer.js.map +1 -1
- package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts +52 -9
- package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts.map +1 -1
- package/dist/analyzers/cross-language/DependencyGraphBuilder.js +228 -55
- package/dist/analyzers/cross-language/DependencyGraphBuilder.js.map +1 -1
- package/dist/analyzers/cross-language/SchemaValidator.d.ts +19 -12
- package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -1
- package/dist/analyzers/cross-language/SchemaValidator.js +78 -111
- package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -1
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts +0 -6
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js +85 -73
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js.map +1 -1
- package/dist/analyzers/documentationAnalyzer.js +5 -5
- package/dist/analyzers/documentationAnalyzer.js.map +1 -1
- package/dist/analyzers/invariantsAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/invariantsAnalyzer.js +1 -0
- package/dist/analyzers/invariantsAnalyzer.js.map +1 -1
- package/dist/analyzers/provenance.d.ts +7 -9
- package/dist/analyzers/provenance.d.ts.map +1 -1
- package/dist/analyzers/provenance.js +88 -124
- package/dist/analyzers/provenance.js.map +1 -1
- package/dist/analyzers/reactAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/reactAnalyzer.js +120 -21
- package/dist/analyzers/reactAnalyzer.js.map +1 -1
- package/dist/analyzers/ruleRegistry.d.ts +21 -0
- package/dist/analyzers/ruleRegistry.d.ts.map +1 -1
- package/dist/analyzers/ruleRegistry.js +61 -12
- package/dist/analyzers/ruleRegistry.js.map +1 -1
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.js +60 -24
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js +5 -2
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +82 -71
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts +2 -1
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +23 -12
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts +11 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +60 -22
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts +2 -3
- package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalStylesAnalyzer.js +258 -87
- package/dist/analyzers/universal/UniversalStylesAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/schema/codeAnalysis.d.ts.map +1 -1
- package/dist/analyzers/universal/schema/codeAnalysis.js +7 -1
- package/dist/analyzers/universal/schema/codeAnalysis.js.map +1 -1
- package/dist/analyzers/universal/schema/jsonSchema.js +7 -11
- package/dist/analyzers/universal/schema/jsonSchema.js.map +1 -1
- package/dist/auditRouter.d.ts +41 -0
- package/dist/auditRouter.d.ts.map +1 -0
- package/dist/auditRouter.js +185 -0
- package/dist/auditRouter.js.map +1 -0
- package/dist/auditRunner.d.ts.map +1 -1
- package/dist/auditRunner.js +93 -57
- package/dist/auditRunner.js.map +1 -1
- package/dist/cli.js +239 -18
- package/dist/cli.js.map +1 -1
- package/dist/codeIndexDB.d.ts.map +1 -1
- package/dist/codeIndexDB.js +35 -1
- package/dist/codeIndexDB.js.map +1 -1
- package/dist/componentScanner.d.ts.map +1 -1
- package/dist/componentScanner.js +2 -1
- package/dist/componentScanner.js.map +1 -1
- package/dist/config/configLoader.d.ts +9 -0
- package/dist/config/configLoader.d.ts.map +1 -1
- package/dist/config/configLoader.js +30 -2
- package/dist/config/configLoader.js.map +1 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +9 -2
- package/dist/config/defaults.js.map +1 -1
- package/dist/functionScanner.d.ts.map +1 -1
- package/dist/functionScanner.js +1 -17
- package/dist/functionScanner.js.map +1 -1
- package/dist/invariants/ruleEngine.d.ts +8 -0
- package/dist/invariants/ruleEngine.d.ts.map +1 -1
- package/dist/invariants/ruleEngine.js +35 -16
- package/dist/invariants/ruleEngine.js.map +1 -1
- package/dist/languages/LanguageOrchestrator.d.ts +9 -10
- package/dist/languages/LanguageOrchestrator.d.ts.map +1 -1
- package/dist/languages/LanguageOrchestrator.js +135 -101
- package/dist/languages/LanguageOrchestrator.js.map +1 -1
- package/dist/languages/RuntimeManager.d.ts +28 -1
- package/dist/languages/RuntimeManager.d.ts.map +1 -1
- package/dist/languages/RuntimeManager.js +158 -47
- package/dist/languages/RuntimeManager.js.map +1 -1
- package/dist/languages/go/GoAdapter.d.ts +2 -0
- package/dist/languages/go/GoAdapter.d.ts.map +1 -1
- package/dist/languages/go/GoAdapter.js +15 -22
- package/dist/languages/go/GoAdapter.js.map +1 -1
- package/dist/languages/go/analyzer +0 -0
- package/dist/languages/go/analyzer-src/analyzer.go +510 -0
- package/dist/languages/go/analyzer-src/go.mod +3 -0
- package/dist/languages/go/analyzer-src/indexer.go +268 -0
- package/dist/languages/go/analyzer-src/parser.go +461 -0
- package/dist/languages/go/analyzer-src/solid.go +395 -0
- package/dist/languages/go/analyzer-src/testconventions.go +25 -0
- package/dist/languages/go/analyzer-src/types.go +148 -0
- package/dist/languages/go/go.mod +7 -0
- package/dist/languages/go/main.go +203 -0
- package/dist/languages/testConventions.d.ts +35 -0
- package/dist/languages/testConventions.d.ts.map +1 -0
- package/dist/languages/testConventions.js +51 -0
- package/dist/languages/testConventions.js.map +1 -0
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts +3 -0
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts.map +1 -1
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js +25 -18
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js.map +1 -1
- package/dist/mcp-tools/whitelistTools.d.ts +1 -1
- package/dist/mcp-tools-shared.d.ts +0 -3
- package/dist/mcp-tools-shared.d.ts.map +1 -1
- package/dist/mcp-tools-shared.js +8 -117
- package/dist/mcp-tools-shared.js.map +1 -1
- package/dist/mcp.js +3 -1
- package/dist/mcp.js.map +1 -1
- package/dist/mcpAuditJobs.d.ts.map +1 -1
- package/dist/mcpAuditJobs.js +13 -0
- package/dist/mcpAuditJobs.js.map +1 -1
- package/dist/nextFile.d.ts +21 -0
- package/dist/nextFile.d.ts.map +1 -0
- package/dist/nextFile.js +51 -0
- package/dist/nextFile.js.map +1 -0
- package/dist/nextFileIncremental.d.ts +141 -0
- package/dist/nextFileIncremental.d.ts.map +1 -0
- package/dist/nextFileIncremental.js +314 -0
- package/dist/nextFileIncremental.js.map +1 -0
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +22 -0
- package/dist/pipeline.js.map +1 -1
- package/dist/pipelineAdapters.d.ts +17 -0
- package/dist/pipelineAdapters.d.ts.map +1 -1
- package/dist/pipelineAdapters.js +791 -40
- package/dist/pipelineAdapters.js.map +1 -1
- package/dist/reporting/jsonReportGenerator.d.ts.map +1 -1
- package/dist/reporting/jsonReportGenerator.js +11 -30
- package/dist/reporting/jsonReportGenerator.js.map +1 -1
- package/dist/styles/styleIndexer.d.ts +7 -0
- package/dist/styles/styleIndexer.d.ts.map +1 -1
- package/dist/styles/styleIndexer.js +44 -61
- package/dist/styles/styleIndexer.js.map +1 -1
- package/dist/types/crossLanguage.d.ts +1 -0
- package/dist/types/crossLanguage.d.ts.map +1 -1
- package/dist/types.d.ts +27 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/fileDiscovery.d.ts +9 -0
- package/dist/utils/fileDiscovery.d.ts.map +1 -1
- package/dist/utils/fileDiscovery.js +18 -0
- package/dist/utils/fileDiscovery.js.map +1 -1
- package/package.json +6 -4
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/README.md +6 -6
- package/plugin/hooks/hooks.json +4 -0
- package/plugin/scripts/hook-self-audit.sh +107 -0
- package/plugin/skills/code-auditor/SKILL-RULE-KINDS.md +55 -9
- 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, ¶ms); 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, ¶ms); 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
|
-
|
|
505
|
-
|
|
506
|
-
|
|
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
|
-
|
|
512
|
-
|
|
513
|
-
|
|
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.
|
|
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.
|
|
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;
|