pub struct HealthFindingAction {
pub kind: HealthFindingActionType,
pub auto_fixable: bool,
pub description: String,
pub note: Option<String>,
pub comment: Option<String>,
pub placement: Option<String>,
pub target_path: Option<String>,
}Expand description
Suggested action attached to a ComplexityViolation.
Each complexity finding carries an array of these on the JSON wire
(findings[].actions[]). The action selector in
crates/cli/src/report/json.rs::build_health_finding_actions picks the
primary action based on which thresholds triggered the finding and the
bucketed coverage tier. See HealthFindingActionType for the full
discriminant list.
note, comment, and placement are populated per-variant: refactor
actions carry a note, suppress-line / suppress-file actions carry
comment plus placement, and the coverage-leaning actions
(add-tests, increase-coverage) carry only note.
Fields§
§kind: HealthFindingActionTypeAction type identifier. A single finding’s actions array can carry
MULTIPLE entries of different types: e.g., a finding that exceeded
both cyclomatic and CRAP at coverage_tier: partial will get BOTH
increase-coverage AND refactor-function, plus suppress-line.
Consumers that select a single action should treat the FIRST
non-suppress-{line,file} action as primary. add-tests is emitted
when CRAP triggered the finding, the function has no test coverage
(coverage_tier: none), and full coverage can bring CRAP below
max_crap_threshold (cyclomatic < threshold, since CRAP bottoms out
at CC at 100% coverage). increase-coverage is emitted when CRAP
triggered the finding, some coverage exists (coverage_tier: partial
or high), and full coverage can bring CRAP below max_crap_threshold;
the description steers toward targeted branch coverage rather than
scaffolding new tests. refactor-function is emitted when
cyclomatic/cognitive triggered the finding, when full coverage still
cannot bring CRAP below max_crap_threshold (cyclomatic >=
threshold), or as a secondary action when cyclomatic is within 5 of
the cyclomatic threshold AND cognitive is at or above
max_cognitive_threshold / 2 (the cognitive floor suppresses false
positives on flat type-tag dispatchers and JSX render maps where
high cyclomatic comes from a single switch with near-zero cognitive
load). suppress-file is emitted instead of suppress-line for
synthetic Angular <template> findings on .html files, because
line-suppression comments cannot be expressed in HTML; the comment
field carries <!-- fallow-ignore-file complexity --> and
placement is top-of-template.
auto_fixable: boolWhether fallow fix can auto-apply this action. Today every health
finding action is manual, but the field is non-singleton so a future
auto-applier (e.g., an LLM-driven refactor-function worker) does
not need a schema change.
description: StringHuman-readable description of the action.
note: Option<String>Additional context (e.g., the canonical CRAP formula, or a hint about which branch type to extract). Present on most action types; dropped only when the description carries the full ask.
comment: Option<String>The inline comment to insert (e.g.,
// fallow-ignore-next-line complexity or
<!-- fallow-ignore-file complexity -->). Present on
suppress-line and suppress-file action variants.
placement: Option<String>Where to insert the suppress comment
(e.g., above-function-declaration, above-angular-decorator,
above-component-worst-method, or top-of-template). Present on
suppress-line and suppress-file action variants.
target_path: Option<String>Project-relative path the action should target when the finding’s
remediation lives in a different file from where the finding is
anchored. Currently populated on the increase-coverage action for
synthetic Angular <template> findings whose CRAP is inherited from
the owning .component.ts: the action points at the component file
(where the user actually adds tests) rather than the .html template
(where the finding is anchored but which is not directly testable).
Absent when the action’s target is the finding’s own file.
Trait Implementations§
Source§impl Clone for HealthFindingAction
impl Clone for HealthFindingAction
Source§fn clone(&self) -> HealthFindingAction
fn clone(&self) -> HealthFindingAction
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for HealthFindingAction
impl Debug for HealthFindingAction
Auto Trait Implementations§
impl Freeze for HealthFindingAction
impl RefUnwindSafe for HealthFindingAction
impl Send for HealthFindingAction
impl Sync for HealthFindingAction
impl Unpin for HealthFindingAction
impl UnsafeUnpin for HealthFindingAction
impl UnwindSafe for HealthFindingAction
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,
Source§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more