Claude-skill-registry formatter-linter-expert
Universal code formatter and linter analyzer for multi-ecosystem projects (Laravel/PHP, Bun/Node/TS/JS, React, Vue, Astro, Nuxt, Go, Rust, Deno) with intelligent asdf version management, auto-detection, and interactive workflows
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/formatter-linter-expert" ~/.claude/skills/majiayu000-claude-skill-registry-formatter-linter-expert && rm -rf "$T"
skills/data/formatter-linter-expert/SKILL.mdFormatter & Linter Expert Analyzer
Overview
A comprehensive, intelligent meta-formatter and linter system that automatically detects your project's ecosystem, respects asdf version management, and provides flexible formatting/linting workflows across 9+ development environments.
When to use this skill:
- "Analyze and format this Laravel project"
- "Lint my TypeScript code"
- "Check code style of this Go file"
- "Format all PHP files with Pint"
- "Quality report for this codebase"
- "Run formatter on src/ directory"
- "Interactive code cleanup"
What it does:
- Detects ecosystem automatically (Laravel, Bun/Node, Go, Rust, Deno, etc.)
- Integrates with asdf to use project-specific tool versions from
.tool-versions - Finds configurations (auto-detect or use custom configs)
- Analyzes OR formats code based on your choice
- Generates comprehensive reports (Markdown + JSON export)
- Interactive mode for file-by-file review and approval
Supported Ecosystems
| Ecosystem | Formatter | Linter | Config Files |
|---|---|---|---|
| Laravel/PHP | Laravel Pint, PHP-CS-Fixer | PHPStan | , , |
| Bun/Node/TS/JS | Prettier, Biome | ESLint, Biome | , , |
| React/Vue/Astro/Nuxt | Prettier, Biome | ESLint + framework plugins | Framework-specific configs |
| Go | gofmt, goimports | golangci-lint | |
| Rust | rustfmt | clippy | , |
| Deno | deno fmt | deno lint | , |
Prerequisites
Required:
- Python 3.9+ (for skill scripts)
- Ecosystem-specific tools installed (see below)
Optional but Recommended:
- asdf version manager (installation guide)
file in your project root.tool-versions
Ecosystem-specific tools:
- PHP:
,composer global require laravel/pintcomposer global require friendsofphp/php-cs-fixer - JavaScript/TypeScript:
ornpm install -g prettier eslint @biomejs/biomebun add -g prettier eslint @biomejs/biome - Go:
,go install golang.org/x/tools/cmd/goimports@latestgo install github.com/golangci/golangci-lint/cmd/golangci-lint@latest - Rust: rustfmt and clippy (included with
)rustup - Deno: deno cli (includes fmt and lint)
Instructions
Step 1: Invoke the Skill
Activate the skill naturally:
"Analyze this Laravel project" "Format all TypeScript files" "Lint and report on src/ directory" "Interactive format for Go code"
Step 2: Environment Detection
The skill will automatically:
-
Search for
(asdf integration).tool-versions# Reads versions from current dir up to $HOME php 8.2.0 nodejs 20.10.0 golang 1.21.0 -
Detect ecosystem via file markers:
+composer.json
→ Laravelartisan
+package.json
→ Bun/*bun.lockb
→ Gogo.mod
→ RustCargo.toml
→ Denodeno.json
-
Find framework (if JavaScript/TypeScript):
- Check
dependencies for react, vue, astro, nuxtpackage.json
- Check
-
Locate configurations:
- Auto-detect:
,pint.json
,.eslintrc
, etc..prettierrc - Custom: User can provide path
- Fallback: Use skill's default configs
- Auto-detect:
Step 3: Choose Operation Mode
Mode A: Analyze Only (default if ambiguous)
Generate comprehensive report WITHOUT modifying files → Ideal for CI/CD, code review, initial assessment
Mode B: Format (apply fixes directly)
Auto-fix all formatting issues → Fast, non-interactive, writes changes
Mode C: Interactive
Review and approve changes file-by-file → Safe, controlled, educational
Step 4: Execute Analysis/Formatting
The skill orchestrates:
# Pseudo-workflow python scripts/main.py \ --mode analyze \ --scope project \ --asdf-strict \ --output markdown \ --export-json report.json
Behind the scenes:
- Environment detection runs first
- Version validation checks asdf versions match
- Config resolution finds or uses defaults
- Formatter/Linter execution runs ecosystem tools
- Report generation creates output
Step 5: Review Output
Analyze mode output:
# Code Quality Report **Project:** my-laravel-app **Environment:** Laravel 12 (PHP 8.2.0) **Date:** 2025-10-30 14:23:45 ## Summary - Files analyzed: 127 - Issues found: 42 - 🔴 Errors: 5 - 🟡 Warnings: 15 - 🔵 Info: 22 ## Issues by Category [Detailed breakdown...] ## Configuration Used - Formatter: Laravel Pint - Config: pint.json (detected) - PHP Version: 8.2.0 (asdf) ## Recommendations [Actionable next steps...]
Interactive mode prompt:
File: src/Controllers/UserController.php Issues: 5 formatting, 2 linting Preview of changes: [diff display] Apply fixes to this file? [y/n/s(kip)/q(uit)]: _
Step 6: Handle Multiple Ecosystems
If multiple ecosystems detected (e.g., Laravel backend + Vue frontend):
🔍 Detected multiple ecosystems: 1. Laravel/PHP (app/, routes/, database/) 2. Vue.js (resources/js/) → Formatting BOTH ecosystems... [Run PHP formatters on PHP files] [Run JS formatters on JS/Vue files]
Error Handling
Common Issues
| Error | Cause | Solution |
|---|---|---|
| Formatter not installed | Install via |
| version not installed | Run |
| No recognizable file markers | Use flag to specify manually |
| Invalid configuration file | Check config syntax or use |
| Cannot write formatted files | Check file permissions or run as appropriate user |
asdf Integration Modes
Strict mode (default):
# Uses ONLY asdf versions, fails if not installed --asdf-strict
Fallback mode:
# Tries asdf, falls back to system PATH if unavailable --asdf-fallback
Report mode:
# Warns about version mismatch but continues --asdf-warn
Examples
Example 1: Analyze Laravel Project
Input:
User: "Analyze and generate quality report for this Laravel API"
Execution:
# Skill detects: # - Laravel 12 (composer.json + artisan) # - PHP 8.2.0 from .tool-versions # - Existing pint.json config # Runs: vendor/bin/pint --test --config pint.json vendor/bin/phpstan analyze --level 5 # Outputs: # report.md (detailed analysis) # report.json (structured data)
Expected Output: Markdown report + JSON file showing 127 files analyzed, 42 issues categorized by severity.
Example 2: Format TypeScript with Biome
Input:
User: "Format all TypeScript files using Biome"
Execution:
# Skill detects: # - TypeScript project (package.json with typescript dep) # - Node 20.10.0 from .tool-versions # - biome.json config present # Runs: biome format --write src/ # Outputs: # Console: "✅ Formatted 45 files"
Example 3: Interactive Go Formatting
Input:
User: "Interactive format for Go files in cmd/ directory"
Execution:
# Skill detects: # - Go project (go.mod) # - Go 1.21.0 from .tool-versions # - No config (uses defaults) # Runs interactively: # For each .go file: # - Shows gofmt diff # - Prompts: Apply? [y/n/s/q] # - Applies only if 'y'
Interactive Flow:
File: cmd/server/main.go (3 formatting issues) --- Original +++ Formatted @@ -15,7 +15,7 @@ -func main(){ +func main() { Apply fixes? [y/n/s/q]: y ✅ Applied File: cmd/worker/worker.go (1 issue) [...]
Example 4: Multi-Ecosystem Project (Laravel + Vue)
Input:
User: "Full project format - both backend and frontend"
Execution:
# Skill detects: # - Laravel (composer.json) # - Vue.js (package.json with vue dependency) # - PHP 8.2.0 + Node 20.10.0 from .tool-versions # Runs sequentially: # 1. PHP formatting (Pint on app/, routes/, database/) # 2. Vue formatting (Prettier on resources/js/) # Outputs: # Combined report for both ecosystems
Output:
# Multi-Ecosystem Report ## PHP (Laravel) - Files: 87 - Fixed: 12 formatting issues ## JavaScript (Vue) - Files: 40 - Fixed: 8 formatting issues Total: 127 files processed, 20 issues fixed
Advanced Usage
Custom Configuration Path
User: "Format with custom config at configs/my-pint.json"
Skill will use
--config configs/my-pint.json flag.
Specific File/Directory Scope
User: "Lint only the app/Services/ directory"
Skill scopes analysis to that path only.
Export JSON for CI/CD
User: "Generate JSON report for pipeline"
Outputs
report.json:
{ "project": "my-app", "timestamp": "2025-10-30T14:23:45Z", "environment": { "ecosystem": "laravel", "php_version": "8.2.0", "tools": ["pint", "phpstan"] }, "summary": { "files_analyzed": 127, "issues": { "errors": 5, "warnings": 15, "info": 22 } }, "issues": [ { "file": "app/Http/Controllers/UserController.php", "line": 45, "severity": "error", "message": "Indentation incorrect", "rule": "PSR-12" } ], "exit_code": 1 }
Best Practices
✅ Do This
- Use asdf for version consistency across team
- Commit configs (
,.prettierrc
) to version controlpint.json - Run analyze first before formatting to understand impact
- Use interactive mode when learning or unsure about changes
- Export JSON for integration with CI/CD pipelines
- Check exit codes in scripts (0 = clean, >0 = issues found)
⚠️ Avoid This
- Don't skip analyze - Always review before mass formatting
- Don't ignore version mismatches - Formatting can vary between tool versions
- Don't mix formatters - Pick one (Prettier vs Biome) and stick with it
- Don't format generated code - Exclude
,vendor/
,node_modules/dist/ - Don't commit without testing - Run tests after formatting
Troubleshooting
Issue: "No ecosystem detected"
Cause: Project lacks recognizable file markers
Fix:
# Manual specification User: "Format this PHP project using Pint" # Or create marker file touch composer.json # for PHP projects
Issue: "asdf: command not found"
Cause: asdf not installed or not in PATH
Fix:
# Install asdf git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.0 # Add to shell echo '. "$HOME/.asdf/asdf.sh"' >> ~/.bashrc source ~/.bashrc # Or use fallback mode User: "Format with system tools (ignore asdf)"
Issue: "Version mismatch: PHP 8.2.0 not installed"
Cause:
.tool-versions specifies version not installed via asdf
Fix:
# Install missing version asdf plugin add php asdf install php 8.2.0 # Or use fallback mode to use system PHP
Issue: "Config parsing error: Invalid JSON in biome.json"
Cause: Malformed configuration file
Fix:
# Validate JSON cat biome.json | jq . # Or use default config User: "Format using default Biome config"
Technical Details
Architecture
User Request ↓ Environment Detector ├─ asdf Manager (version resolution) ├─ Config Finder (locate configs) └─ File Analyzer (detect ecosystem) ↓ Orchestrator ├─ PHP Formatter/Linter ├─ JS Formatter/Linter ├─ Go Formatter/Linter ├─ Rust Formatter/Linter └─ Deno Formatter/Linter ↓ Reporter ├─ Markdown Report ├─ JSON Export └─ Console Output
Token Efficiency
- Metadata load: ~500 tokens (always loaded in context)
- Full instructions (this file): ~3,500 tokens (loaded on activation)
- Script execution: 0 tokens (Python runs externally, only output returned)
- Total skill overhead: ~4,000 tokens
Performance Considerations
- Small projects (<100 files): ~5-10 seconds
- Medium projects (100-500 files): ~30-60 seconds
- Large projects (>500 files): 1-3 minutes
Optimization tips:
- Use
to limit analysis to specific directories--scope - Exclude large directories with
--exclude node_modules,vendor - Run formatters in parallel for multi-ecosystem projects
Exit Codes
| Code | Meaning |
|---|---|
| 0 | Success - no issues found |
| 1 | Formatting issues found (fixable) |
| 2 | Linting warnings found |
| 3 | Linting errors found (requires manual fix) |
| 10 | Tool not found / not installed |
| 11 | asdf version mismatch |
| 12 | Configuration error |
| 99 | Unknown error |
Related Skills
No related skills detected in current environment
Maintenance
Version History:
- v1.0.0 (2025-10-30) - Initial release with 9 ecosystem support
Roadmap:
- Add Python support (black, ruff)
- Add Swift support (swift-format)
- Add Kotlin support (ktlint)
- GitHub Actions integration
- VS Code extension
Known Limitations:
- Requires tools to be pre-installed (doesn't auto-install)
- asdf integration tested on Unix-like systems only
- Interactive mode not suitable for CI/CD pipelines
Author: Created for personal cross-project use Created: 2025-10-30 License: Personal use
Quick Command Reference
# Analyze only (default) "Analyze this project" # Format directly "Format all files" # Interactive review "Interactive format" # Specific scope "Lint the src/ directory" "Format app/Services/PaymentService.php" # Custom config "Format using my custom Pint config at config/pint.json" # Export report "Generate quality report with JSON export" # Multi-ecosystem "Format both PHP and Vue code" # Ignore asdf "Format using system tools"
Need Help?
- Check tool installation:
,which pint
, etc.which prettier - Verify asdf setup:
asdf current - Review config files:
,cat pint.jsoncat .eslintrc - Test manually:
,vendor/bin/pint --testprettier --check src/