solid-detection

Original🇺🇸 English
Translated

Multi-language SOLID detection rules. Project type detection, interface locations, file size limits per language.

2installs
Added on

NPX Install

npx skill4agent add fusengine/agents solid-detection

Tags

Translated version includes tags in frontmatter

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

RuleValue
File limit150 lines
Interface location
modules/[feature]/src/interfaces/
Shared interfaces
modules/cores/interfaces/
ForbiddenInterfaces in
components/
,
app/
SOLID skill
solid-nextjs
Pattern detection:
regex
^(export )?(interface|type) \w+

React / TypeScript

RuleValue
File limit100 lines
Interface location
modules/[feature]/src/interfaces/
Shared interfaces
modules/cores/interfaces/
ForbiddenInterfaces in
components/
files
SOLID skill
solid-react
Pattern detection:
regex
^(export )?(interface|type) \w+

Generic TypeScript / Bun / Node.js

RuleValue
File limit100 lines
Interface location
modules/[feature]/src/interfaces/
Shared interfaces
modules/cores/interfaces/
StructureModular MANDATORY
ForbiddenInterfaces in service/lib files
SOLID skill
solid-generic
Pattern detection:
regex
^(export )?(interface|type) \w+

Laravel / PHP

RuleValue
File limit100 lines
Interface location
FuseCore/[Module]/App/Contracts/
Shared interfaces
FuseCore/Core/App/Contracts/
StructureFuseCore Modular MANDATORY
ForbiddenInterfaces outside Contracts/
SOLID skill
solid-php
Pattern detection:
regex
^interface \w+

Swift

RuleValue
File limit150 lines
Interface location
Features/[Feature]/Protocols/
Shared interfaces
Core/Protocols/
StructureFeatures Modular MANDATORY
ForbiddenProtocols outside Protocols/
SOLID skill
solid-swift
Pattern detection:
regex
^protocol \w+

Java

RuleValue
File limit100 lines
Interface location
modules/[feature]/interfaces/
Shared interfaces
modules/core/interfaces/
StructureModular MANDATORY
ForbiddenInterfaces in impl files
SOLID skill
solid-java
Pattern detection:
regex
^(public )?(interface) \w+

Go

RuleValue
File limit100 lines
Interface location
internal/modules/[feature]/ports/
Shared interfaces
internal/core/ports/
StructureModular MANDATORY
ForbiddenInterfaces in impl files
SOLID skill
solid-go
Pattern detection:
regex
^type \w+ interface \{

Ruby

RuleValue
File limit100 lines
Interface location
app/modules/[feature]/contracts/
Shared interfaces
app/modules/core/contracts/
StructureModular MANDATORY
ForbiddenContracts in model files
SOLID skill
solid-ruby
Pattern detection:
regex
^module \w+Contract

Rust

RuleValue
File limit100 lines
Interface location
src/modules/[feature]/traits.rs
Shared interfaces
src/core/traits.rs
StructureModular MANDATORY
ForbiddenTraits in impl files
SOLID skill
solid-rust
Pattern detection:
regex
^pub trait \w+

Python

RuleValue
File limit100 lines
Interface location
src/interfaces/
ForbiddenABC 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

SeverityAction
Interface in wrong locationBLOCK (exit 2)
File over limitWARNING (exit 0)
Missing documentationWARNING

Skill Mapping

Project TypeSOLID SkillSkill 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