/** * Code Structure Detector — 可维护性结构指标检测(核心代码质量约束的机械可判部分)。 * * 职责边界: * - 负责:方法行数/参数个数/控制流嵌套深度/类行数 四项指标的启发式检测(TS/JS/Vue script + Java) * - 不负责:分层禁令(layering_detector)、空实现检测(lazy_pattern_detector)、语义质量(对抗审查) * * 被谁调用:gate/executors/executors_code_structure.ts * 调用谁:无外部依赖(纯计算) * * 数据流:文件内容 + 路径 → 字符级状态机 → StructureFinding[] * 持久化:无 * * 判定机制:字符级大括号状态机。方法/类声明行进入"签名收集"状态,签名圆括号闭合后 * 遇 `{` 确认(遇 `;` 丢弃——调用语句/抽象/接口声明),`{` 统一入帧栈;控制流帧 * (if/for/while/switch/do/else)在父方法帧上累计嵌套深度,帧闭合时报告指标。 * 行级清洗剥离字符串/注释;测试文件与生成代码豁免;残余误报由 waiver 按 finding 精确豁免。 */ export interface StructureFinding { /** 指标名 */ metric: "method_lines" | "param_count" | "nesting_depth" | "class_lines"; /** 发现位置行号(1-based,.vue 为原始文件行号) */ line_number: number; /** 中文描述 */ message: string; /** 证据片段(声明行原文,截断 120 字符) */ evidence: string; } /** 结构指标上限(单一真相源;改动即 engine_revision 变化,旧验证记录失效重验)。 */ export declare const STRUCTURE_LIMITS: { readonly method_lines: 50; readonly params: 5; readonly nesting: 3; readonly class_lines: 300; }; export interface CleanState { inBlockComment: boolean; inFence: boolean; } export declare function cleanLine(raw: string, st: CleanState): string; export declare function isStructureExempt(filePath: string, content: string): boolean; /** * 对单个文件内容执行结构指标检测。 * @param content 文件内容(.vue 传完整文件,内部提取 script 块) * @param filePath 文件路径(豁免判断与语言分流) */ export declare function detectStructureMetrics(content: string, filePath: string): StructureFinding[];