Back to list
kbrdn1

formatter-linter-expert

by kbrdn1

My personal OS X dotfiles.

2🍴 0📅 Dec 31, 2025

SKILL.md


name: formatter-linter-expert description: 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 version: 1.0.0 dependencies:

  • python >= 3.9
  • asdf (optional but recommended) allowed-tools: ["Bash", "Read", "Write", "Glob", "Grep"]

Formatter & 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:

  1. Detects ecosystem automatically (Laravel, Bun/Node, Go, Rust, Deno, etc.)
  2. Integrates with asdf to use project-specific tool versions from .tool-versions
  3. Finds configurations (auto-detect or use custom configs)
  4. Analyzes OR formats code based on your choice
  5. Generates comprehensive reports (Markdown + JSON export)
  6. Interactive mode for file-by-file review and approval

Supported Ecosystems

EcosystemFormatterLinterConfig Files
Laravel/PHPLaravel Pint, PHP-CS-FixerPHPStanpint.json, .php-cs-fixer.php, phpstan.neon
Bun/Node/TS/JSPrettier, BiomeESLint, Biome.prettierrc, biome.json, .eslintrc*
React/Vue/Astro/NuxtPrettier, BiomeESLint + framework pluginsFramework-specific configs
Gogofmt, goimportsgolangci-lint.golangci.yml
Rustrustfmtclippyrustfmt.toml, clippy.toml
Denodeno fmtdeno lintdeno.json, deno.jsonc

Prerequisites

Required:

  • Python 3.9+ (for skill scripts)
  • Ecosystem-specific tools installed (see below)

Optional but Recommended:

Ecosystem-specific tools:

  • PHP: composer global require laravel/pint, composer global require friendsofphp/php-cs-fixer
  • JavaScript/TypeScript: npm install -g prettier eslint @biomejs/biome or bun add -g prettier eslint @biomejs/biome
  • Go: go install golang.org/x/tools/cmd/goimports@latest, go 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:

  1. Search for .tool-versions (asdf integration)

    # Reads versions from current dir up to $HOME
    php 8.2.0
    nodejs 20.10.0
    golang 1.21.0
    
  2. Detect ecosystem via file markers:

    • composer.json + artisan → Laravel
    • package.json + bun.lockb → Bun/*
    • go.mod → Go
    • Cargo.toml → Rust
    • deno.json → Deno
  3. Find framework (if JavaScript/TypeScript):

    • Check package.json dependencies for react, vue, astro, nuxt
  4. Locate configurations:

    • Auto-detect: pint.json, .eslintrc, .prettierrc, etc.
    • Custom: User can provide path
    • Fallback: Use skill's default configs

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:

  1. Environment detection runs first
  2. Version validation checks asdf versions match
  3. Config resolution finds or uses defaults
  4. Formatter/Linter execution runs ecosystem tools
  5. 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

ErrorCauseSolution
Tool not found: pintFormatter not installedInstall via composer global require laravel/pint
asdf version mismatch.tool-versions version not installedRun asdf install
No ecosystem detectedNo recognizable file markersUse --env flag to specify manually
Config parsing failedInvalid configuration fileCheck config syntax or use --use-defaults
Permission deniedCannot write formatted filesCheck 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

  1. Use asdf for version consistency across team
  2. Commit configs (.prettierrc, pint.json) to version control
  3. Run analyze first before formatting to understand impact
  4. Use interactive mode when learning or unsure about changes
  5. Export JSON for integration with CI/CD pipelines
  6. Check exit codes in scripts (0 = clean, >0 = issues found)

⚠️ Avoid This

  1. Don't skip analyze - Always review before mass formatting
  2. Don't ignore version mismatches - Formatting can vary between tool versions
  3. Don't mix formatters - Pick one (Prettier vs Biome) and stick with it
  4. Don't format generated code - Exclude vendor/, node_modules/, dist/
  5. 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 --scope to limit analysis to specific directories
  • Exclude large directories with --exclude node_modules,vendor
  • Run formatters in parallel for multi-ecosystem projects

Exit Codes

CodeMeaning
0Success - no issues found
1Formatting issues found (fixable)
2Linting warnings found
3Linting errors found (requires manual fix)
10Tool not found / not installed
11asdf version mismatch
12Configuration error
99Unknown error

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, which prettier, etc.
  • Verify asdf setup: asdf current
  • Review config files: cat pint.json, cat .eslintrc
  • Test manually: vendor/bin/pint --test, prettier --check src/

Score

Total Score

65/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

+10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新

+5
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

+5

Reviews

💬

Reviews coming soon