code-auditor-mcp 2.6.1 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +319 -147
- package/dist/analyzers/analyzerUtils.d.ts +13 -11
- package/dist/analyzers/analyzerUtils.d.ts.map +1 -1
- package/dist/analyzers/analyzerUtils.js +22 -56
- package/dist/analyzers/analyzerUtils.js.map +1 -1
- package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.d.ts.map +1 -1
- 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.map +1 -1
- package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -1
- package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -1
- package/dist/analyzers/dataAccessAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/dataAccessAnalyzer.js +50 -24
- package/dist/analyzers/dataAccessAnalyzer.js.map +1 -1
- package/dist/analyzers/documentationAnalyzer.d.ts +4 -1
- package/dist/analyzers/documentationAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/documentationAnalyzer.js +210 -111
- package/dist/analyzers/documentationAnalyzer.js.map +1 -1
- package/dist/analyzers/dryAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/dryAnalyzer.js +190 -58
- package/dist/analyzers/dryAnalyzer.js.map +1 -1
- package/dist/analyzers/invariantsAnalyzer.d.ts +20 -0
- package/dist/analyzers/invariantsAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/invariantsAnalyzer.js +148 -0
- package/dist/analyzers/invariantsAnalyzer.js.map +1 -0
- package/dist/analyzers/reactAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/reactAnalyzer.js +2 -2
- package/dist/analyzers/reactAnalyzer.js.map +1 -1
- package/dist/analyzers/schemaAnalyzer.d.ts +2 -0
- package/dist/analyzers/schemaAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/schemaAnalyzer.js +306 -147
- package/dist/analyzers/schemaAnalyzer.js.map +1 -1
- package/dist/analyzers/solidAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/solidAnalyzer.js +145 -119
- package/dist/analyzers/solidAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts +3 -1
- package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js +41 -1
- 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 +8 -8
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +6 -6
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -1
- package/dist/api/index.js +1 -0
- package/dist/api/index.js.map +1 -1
- package/dist/auditRunner.d.ts.map +1 -1
- package/dist/auditRunner.js +367 -24
- package/dist/auditRunner.js.map +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +740 -18
- package/dist/cli.js.map +1 -1
- package/dist/codeIndexDB-enhanced.d.ts +35 -13
- package/dist/codeIndexDB-enhanced.d.ts.map +1 -1
- package/dist/codeIndexDB-enhanced.js +311 -214
- package/dist/codeIndexDB-enhanced.js.map +1 -1
- package/dist/codeIndexDB.d.ts +222 -0
- package/dist/codeIndexDB.d.ts.map +1 -0
- package/dist/codeIndexDB.js +2042 -0
- package/dist/codeIndexDB.js.map +1 -0
- package/dist/codeIndexService.d.ts.map +1 -1
- package/dist/codeIndexService.js.map +1 -1
- package/dist/componentScanner.d.ts +14 -8
- package/dist/componentScanner.d.ts.map +1 -1
- package/dist/componentScanner.js +136 -113
- package/dist/componentScanner.js.map +1 -1
- package/dist/config/configLoader.d.ts.map +1 -1
- package/dist/config/configLoader.js +10 -7
- package/dist/config/configLoader.js.map +1 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/constants.js.map +1 -1
- package/dist/fingerprint.d.ts +15 -0
- package/dist/fingerprint.d.ts.map +1 -0
- package/dist/fingerprint.js +32 -0
- package/dist/fingerprint.js.map +1 -0
- package/dist/functionScanner.d.ts +5 -0
- package/dist/functionScanner.d.ts.map +1 -1
- package/dist/functionScanner.js +417 -341
- package/dist/functionScanner.js.map +1 -1
- package/dist/generators/AWSQConfigGenerator.d.ts.map +1 -1
- package/dist/generators/AiderConfigGenerator.d.ts.map +1 -1
- package/dist/generators/BaseConfigGenerator.d.ts.map +1 -1
- package/dist/generators/BaseConfigGenerator.js.map +1 -1
- package/dist/generators/ClaudeConfigGenerator.d.ts.map +1 -1
- package/dist/generators/ClineConfigGenerator.d.ts.map +1 -1
- package/dist/generators/CodeiumConfigGenerator.d.ts.map +1 -1
- package/dist/generators/ConfigGeneratorFactory.d.ts.map +1 -1
- package/dist/generators/ConfigGeneratorFactory.js.map +1 -1
- package/dist/generators/ContinueConfigGenerator.d.ts.map +1 -1
- package/dist/generators/CopilotConfigGenerator.d.ts.map +1 -1
- package/dist/generators/CursorConfigGenerator.d.ts.map +1 -1
- package/dist/generators/JetBrainsConfigGenerator.d.ts.map +1 -1
- package/dist/generators/VSCodeConfigGenerator.d.ts.map +1 -1
- package/dist/grammars/tree-sitter-go.wasm +0 -0
- package/dist/grammars/tree-sitter-javascript.wasm +0 -0
- package/dist/grammars/tree-sitter-tsx.wasm +0 -0
- package/dist/grammars/tree-sitter-typescript.wasm +0 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/invariants/index.d.ts +9 -0
- package/dist/invariants/index.d.ts.map +1 -0
- package/dist/invariants/index.js +4 -0
- package/dist/invariants/index.js.map +1 -0
- package/dist/invariants/invariant-rules.schema.json +137 -0
- package/dist/invariants/ruleEngine.d.ts +32 -0
- package/dist/invariants/ruleEngine.d.ts.map +1 -0
- package/dist/invariants/ruleEngine.js +536 -0
- package/dist/invariants/ruleEngine.js.map +1 -0
- package/dist/invariants/ruleValidator.d.ts +17 -0
- package/dist/invariants/ruleValidator.d.ts.map +1 -0
- package/dist/invariants/ruleValidator.js +264 -0
- package/dist/invariants/ruleValidator.js.map +1 -0
- package/dist/invariants/types.d.ts +78 -0
- package/dist/invariants/types.d.ts.map +1 -0
- package/dist/invariants/types.js +5 -0
- package/dist/invariants/types.js.map +1 -0
- package/dist/languages/LanguageOrchestrator.d.ts.map +1 -1
- package/dist/languages/LanguageOrchestrator.js.map +1 -1
- package/dist/languages/LanguageRegistry.d.ts.map +1 -1
- package/dist/languages/RuntimeManager.d.ts.map +1 -1
- package/dist/languages/RuntimeManager.js +1 -1
- package/dist/languages/RuntimeManager.js.map +1 -1
- package/dist/languages/UniversalAnalyzer.d.ts.map +1 -1
- package/dist/languages/UniversalAnalyzer.js.map +1 -1
- package/dist/languages/adapterBridge.d.ts +102 -0
- package/dist/languages/adapterBridge.d.ts.map +1 -0
- package/dist/languages/adapterBridge.js +382 -0
- package/dist/languages/adapterBridge.js.map +1 -0
- package/dist/languages/go/GoAdapter.d.ts +37 -26
- package/dist/languages/go/GoAdapter.d.ts.map +1 -1
- package/dist/languages/go/GoAdapter.js +560 -281
- package/dist/languages/go/GoAdapter.js.map +1 -1
- package/dist/languages/index.d.ts +5 -2
- package/dist/languages/index.d.ts.map +1 -1
- package/dist/languages/index.js +11 -9
- package/dist/languages/index.js.map +1 -1
- package/dist/languages/tree-sitter/converter.d.ts +43 -0
- package/dist/languages/tree-sitter/converter.d.ts.map +1 -0
- package/dist/languages/tree-sitter/converter.js +150 -0
- package/dist/languages/tree-sitter/converter.js.map +1 -0
- package/dist/languages/tree-sitter/parser.d.ts +36 -0
- package/dist/languages/tree-sitter/parser.d.ts.map +1 -0
- package/dist/languages/tree-sitter/parser.js +114 -0
- package/dist/languages/tree-sitter/parser.js.map +1 -0
- package/dist/languages/types.d.ts +11 -0
- package/dist/languages/types.d.ts.map +1 -1
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts +92 -0
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts.map +1 -0
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js +951 -0
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js.map +1 -0
- package/dist/mcp-tools/projectTasks.d.ts +80 -11
- package/dist/mcp-tools/projectTasks.d.ts.map +1 -1
- package/dist/mcp-tools/projectTasks.js +279 -13
- package/dist/mcp-tools/projectTasks.js.map +1 -1
- package/dist/mcp-tools/whitelistTools.d.ts +21 -21
- package/dist/mcp-tools/whitelistTools.d.ts.map +1 -1
- package/dist/mcp-tools/workflowGuide.d.ts.map +1 -1
- package/dist/mcp-tools/workflowGuide.js +130 -126
- package/dist/mcp-tools/workflowGuide.js.map +1 -1
- package/dist/mcp-tools-shared.d.ts.map +1 -1
- package/dist/mcp-tools-shared.js.map +1 -1
- package/dist/mcp-ui-simple.js +1 -1
- package/dist/mcp-ui-simple.js.map +1 -1
- package/dist/mcp.d.ts +1 -1
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +1455 -1132
- package/dist/mcp.js.map +1 -1
- package/dist/mcpAuditJobs.d.ts +4 -0
- package/dist/mcpAuditJobs.d.ts.map +1 -1
- package/dist/mcpAuditJobs.js +49 -2
- package/dist/mcpAuditJobs.js.map +1 -1
- package/dist/mcpDiagnostics.d.ts.map +1 -1
- package/dist/mcpDiagnostics.js +8 -5
- package/dist/mcpDiagnostics.js.map +1 -1
- package/dist/mcpToolErrors.d.ts.map +1 -1
- package/dist/mcpToolErrors.js.map +1 -1
- package/dist/native/ast-grep-napi.darwin-arm64.node +0 -0
- package/dist/native/ast-grep-napi.darwin-x64.node +0 -0
- package/dist/native/ast-grep-napi.linux-arm64-gnu.node +0 -0
- package/dist/native/ast-grep-napi.linux-arm64-musl.node +0 -0
- package/dist/native/ast-grep-napi.linux-x64-gnu.node +0 -0
- package/dist/native/ast-grep-napi.linux-x64-musl.node +0 -0
- package/dist/native/ast-grep-napi.win32-x64-msvc.node +0 -0
- package/dist/native-bootstrap.d.ts +15 -0
- package/dist/native-bootstrap.d.ts.map +1 -0
- package/dist/native-bootstrap.js +75 -0
- package/dist/native-bootstrap.js.map +1 -0
- package/dist/reporting/csvReportGenerator.d.ts.map +1 -1
- package/dist/reporting/htmlReportGenerator.d.ts.map +1 -1
- package/dist/reporting/jsonReportGenerator.d.ts.map +1 -1
- package/dist/reporting/reportGenerator.d.ts.map +1 -1
- package/dist/reporting/reportGenerator.js +4 -0
- package/dist/reporting/reportGenerator.js.map +1 -1
- package/dist/reporting/sarifReportGenerator.d.ts +39 -0
- package/dist/reporting/sarifReportGenerator.d.ts.map +1 -0
- package/dist/reporting/sarifReportGenerator.js +229 -0
- package/dist/reporting/sarifReportGenerator.js.map +1 -0
- package/dist/search/QueryParser.d.ts +41 -0
- package/dist/search/QueryParser.d.ts.map +1 -1
- package/dist/search/QueryParser.js +200 -19
- package/dist/search/QueryParser.js.map +1 -1
- package/dist/services/CodeMapGenerator.d.ts.map +1 -1
- package/dist/services/CodeMapGenerator.js +4 -4
- package/dist/services/CodeMapGenerator.js.map +1 -1
- package/dist/services/ProjectTaskRepository.d.ts +34 -9
- package/dist/services/ProjectTaskRepository.d.ts.map +1 -1
- package/dist/services/ProjectTaskRepository.js +385 -10
- package/dist/services/ProjectTaskRepository.js.map +1 -1
- package/dist/services/SchemaParser.d.ts.map +1 -1
- package/dist/services/SchemaParser.js +5 -8
- package/dist/services/SchemaParser.js.map +1 -1
- package/dist/services/auditJobService.d.ts +1 -1
- package/dist/services/projectTaskHelpers.js.map +1 -1
- package/dist/services/whitelistService.d.ts.map +1 -1
- package/dist/services/whitelistService.js +1 -1
- package/dist/services/whitelistService.js.map +1 -1
- package/dist/tool-registry.d.ts +79 -0
- package/dist/tool-registry.d.ts.map +1 -0
- package/dist/tool-registry.js +139 -0
- package/dist/tool-registry.js.map +1 -0
- package/dist/types/projectTask.d.ts +31 -0
- package/dist/types/projectTask.d.ts.map +1 -1
- package/dist/types.d.ts +26 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/ui/InteractivePrompts.d.ts.map +1 -1
- package/dist/ui/InteractivePrompts.js.map +1 -1
- package/dist/utils/astParser.d.ts +31 -38
- package/dist/utils/astParser.d.ts.map +1 -1
- package/dist/utils/astParser.js +138 -196
- package/dist/utils/astParser.js.map +1 -1
- package/dist/utils/astUtils.d.ts +87 -58
- package/dist/utils/astUtils.d.ts.map +1 -1
- package/dist/utils/astUtils.js +852 -581
- package/dist/utils/astUtils.js.map +1 -1
- package/dist/utils/componentPatterns.js.map +1 -1
- package/dist/utils/componentResponsibility.d.ts +13 -9
- package/dist/utils/componentResponsibility.d.ts.map +1 -1
- package/dist/utils/componentResponsibility.js +236 -206
- package/dist/utils/componentResponsibility.js.map +1 -1
- package/dist/utils/dependencyExtractor.d.ts +11 -6
- package/dist/utils/dependencyExtractor.d.ts.map +1 -1
- package/dist/utils/dependencyExtractor.js +200 -119
- package/dist/utils/dependencyExtractor.js.map +1 -1
- package/dist/utils/fileDiscovery.d.ts +1 -1
- package/dist/utils/fileDiscovery.d.ts.map +1 -1
- package/dist/utils/fileDiscovery.js.map +1 -1
- package/dist/utils/jsDocParser.d.ts +27 -30
- package/dist/utils/jsDocParser.d.ts.map +1 -1
- package/dist/utils/jsDocParser.js +271 -207
- package/dist/utils/jsDocParser.js.map +1 -1
- package/dist/utils/reactDetection.d.ts +27 -12
- package/dist/utils/reactDetection.d.ts.map +1 -1
- package/dist/utils/reactDetection.js +331 -219
- package/dist/utils/reactDetection.js.map +1 -1
- package/dist/workers/auditWorker.js +17 -3
- package/dist/workers/auditWorker.js.map +1 -1
- package/package.json +54 -51
- package/dist/adapters/GoAdapter.d.ts +0 -53
- package/dist/adapters/GoAdapter.d.ts.map +0 -1
- package/dist/adapters/GoAdapter.js +0 -611
- package/dist/adapters/GoAdapter.js.map +0 -1
- package/dist/adapters/GoConfig.d.ts +0 -35
- package/dist/adapters/GoConfig.d.ts.map +0 -1
- package/dist/adapters/GoConfig.js +0 -155
- package/dist/adapters/GoConfig.js.map +0 -1
- package/dist/adapters/LanguageAdapter.d.ts +0 -135
- package/dist/adapters/LanguageAdapter.d.ts.map +0 -1
- package/dist/adapters/LanguageAdapter.js +0 -47
- package/dist/adapters/LanguageAdapter.js.map +0 -1
- package/dist/adapters/TypeScriptAdapter.d.ts +0 -43
- package/dist/adapters/TypeScriptAdapter.d.ts.map +0 -1
- package/dist/adapters/TypeScriptAdapter.js +0 -386
- package/dist/adapters/TypeScriptAdapter.js.map +0 -1
- package/dist/adapters/UniversalAnalyzer.d.ts +0 -42
- package/dist/adapters/UniversalAnalyzer.d.ts.map +0 -1
- package/dist/adapters/UniversalAnalyzer.js +0 -103
- package/dist/adapters/UniversalAnalyzer.js.map +0 -1
- package/dist/adapters/UniversalSOLIDAnalyzer.d.ts +0 -48
- package/dist/adapters/UniversalSOLIDAnalyzer.d.ts.map +0 -1
- package/dist/adapters/UniversalSOLIDAnalyzer.js +0 -178
- package/dist/adapters/UniversalSOLIDAnalyzer.js.map +0 -1
- package/dist/adapters/solidAnalyzerCompat.d.ts +0 -21
- package/dist/adapters/solidAnalyzerCompat.d.ts.map +0 -1
- package/dist/adapters/solidAnalyzerCompat.js +0 -78
- package/dist/adapters/solidAnalyzerCompat.js.map +0 -1
- package/dist/analyzers/dataAccessAnalyzerCompat.d.ts +0 -20
- package/dist/analyzers/dataAccessAnalyzerCompat.d.ts.map +0 -1
- package/dist/analyzers/dataAccessAnalyzerCompat.js +0 -59
- package/dist/analyzers/dataAccessAnalyzerCompat.js.map +0 -1
- package/dist/analyzers/documentationAnalyzerCompat.d.ts +0 -20
- package/dist/analyzers/documentationAnalyzerCompat.d.ts.map +0 -1
- package/dist/analyzers/documentationAnalyzerCompat.js +0 -52
- package/dist/analyzers/documentationAnalyzerCompat.js.map +0 -1
- package/dist/analyzers/dryAnalyzerCompat.d.ts +0 -20
- package/dist/analyzers/dryAnalyzerCompat.d.ts.map +0 -1
- package/dist/analyzers/dryAnalyzerCompat.js +0 -44
- package/dist/analyzers/dryAnalyzerCompat.js.map +0 -1
- package/dist/analyzers/schemaAnalyzerCompat.d.ts +0 -20
- package/dist/analyzers/schemaAnalyzerCompat.d.ts.map +0 -1
- package/dist/analyzers/schemaAnalyzerCompat.js +0 -69
- package/dist/analyzers/schemaAnalyzerCompat.js.map +0 -1
- package/dist/analyzers/solidAnalyzerCompat.d.ts +0 -20
- package/dist/analyzers/solidAnalyzerCompat.d.ts.map +0 -1
- package/dist/analyzers/solidAnalyzerCompat.js +0 -78
- package/dist/analyzers/solidAnalyzerCompat.js.map +0 -1
- package/dist/codeIndexDb.d.ts +0 -394
- package/dist/codeIndexDb.d.ts.map +0 -1
- package/dist/codeIndexDb.js +0 -2077
- package/dist/codeIndexDb.js.map +0 -1
- package/dist/languages/typescript/TypeScriptAdapter.d.ts +0 -108
- package/dist/languages/typescript/TypeScriptAdapter.d.ts.map +0 -1
- package/dist/languages/typescript/TypeScriptAdapter.js +0 -567
- package/dist/languages/typescript/TypeScriptAdapter.js.map +0 -1
- package/dist/languages/typescript/test-extraction.d.ts +0 -2
- package/dist/languages/typescript/test-extraction.d.ts.map +0 -1
- package/dist/languages/typescript/test-extraction.js +0 -36
- package/dist/languages/typescript/test-extraction.js.map +0 -1
- package/dist/mcp-hybrid.d.ts +0 -10
- package/dist/mcp-hybrid.d.ts.map +0 -1
- package/dist/mcp-hybrid.js +0 -41
- package/dist/mcp-hybrid.js.map +0 -1
- package/dist/mcp-index.d.ts +0 -13
- package/dist/mcp-index.d.ts.map +0 -1
- package/dist/mcp-index.js +0 -123
- package/dist/mcp-index.js.map +0 -1
- package/dist/mcp-standalone.d.ts +0 -3
- package/dist/mcp-standalone.d.ts.map +0 -1
- package/dist/mcp-standalone.js +0 -1201
- package/dist/mcp-standalone.js.map +0 -1
- package/dist/mcp-ui-server.d.ts +0 -27
- package/dist/mcp-ui-server.d.ts.map +0 -1
- package/dist/mcp-ui-server.js +0 -484
- package/dist/mcp-ui-server.js.map +0 -1
- package/dist/test-multi-strategy-search.d.ts +0 -3
- package/dist/test-multi-strategy-search.d.ts.map +0 -1
- package/dist/test-multi-strategy-search.js +0 -170
- package/dist/test-multi-strategy-search.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,216 +1,388 @@
|
|
|
1
|
-
# Code Auditor
|
|
1
|
+
# Code Auditor
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Code Auditor enforces architectural invariants and code quality rules inside your AI agent's edit loop. When an agent writes code that violates your project's rules — importing a banned library, breaking a module boundary, calling a restricted function — Code Auditor blocks the edit and tells the agent why. It also runs traditional static analysis (SOLID, DRY, security, documentation) and builds a searchable index of every function and component in your codebase. MCP server, CLI, and Claude Code plugin. TypeScript, JavaScript, Go.
|
|
4
4
|
|
|
5
|
-
## The
|
|
5
|
+
## The loop, shown not told
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Given this `.codeauditor.json` in the project root:
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
```json
|
|
10
|
+
{
|
|
11
|
+
"rules": [
|
|
12
|
+
{
|
|
13
|
+
"id": "no-lokijs",
|
|
14
|
+
"kind": "import-ban",
|
|
15
|
+
"severity": "critical",
|
|
16
|
+
"module": "lokijs",
|
|
17
|
+
"message": "lokijs was replaced by better-sqlite3 in v3.1.0. Use the SQLite-backed CodeIndexDB instead."
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
```
|
|
15
22
|
|
|
16
|
-
|
|
23
|
+
An agent writes `import loki from 'lokijs'` in `src/broken.ts`. The Claude Code plugin hook fires on the edit and runs:
|
|
17
24
|
|
|
18
25
|
```bash
|
|
19
|
-
|
|
20
|
-
claude mcp add code-auditor -- npx code-auditor-mcp
|
|
21
|
-
|
|
22
|
-
# That's it! Now ask Claude:
|
|
23
|
-
# "What authentication functions exist in my codebase?"
|
|
24
|
-
# "Find all API endpoints and check for rate limiting"
|
|
25
|
-
# "Show me Go structs that handle user data"
|
|
26
|
-
# "Compare TypeScript and Go implementations of the same feature"
|
|
26
|
+
code-audit changed --json --fail-on critical
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
The output:
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
```json
|
|
32
|
+
[
|
|
33
|
+
{
|
|
34
|
+
"analyzer": "documentation",
|
|
35
|
+
"rule": "file-documentation",
|
|
36
|
+
"severity": "warning",
|
|
37
|
+
"message": "File lacks proper documentation header",
|
|
38
|
+
"file": "src/broken.ts",
|
|
39
|
+
"line": 1,
|
|
40
|
+
"column": 1,
|
|
41
|
+
"enclosingSymbol": "",
|
|
42
|
+
"suggestion": "",
|
|
43
|
+
"details": ""
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"analyzer": "invariants",
|
|
47
|
+
"rule": "no-lokijs",
|
|
48
|
+
"severity": "critical",
|
|
49
|
+
"message": "lokijs was replaced by better-sqlite3 in v3.1.0. Use the SQLite-backed CodeIndexDB instead.",
|
|
50
|
+
"file": "src/broken.ts",
|
|
51
|
+
"line": 4,
|
|
52
|
+
"column": 1,
|
|
53
|
+
"enclosingSymbol": "",
|
|
54
|
+
"suggestion": "",
|
|
55
|
+
"details": "import-ban"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"analyzer": "schema",
|
|
59
|
+
"rule": "unknown-table",
|
|
60
|
+
"severity": "warning",
|
|
61
|
+
"message": "Reference to unknown table 'lokijs'",
|
|
62
|
+
"file": "src/broken.ts",
|
|
63
|
+
"line": 4,
|
|
64
|
+
"column": 13,
|
|
65
|
+
"enclosingSymbol": "",
|
|
66
|
+
"suggestion": "",
|
|
67
|
+
"details": "Reference to unknown table 'lokijs'"
|
|
68
|
+
}
|
|
69
|
+
]
|
|
32
70
|
```
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
71
|
+
|
|
72
|
+
Exit code 2 (because a `critical` severity violation exists). The agent sees the violations, removes the import, and the next run is clean:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
code-audit changed --quiet && echo "clean"
|
|
76
|
+
# → clean
|
|
37
77
|
```
|
|
38
78
|
|
|
39
|
-
|
|
40
|
-
- **SOLID Principles** - Catch architecture issues before they spread
|
|
41
|
-
- **DRY Violations** - Find duplicate code that should be refactored
|
|
42
|
-
- **Security Patterns** - Verify auth, rate limiting, SQL injection protection
|
|
43
|
-
- **Dead Code** - Identify unused imports and functions
|
|
79
|
+
The agent never sees a generic "something is wrong" — it sees your rule's exact message, with the file and line, and can fix it immediately.
|
|
44
80
|
|
|
45
|
-
|
|
46
|
-
Auto-generates configurations for:
|
|
47
|
-
- Claude (via MCP)
|
|
48
|
-
- Cursor
|
|
49
|
-
- Continue
|
|
50
|
-
- GitHub Copilot
|
|
51
|
-
- 10+ other AI assistants
|
|
81
|
+
## Quick start
|
|
52
82
|
|
|
53
|
-
###
|
|
54
|
-
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
|
|
83
|
+
### Claude Code plugin (two commands)
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
claude plugin marketplace add BenAHammond/code-auditor-mcp
|
|
87
|
+
claude plugin install code-auditor
|
|
58
88
|
```
|
|
59
89
|
|
|
60
|
-
|
|
61
|
-
Use the **`project_tasks`** tool to keep a per-project task list in the local database (titles, status, priorities, due dates, blockers, related files/symbols, and more). **Tasks survive `sync_index` reset**: clearing the analysis index removes indexed functions, cached audits, code maps, and schema overlays so you do not keep “ghost” references to deleted code—it does **not** delete your task list or analyzer configs.
|
|
90
|
+
The plugin registers a hook that runs `code-audit changed` after every edit. Violations at `critical` severity block the edit and give the agent your rule's message.
|
|
62
91
|
|
|
63
|
-
|
|
92
|
+
### Generic MCP
|
|
64
93
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
Claude: Found 23 functions across 8 files:
|
|
69
|
-
- `validateToken()` in auth/tokens.ts:45
|
|
70
|
-
- `requireAuth()` in middleware/auth.ts:12
|
|
71
|
-
- `checkPermissions()` in auth/permissions.ts:78
|
|
72
|
-
...
|
|
73
|
-
```
|
|
94
|
+
```bash
|
|
95
|
+
# Claude Code
|
|
96
|
+
claude mcp add code-auditor -- npx code-auditor-mcp
|
|
74
97
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
98
|
+
# Cursor (.cursor/mcp.json)
|
|
99
|
+
{
|
|
100
|
+
"mcpServers": {
|
|
101
|
+
"code-auditor": {
|
|
102
|
+
"command": "npx",
|
|
103
|
+
"args": ["code-auditor-mcp", "--stdio"]
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
82
107
|
```
|
|
83
108
|
|
|
84
|
-
|
|
109
|
+
MCP tools available: `audit`, `search`, `index`, `config`, `code_map`, `tasks`, `guide`.
|
|
110
|
+
|
|
111
|
+
> **Note: `--ignore-scripts` installs are unsupported.** Code Auditor depends on two native packages — `better-sqlite3` and `@ast-grep/napi` — that ship platform binaries via install scripts. Running `npm install` with `--ignore-scripts` prevents those binaries from downloading and the tool won't start. Stock npm doesn't use this flag by default; it is only active in security-hardened or CI environments that configure it intentionally. If your environment requires `--ignore-scripts`, run `npm install` without the flag first, or use `npm approve-scripts` (npm 11+) to allow the specific packages.
|
|
112
|
+
|
|
113
|
+
### CLI
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
npx code-audit # full audit, HTML report
|
|
117
|
+
npx code-audit -f json # JSON for CI/CD
|
|
118
|
+
npx code-audit -f sarif # SARIF for GitHub Code Scanning
|
|
119
|
+
npx code-audit changed --json # diff-scoped audit
|
|
120
|
+
npx code-audit map -p . # codebase map to stdout
|
|
121
|
+
npx code-audit search "calls:validate" # search the index
|
|
85
122
|
```
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
-
|
|
90
|
-
|
|
123
|
+
|
|
124
|
+
## Invariant rules
|
|
125
|
+
|
|
126
|
+
Code Auditor enforces five kinds of project-specific rules on every audit run, including diff-scoped agent-loop runs. Rules live in `.codeauditor.json` in the project root.
|
|
127
|
+
|
|
128
|
+
### import-ban
|
|
129
|
+
|
|
130
|
+
Prevent any file from importing a banned module.
|
|
131
|
+
|
|
132
|
+
```json
|
|
133
|
+
{
|
|
134
|
+
"id": "no-lokijs",
|
|
135
|
+
"kind": "import-ban",
|
|
136
|
+
"severity": "critical",
|
|
137
|
+
"module": "lokijs",
|
|
138
|
+
"message": "lokijs was replaced by better-sqlite3 in v3.1.0."
|
|
139
|
+
}
|
|
91
140
|
```
|
|
92
141
|
|
|
93
|
-
|
|
142
|
+
Optional `except` field exempts specific files from the ban.
|
|
94
143
|
|
|
95
|
-
###
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
144
|
+
### call-constraint
|
|
145
|
+
|
|
146
|
+
Restrict which files may call a function — useful for API boundaries and security-sensitive entry points.
|
|
147
|
+
|
|
148
|
+
```json
|
|
149
|
+
{
|
|
150
|
+
"id": "payment-calls-auth",
|
|
151
|
+
"kind": "call-constraint",
|
|
152
|
+
"severity": "critical",
|
|
153
|
+
"callee": "src/services/paymentService.ts#chargeCustomer",
|
|
154
|
+
"allowFrom": ["src/api/**"],
|
|
155
|
+
"message": "chargeCustomer() may only be called from API route handlers."
|
|
156
|
+
}
|
|
100
157
|
```
|
|
101
158
|
|
|
102
|
-
###
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
159
|
+
### module-boundary
|
|
160
|
+
|
|
161
|
+
Prevent files matching one glob from importing from files matching another.
|
|
162
|
+
|
|
163
|
+
```json
|
|
164
|
+
{
|
|
165
|
+
"id": "languages-no-analyzers",
|
|
166
|
+
"kind": "module-boundary",
|
|
167
|
+
"severity": "critical",
|
|
168
|
+
"from": "src/languages/**",
|
|
169
|
+
"to": "src/analyzers/**",
|
|
170
|
+
"message": "The languages/ module must not depend on analyzers."
|
|
171
|
+
}
|
|
106
172
|
```
|
|
107
173
|
|
|
108
|
-
###
|
|
109
|
-
Requires **Node.js 18+**. From the `app/` directory:
|
|
174
|
+
### naming
|
|
110
175
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
176
|
+
Enforce naming conventions for exported symbols in specific directories.
|
|
177
|
+
|
|
178
|
+
```json
|
|
179
|
+
{
|
|
180
|
+
"id": "hook-prefix",
|
|
181
|
+
"kind": "naming",
|
|
182
|
+
"severity": "warning",
|
|
183
|
+
"path": "src/hooks/**",
|
|
184
|
+
"exports": "^use[A-Z]",
|
|
185
|
+
"message": "Hooks in src/hooks/ must be prefixed with 'use'."
|
|
186
|
+
}
|
|
115
187
|
```
|
|
116
188
|
|
|
117
|
-
|
|
189
|
+
### ast-pattern
|
|
118
190
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
191
|
+
Match AST node patterns in source using ast-grep. This example bans `new Function(...)` — eval-by-another-name that bypasses static analysis.
|
|
192
|
+
|
|
193
|
+
```json
|
|
194
|
+
{
|
|
195
|
+
"id": "no-new-function",
|
|
196
|
+
"kind": "ast-pattern",
|
|
197
|
+
"severity": "critical",
|
|
198
|
+
"pattern": "new Function($$$)",
|
|
199
|
+
"message": "new Function() is eval-by-another-name — forbidden in this codebase"
|
|
200
|
+
}
|
|
124
201
|
```
|
|
125
202
|
|
|
126
|
-
|
|
203
|
+
Optional `language` field restricts to `"typescript"`, `"javascript"`, or `"go"`. Optional `path` field restricts to files matching a glob.
|
|
204
|
+
|
|
205
|
+
Rules are validated on startup — bad globs, duplicate IDs, missing fields, or mutually-exclusive options fail the audit rather than being silently skipped. Use `config rules_list` and `config rules_check` from the MCP server to introspect the rules your agent is operating under.
|
|
127
206
|
|
|
128
|
-
|
|
207
|
+
## Analyzers
|
|
129
208
|
|
|
130
|
-
-
|
|
131
|
-
- **CLI** — `node dist/mcp-index.js --data-dir /path/to/data` (equivalent to setting the env var). The published binary `code-auditor-mcp` also accepts `--data-dir` because it loads the same bootstrap.
|
|
209
|
+
Six built-in code quality analyzers run alongside invariant rules:
|
|
132
210
|
|
|
133
|
-
|
|
211
|
+
| Analyzer | What it detects |
|
|
212
|
+
|----------|----------------|
|
|
213
|
+
| **SOLID** | God classes, long methods, too many parameters, dependency inversion violations |
|
|
214
|
+
| **DRY** | Near-duplicate blocks across files using normalized token comparison |
|
|
215
|
+
| **React** | Missing key props, unused state, useEffect dependency issues, component size |
|
|
216
|
+
| **Documentation** | Missing or insufficient JSDoc on exported functions, classes, and parameters |
|
|
217
|
+
| **Data Access** | Raw SQL queries missing parameterization, N+1 query patterns |
|
|
218
|
+
| **Schema** | Zod/JSON Schema validation gaps on API boundaries |
|
|
219
|
+
|
|
220
|
+
Each analyzer's thresholds are configurable via `config.set` in the MCP server or via `.codeauditor.json`:
|
|
134
221
|
|
|
135
222
|
```json
|
|
136
223
|
{
|
|
137
|
-
"
|
|
138
|
-
"
|
|
139
|
-
|
|
140
|
-
"args": ["/absolute/path/to/code-auditor/app/dist/mcp-index.js", "--stdio"],
|
|
141
|
-
"env": {
|
|
142
|
-
"CODE_AUDITOR_DATA_DIR": "/Users/you/Library/Application Support/code-auditor"
|
|
143
|
-
}
|
|
144
|
-
}
|
|
224
|
+
"analyzerConfigs": {
|
|
225
|
+
"dry": { "similarityThreshold": 0.8, "minLineThreshold": 5 },
|
|
226
|
+
"solid": { "maxMethodsPerClass": 12, "maxParametersPerMethod": 4 }
|
|
145
227
|
}
|
|
146
228
|
}
|
|
147
229
|
```
|
|
148
230
|
|
|
149
|
-
##
|
|
231
|
+
## Diff-scoped auditing and hooks
|
|
232
|
+
|
|
233
|
+
`code-audit changed` audits only the functions whose content has changed since the last index sync. It is fast enough to sit inside an agent's edit loop.
|
|
234
|
+
|
|
235
|
+
### Scope options
|
|
236
|
+
|
|
237
|
+
| Scope | Description |
|
|
238
|
+
|-------|-------------|
|
|
239
|
+
| `changed` (default) | Files modified since last index sync |
|
|
240
|
+
| `git:<ref>` | Files changed vs. a git ref (`git:origin/main`) |
|
|
241
|
+
| `[paths...]` | Specific files or directories |
|
|
242
|
+
| `--stdin` | Read file paths from stdin (one per line) |
|
|
243
|
+
|
|
244
|
+
### Hook contract
|
|
150
245
|
|
|
151
246
|
```bash
|
|
152
|
-
|
|
153
|
-
code-audit
|
|
154
|
-
|
|
155
|
-
|
|
247
|
+
# Audit changed files, output JSON, exit 2 on critical violations
|
|
248
|
+
code-audit changed --json --fail-on critical
|
|
249
|
+
|
|
250
|
+
# Audit specific files from stdin
|
|
251
|
+
git diff --name-only HEAD | code-audit changed --stdin --json
|
|
252
|
+
|
|
253
|
+
# Quiet mode: no output when clean
|
|
254
|
+
code-audit changed --quiet && echo "clean"
|
|
156
255
|
```
|
|
157
256
|
|
|
158
|
-
|
|
257
|
+
| Flag | Description |
|
|
258
|
+
|------|-------------|
|
|
259
|
+
| `--json` | Machine-readable violation array to stdout |
|
|
260
|
+
| `--quiet` | Suppress output when zero violations |
|
|
261
|
+
| `--fail-on <severity>` | Nonzero exit (code 2) when violations at or above severity exist. Default: `critical` |
|
|
262
|
+
| `--stdin` | Read file paths from stdin, one per line |
|
|
159
263
|
|
|
160
|
-
|
|
161
|
-
2. **Ask AI** → "Is there a function to validate emails?"
|
|
162
|
-
3. **Get Context** → AI finds `validateEmail()` and similar patterns
|
|
163
|
-
4. **Improve** → AI suggests using existing validation instead of duplicating
|
|
164
|
-
5. **Repeat** → Your AI gets smarter about YOUR codebase
|
|
264
|
+
### Claude Code hook recipe
|
|
165
265
|
|
|
166
|
-
|
|
266
|
+
In `.claude/settings.json`:
|
|
167
267
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
}
|
|
268
|
+
```json
|
|
269
|
+
{
|
|
270
|
+
"hooks": {
|
|
271
|
+
"PostToolUse": [
|
|
272
|
+
{
|
|
273
|
+
"matcher": "Write|Edit",
|
|
274
|
+
"command": "cat - | code-audit changed --stdin --json --fail-on critical"
|
|
275
|
+
}
|
|
276
|
+
]
|
|
178
277
|
}
|
|
179
|
-
}
|
|
278
|
+
}
|
|
180
279
|
```
|
|
181
280
|
|
|
182
|
-
##
|
|
281
|
+
## Code intelligence
|
|
282
|
+
|
|
283
|
+
A searchable index of every function, component, struct, and dependency is maintained as supporting infrastructure for AI assistants. It is built during audits and synced on file changes.
|
|
284
|
+
|
|
285
|
+
### Search operators
|
|
183
286
|
|
|
184
|
-
| What
|
|
185
|
-
|
|
287
|
+
| What you want | Query |
|
|
288
|
+
|--------------|-------|
|
|
186
289
|
| Complex functions | `complexity:>10` |
|
|
187
290
|
| Go functions only | `lang:go` |
|
|
188
|
-
|
|
|
189
|
-
|
|
|
190
|
-
|
|
|
191
|
-
|
|
|
192
|
-
| Find dependencies | `calls:validateUser` |
|
|
193
|
-
| Cross-language patterns | `name:validateEmail` |
|
|
291
|
+
| React components | `component:functional` |
|
|
292
|
+
| Functions calling a specific function | `calls:validateUser` |
|
|
293
|
+
| Exported but undocumented | `exported:true jsdoc:false` |
|
|
294
|
+
| Find by name | `name:validateEmail` |
|
|
194
295
|
| Unused imports | `unused-imports file:src` |
|
|
296
|
+
| Go structs | `lang:go entity:struct` |
|
|
297
|
+
| Functions with a specific dependency | `dep:lodash` |
|
|
195
298
|
|
|
196
|
-
|
|
299
|
+
### Code maps
|
|
197
300
|
|
|
198
|
-
-
|
|
199
|
-
- Incremental updates on file changes
|
|
200
|
-
- LokiJS for fast in-memory search
|
|
201
|
-
- FlexSearch for intelligent queries
|
|
301
|
+
`code-audit map` generates a human-readable file tree with function annotations, complexity scores, and dependency arrows. In the MCP server, `code_map.get` returns this as structured data.
|
|
202
302
|
|
|
203
|
-
|
|
303
|
+
### Task queue
|
|
204
304
|
|
|
205
|
-
|
|
305
|
+
The `tasks` MCP tool maintains a per-project task list in the local database (titles, status, priorities, due dates, blockers, related files/symbols). `tasks from_audit` populates the task queue from audit violations — each critical issue becomes a task with file locations and fix suggestions. Tasks survive `index reset`: clearing the analysis index does not delete your task list.
|
|
206
306
|
|
|
207
|
-
##
|
|
307
|
+
## CI and SARIF
|
|
308
|
+
|
|
309
|
+
Upload audit results to GitHub Code Scanning so violations appear as PR annotations:
|
|
310
|
+
|
|
311
|
+
```yaml
|
|
312
|
+
# .github/workflows/code-audit.yml
|
|
313
|
+
name: Code Audit
|
|
314
|
+
|
|
315
|
+
on:
|
|
316
|
+
push:
|
|
317
|
+
branches: [main]
|
|
318
|
+
pull_request:
|
|
319
|
+
branches: [main]
|
|
320
|
+
|
|
321
|
+
jobs:
|
|
322
|
+
audit:
|
|
323
|
+
runs-on: ubuntu-latest
|
|
324
|
+
steps:
|
|
325
|
+
- uses: actions/checkout@v4
|
|
326
|
+
|
|
327
|
+
- uses: actions/setup-node@v4
|
|
328
|
+
with:
|
|
329
|
+
node-version: '20'
|
|
330
|
+
|
|
331
|
+
- name: Run code audit
|
|
332
|
+
run: npx code-auditor-mcp -f sarif -o results.sarif
|
|
333
|
+
|
|
334
|
+
- name: Upload SARIF to GitHub
|
|
335
|
+
uses: github/codeql-action/upload-sarif@v3
|
|
336
|
+
with:
|
|
337
|
+
sarif_file: results.sarif
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
For diff-scoped PR runs, use `changed --scope git:origin/main -f sarif` and pass `--sarif-category` to the upload action so scoped results don't overwrite full-branch results.
|
|
208
341
|
|
|
209
|
-
|
|
342
|
+
## Configuration
|
|
343
|
+
|
|
344
|
+
### Persistent analyzer settings
|
|
345
|
+
|
|
346
|
+
Set custom thresholds via the MCP `config` tool:
|
|
347
|
+
|
|
348
|
+
```
|
|
349
|
+
config.set analyzerName="solid" config={"maxMethodsPerClass":12}
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
Settings persist across audits and survive index resets.
|
|
353
|
+
|
|
354
|
+
### Data directory
|
|
210
355
|
|
|
211
|
-
|
|
356
|
+
The index file defaults to `<cwd>/.code-index/index.db`. Point at a dedicated location with the `CODE_AUDITOR_DATA_DIR` environment variable:
|
|
212
357
|
|
|
213
|
-
**Ready to give your AI x-ray vision into your code?**
|
|
214
358
|
```bash
|
|
215
|
-
|
|
216
|
-
|
|
359
|
+
# Environment variable
|
|
360
|
+
CODE_AUDITOR_DATA_DIR=/path/to/data code-audit
|
|
361
|
+
|
|
362
|
+
# CLI
|
|
363
|
+
code-auditor-mcp --data-dir /path/to/data
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
Cursor `.cursor/mcp.json` example:
|
|
367
|
+
|
|
368
|
+
```json
|
|
369
|
+
{
|
|
370
|
+
"mcpServers": {
|
|
371
|
+
"code-auditor": {
|
|
372
|
+
"command": "npx",
|
|
373
|
+
"args": ["code-auditor-mcp", "--stdio"],
|
|
374
|
+
"env": {
|
|
375
|
+
"CODE_AUDITOR_DATA_DIR": "/Users/you/Library/Application Support/code-auditor"
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
## Contributing
|
|
383
|
+
|
|
384
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines on adding new analyzers, language adapters, and invariant rule kinds.
|
|
385
|
+
|
|
386
|
+
## License
|
|
387
|
+
|
|
388
|
+
MIT
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
* Functional utilities for analyzer development
|
|
3
3
|
* These replace the BaseAnalyzer class with composable functions
|
|
4
4
|
*/
|
|
5
|
-
import
|
|
5
|
+
import type { AST, ASTNode } from '../languages/types.js';
|
|
6
6
|
import { Violation, AnalyzerResult, SeverityLevel } from '../types.js';
|
|
7
7
|
export { parseTypeScriptFile } from '../utils/astParser.js';
|
|
8
8
|
export { getLineAndColumn, getNodeText, getImports, findNodesByKind } from '../utils/astUtils.js';
|
|
9
9
|
/**
|
|
10
10
|
* File analyzer function - processes a single file
|
|
11
11
|
*/
|
|
12
|
-
export type FileAnalyzerFunction = (filePath: string,
|
|
12
|
+
export type FileAnalyzerFunction = (filePath: string, ast: AST, config: any, sourceCode?: string) => Promise<Violation[]> | Violation[];
|
|
13
13
|
/**
|
|
14
14
|
* Progress reporter function
|
|
15
15
|
*/
|
|
@@ -24,32 +24,32 @@ export declare function processFiles(files: string[], analyzeFile: FileAnalyzerF
|
|
|
24
24
|
*/
|
|
25
25
|
export declare function createViolation(data: Violation): Violation;
|
|
26
26
|
/**
|
|
27
|
-
* Get line and column from
|
|
27
|
+
* Get line and column from an ASTNode
|
|
28
28
|
*/
|
|
29
|
-
export declare function getNodePosition(
|
|
29
|
+
export declare function getNodePosition(node: ASTNode): {
|
|
30
30
|
line: number;
|
|
31
31
|
column: number;
|
|
32
32
|
};
|
|
33
33
|
/**
|
|
34
34
|
* Check if a node is exported
|
|
35
35
|
*/
|
|
36
|
-
export declare function isNodeExported(node:
|
|
36
|
+
export declare function isNodeExported(node: ASTNode): boolean;
|
|
37
37
|
/**
|
|
38
38
|
* Get the name of a node if it has one
|
|
39
39
|
*/
|
|
40
|
-
export declare function getNodeName(node:
|
|
40
|
+
export declare function getNodeName(node: ASTNode): string | undefined;
|
|
41
41
|
/**
|
|
42
42
|
* Count specific node types in a subtree
|
|
43
43
|
*/
|
|
44
|
-
export declare function countNodesOfType
|
|
44
|
+
export declare function countNodesOfType(node: ASTNode, predicate: (node: ASTNode) => boolean): number;
|
|
45
45
|
/**
|
|
46
46
|
* Find all nodes of a specific type
|
|
47
47
|
*/
|
|
48
|
-
export declare function findNodesOfType
|
|
48
|
+
export declare function findNodesOfType(node: ASTNode, predicate: (node: ASTNode) => boolean): ASTNode[];
|
|
49
49
|
/**
|
|
50
50
|
* Traverse AST with a visitor function
|
|
51
51
|
*/
|
|
52
|
-
export declare function traverseAST(node:
|
|
52
|
+
export declare function traverseAST(node: ASTNode, visitor: (node: ASTNode) => void): void;
|
|
53
53
|
/**
|
|
54
54
|
* Filter violations by severity
|
|
55
55
|
*/
|
|
@@ -61,9 +61,11 @@ export declare function sortViolations(violations: Violation[]): Violation[];
|
|
|
61
61
|
/**
|
|
62
62
|
* Calculate cyclomatic complexity of a function
|
|
63
63
|
*/
|
|
64
|
-
export declare function calculateComplexity(node:
|
|
64
|
+
export declare function calculateComplexity(node: ASTNode): number;
|
|
65
65
|
/**
|
|
66
66
|
* Create a standard analyzer function
|
|
67
67
|
*/
|
|
68
|
-
export declare function createAnalyzer(name: string, fileAnalyzer: FileAnalyzerFunction, defaultConfig?: any): (files:
|
|
68
|
+
export declare function createAnalyzer(name: string, fileAnalyzer: FileAnalyzerFunction, defaultConfig?: any): (files: string[], config: Record<string, unknown>, options?: {
|
|
69
|
+
minSeverity?: string;
|
|
70
|
+
}) => Promise<AnalyzerResult>;
|
|
69
71
|
//# sourceMappingURL=analyzerUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzerUtils.d.ts","sourceRoot":"","sources":["../../src/analyzers/analyzerUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"analyzerUtils.d.ts","sourceRoot":"","sources":["../../src/analyzers/analyzerUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAG1D,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAgB,MAAM,aAAa,CAAC;AAUrF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAE9B;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,CACjC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,GAAG,EACX,UAAU,CAAC,EAAE,MAAM,KAChB,OAAO,CAAC,SAAS,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC;AAExC;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAEtF;;;GAGG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EAAE,EACf,WAAW,EAAE,oBAAoB,EACjC,YAAY,EAAE,MAAM,EACpB,MAAM,GAAE,GAAQ,EAChB,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,OAAO,CAAC,cAAc,CAAC,CA8CzB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,SAAS,GACd,SAAS,CAEX;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,OAAO,GACZ;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAGlC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAErD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAE7D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,OAAO,EACb,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,GACpC,MAAM,CAMR;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,OAAO,EACb,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,GACpC,OAAO,EAAE,CAMX;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAC/B,IAAI,CAEN;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,SAAS,EAAE,EACvB,WAAW,CAAC,EAAE,aAAa,GAC1B,SAAS,EAAE,CAWb;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAcnE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAEzD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,oBAAoB,EAClC,aAAa,GAAE,GAAQ,WAEF,MAAM,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,6BAWnG"}
|