code-auditor-mcp 3.0.7 → 3.1.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.
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +245 -0
- package/README.md +24 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/anonymous-callback-map.d.ts +21 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/anonymous-callback-map.d.ts.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/anonymous-callback-map.js +21 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/anonymous-callback-map.js.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/barrel-test-migration.d.ts +13 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/barrel-test-migration.d.ts.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/barrel-test-migration.js +12 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/barrel-test-migration.js.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/direct-access-allow-config.d.ts +11 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/direct-access-allow-config.d.ts.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/direct-access-allow-config.js +22 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/direct-access-allow-config.js.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/exported-undocumented.d.ts +9 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/exported-undocumented.d.ts.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/exported-undocumented.js +13 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/exported-undocumented.js.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/for-loop-query.d.ts +13 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/for-loop-query.d.ts.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/for-loop-query.js +18 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/for-loop-query.js.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/import-node-builtin.d.ts +10 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/import-node-builtin.d.ts.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/import-node-builtin.js +16 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/import-node-builtin.js.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/jsx-event-handler.d.ts +14 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/jsx-event-handler.d.ts.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/jsx-event-handler.js +18 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/jsx-event-handler.js.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/nested-loops-query.d.ts +13 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/nested-loops-query.d.ts.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/nested-loops-query.js +22 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/nested-loops-query.js.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/nine-line-repeated.d.ts +10 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/nine-line-repeated.d.ts.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/nine-line-repeated.js +20 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/nine-line-repeated.js.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/private-methods.d.ts +18 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/private-methods.d.ts.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/private-methods.js +28 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/private-methods.js.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/scope-all-config.d.ts +11 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/scope-all-config.d.ts.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/scope-all-config.js +31 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/scope-all-config.js.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/sql-tagged-template.d.ts +11 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/sql-tagged-template.d.ts.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/sql-tagged-template.js +18 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/sql-tagged-template.js.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/structural-similar-methods.d.ts +13 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/structural-similar-methods.d.ts.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/structural-similar-methods.js +61 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/structural-similar-methods.js.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/template-prefix-table.d.ts +10 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/template-prefix-table.d.ts.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/template-prefix-table.js +15 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/template-prefix-table.js.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/token-identical-20-lines.d.ts +11 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/token-identical-20-lines.d.ts.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/token-identical-20-lines.js +49 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/token-identical-20-lines.js.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/tsx-no-db-usage.d.ts +10 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/tsx-no-db-usage.d.ts.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/tsx-no-db-usage.js +19 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/tsx-no-db-usage.js.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/twenty-methods-vs-complex.d.ts +37 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/twenty-methods-vs-complex.d.ts.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/twenty-methods-vs-complex.js +73 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/twenty-methods-vs-complex.js.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/unique-method-74-lines.d.ts +12 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/unique-method-74-lines.d.ts.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/unique-method-74-lines.js +82 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/unique-method-74-lines.js.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/word-the-in-comment.d.ts +10 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/word-the-in-comment.d.ts.map +1 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/word-the-in-comment.js +15 -0
- package/dist/analyzers/__tests__/fixtures/spec-17/word-the-in-comment.js.map +1 -0
- package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/cross-language/APIContractAnalyzer.js +3 -5
- package/dist/analyzers/cross-language/APIContractAnalyzer.js.map +1 -1
- package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.js +1 -3
- package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.js.map +1 -1
- package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts.map +1 -1
- package/dist/analyzers/cross-language/DependencyGraphBuilder.js +2 -5
- package/dist/analyzers/cross-language/DependencyGraphBuilder.js.map +1 -1
- package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -1
- package/dist/analyzers/cross-language/SchemaValidator.js +2 -5
- package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -1
- package/dist/analyzers/reactAnalyzer.js +7 -22
- package/dist/analyzers/reactAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts +40 -2
- package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js +186 -29
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts +30 -0
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +164 -61
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts +51 -7
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +354 -48
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts +8 -4
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +51 -38
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts +59 -39
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +412 -153
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -1
- package/dist/auditRunner.d.ts.map +1 -1
- package/dist/auditRunner.js +26 -2
- package/dist/auditRunner.js.map +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/config/defaults.d.ts +32 -0
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +62 -4
- package/dist/config/defaults.js.map +1 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -4
- package/dist/index.js.map +1 -1
- package/dist/languages/UniversalAnalyzer.d.ts +7 -0
- package/dist/languages/UniversalAnalyzer.d.ts.map +1 -1
- package/dist/languages/UniversalAnalyzer.js +16 -23
- package/dist/languages/UniversalAnalyzer.js.map +1 -1
- package/dist/mcp-tools/whitelistTools.d.ts +1 -1
- package/package.json +2 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Universal Documentation Analyzer
|
|
3
|
-
*
|
|
2
|
+
* Universal Documentation Analyzer — Spec 17 R1
|
|
3
|
+
*
|
|
4
|
+
* R1.1: Anonymous/inline callables are skipped entirely (not downgraded).
|
|
5
|
+
* R1.2: Default scope is public API surface only.
|
|
6
|
+
* R1.3: Minimum-size gate (docsMinLines, default 5).
|
|
7
|
+
* R1.4: scope: "all" restores pre-spec-17 behaviour minus R1.1 skips.
|
|
8
|
+
* R1.5: File-header checks default OFF (fileHeaders replaces requireFileDocs).
|
|
9
|
+
* R1.6: Finding messages name the audience reason.
|
|
10
|
+
* R7: All documentation/* severities are "suggestion".
|
|
4
11
|
*/
|
|
5
12
|
import { UniversalAnalyzer } from '../../languages/UniversalAnalyzer.js';
|
|
13
|
+
import picomatch from 'picomatch';
|
|
6
14
|
export const DEFAULT_DOCUMENTATION_CONFIG = {
|
|
7
15
|
requireFunctionDocs: true,
|
|
8
16
|
requireClassDocs: true,
|
|
@@ -12,15 +20,41 @@ export const DEFAULT_DOCUMENTATION_CONFIG = {
|
|
|
12
20
|
minDescriptionLength: 10,
|
|
13
21
|
checkExportedOnly: false,
|
|
14
22
|
exemptPatterns: [
|
|
15
|
-
'\\.test\\.',
|
|
16
|
-
'\\.spec\\.',
|
|
17
|
-
'\\.d\\.ts$',
|
|
18
|
-
'mock',
|
|
19
|
-
'fixture',
|
|
20
|
-
'__tests__',
|
|
21
|
-
'/tests?/',
|
|
22
|
-
]
|
|
23
|
+
'\\.test\\.',
|
|
24
|
+
'\\.spec\\.',
|
|
25
|
+
'\\.d\\.ts$',
|
|
26
|
+
'mock',
|
|
27
|
+
'fixture',
|
|
28
|
+
'__tests__',
|
|
29
|
+
'/tests?/',
|
|
30
|
+
],
|
|
31
|
+
// Spec-17 defaults
|
|
32
|
+
scope: 'public',
|
|
33
|
+
docsMinLines: 5,
|
|
34
|
+
fileHeaders: false,
|
|
35
|
+
headerSkipGlobs: [
|
|
36
|
+
'**/index.{ts,tsx,js}',
|
|
37
|
+
'**/*.{test,spec}.*',
|
|
38
|
+
'**/__tests__/**',
|
|
39
|
+
'**/migrations/**',
|
|
40
|
+
'**/pages/**',
|
|
41
|
+
'**/api/**',
|
|
42
|
+
'**/routes/**',
|
|
43
|
+
'**/*.config.*',
|
|
44
|
+
'**/*.d.ts',
|
|
45
|
+
],
|
|
23
46
|
};
|
|
47
|
+
const HEADER_SKIP_GLOBS_DEFAULT = [
|
|
48
|
+
'**/index.{ts,tsx,js}',
|
|
49
|
+
'**/*.{test,spec}.*',
|
|
50
|
+
'**/__tests__/**',
|
|
51
|
+
'**/migrations/**',
|
|
52
|
+
'**/pages/**',
|
|
53
|
+
'**/api/**',
|
|
54
|
+
'**/routes/**',
|
|
55
|
+
'**/*.config.*',
|
|
56
|
+
'**/*.d.ts',
|
|
57
|
+
];
|
|
24
58
|
export class UniversalDocumentationAnalyzer extends UniversalAnalyzer {
|
|
25
59
|
name = 'documentation';
|
|
26
60
|
description = 'Analyzes documentation quality across the codebase';
|
|
@@ -28,23 +62,60 @@ export class UniversalDocumentationAnalyzer extends UniversalAnalyzer {
|
|
|
28
62
|
async analyzeAST(ast, adapter, config, sourceCode) {
|
|
29
63
|
const violations = [];
|
|
30
64
|
const finalConfig = { ...DEFAULT_DOCUMENTATION_CONFIG, ...config };
|
|
31
|
-
//
|
|
65
|
+
// Resolve scope: "public" is post-spec-17 default
|
|
66
|
+
const scope = finalConfig.scope ?? 'public';
|
|
67
|
+
// Resolve fileHeaders: prefer new key, fall back to deprecated requireFileDocs
|
|
68
|
+
const fileHeaders = finalConfig.fileHeaders ?? finalConfig.requireFileDocs ?? false;
|
|
69
|
+
// Check if file is exempt (name-based patterns)
|
|
32
70
|
if (this.isExempt(ast.filePath, finalConfig.exemptPatterns)) {
|
|
33
71
|
return violations;
|
|
34
72
|
}
|
|
35
|
-
//
|
|
36
|
-
if (
|
|
37
|
-
const
|
|
38
|
-
if (!
|
|
39
|
-
|
|
73
|
+
// File-level documentation header check — R1.5 (defaults OFF)
|
|
74
|
+
if (fileHeaders) {
|
|
75
|
+
const skipGlobs = finalConfig.headerSkipGlobs ?? HEADER_SKIP_GLOBS_DEFAULT;
|
|
76
|
+
if (!this.matchesAnyGlob(ast.filePath, skipGlobs)) {
|
|
77
|
+
const fileDoc = this.getFileDocumentation(ast, adapter);
|
|
78
|
+
if (!fileDoc || fileDoc.length < finalConfig.minDescriptionLength) {
|
|
79
|
+
violations.push(this.createViolation(ast.filePath, { line: 1, column: 1 }, 'File lacks proper documentation header', 'suggestion', 'file-documentation'));
|
|
80
|
+
}
|
|
40
81
|
}
|
|
41
82
|
}
|
|
42
|
-
//
|
|
83
|
+
// Function documentation — R1.1 through R1.4, R1.6
|
|
43
84
|
if (finalConfig.requireFunctionDocs) {
|
|
44
85
|
const functions = adapter.extractFunctions(ast);
|
|
86
|
+
const docsMinLines = finalConfig.docsMinLines ?? 5;
|
|
45
87
|
for (const func of functions) {
|
|
46
|
-
//
|
|
47
|
-
|
|
88
|
+
// Find the AST node for this function
|
|
89
|
+
const node = this.findNodeByLocation(ast.root, func.location.start);
|
|
90
|
+
// R1.1 — Skip anonymous/inline callables
|
|
91
|
+
if (node && this.isAnonymousOrCallback(node, adapter)) {
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
// R1.2 — Scope filter (public API surface only)
|
|
95
|
+
if (scope === 'public') {
|
|
96
|
+
if (!func.isExported) {
|
|
97
|
+
// If not exported and not a public method of exported class, skip
|
|
98
|
+
if (!func.isMethod) {
|
|
99
|
+
// Named function decl nested inside another function — skip at default scope
|
|
100
|
+
if (node && this.isNestedFunction(node, adapter)) {
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
// Non-exported top-level function — skip
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
// It's a method — check visibility
|
|
107
|
+
if (node && this.isNonPublicMethod(node, adapter, sourceCode)) {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
// Check if the enclosing class is exported
|
|
111
|
+
if (node && !this.isMethodOfExportedClass(node, adapter, ast)) {
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// R1.3 — Minimum-size gate
|
|
117
|
+
const bodyLines = (func.location.end.line - func.location.start.line) + 1;
|
|
118
|
+
if (bodyLines < docsMinLines) {
|
|
48
119
|
continue;
|
|
49
120
|
}
|
|
50
121
|
// Skip if function name matches exempt pattern
|
|
@@ -52,48 +123,64 @@ export class UniversalDocumentationAnalyzer extends UniversalAnalyzer {
|
|
|
52
123
|
continue;
|
|
53
124
|
}
|
|
54
125
|
const doc = func.jsDoc || '';
|
|
55
|
-
//
|
|
126
|
+
// R1.6 — Audience-reason message
|
|
56
127
|
if (!doc || doc.length < finalConfig.minDescriptionLength) {
|
|
57
|
-
|
|
128
|
+
const reason = func.isExported
|
|
129
|
+
? `exported function '${func.name}' lacks proper documentation`
|
|
130
|
+
: func.isMethod && func.className
|
|
131
|
+
? `public method '${func.className}.${func.name}' lacks proper documentation`
|
|
132
|
+
: `function '${func.name}' lacks proper documentation`;
|
|
133
|
+
violations.push(this.createViolation(ast.filePath, func.location.start, reason, 'suggestion', 'function-documentation'));
|
|
58
134
|
}
|
|
59
|
-
else
|
|
60
|
-
//
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
135
|
+
else {
|
|
136
|
+
// Param docs
|
|
137
|
+
if (finalConfig.requireParamDocs && func.parameters.length > 0) {
|
|
138
|
+
const missingParamDocs = this.checkParameterDocumentation(doc, func.parameters.map(p => p.name));
|
|
139
|
+
for (const param of missingParamDocs) {
|
|
140
|
+
violations.push(this.createViolation(ast.filePath, func.location.start, `Function '${func.name}' missing documentation for parameter '${param}'`, 'suggestion', 'parameter-documentation'));
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// Return docs
|
|
144
|
+
if (finalConfig.requireReturnDocs &&
|
|
145
|
+
func.returnType &&
|
|
146
|
+
func.returnType !== 'void' &&
|
|
147
|
+
!this.hasReturnDocumentation(doc)) {
|
|
148
|
+
violations.push(this.createViolation(ast.filePath, func.location.start, `Function '${func.name}' missing return value documentation`, 'suggestion', 'return-documentation'));
|
|
64
149
|
}
|
|
65
|
-
}
|
|
66
|
-
// Check return documentation for non-void functions
|
|
67
|
-
if (finalConfig.requireReturnDocs &&
|
|
68
|
-
func.returnType &&
|
|
69
|
-
func.returnType !== 'void' &&
|
|
70
|
-
!this.hasReturnDocumentation(doc)) {
|
|
71
|
-
violations.push(this.createViolation(ast.filePath, func.location.start, `Function '${func.name}' missing return value documentation`, 'suggestion', 'return-documentation'));
|
|
72
150
|
}
|
|
73
151
|
}
|
|
74
152
|
}
|
|
75
|
-
//
|
|
153
|
+
// Class documentation
|
|
76
154
|
if (finalConfig.requireClassDocs) {
|
|
77
155
|
const classes = adapter.extractClasses(ast);
|
|
78
156
|
for (const cls of classes) {
|
|
79
|
-
//
|
|
80
|
-
if (
|
|
157
|
+
// Scope filter for classes
|
|
158
|
+
if (scope === 'public' && !cls.isExported) {
|
|
81
159
|
continue;
|
|
82
160
|
}
|
|
83
|
-
// Skip if class name matches exempt pattern
|
|
84
161
|
if (this.isExempt(cls.name, finalConfig.exemptPatterns)) {
|
|
85
162
|
continue;
|
|
86
163
|
}
|
|
87
164
|
const doc = cls.jsDoc || '';
|
|
88
165
|
if (!doc || doc.length < finalConfig.minDescriptionLength) {
|
|
89
|
-
violations.push(this.createViolation(ast.filePath, cls.location.start, `Class '${cls.name}' lacks proper documentation`, '
|
|
166
|
+
violations.push(this.createViolation(ast.filePath, cls.location.start, `Class '${cls.name}' lacks proper documentation`, 'suggestion', 'class-documentation'));
|
|
90
167
|
}
|
|
91
|
-
//
|
|
168
|
+
// Method documentation
|
|
92
169
|
if (finalConfig.requireFunctionDocs) {
|
|
93
170
|
for (const method of cls.methods) {
|
|
171
|
+
// Method scope filter
|
|
172
|
+
if (scope === 'public') {
|
|
173
|
+
const methodNode = this.findNodeByLocation(ast.root, method.location.start);
|
|
174
|
+
if (methodNode && this.isNonPublicMethod(methodNode, adapter, sourceCode)) {
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
if (this.isExempt(method.name, finalConfig.exemptPatterns)) {
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
94
181
|
const methodDoc = method.jsDoc || '';
|
|
95
182
|
if (!methodDoc || methodDoc.length < finalConfig.minDescriptionLength) {
|
|
96
|
-
violations.push(this.createViolation(ast.filePath, method.location.start, `
|
|
183
|
+
violations.push(this.createViolation(ast.filePath, method.location.start, `public method '${cls.name}.${method.name}' lacks proper documentation`, 'suggestion', 'method-documentation'));
|
|
97
184
|
}
|
|
98
185
|
}
|
|
99
186
|
}
|
|
@@ -101,8 +188,203 @@ export class UniversalDocumentationAnalyzer extends UniversalAnalyzer {
|
|
|
101
188
|
}
|
|
102
189
|
return violations;
|
|
103
190
|
}
|
|
191
|
+
// ---------------------------------------------------------------------------
|
|
192
|
+
// R1.1 — Anonymous / inline callable detection
|
|
193
|
+
// ---------------------------------------------------------------------------
|
|
104
194
|
/**
|
|
105
|
-
*
|
|
195
|
+
* Returns true if the node is an anonymous arrow/function expression used as:
|
|
196
|
+
* (a) a call argument (any callee — no name whitelist)
|
|
197
|
+
* (b) a JSX attribute value
|
|
198
|
+
* (c) an object-literal property value or array element passed as an argument
|
|
199
|
+
* (d) an IIFE
|
|
200
|
+
*/
|
|
201
|
+
isAnonymousOrCallback(node, adapter) {
|
|
202
|
+
const nodeType = adapter.getNodeType(node);
|
|
203
|
+
const parent = adapter.getParent(node);
|
|
204
|
+
if (!parent)
|
|
205
|
+
return false;
|
|
206
|
+
const parentType = adapter.getNodeType(parent);
|
|
207
|
+
// Arrow functions and function expressions
|
|
208
|
+
if (nodeType === 'arrow_function' ||
|
|
209
|
+
nodeType === 'function_expression' ||
|
|
210
|
+
nodeType === 'generator_function_expression') {
|
|
211
|
+
// (a) Call argument — parent is 'arguments' (args to any call expression)
|
|
212
|
+
if (parentType === 'arguments') {
|
|
213
|
+
return true;
|
|
214
|
+
}
|
|
215
|
+
// (b) JSX attribute value (event handlers, render props)
|
|
216
|
+
if (parentType === 'jsx_expression' ||
|
|
217
|
+
parentType === 'jsx_attribute' ||
|
|
218
|
+
parentType === 'jsx_self_closing_element' ||
|
|
219
|
+
parentType === 'jsx_opening_element') {
|
|
220
|
+
return true;
|
|
221
|
+
}
|
|
222
|
+
// (c) Object literal property value in call arguments
|
|
223
|
+
// chain: arrow → pair → object → arguments → call_expression
|
|
224
|
+
if (parentType === 'pair') {
|
|
225
|
+
const gp = adapter.getParent(parent);
|
|
226
|
+
if (gp) {
|
|
227
|
+
const gpType = adapter.getNodeType(gp);
|
|
228
|
+
if (gpType === 'object' || gpType === 'object_pattern') {
|
|
229
|
+
const ggp = adapter.getParent(gp);
|
|
230
|
+
if (ggp && adapter.getNodeType(ggp) === 'arguments') {
|
|
231
|
+
return true;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// (c) Array element in call arguments
|
|
237
|
+
if (parentType === 'array') {
|
|
238
|
+
const gp = adapter.getParent(parent);
|
|
239
|
+
if (gp && adapter.getNodeType(gp) === 'arguments') {
|
|
240
|
+
return true;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
// (d) IIFE — the function is the callee of a call expression
|
|
244
|
+
if (parentType === 'call_expression') {
|
|
245
|
+
// Check if this node is in the function/callee position (not in arguments)
|
|
246
|
+
const fnChild = this.getFirstChildOfType(parent, [
|
|
247
|
+
'arrow_function',
|
|
248
|
+
'function_expression',
|
|
249
|
+
'function',
|
|
250
|
+
'identifier',
|
|
251
|
+
'member_expression',
|
|
252
|
+
'call_expression',
|
|
253
|
+
]);
|
|
254
|
+
if (fnChild) {
|
|
255
|
+
// If the first function-ish child is at the same location, this IS the callee
|
|
256
|
+
if (fnChild.location.start.line === node.location.start.line &&
|
|
257
|
+
fnChild.location.start.column === node.location.start.column) {
|
|
258
|
+
return true;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
return false;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Returns true if a function_declaration node is nested inside another function/method
|
|
267
|
+
* (a helper by construction — R1.1).
|
|
268
|
+
*/
|
|
269
|
+
isNestedFunction(node, adapter) {
|
|
270
|
+
const nodeType = adapter.getNodeType(node);
|
|
271
|
+
if (nodeType !== 'function_declaration' && nodeType !== 'generator_function_declaration') {
|
|
272
|
+
return false;
|
|
273
|
+
}
|
|
274
|
+
let current = adapter.getParent(node);
|
|
275
|
+
while (current) {
|
|
276
|
+
const type = adapter.getNodeType(current);
|
|
277
|
+
// Skip enclosing blocks/statement blocks
|
|
278
|
+
if (type === 'statement_block' ||
|
|
279
|
+
type === 'block' ||
|
|
280
|
+
type === 'program' ||
|
|
281
|
+
type === 'export_statement') {
|
|
282
|
+
current = adapter.getParent(current);
|
|
283
|
+
continue;
|
|
284
|
+
}
|
|
285
|
+
// Found enclosing function or method → this is nested
|
|
286
|
+
if (adapter.isFunction(current) || adapter.isMethod(current)) {
|
|
287
|
+
return true;
|
|
288
|
+
}
|
|
289
|
+
// Hit something else (class body, module, etc.) → not nested in a function
|
|
290
|
+
break;
|
|
291
|
+
}
|
|
292
|
+
return false;
|
|
293
|
+
}
|
|
294
|
+
// ---------------------------------------------------------------------------
|
|
295
|
+
// R1.2 — Method visibility helpers
|
|
296
|
+
// ---------------------------------------------------------------------------
|
|
297
|
+
/**
|
|
298
|
+
* A method is non-public if it is private, protected, #-named, or _-prefixed.
|
|
299
|
+
*/
|
|
300
|
+
isNonPublicMethod(node, adapter, sourceCode) {
|
|
301
|
+
const type = adapter.getNodeType(node);
|
|
302
|
+
if (type !== 'method_definition' && type !== 'public_field_definition') {
|
|
303
|
+
return false;
|
|
304
|
+
}
|
|
305
|
+
// Check for tree-sitter accessibility modifiers in children
|
|
306
|
+
if (node.children) {
|
|
307
|
+
for (const child of node.children) {
|
|
308
|
+
const childType = adapter.getNodeType(child);
|
|
309
|
+
if (childType === 'accessibility_modifier' ||
|
|
310
|
+
childType === 'private' ||
|
|
311
|
+
childType === 'protected') {
|
|
312
|
+
const text = adapter.getNodeText(child, sourceCode).trim();
|
|
313
|
+
if (text === 'private' || text === 'protected') {
|
|
314
|
+
return true;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
// Check property/method name for #-prefix (JS private) or _-prefix (convention)
|
|
320
|
+
const propName = this.getMethodName(node, adapter, sourceCode);
|
|
321
|
+
if (propName && (propName.startsWith('#') || propName.startsWith('_'))) {
|
|
322
|
+
return true;
|
|
323
|
+
}
|
|
324
|
+
return false;
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Check if a method's enclosing class is exported.
|
|
328
|
+
*/
|
|
329
|
+
isMethodOfExportedClass(node, adapter, ast) {
|
|
330
|
+
let current = adapter.getParent(node);
|
|
331
|
+
while (current) {
|
|
332
|
+
if (adapter.isClass(current)) {
|
|
333
|
+
// Check export by looking at parent of class node
|
|
334
|
+
const classParent = adapter.getParent(current);
|
|
335
|
+
if (classParent) {
|
|
336
|
+
const classParentType = adapter.getNodeType(classParent);
|
|
337
|
+
if (classParentType === 'export_statement') {
|
|
338
|
+
return true;
|
|
339
|
+
}
|
|
340
|
+
// Also check if class declaration itself has export modifier
|
|
341
|
+
const siblings = adapter.getChildren(classParent);
|
|
342
|
+
for (const sib of siblings) {
|
|
343
|
+
if (adapter.getNodeType(sib) === 'export' || adapter.getNodeType(sib) === 'export_statement') {
|
|
344
|
+
// Verify this export wraps our class
|
|
345
|
+
const exportChildren = adapter.getChildren(sib);
|
|
346
|
+
for (const ec of exportChildren) {
|
|
347
|
+
if (adapter.getNodeType(ec) === 'class_declaration' &&
|
|
348
|
+
ec.location.start.line === current.location.start.line) {
|
|
349
|
+
return true;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
// Use extractClasses to check isExported
|
|
356
|
+
break;
|
|
357
|
+
}
|
|
358
|
+
current = adapter.getParent(current);
|
|
359
|
+
}
|
|
360
|
+
// Fallback: check extractClasses for isExported
|
|
361
|
+
const classes = adapter.extractClasses(ast);
|
|
362
|
+
for (const cls of classes) {
|
|
363
|
+
// Find the class containing this method
|
|
364
|
+
if (node.location.start.line >= cls.location.start.line &&
|
|
365
|
+
node.location.start.line <= cls.location.end.line &&
|
|
366
|
+
cls.isExported) {
|
|
367
|
+
return true;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
return false;
|
|
371
|
+
}
|
|
372
|
+
// ---------------------------------------------------------------------------
|
|
373
|
+
// Utility helpers
|
|
374
|
+
// ---------------------------------------------------------------------------
|
|
375
|
+
/**
|
|
376
|
+
* Check if a file path matches any picomatch glob pattern.
|
|
377
|
+
*/
|
|
378
|
+
matchesAnyGlob(filePath, globs) {
|
|
379
|
+
for (const glob of globs) {
|
|
380
|
+
if (picomatch.isMatch(filePath, glob)) {
|
|
381
|
+
return true;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
return false;
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Check if a name or path matches any exempt regex patterns.
|
|
106
388
|
*/
|
|
107
389
|
isExempt(name, patterns) {
|
|
108
390
|
return patterns.some(pattern => {
|
|
@@ -111,10 +393,36 @@ export class UniversalDocumentationAnalyzer extends UniversalAnalyzer {
|
|
|
111
393
|
});
|
|
112
394
|
}
|
|
113
395
|
/**
|
|
114
|
-
* Get
|
|
396
|
+
* Get the name of a method definition node.
|
|
397
|
+
*/
|
|
398
|
+
getMethodName(node, adapter, sourceCode) {
|
|
399
|
+
if (node.children) {
|
|
400
|
+
for (const child of node.children) {
|
|
401
|
+
const type = adapter.getNodeType(child);
|
|
402
|
+
if (type === 'property_identifier' || type === 'identifier') {
|
|
403
|
+
return adapter.getNodeText(child, sourceCode).trim();
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
return null;
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* Get the first child node matching one of the given types.
|
|
411
|
+
*/
|
|
412
|
+
getFirstChildOfType(node, types) {
|
|
413
|
+
if (!node.children)
|
|
414
|
+
return null;
|
|
415
|
+
for (const child of node.children) {
|
|
416
|
+
if (types.includes(child.type)) {
|
|
417
|
+
return child;
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
return null;
|
|
421
|
+
}
|
|
422
|
+
/**
|
|
423
|
+
* Get file-level documentation (usually at the top).
|
|
115
424
|
*/
|
|
116
425
|
getFileDocumentation(ast, adapter) {
|
|
117
|
-
// Look for documentation at the beginning of the file
|
|
118
426
|
const firstChild = ast.root.children?.[0];
|
|
119
427
|
if (firstChild) {
|
|
120
428
|
return adapter.getDocumentation(firstChild);
|
|
@@ -122,7 +430,7 @@ export class UniversalDocumentationAnalyzer extends UniversalAnalyzer {
|
|
|
122
430
|
return null;
|
|
123
431
|
}
|
|
124
432
|
/**
|
|
125
|
-
* Find a node by its location
|
|
433
|
+
* Find a node by its location via BFS.
|
|
126
434
|
*/
|
|
127
435
|
findNodeByLocation(root, location) {
|
|
128
436
|
const queue = [root];
|
|
@@ -139,12 +447,11 @@ export class UniversalDocumentationAnalyzer extends UniversalAnalyzer {
|
|
|
139
447
|
return null;
|
|
140
448
|
}
|
|
141
449
|
/**
|
|
142
|
-
* Check which parameters are missing documentation
|
|
450
|
+
* Check which parameters are missing documentation.
|
|
143
451
|
*/
|
|
144
452
|
checkParameterDocumentation(doc, paramNames) {
|
|
145
453
|
const missingParams = [];
|
|
146
454
|
for (const param of paramNames) {
|
|
147
|
-
// Look for @param tags in various formats
|
|
148
455
|
const paramRegex = new RegExp(`@param\\s+(?:\\{[^}]+\\}\\s+)?${param}\\b`, 'i');
|
|
149
456
|
if (!paramRegex.test(doc)) {
|
|
150
457
|
missingParams.push(param);
|
|
@@ -153,10 +460,9 @@ export class UniversalDocumentationAnalyzer extends UniversalAnalyzer {
|
|
|
153
460
|
return missingParams;
|
|
154
461
|
}
|
|
155
462
|
/**
|
|
156
|
-
* Check if documentation contains return value documentation
|
|
463
|
+
* Check if documentation contains return value documentation.
|
|
157
464
|
*/
|
|
158
465
|
hasReturnDocumentation(doc) {
|
|
159
|
-
// Look for @return or @returns tags
|
|
160
466
|
return /@returns?\b/i.test(doc);
|
|
161
467
|
}
|
|
162
468
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UniversalDocumentationAnalyzer.js","sourceRoot":"","sources":["../../../src/analyzers/universal/UniversalDocumentationAnalyzer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"UniversalDocumentationAnalyzer.js","sourceRoot":"","sources":["../../../src/analyzers/universal/UniversalDocumentationAnalyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,13 +7,21 @@ import type { Violation } from '../../types.js';
|
|
|
7
7
|
import type { AST, LanguageAdapter } from '../../languages/types.js';
|
|
8
8
|
/**
|
|
9
9
|
* Configuration for SOLID analyzer
|
|
10
|
+
*
|
|
11
|
+
* Spec-17 R5: maxClassComplexity (heuristic) is DEPRECATED — replaced by
|
|
12
|
+
* maxMethodComplexity (per-method cyclomatic complexity, solid/method-complexity)
|
|
13
|
+
* and classAggregateComplexity (class-size aggregation, solid/class-size).
|
|
10
14
|
*/
|
|
11
15
|
export interface SOLIDAnalyzerConfig {
|
|
12
16
|
maxMethodsPerClass?: number;
|
|
13
17
|
maxLinesPerMethod?: number;
|
|
14
18
|
maxParametersPerMethod?: number;
|
|
19
|
+
/** @deprecated Use maxMethodComplexity instead — this was a heuristic (1 + 2×methods + 5×extends + Σ(lines/10)) */
|
|
15
20
|
maxClassComplexity?: number;
|
|
16
21
|
maxInterfaceMembers?: number;
|
|
22
|
+
maxMethodComplexity?: number;
|
|
23
|
+
classMethodsThreshold?: number;
|
|
24
|
+
classAggregateComplexity?: number;
|
|
17
25
|
checkDependencyInversion?: boolean;
|
|
18
26
|
checkInterfaceSegregation?: boolean;
|
|
19
27
|
checkLiskovSubstitution?: boolean;
|
|
@@ -37,10 +45,6 @@ export declare class UniversalSOLIDAnalyzer extends UniversalAnalyzer {
|
|
|
37
45
|
* Analyze an interface for Interface Segregation Principle
|
|
38
46
|
*/
|
|
39
47
|
private analyzeInterface;
|
|
40
|
-
/**
|
|
41
|
-
* Calculate class complexity
|
|
42
|
-
*/
|
|
43
|
-
private calculateClassComplexity;
|
|
44
48
|
/**
|
|
45
49
|
* Check for modification patterns (Open/Closed Principle)
|
|
46
50
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UniversalSOLIDAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/analyzers/universal/UniversalSOLIDAnalyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,GAAG,EAAE,eAAe,EAAmD,MAAM,0BAA0B,CAAC;AAEtH
|
|
1
|
+
{"version":3,"file":"UniversalSOLIDAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/analyzers/universal/UniversalSOLIDAnalyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,GAAG,EAAE,eAAe,EAAmD,MAAM,0BAA0B,CAAC;AAEtH;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,mHAAmH;IACnH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAE7B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,eAAO,MAAM,oBAAoB,EAAE,mBAelC,CAAC;AAEF,qBAAa,sBAAuB,SAAQ,iBAAiB;IAC3D,QAAQ,CAAC,IAAI,WAAW;IACxB,QAAQ,CAAC,WAAW,4CAA4C;IAChE,QAAQ,CAAC,QAAQ,kBAAkB;IAEnC,UAAgB,UAAU,CACxB,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,mBAAmB,EAC3B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,EAAE,CAAC,CAgCtB;IAED;;OAEG;IACH,OAAO,CAAC,YAAY;IAwFpB;;OAEG;IACH,OAAO,CAAC,eAAe;IAuDvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA6BxB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA2B/B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAuC/B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA2DhC;;OAEG;IACH,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,kBAAkB;IAmB1B,OAAO,CAAC,OAAO;CAQhB"}
|