pub struct Rule {Show 19 fields
pub id: RuleId,
pub language: Language,
pub severity: Severity,
pub message: String,
pub note: Option<String>,
pub category: Option<Category>,
pub fix: Option<String>,
pub rule: Value,
pub metric: Option<Metric>,
pub threshold: Option<f64>,
pub min_lines: Option<usize>,
pub cross_file: Option<CrossFileKind>,
pub source_dir: Option<PathBuf>,
pub files: Option<Vec<String>>,
pub ignores: Option<Vec<String>>,
pub enabled: bool,
pub skip_test_code: bool,
pub tests: Option<RuleTests>,
pub ai_check: Option<AiCheck>,
}Fields§
§id: RuleId§language: Language§severity: Severity§message: String§note: Option<String>§category: Option<Category>§fix: Option<String>§rule: Value§metric: Option<Metric>File-level metric evaluated instead of rule. Mutually exclusive with it.
threshold: Option<f64>The value metric must exceed for the rule to fire. Required with metric.
min_lines: Option<usize>Minimum file length in lines before a metric rule is evaluated. Below it
the file is skipped, so ratios are not distorted by tiny files (a small
module full of required doc comments). None means no floor.
cross_file: Option<CrossFileKind>Project-wide analysis evaluated instead of rule or metric, and
mutually exclusive with both. The kind selects builtin Rust logic; the
YAML only carries the rule’s identity, severity and user-facing text.
source_dir: Option<PathBuf>Directory a custom rule was loaded from, used to resolve test fixture
paths. None for builtin rules, which resolve against BuiltinRules.
files: Option<Vec<String>>§ignores: Option<Vec<String>>§enabled: boolDrop findings located inside #[cfg(test)] blocks of scanned Rust files.
Complements ignores, which only filters whole files by path.
skip_test_code: bool§tests: Option<RuleTests>§ai_check: Option<AiCheck>When set, matches of rule are candidates confirmed by an LLM before
being reported. See AiCheck. The AST scanner ignores this field.
Implementations§
Source§impl Rule
impl Rule
Sourcepub fn effective_category(&self) -> Category
pub fn effective_category(&self) -> Category
The rule’s category, resolving an unset category to the default
(Correctness), the way the scanner treats it.
Sourcepub fn is_metric(&self) -> bool
pub fn is_metric(&self) -> bool
Whether this rule measures a file-level metric instead of matching AST.
Sourcepub fn metric_spec(&self) -> Option<(Metric, f64)>
pub fn metric_spec(&self) -> Option<(Metric, f64)>
The metric and threshold of a file-level rule, None for AST rules.
Sourcepub fn is_cross_file(&self) -> bool
pub fn is_cross_file(&self) -> bool
Whether this rule is evaluated by the project-wide pass instead of per file.
Sourcepub fn cross_file_kind(&self) -> Option<CrossFileKind>
pub fn cross_file_kind(&self) -> Option<CrossFileKind>
The cross-file analysis this rule requests, None for AST and metric rules.
Trait Implementations§
Source§impl<'de> Deserialize<'de> for Rule
impl<'de> Deserialize<'de> for Rule
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for Rule
impl RefUnwindSafe for Rule
impl Send for Rule
impl Sync for Rule
impl Unpin for Rule
impl UnsafeUnpin for Rule
impl UnwindSafe for Rule
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more