code-analyzer
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseCode Analyzer Skill
Code Analyzer Skill
Analyze code for patterns, complexity, dependencies, quality metrics, and potential issues. Provides structured insights for code review and refactoring.
分析代码的模式、复杂度、依赖关系、质量指标以及潜在问题。为代码审查和重构提供结构化的洞察信息。
When to Use
使用场景
✅ USE this skill when:
- Code review automation
- Identifying refactoring opportunities
- Understanding unfamiliar codebases
- Quality metrics reporting
- Dependency analysis
❌ DON'T use this skill when:
- Syntax errors only (use linting)
- Runtime behavior (use testing tools)
- Binary analysis
✅ 在以下场景使用该Skill:
- 代码审查自动化
- 识别重构机会
- 理解不熟悉的代码库
- 质量指标报告
- 依赖关系分析
❌ 请勿在以下场景使用该Skill:
- 仅检查语法错误(使用代码检查工具)
- 分析运行时行为(使用测试工具)
- 二进制文件分析
Usage
使用方法
Basic Analysis
基础分析
javascript
const { analyzeCode } = require('/job/.pi/skills/code-analyzer/analyzer.js');
const result = await analyzeCode('src/index.js', {
language: 'javascript'
});
console.log(result);javascript
const { analyzeCode } = require('/job/.pi/skills/code-analyzer/analyzer.js');
const result = await analyzeCode('src/index.js', {
language: 'javascript'
});
console.log(result);Directory Analysis
目录分析
javascript
const result = await analyzeCode('src/', {
analyzeAllFiles: true,
pattern: '**/*.js',
exclude: ['**/node_modules/**', '**/*.test.js']
});
console.log(result.summary);javascript
const result = await analyzeCode('src/', {
analyzeAllFiles: true,
pattern: '**/*.js',
exclude: ['**/node_modules/**', '**/*.test.js']
});
console.log(result.summary);Complexity Analysis
复杂度分析
javascript
const result = await analyzeCode('src/', {
complexityMetrics: true,
maxCyclomaticComplexity: 10,
maxFunctionLength: 50
});
console.log(result.complexity);
// {
// averageComplexity: 5.2,
// functions: [
// { name: "processData", complexity: 12, file: "src/processor.js:42", issue: "High complexity" }
// ]
// }javascript
const result = await analyzeCode('src/', {
complexityMetrics: true,
maxCyclomaticComplexity: 10,
maxFunctionLength: 50
});
console.log(result.complexity);
// {
// averageComplexity: 5.2,
// functions: [
// { name: "processData", complexity: 12, file: "src/processor.js:42", issue: "High complexity" }
// ]
// }Dependency Analysis
依赖关系分析
javascript
const result = await analyzeCode('src/', {
dependencyGraph: true,
detectCircularDependencies: true
});
console.log(result.dependencies);
// {
// graph: {
// "src/index.js": ["src/utils.js", "src/config.js"],
// "src/utils.js": []
// },
// circularDependencies: [],
// mostDependedOn: ["src/utils.js", "src/config.js"]
// }javascript
const result = await analyzeCode('src/', {
dependencyGraph: true,
detectCircularDependencies: true
});
console.log(result.dependencies);
// {
// graph: {
// "src/index.js": ["src/utils.js", "src/config.js"],
// "src/utils.js": []
// },
// circularDependencies: [],
// mostDependedOn: ["src/utils.js", "src/config.js"]
// }Code Quality Report
代码质量报告
javascript
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);
// {
// overall: { score: 75, grade: "B" },
// issues: [...],
// recommendations: [...]
// }javascript
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);
// {
// overall: { score: 75, grade: "B" },
// issues: [...],
// recommendations: [...]
// }Output Structure
输出结构
javascript
{
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)"
}
]
}javascript
{
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)"
}
]
}Metrics
指标说明
Cyclomatic Complexity
Cyclomatic Complexity(圈复杂度)
Measures independent paths through code:
- 1-10: Low complexity ✓
- 11-20: Moderate
- 21-50: High
- 50+: Very high ⚠️
衡量代码中的独立路径数量:
- 1-10: 低复杂度 ✓
- 11-20: 中等
- 21-50: 高
- 50+: 极高 ⚠️
Cognitive Complexity
Cognitive Complexity(认知复杂度)
Measures how hard code is to understand:
- 1-10: Easy to read ✓
- 11-20: Moderate effort
- 21-50: Difficult
- 50+: Very difficult ⚠️
衡量代码的理解难度:
- 1-10: 易于阅读 ✓
- 11-20: 中等难度
- 21-50: 难以理解
- 50+: 极难理解 ⚠️
Maintainability Index
Maintainability Index(可维护性指数)
0-100 scale:
- 85-100: Highly maintainable ✓
- 65-84: Maintainable
- 50-64: Difficult
- 0-49: Very difficult ⚠️
0-100分制:
- 85-100: 高度可维护 ✓
- 65-84: 可维护
- 50-64: 难以维护
- 0-49: 极难维护 ⚠️
API
API
javascript
analyzeCode(path, options = {})Options:
- - javascript|typescript|python|java|etc
language - - Boolean
analyzeAllFiles - - Glob pattern for files
pattern - - Exclude patterns
exclude - - Boolean
complexityMetrics - - Boolean
dependencyGraph - - Boolean
detectCircularDependencies - - Number threshold
maxCyclomaticComplexity - - Number threshold
maxFunctionLength - - Boolean
includeTests
Returns:
javascript
// See Output Structure abovejavascript
analyzeCode(path, options = {})参数选项:
- - javascript|typescript|python|java|etc
language - - 布尔值
analyzeAllFiles - - 文件匹配的Glob模式
pattern - - 排除文件的模式
exclude - - 布尔值
complexityMetrics - - 布尔值
dependencyGraph - - 布尔值
detectCircularDependencies - - 阈值数值
maxCyclomaticComplexity - - 阈值数值
maxFunctionLength - - 布尔值
includeTests
返回值:
javascript
// 参考上方的输出结构Language Support
支持的编程语言
| Language | Extensions | Complexity | Dependencies | Quality |
|---|---|---|---|---|
| JavaScript | .js, .mjs | ✅ | ✅ | ✅ |
| TypeScript | .ts, .tsx | ✅ | ✅ | ✅ |
| Python | .py | ✅ | ✅ | ✅ |
| Java | .java | ✅ | ✅ | ✅ |
| Go | .go | ✅ | ✅ | ✅ |
| Rust | .rs | ✅ | ✅ | ✅ |
| C/C++ | .c, .h, .cpp | ✅ | ✅ | ✅ |
| Ruby | .rb | ✅ | ✅ | ✅ |
| 编程语言 | 文件扩展名 | 复杂度分析 | 依赖分析 | 质量分析 |
|---|---|---|---|---|
| JavaScript | .js, .mjs | ✅ | ✅ | ✅ |
| TypeScript | .ts, .tsx | ✅ | ✅ | ✅ |
| Python | .py | ✅ | ✅ | ✅ |
| Java | .java | ✅ | ✅ | ✅ |
| Go | .go | ✅ | ✅ | ✅ |
| Rust | .rs | ✅ | ✅ | ✅ |
| C/C++ | .c, .h, .cpp | ✅ | ✅ | ✅ |
| Ruby | .rb | ✅ | ✅ | ✅ |
Pattern Detection
模式检测
javascript
const result = await analyzeCode('src/', {
detectPatterns: [
'singleton',
'factory',
'observer',
'decorator',
'strategy',
'adapter'
]
});
console.log(result.detectedPatterns);
// [
// { pattern: "observer", file: "src/events.js", confidence: 0.85 },
// { pattern: "singleton", file: "src/config.js", confidence: 0.92 }
// ]javascript
const result = await analyzeCode('src/', {
detectPatterns: [
'singleton',
'factory',
'observer',
'decorator',
'strategy',
'adapter'
]
});
console.log(result.detectedPatterns);
// [
// { pattern: "observer", file: "src/events.js", confidence: 0.85 },
// { pattern: "singleton", file: "src/config.js", confidence: 0.92 }
// ]Security Analysis
安全分析
javascript
const result = await analyzeCode('src/', {
securityScan: true,
detectVulnerabilities: [
'sqlInjection',
'xss',
'pathTraversal',
'commandInjection',
'insecureRandomness'
]
});
console.log(result.securityIssues);
// [
// {
// type: "sqlInjection",
// file: "src/db.js",
// line: 42,
// severity: "critical",
// pattern: "query(`SELECT * FROM ${table}`)",
// suggestion: "Use parameterized queries"
// }
// ]javascript
const result = await analyzeCode('src/', {
securityScan: true,
detectVulnerabilities: [
'sqlInjection',
'xss',
'pathTraversal',
'commandInjection',
'insecureRandomness'
]
});
console.log(result.securityIssues);
// [
// {
// type: "sqlInjection",
// file: "src/db.js",
// line: 42,
// severity: "critical",
// pattern: "query(`SELECT * FROM ${table}`)",
// suggestion: "Use parameterized queries"
// }
// ]Code Duplication
代码重复检测
javascript
const result = await analyzeCode('src/', {
detectDuplication: true,
minTokenMatch: 30
});
console.log(result.duplicates);
// [
// {
// locations: [
// { file: "src/file1.js", lines: "10-25" },
// { file: "src/file2.js", lines: "45-60" }
// ],
// tokens: 180,
// similarity: 0.95
// }
// ]javascript
const result = await analyzeCode('src/', {
detectDuplication: true,
minTokenMatch: 30
});
console.log(result.duplicates);
// [
// {
// locations: [
// { file: "src/file1.js", lines: "10-25" },
// { file: "src/file2.js", lines: "45-60" }
// ],
// tokens: 180,
// similarity: 0.95
// }
// ]Bash CLI
Bash 命令行工具
bash
undefinedbash
undefinedAnalyze single file
分析单个文件
node /job/.pi/skills/code-analyzer/analyzer.js
--file src/index.js
--file src/index.js
node /job/.pi/skills/code-analyzer/analyzer.js
--file src/index.js
--file src/index.js
Analyze directory
分析目录
node /job/.pi/skills/code-analyzer/analyzer.js
--dir src/
--exclude "/node_modules/"
--dir src/
--exclude "/node_modules/"
node /job/.pi/skills/code-analyzer/analyzer.js
--dir src/
--exclude "/node_modules/"
--dir src/
--exclude "/node_modules/"
Generate quality report
生成质量报告
node /job/.pi/skills/code-analyzer/analyzer.js
--dir src/
--quality-report
--output report.json
--dir src/
--quality-report
--output report.json
node /job/.pi/skills/code-analyzer/analyzer.js
--dir src/
--quality-report
--output report.json
--dir src/
--quality-report
--output report.json
Check for security issues
检查安全问题
node /job/.pi/skills/code-analyzer/analyzer.js
--dir src/
--security-scan
--dir src/
--security-scan
undefinednode /job/.pi/skills/code-analyzer/analyzer.js
--dir src/
--security-scan
--dir src/
--security-scan
undefinedCI/CD Integration
CI/CD 集成
javascript
// .github/workflows/code-quality.yml
// Run code analysis on 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);
}javascript
// .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);
}Integration with Other Skills
与其他Skill集成
javascript
// With content-search for finding patterns
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);
}
// With git-structured for changed files
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}`);
}
}javascript
// 结合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}`);
}
}