solid-detection 是一个 SOLID 规则体系的入口检测技能,其核心作用是在使用某个语言专属的 SOLID 技能之前,先判断当前项目属于哪种技术栈,从而决定应加载哪个 solid-<stack> 技能,并确定该技术栈的接口目录约定。
主要能力
项目类型检测:通过检查配置文件识别项目类型,覆盖 Next.js、TanStack Start、Astro、React、通用 TypeScript、Laravel、Swift、Java、C#/.NET、Go、Ruby、Rust、Python。检测按固定优先级进行:Next.js > TanStack Start > Astro > React > Generic TS > Laravel > Swift > Java > C# > Go > Ruby > Rust > Python。例如,存在 package.json 且含 "next" 时判定为 Next.js,优先于 React;含 "@tanstack/react-start" 或 "astro" 时同样优先于 React;React 的判定条件是存在 "react" 且不含 "next"。
技能映射:检测结果对应到具体的 SOLID 技能路径,例如 nextjs 对应 nextjs-expert/skills/solid-nextjs/,tanstack-start 对应 tanstack-start-expert/skills/solid-tanstack-start/,astro 对应 astro-expert/skills/solid-astro/,react 对应 react-expert/skills/solid-react/,laravel 对应 laravel-expert/skills/solid-php/,swift 对应 swift-apple-expert/skills/solid-swift/,java、csharp、go、ruby、rust、python 及通用 TS 对应 solid/skills/ 下的相应技能。每个 solid-<stack> 技能定义自身的技术栈共享位置(DRY 的 Check shared locations 步骤),应在编写新代码前加载,不应套用其他技术栈的目录。
环境变量输出:detect-project.sh 会设置 SOLID_PROJECT_TYPE(取值为 nextjs、tanstack-start、astro、react、generic、laravel、swift、java、csharp、go、ruby、rust、python 或 unknown)、SOLID_FILE_LIMIT(100 或 150)、SOLID_INTERFACE_DIR(接口目录路径)、SOLID_STRUCTURE(如 modular)。
校验动作:接口文件位于错误位置属于 BLOCK(退出码 2);文件超出大小限制或缺少文档仅记为 WARNING(退出码 0)。各语言的接口位置、禁止区域、模式检测正则及行数统计规则(排除注释与空行)见 language-rules.md。
使用方式
该技能通常在需要确定加载哪个语言专属 SOLID 技能、或需要从配置文件识别项目类型时触发。检测依据为 package.json、tsconfig.json、bun.lock、bun.lockb、bunfig.toml、composer.json、Package.swift、.xcodeproj、pom.xml、build.gradle、build.gradle.kts、.csproj、.sln、.slnx、go.mod、Gemfile、Rakefile、Cargo.toml、pyproject.toml、requirements.txt 等文件的存在与内容匹配。
适用场景
适用于多语言、多技术栈的代码仓库中,自动路由到正确的 SOLID 规则集;在执行 SOLID 代码审查或新增代码前,确认接口目录、文件行数限制与共享位置约定;以及在同时存在多种框架依赖时,按优先级消歧项目类型。
限制
检测结果依赖上述配置文件的存在与内容匹配,无法识别时输出 unknown。文件超限与缺少文档仅为警告,不阻断流程。具体各语言的接口位置、禁止区域、正则规则与行数统计细节需查阅 language-rules.md;该文件的具体内容在提供的资料中未完整给出。