ast-grep-code-analysis

Use when analyzing complex codebases for security vulnerabilities, performance issues, and structural patterns - provides systematic AST-based approach using ast-grep for comprehensive code understanding beyond manual inspection

16 stars

Best use case

ast-grep-code-analysis is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Use when analyzing complex codebases for security vulnerabilities, performance issues, and structural patterns - provides systematic AST-based approach using ast-grep for comprehensive code understanding beyond manual inspection

Teams using ast-grep-code-analysis should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/ast-grep-code-analysis/SKILL.md --create-dirs "https://raw.githubusercontent.com/diegosouzapw/awesome-omni-skill/main/skills/development/ast-grep-code-analysis/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/ast-grep-code-analysis/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How ast-grep-code-analysis Compares

Feature / Agentast-grep-code-analysisStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Use when analyzing complex codebases for security vulnerabilities, performance issues, and structural patterns - provides systematic AST-based approach using ast-grep for comprehensive code understanding beyond manual inspection

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# AST-Grep Code Analysis

> [!NOTE]
> This skill requires that `as-grep` is installed and configured in your development environment. If it's not installed we can use `mise -g --pin ast-grep`

## Overview

**AST-Grep Code Analysis uses Abstract Syntax Tree pattern matching to systematically identify code issues, replacing manual line-by-line inspection with structural pattern recognition.**

Core principle: Code structure reveals more than surface reading - AST patterns expose hidden relationships, security vulnerabilities, and architectural issues that manual inspection misses.

## When to Use

```dot
digraph when_to_use {
    "Need to analyze code?" [shape=diamond];
    "Complex/nested structure?" [shape=diamond];
    "Security review needed?" [shape=diamond];
    "Performance analysis?" [shape=diamond];
    "Use ast-grep patterns" [shape=box];
    "Manual review sufficient" [shape=box];

    "Need to analyze code?" -> "Complex/nested structure?" [label="yes"];
    "Complex/nested structure?" -> "Security review needed?" [label="yes"];
    "Security review needed?" -> "Performance analysis?" [label="yes"];
    "Performance analysis?" -> "Use ast-grep patterns" [label="yes"];
    "Complex/nested structure?" -> "Manual review sufficient" [label="no"];
    "Security review needed?" -> "Manual review sufficient" [label="no"];
    "Performance analysis?" -> "Manual review sufficient" [label="no"];
}
```

**Use when:**
- Code has nested functions, complex control flow, or multiple abstraction layers
- Security review required (authentication, authorization, data handling)
- Performance analysis needed (React hooks, loops, async patterns)
- Large codebase where manual inspection is impractical
- Need to identify patterns across multiple files
- Time pressure requires systematic approach over ad-hoc analysis

**Do NOT use when:**
- Simple, straightforward code (< 50 lines)
- Single-file utilities with obvious structure
- When quick glance is sufficient for the task

## Core Pattern

**Before (Manual Inspection):**
```javascript
// Agent manually reads line by line
if (data[i].admin) {
  userObj.token = generateToken(data[i].id); // "This looks insecure"
}
```

**After (AST Pattern Matching):**
```yaml
# ast-grep rule: insecure-token-generation
rule:
  pattern: |
    function $FUNC($ARGS) {
      const secret = $SECRET;
      return btoa(JSON.stringify($PAYLOAD) + '.' + $SECRET);
    }
  meta:
    severity: ERROR
    message: "Hardcoded secret in token generation"
```

## Quick Reference

| Analysis Type | AST Pattern Focus | Common Issues Found |
|---------------|------------------|-------------------|
| **Security** | String literals in crypto functions | Hardcoded secrets, weak encryption |
| **Performance** | React hooks dependencies | Infinite re-renders, memory leaks |
| **Structure** | Function nesting depth | Complex control flow, maintainability |
| **Data Flow** | Variable assignments and usage | Unused variables, implicit dependencies |

## Implementation

### Installation and Setup

```bash
# Install ast-grep
npm install -g @ast-grep/cli

# Initialize configuration
ast-grep init

# Create rules directory
mkdir -p sg-rules/security sg-rules/performance sg-rules/structure
```

### Essential Security Patterns

**Hardcoded Secrets Detection:**
```yaml
# sg-rules/security/hardcoded-secrets.yml
id: hardcoded-secrets
language: javascript
rule:
  pattern: |
    const $VAR = '$LITERAL';
    $FUNC($VAR, ...)
  meta:
    severity: ERROR
    message: "Potential hardcoded secret detected"
```

**Insecure Token Generation:**
```yaml
# sg-rules/security/insecure-tokens.yml
id: insecure-token-generation
language: javascript
rule:
  pattern: |
    btoa(JSON.stringify($OBJ) + '.' + $SECRET)
  meta:
    severity: ERROR
    message: "Insecure token generation using base64"
```

### Performance Pattern Detection

**React Hook Dependencies:**
```yaml
# sg-rules/performance/react-hook-deps.yml
id: react-hook-dependency-array
language: typescript
rule:
  pattern: |
    useEffect(() => {
      $BODY
    }, [$FUNC])
  meta:
    severity: WARNING
    message: "Function dependency in useEffect may cause infinite re-renders"
```

**Missing useCallback Optimization:**
```yaml
# sg-rules/performance/missing-use-callback.yml
id: missing-use-callback
language: typescript
rule:
  pattern: |
    const $FUNC = ($ARGS) => {
      $BODY
    };
  inside:
    kind: function_declaration
    has:
      kind: arrow_function
  meta:
    severity: INFO
    message: "Consider wrapping function in useCallback for optimization"
```

### Structural Analysis Patterns

**Deep Nesting Detection:**
```yaml
# sg-rules/structure/deep-nesting.yml
id: deep-nesting
language: javascript
rule:
  any:
    - pattern: |
        if ($COND1) {
          if ($COND2) {
            if ($COND3) {
              $BODY
            }
          }
        }
    - pattern: |
        for ($INIT) {
          for ($INIT2) {
            for ($INIT3) {
              $BODY
            }
          }
        }
  meta:
    severity: WARNING
    message: "Deep nesting detected - consider refactoring"
```

### Running Analysis

```bash
# Run all security rules
ast-grep run -r sg-rules/security/

# Run performance analysis on React components
ast-grep run -r sg-rules/performance/ --include="*.tsx,*.jsx"

# Generate comprehensive report
ast-grep run -r sg-rules/ --format=json > analysis-report.json

# Interactive analysis
ast-grep run -r sg-rules/ --interactive
```

## Common Mistakes

| Mistake | Why It Happens | Fix |
|---------|----------------|-----|
| **Too generic patterns** | Trying to catch everything | Focus on specific, high-impact patterns |
| **Missing context** | Patterns don't consider surrounding code | Use `inside` and `has` constraints |
| **False positives** | Overly broad matching | Add negative constraints with `not` |
| **Language-specific assumptions** | JavaScript patterns applied to TypeScript | Create separate rules per language |
| **No severity prioritization** | All issues marked as error | Use appropriate severity levels |

## Real-World Impact

**Before AST Analysis:**
- Manual code review: 2-3 hours for medium codebase
- Missed security vulnerabilities: 40-60%
- Inconsistent analysis between reviewers
- No systematic approach to pattern detection

**After AST Analysis:**
- Automated pattern detection: 5-10 minutes
- Security vulnerability detection: 90%+
- Consistent, repeatable analysis
- Comprehensive coverage of known anti-patterns

**Example Results:**
```bash
$ ast-grep run -r sg-rules/
src/components/UserProfile.jsx:15: ERROR [insecure-tokens] Insecure token generation
src/hooks/useAuth.js:8: ERROR [hardcoded-secrets] Potential hardcoded secret
src/components/UserProfile.jsx:23: WARNING [react-hook-deps] Function dependency may cause re-renders
src/utils/processData.js:45: WARNING [deep-nesting] Deep nesting detected

Found 4 issues (2 errors, 2 warnings)
```

## Integration Workflow

1. **Setup**: Create rule sets for security, performance, structure
2. **Baseline**: Run analysis on existing codebase to establish patterns
3. **Iterate**: Refine rules based on false positives/negatives  
4. **Automate**: Integrate into CI/CD pipeline for continuous analysis
5. **Monitor**: Track issue reduction over time

**Required Background**: Understanding of AST concepts, pattern matching, and code structure analysis. AST patterns reveal what manual inspection misses - systematic, comprehensive, and repeatable code analysis.

Related Skills

ast-grep

16
from diegosouzapw/awesome-omni-skill

Guide for writing ast-grep rules to perform structural code search and analysis. Use when users need to search codebases using Abstract Syntax Tree (AST) patterns, find specific code structures, or perform complex code queries that go beyond simple text search. This skill should be used when users ask to search for code patterns, find specific language constructs, or locate code with particular structural characteristics.

ast-grep-find

16
from diegosouzapw/awesome-omni-skill

AST-based code search and refactoring via ast-grep MCP

argument-analysis

16
from diegosouzapw/awesome-omni-skill

Analyze argument structure, identify logical gaps, suggest evidence needs, generate counterarguments, apply claim-evidence-warrant framework. Use when strengthening arguments, analyzing persuasive writing, checking logical validity, or when user asks to improve reasoning or logic.

architectural-analysis

16
from diegosouzapw/awesome-omni-skill

Deep architectural audit focused on finding dead code, duplicated functionality, architectural anti-patterns, type confusion, and code smells. Use when user asks for architectural analysis, find dead code, identify duplication, or assess codebase health.

arch-analysis

16
from diegosouzapw/awesome-omni-skill

Analyze LangGraph application architecture, identify bottlenecks, and propose multiple improvement strategies

aqwa-analysis

16
from diegosouzapw/awesome-omni-skill

Integrate with AQWA hydrodynamic software for RAO computation, damping analysis, and coefficient extraction. Use for AQWA file processing, RAO calculation, hydrodynamic coefficient extraction, and pre/post processing workflows.

analysis-swarm

16
from diegosouzapw/awesome-omni-skill

Multi-persona analytical framework for comprehensive code review and decision-making

analysis-diagnose

16
from diegosouzapw/awesome-omni-skill

Perform systematic root cause investigation. Use when you encounter bugs, test failures, or unexpected behavior. Not for trivial or obvious fixes, creative experimentation, or learning new systems.

Advanced RE Analysis

16
from diegosouzapw/awesome-omni-skill

Specialized reverse engineering analysis workflows for binary analysis, pattern recognition, and vulnerability assessment

abaqus-static-analysis

16
from diegosouzapw/awesome-omni-skill

Complete workflow for static structural analysis. Use when analyzing stress, displacement, or reaction forces under constant loads. For strength and stiffness evaluation.

abaqus-coupled-analysis

16
from diegosouzapw/awesome-omni-skill

Complete workflow for coupled thermomechanical analysis. Use when user mentions thermal stress, thermal expansion, or temperature causing deformation.

abaqus-contact-analysis

16
from diegosouzapw/awesome-omni-skill

Analyze multi-body contact. Use when user mentions parts touching, friction between surfaces, bolt-plate contact, press fit, or assembly with contact.