code-analyzer

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Code 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:
  • language
    - javascript|typescript|python|java|etc
  • analyzeAllFiles
    - Boolean
  • pattern
    - Glob pattern for files
  • exclude
    - Exclude patterns
  • complexityMetrics
    - Boolean
  • dependencyGraph
    - Boolean
  • detectCircularDependencies
    - Boolean
  • maxCyclomaticComplexity
    - Number threshold
  • maxFunctionLength
    - Number threshold
  • includeTests
    - Boolean
Returns:
javascript
// See Output Structure above
javascript
analyzeCode(path, options = {})
参数选项:
  • language
    - javascript|typescript|python|java|etc
  • analyzeAllFiles
    - 布尔值
  • pattern
    - 文件匹配的Glob模式
  • exclude
    - 排除文件的模式
  • complexityMetrics
    - 布尔值
  • dependencyGraph
    - 布尔值
  • detectCircularDependencies
    - 布尔值
  • maxCyclomaticComplexity
    - 阈值数值
  • maxFunctionLength
    - 阈值数值
  • includeTests
    - 布尔值
返回值:
javascript
// 参考上方的输出结构

Language Support

支持的编程语言

LanguageExtensionsComplexityDependenciesQuality
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
undefined
bash
undefined

Analyze single file

分析单个文件

node /job/.pi/skills/code-analyzer/analyzer.js
--file src/index.js
node /job/.pi/skills/code-analyzer/analyzer.js
--file src/index.js

Analyze directory

分析目录

node /job/.pi/skills/code-analyzer/analyzer.js
--dir src/
--exclude "/node_modules/"
node /job/.pi/skills/code-analyzer/analyzer.js
--dir src/
--exclude "/node_modules/"

Generate quality report

生成质量报告

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/
--quality-report
--output report.json

Check for security issues

检查安全问题

node /job/.pi/skills/code-analyzer/analyzer.js
--dir src/
--security-scan
undefined
node /job/.pi/skills/code-analyzer/analyzer.js
--dir src/
--security-scan
undefined

CI/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}`);
  }
}