用途
code-analyzer 用于分析代码中的模式、复杂度、依赖关系、质量指标和潜在问题,为代码审查和重构提供结构化洞察。
主要能力
- 代码审查自动化
- 识别重构机会
- 理解不熟悉的代码库
- 质量指标报告
- 依赖分析
使用方式
基础分析
const { analyzeCode } = require('/job/.pi/skills/code-analyzer/analyzer.js');
const result = await analyzeCode('src/index.js', {
language: 'javascript'
});
console.log(result);
目录分析
const result = await analyzeCode('src/', {
analyzeAllFiles: true,
pattern: '**/*.js',
exclude: ['**/node_modules/**', '**/*.test.js']
});
console.log(result.summary);
复杂度分析
const result = await analyzeCode('src/', {
complexityMetrics: true,
maxCyclomaticComplexity: 10,
maxFunctionLength: 50
});
console.log(result.complexity);
依赖分析
const result = await analyzeCode('src/', {
dependencyGraph: true,
detectCircularDependencies: true
});
console.log(result.dependencies);
代码质量报告
const { generateQualityReport } = require('/job/.pi/skills/code-analyzer/analyzer.js');
const report = await generateQualityReport('src/', {
languages: ['javascript', 'typescript'],
metrics: ['complexity', 'duplication', 'maintainability'],
thresholds: {
complexity: 10,
duplication: 5,
maintainability: 50
}
});
console.log(report);
模式检测
const result = await analyzeCode('src/', {
detectPatterns: [
'singleton',
'factory',
'observer',
'decorator',
'strategy',
'adapter'
]
});
console.log(result.detectedPatterns);
安全分析
const result = await analyzeCode('src/', {
securityScan: true,
detectVulnerabilities: [
'sqlInjection',
'xss',
'pathTraversal',
'commandInjection',
'insecureRandomness'
]
});
console.log(result.securityIssues);
代码重复检测
const result = await analyzeCode('src/', {
detectDuplication: true,
minTokenMatch: 30
});
console.log(result.duplicates);
Bash CLI
# 分析单个文件
node /job/.pi/skills/code-analyzer/analyzer.js \
--file src/index.js
# 分析目录
node /job/.pi/skills/code-analyzer/analyzer.js \
--dir src/ \
--exclude "**/node_modules/**"
# 生成质量报告
node /job/.pi/skills/code-analyzer/analyzer.js \
--dir src/ \
--quality-report \
--output report.json
# 检查安全问题
node /job/.pi/skills/code-analyzer/analyzer.js \
--dir src/ \
--security-scan
CI/CD 集成
// .github/workflows/code-quality.yml
// 在 PR 上运行代码分析
const { analyzeCode } = require('/job/.pi/skills/code-analyzer/analyzer.js');
const result = await analyzeCode('src/', { qualityMetrics: true });
if (result.overall.score < 70) {
console.error('Code quality below threshold');
process.exit(1);
}
与其他技能集成
// 与 content-search 配合查找模式
const { contentSearch } = require('../content-search/search.js');
const { analyzeCode } = require('./code-analyzer/analyzer.js');
const matches = await contentSearch('TODO.*refactor', { include: '*.js' });
for (const match of matches) {
const analysis = await analyzeCode(match.file);
console.log(`Issues in ${match.file}:`, analysis.issues);
}
// 与 git-structured 配合处理变更文件
const { git } = require('../git-structured/git.js');
const diff = await git('diff', { cached: true });
const changedFiles = diff.files.map(f => f.path);
for (const file of changedFiles) {
const analysis = await analyzeCode(file);
if (analysis.issues.length > 0) {
console.log(`Review needed: ${file}`);
}
}
输出结构
{
file: "src/processor.js",
language: "javascript",
loc: { total: 234, code: 189, comments: 35, blank: 10 },
functions: [
{
name: "processData",
line: 42,
params: 5,
length: 78,
cyclomaticComplexity: 12,
cognitiveComplexity: 15
}
],
classes: [
{
name: "DataProcessor",
line: 10,
methods: 8,
properties: 5
}
],
imports: [
{ path: "./utils", names: ["helper1", "helper2"] },
{ path: "lodash", names: ["_"] }
],
exports: [
{ name: "processData", type: "function" },
{ name: "DataProcessor", type: "class" }
],
patterns: {
asyncAwait: 5,
promises: 2,
callbacks: 1,
decorators: 0
},
issues: [
{
line: 45,
type: "complexity",
severity: "warning",
message: "Function has high cyclomatic complexity (12)"
}
]
}
指标
圈复杂度
衡量代码中独立路径的数量:
- 1-10:低复杂度 ✓
- 11-20:中等
- 21-50:高
- 50+:非常高 ⚠️
认知复杂度
衡量代码理解难度:
- 1-10:易于阅读 ✓
- 11-20:中等难度
- 21-50:困难
- 50+:非常困难 ⚠️
可维护性指数
0-100 分制:
- 85-100:高度可维护 ✓
- 65-84:可维护
- 50-64:困难
- 0-49:非常困难 ⚠️
API
analyzeCode(path, options = {})
选项:
language- javascript|typescript|python|java|etcanalyzeAllFiles- Booleanpattern- 文件 Glob 模式exclude- 排除模式complexityMetrics- BooleandependencyGraph- BooleandetectCircularDependencies- BooleanmaxCyclomaticComplexity- 数字阈值maxFunctionLength- 数字阈值includeTests- Boolean
返回值:见上方输出结构。
语言支持
| 语言 | 扩展名 | 复杂度 | 依赖 | 质量 |
|---|---|---|---|---|
| JavaScript | .js, .mjs | ✅ | ✅ | ✅ |
| TypeScript | .ts, .tsx | ✅ | ✅ | ✅ |
| Python | .py | ✅ | ✅ | ✅ |
| Java | .java | ✅ | ✅ | ✅ |
| Go | .go | ✅ | ✅ | ✅ |
| Rust | .rs | ✅ | ✅ | ✅ |
| C/C++ | .c, .h, .cpp | ✅ | ✅ | ✅ |
| Ruby | .rb | ✅ | ✅ | ✅ |
适用场景
- 代码审查自动化
- 识别重构机会
- 理解不熟悉的代码库
- 质量指标报告
- 依赖分析
限制
以下情况不应使用本技能:
- 仅检查语法错误(应使用 linting)
- 运行时行为(应使用测试工具)
- 二进制分析