--- name: solid-detection description: Multi-language SOLID detection rules. Project type detection, interface locations, file size limits per language. argument-hint: "[file-or-directory] [--language]" user-invocable: false --- # SOLID Detection Skill ## Project Detection Detect project type from configuration files: ```bash # Next.js (priority over React) [ -f "package.json" ] && grep -q '"next"' package.json # React (no "next" in package.json) [ -f "package.json" ] && grep -q '"react"' package.json && ! grep -q '"next"' package.json # Generic TypeScript (no react/next, has .ts files) [ -f "package.json" ] && ! grep -q '"react"' package.json && ! grep -q '"next"' package.json [ -f "tsconfig.json" ] || [ -f "bun.lockb" ] || [ -f "bunfig.toml" ] # Laravel [ -f "composer.json" ] && grep -q '"laravel' composer.json # Swift [ -f "Package.swift" ] || ls *.xcodeproj # Java [ -f "pom.xml" ] || [ -f "build.gradle" ] || [ -f "build.gradle.kts" ] # Go [ -f "go.mod" ] # Ruby [ -f "Gemfile" ] && [ -f "Rakefile" ] # Rust [ -f "Cargo.toml" ] # Python [ -f "pyproject.toml" ] || [ -f "requirements.txt" ] ``` **Priority order:** Next.js > React > Generic TS > Laravel > Swift > Java > Go > Ruby > Rust > Python ## Language Rules ### Next.js / TypeScript | Rule | Value | |------|-------| | File limit | 100 lines | | Interface location | `modules/[feature]/src/interfaces/` | | Shared interfaces | `modules/cores/interfaces/` | | Forbidden | Interfaces in `components/`, `app/` | | SOLID skill | `solid-nextjs` | **Pattern detection**: ```regex ^(export )?(interface|type) \w+ ``` ### React / TypeScript | Rule | Value | |------|-------| | File limit | 100 lines | | Interface location | `modules/[feature]/src/interfaces/` | | Shared interfaces | `modules/cores/interfaces/` | | Forbidden | Interfaces in `components/` files | | SOLID skill | `solid-react` | **Pattern detection**: ```regex ^(export )?(interface|type) \w+ ``` ### Generic TypeScript / Bun / Node.js | Rule | Value | |------|-------| | File limit | 100 lines | | Interface location | `modules/[feature]/src/interfaces/` | | Shared interfaces | `modules/cores/interfaces/` | | Structure | **Modular MANDATORY** | | Forbidden | Interfaces in service/lib files | | SOLID skill | `solid-generic` | **Pattern detection**: ```regex ^(export )?(interface|type) \w+ ``` ### Laravel / PHP | Rule | Value | |------|-------| | File limit | 100 lines | | Interface location | `FuseCore/[Module]/App/Contracts/` | | Shared interfaces | `FuseCore/Core/App/Contracts/` | | Structure | **FuseCore Modular MANDATORY** | | Forbidden | Interfaces outside Contracts/ | | SOLID skill | `solid-php` | **Pattern detection**: ```regex ^interface \w+ ``` ### Swift | Rule | Value | |------|-------| | File limit | 100 lines | | Interface location | `Features/[Feature]/Protocols/` | | Shared interfaces | `Core/Protocols/` | | Structure | **Features Modular MANDATORY** | | Forbidden | Protocols outside Protocols/ | | SOLID skill | `solid-swift` | **Pattern detection**: ```regex ^protocol \w+ ``` ### Java | Rule | Value | |------|-------| | File limit | 100 lines | | Interface location | `modules/[feature]/interfaces/` | | Shared interfaces | `modules/core/interfaces/` | | Structure | **Modular MANDATORY** | | Forbidden | Interfaces in impl files | | SOLID skill | `solid-java` | **Pattern detection**: ```regex ^(public )?(interface) \w+ ``` ### Go | Rule | Value | |------|-------| | File limit | 100 lines | | Interface location | `internal/modules/[feature]/ports/` | | Shared interfaces | `internal/core/ports/` | | Structure | **Modular MANDATORY** | | Forbidden | Interfaces in impl files | | SOLID skill | `solid-go` | **Pattern detection**: ```regex ^type \w+ interface \{ ``` ### Ruby | Rule | Value | |------|-------| | File limit | 100 lines | | Interface location | `app/modules/[feature]/contracts/` | | Shared interfaces | `app/modules/core/contracts/` | | Structure | **Modular MANDATORY** | | Forbidden | Contracts in model files | | SOLID skill | `solid-ruby` | **Pattern detection**: ```regex ^module \w+Contract ``` ### Rust | Rule | Value | |------|-------| | File limit | 100 lines | | Interface location | `src/modules/[feature]/traits.rs` | | Shared interfaces | `src/core/traits.rs` | | Structure | **Modular MANDATORY** | | Forbidden | Traits in impl files | | SOLID skill | `solid-rust` | **Pattern detection**: ```regex ^pub trait \w+ ``` ### Python | Rule | Value | |------|-------| | File limit | 100 lines | | Interface location | `src/interfaces/` | | Forbidden | ABC outside interfaces/ | **Pattern detection**: ```regex class \w+\(.*ABC.*\) ``` ## Line Counting Exclude from count: - Blank lines - Comments (`//`, `/* */`, `#`, `"""`) - Import statements (optional) ```bash # TypeScript/Go/Rust/Swift grep -v '^\s*$\|^\s*//\|^\s*/\*\|^\s*\*' file # PHP grep -v '^\s*$\|^\s*//\|^\s*#\|^\s*/\*\|^\s*\*' file # Python grep -v '^\s*$\|^\s*#\|^\s*"""' file ``` ## Validation Actions | Severity | Action | |----------|--------| | Interface in wrong location | **BLOCK** (exit 2) | | File over limit | **WARNING** (exit 0) | | Missing documentation | **WARNING** | ## Skill Mapping | Project Type | SOLID Skill | Skill Path | |--------------|-------------|------------| | `nextjs` | solid-nextjs | `nextjs-expert/skills/solid-nextjs/` | | `react` | solid-react | `react-expert/skills/solid-react/` | | `generic` | solid-generic | `solid/skills/solid-generic/` | | `laravel` | solid-php | `laravel-expert/skills/solid-php/` | | `swift` | solid-swift | `swift-apple-expert/skills/solid-swift/` | | `java` | solid-java | `solid/skills/solid-java/` | | `go` | solid-go | `solid/skills/solid-go/` | | `ruby` | solid-ruby | `solid/skills/solid-ruby/` | | `rust` | solid-rust | `solid/skills/solid-rust/` | | `python` | _(no skill yet)_ | - | ## Environment Variables Set by `detect-project.sh`: ```bash SOLID_PROJECT_TYPE=nextjs|react|generic|laravel|swift|java|go|ruby|rust|python|unknown SOLID_FILE_LIMIT=100|150 SOLID_INTERFACE_DIR=path/to/interfaces SOLID_STRUCTURE=modular ```