Skip to content

fix: override severity on rule & inline-rules flags#2505

Merged
HerringtonDarkholme merged 2 commits into
ast-grep:mainfrom
Dsaquel:fix/override-severity-on-more-scenario
Mar 2, 2026
Merged

fix: override severity on rule & inline-rules flags#2505
HerringtonDarkholme merged 2 commits into
ast-grep:mainfrom
Dsaquel:fix/override-severity-on-more-scenario

Conversation

@Dsaquel

@Dsaquel Dsaquel commented Feb 26, 2026

Copy link
Copy Markdown
Contributor

The severity override doesn't work for the commands:

  • ast-grep scan --rule myRule.yml --error
  • ast-grep scan --error --inline-rules <my rule>

Summary by CodeRabbit

  • Bug Fixes

    • Rule override processing now runs consistently for both file-based and inline rule sources, including stdin paths, ensuring severity overrides are correctly applied.
  • Tests

    • Added tests validating severity override behavior for rule-file, inline-rule, and inline-rule with stdin scenarios, ensuring failures surface as expected.

@coderabbitai

coderabbitai Bot commented Feb 26, 2026

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 076c31a and 2761737.

📒 Files selected for processing (2)
  • crates/cli/src/scan.rs
  • crates/cli/tests/scan_test.rs
🚧 Files skipped from review as they are similar to previous changes (1)
  • crates/cli/src/scan.rs

📝 Walkthrough

Walkthrough

Scan rule loading now always applies RuleOverwrite processing: file-based, inline, and stdin-loaded rule configurations are passed through overwrite.process_configs(...) before use. Three tests were added to validate severity override behavior across rule-path, inline-rule, and inline-with-stdin flows.

Changes

Cohort / File(s) Summary
Rule Override Processing
crates/cli/src/scan.rs
Consistently apply overwrite.process_configs(configs) for rule-file, inline-rule, and stdin paths when constructing ScanWithConfig / ScanStdin, ensuring all loaded rule configs pass through RuleOverwrite.
Test Coverage
crates/cli/tests/scan_test.rs
Add three tests (test_severity_override_with_rule_path, test_severity_override_with_inline_rule, test_severity_override_with_inline_rule_and_stdin) to verify --error severity override works for rule file, inline rules, and inline rules with stdin input.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Poem

🐰 I hop through configs, leaf and vine,
File, inline, stdin — now all align.
A gentle overwrite on each rule I press,
Consistency nibbled, chaos suppressed. ✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 66.67% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main bug fix: enabling severity override functionality for the --rule and --inline-rules flags, which is the primary objective of the changeset.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@codecov

codecov Bot commented Feb 26, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 88.88889% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 84.42%. Comparing base (e5f9010) to head (2761737).
⚠️ Report is 5 commits behind head on main.

Files with missing lines Patch % Lines
crates/cli/src/scan.rs 88.88% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2505      +/-   ##
==========================================
+ Coverage   84.40%   84.42%   +0.01%     
==========================================
  Files         113      113              
  Lines       18665    18669       +4     
==========================================
+ Hits        15755    15761       +6     
+ Misses       2910     2908       -2     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
crates/cli/src/scan.rs (1)

297-311: ⚠️ Potential issue | 🟡 Minor

The --stdin path doesn't apply severity overrides.

ScanStdin::try_new has the same rule-loading pattern but doesn't apply RuleOverwrite.process_configs. This means severity overrides via --error, --warning, etc. won't work when combined with --stdin.

Consider applying the same fix here for consistency:

Proposed fix
 fn try_new(arg: ScanArg) -> Result<Self> {
+   let overwrite = RuleOverwrite::new(&arg.overwrite)?;
   let rules = if let Some(path) = &arg.rule {
-     read_rule_file(path, None)?
+     read_rule_file(path, None).and_then(|configs| overwrite.process_configs(configs))?
   } else if let Some(text) = &arg.inline_rules {
-     from_yaml_string(text, &Default::default())
+     let configs = from_yaml_string(text, &Default::default())
       .with_context(|| EC::ParseRule("INLINE_RULES".into()))?;
+     overwrite.process_configs(configs)?
   } else {
     return Err(anyhow::anyhow!(EC::RuleNotSpecified));
   };
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@crates/cli/src/scan.rs` around lines 297 - 311, ScanStdin::try_new loads
rules the same way as Scan::try_new but currently skips applying severity
overrides, so modify ScanStdin::try_new to call RuleOverwrite::process_configs
on the loaded rules (the same way Scan::try_new does) after rules are created
and before returning; locate the rules variable in ScanStdin::try_new and invoke
RuleOverwrite::process_configs(&mut rules, &arg.overwrites or equivalent) and
propagate any error, ensuring --error/--warning overrides are honored for
--stdin.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Outside diff comments:
In `@crates/cli/src/scan.rs`:
- Around line 297-311: ScanStdin::try_new loads rules the same way as
Scan::try_new but currently skips applying severity overrides, so modify
ScanStdin::try_new to call RuleOverwrite::process_configs on the loaded rules
(the same way Scan::try_new does) after rules are created and before returning;
locate the rules variable in ScanStdin::try_new and invoke
RuleOverwrite::process_configs(&mut rules, &arg.overwrites or equivalent) and
propagate any error, ensuring --error/--warning overrides are honored for
--stdin.

ℹ️ Review info

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e5f9010 and 076c31a.

📒 Files selected for processing (2)
  • crates/cli/src/scan.rs
  • crates/cli/tests/scan_test.rs

@Dsaquel Dsaquel force-pushed the fix/override-severity-on-more-scenario branch from 5bff8a5 to eb82275 Compare February 26, 2026 14:31
test: handle --stdin
@Dsaquel Dsaquel force-pushed the fix/override-severity-on-more-scenario branch from eb82275 to 2761737 Compare February 26, 2026 14:31
@HerringtonDarkholme HerringtonDarkholme added this pull request to the merge queue Mar 2, 2026
Merged via the queue into ast-grep:main with commit 1b42d82 Mar 2, 2026
6 checks passed
@Dsaquel Dsaquel deleted the fix/override-severity-on-more-scenario branch March 2, 2026 07:56
nicopauss pushed a commit to Intersec/lib-common that referenced this pull request Apr 1, 2026
##### [\`v0.42.0\`](https://github.com/ast-grep/ast-grep/blob/HEAD/CHANGELOG.md#0420)

- chore(deps): update dependency dprint to v0.53.0 [`#2547`](ast-grep/ast-grep#2547)
- chore(deps): update rust crate tree-sitter to v0.26.7 [`#2541`](ast-grep/ast-grep#2541)
- chore(deps): update dependency web-tree-sitter to v0.26.7 [`#2540`](ast-grep/ast-grep#2540)
- chore(deps): update dependency [@types/node](https://github.com/types/node) to v24.12.0 [`#2518`](ast-grep/ast-grep#2518)
- fix(deps): update rust crate tree-sitter-lua to 0.5.0 [`#2506`](ast-grep/ast-grep#2506)
- chore(deps): update rust crate clap to v4.6.0 [`#2538`](ast-grep/ast-grep#2538)
- fix(deps): update rust crate tree-sitter-scala to 0.25.0 [`#2536`](ast-grep/ast-grep#2536)
- chore(deps): update dependency oxlint to v1.55.0 [`#2533`](ast-grep/ast-grep#2533)
- chore(deps): update rust crate clap\_complete to v4.6.0 [`#2539`](ast-grep/ast-grep#2539)
- chore(deps): update rust crate bit-set to v0.9.1 [`#2537`](ast-grep/ast-grep#2537)
- chore(deps): update rust crate bit-set to 0.9.0 [`#2527`](ast-grep/ast-grep#2527)
- chore(deps): update rust crate assert\_cmd to v2.2.0 [`#2529`](ast-grep/ast-grep#2529)
- chore(deps): update rust crate tempfile to v3.27.0 [`#2531`](ast-grep/ast-grep#2531)
- fix(lsp): scan injected languages for diagnostics [`#2528`](ast-grep/ast-grep#2528)
- chore(deps): update dependency [@ast-grep/napi](https://github.com/ast-grep/napi) to v0.41.1 [`#2526`](ast-grep/ast-grep#2526)
- chore(deps): update dependency oxlint to v1.52.0 [`#2524`](ast-grep/ast-grep#2524)
- feat: support nth-child esquery [`#2546`](ast-grep/ast-grep#2546)
- feat: support :is selector [`#2545`](ast-grep/ast-grep#2545)
- feat: support :not selector [`#2544`](ast-grep/ast-grep#2544)
- feat: support :has rule [`#2543`](ast-grep/ast-grep#2543)
- fix(lsp): scan injected languages for diagnostics ([#2528](ast-grep/ast-grep#2528)) [`#2522`](ast-grep/ast-grep#2522)
- feat: add parameterized util [`3d90372`](ast-grep/ast-grep@3d90372)
- refactor: limit parameterized utils to globals [`2d69a34`](ast-grep/ast-grep@2d69a34)
- refactor: move parameterized\_util [`c77e38d`](ast-grep/ast-grep@c77e38d)
##### [\`v0.41.1\`](https://github.com/ast-grep/ast-grep/blob/HEAD/CHANGELOG.md#0411)

> 10 March 2026

- fix: lsp on change encounter deadlock [`#2511`](ast-grep/ast-grep#2511)
- chore(deps): update dependency oxlint to v1.51.0 [`#2512`](ast-grep/ast-grep#2512)
- chore(deps): update rust crate tempfile to v3.26.0 [`#2497`](ast-grep/ast-grep#2497)
- chore(deps): update rust crate inquire to v0.9.4 [`#2498`](ast-grep/ast-grep#2498)
- chore(deps): update dependency [@types/node](https://github.com/types/node) to v24.11.0 [`#2502`](ast-grep/ast-grep#2502)
- chore(deps): update dependency dprint to v0.52.0 [`#2499`](ast-grep/ast-grep#2499)
- fix: override severity on `rule` & `inline-rules` flags [`#2505`](ast-grep/ast-grep#2505)
- chore(deps): update github artifact actions [`#2507`](ast-grep/ast-grep#2507)
- chore(deps): update rust crate tree-sitter to v0.26.6 [`#2501`](ast-grep/ast-grep#2501)
- chore(deps): update dependency web-tree-sitter to v0.26.6 [`#2500`](ast-grep/ast-grep#2500)
- chore(deps): update dependency ava to v7 [`#2508`](ast-grep/ast-grep#2508)
- chore(deps): update dependency oxlint to v1.50.0 [`#2495`](ast-grep/ast-grep#2495)
- chore(deps): update dependency [@ast-grep/napi](https://github.com/ast-grep/napi) to v0.41.0 [`#2494`](ast-grep/ast-grep#2494)
- fix: bump ls-types version [`#2525`](ast-grep/ast-grep#2525)
- refactor: change versioned ast work [`a86b2ab`](ast-grep/ast-grep@a86b2ab)
- fix: bump wasm-bindgen [`d23e334`](ast-grep/ast-grep@d23e334)
- fix: fix wasm package [`0b92e94`](ast-grep/ast-grep@0b92e94)

Renovate-Branch: renovate/2024.6-ast-grep-cli-0.x
Change-Id: I91bcfa93167c7af0833afeb42df774621bad595c
Priv-Id: ef06dc14816a639036bb167212251f765ce38ad8
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants