|
| 1 | +//! Kotlin 六类别适用性 |
| 2 | +//! |
| 3 | +//! 验收标准:每个槽位有实际依据,not_applicable 不得用缺工具解释 |
| 4 | +
|
| 5 | +use serde::{Deserialize, Serialize}; |
| 6 | + |
| 7 | +/// 适用性槽位 |
| 8 | +#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] |
| 9 | +pub enum SlotStatus { |
| 10 | + /// 适用 |
| 11 | + Applicable, |
| 12 | + /// 不适用 |
| 13 | + NotApplicable, |
| 14 | + /// 缺口 |
| 15 | + Gap, |
| 16 | +} |
| 17 | + |
| 18 | +/// 槽位 |
| 19 | +#[derive(Debug, Clone, Serialize, Deserialize)] |
| 20 | +pub struct ApplicabilitySlot { |
| 21 | + /// 类别 |
| 22 | + pub category: String, |
| 23 | + /// 状态 |
| 24 | + pub status: SlotStatus, |
| 25 | + /// 依据 |
| 26 | + pub rationale: String, |
| 27 | +} |
| 28 | + |
| 29 | +/// 适用性检查器 |
| 30 | +pub struct KotlinApplicability; |
| 31 | + |
| 32 | +impl KotlinApplicability { |
| 33 | + /// 检查适用性 |
| 34 | + pub fn check() -> Vec<ApplicabilitySlot> { |
| 35 | + vec![ |
| 36 | + ApplicabilitySlot { category: "lint".into(), status: SlotStatus::Applicable, rationale: "detekt 可用".into() }, |
| 37 | + ApplicabilitySlot { category: "comments".into(), status: SlotStatus::Applicable, rationale: "KDoc 可用".into() }, |
| 38 | + ApplicabilitySlot { category: "dependencies".into(), status: SlotStatus::Applicable, rationale: "Gradle 可用".into() }, |
| 39 | + ApplicabilitySlot { category: "cve".into(), status: SlotStatus::Applicable, rationale: "OWASP 可用".into() }, |
| 40 | + ApplicabilitySlot { category: "security".into(), status: SlotStatus::Applicable, rationale: "SpotBugs 可用".into() }, |
| 41 | + ApplicabilitySlot { category: "build".into(), status: SlotStatus::Applicable, rationale: "Gradle 可用".into() }, |
| 42 | + ] |
| 43 | + } |
| 44 | + |
| 45 | + /// 验证 not_applicable 不用缺工具解释 |
| 46 | + pub fn validate_no_missing_tool_excuse(slots: &[ApplicabilitySlot]) -> bool { |
| 47 | + slots.iter().all(|s| s.status != SlotStatus::NotApplicable || !s.rationale.contains("缺工具")) |
| 48 | + } |
| 49 | +} |
0 commit comments