Skip to content

Commit 5894aa0

Browse files
committed
Avoid parsing joint rule codes as distinct codes in # noqa
1 parent f837428 commit 5894aa0

4 files changed

Lines changed: 86 additions & 3 deletions

File tree

crates/ruff_linter/src/noqa.rs

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ impl<'a> Directive<'a> {
183183
// Extract, e.g., the `401` in `F401`.
184184
let suffix = line[prefix..]
185185
.chars()
186-
.take_while(char::is_ascii_digit)
186+
.take_while(char::is_ascii_alphanumeric)
187187
.count();
188188
if prefix > 0 && suffix > 0 {
189189
Some(&line[..prefix + suffix])
@@ -549,7 +549,7 @@ impl<'a> ParsedFileExemption<'a> {
549549
// Extract, e.g., the `401` in `F401`.
550550
let suffix = line[prefix..]
551551
.chars()
552-
.take_while(char::is_ascii_digit)
552+
.take_while(char::is_ascii_alphanumeric)
553553
.count();
554554
if prefix > 0 && suffix > 0 {
555555
Some(&line[..prefix + suffix])
@@ -895,7 +895,7 @@ pub(crate) struct NoqaDirectiveLine<'a> {
895895
pub(crate) directive: Directive<'a>,
896896
/// The codes that are ignored by the directive.
897897
pub(crate) matches: Vec<NoqaCode>,
898-
// Whether the directive applies to range.end
898+
/// Whether the directive applies to `range.end`.
899899
pub(crate) includes_end: bool,
900900
}
901901

@@ -1191,6 +1191,24 @@ mod tests {
11911191
assert_debug_snapshot!(Directive::try_extract(source, TextSize::default()));
11921192
}
11931193

1194+
#[test]
1195+
fn noqa_squashed_codes() {
1196+
let source = "# noqa: F401F841";
1197+
assert_debug_snapshot!(Directive::try_extract(source, TextSize::default()));
1198+
}
1199+
1200+
#[test]
1201+
fn noqa_empty_comma() {
1202+
let source = "# noqa: F401,,F841";
1203+
assert_debug_snapshot!(Directive::try_extract(source, TextSize::default()));
1204+
}
1205+
1206+
#[test]
1207+
fn noqa_empty_comma_space() {
1208+
let source = "# noqa: F401, ,F841";
1209+
assert_debug_snapshot!(Directive::try_extract(source, TextSize::default()));
1210+
}
1211+
11941212
#[test]
11951213
fn noqa_invalid_suffix() {
11961214
let source = "# noqa[F401]";
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
---
2+
source: crates/ruff_linter/src/noqa.rs
3+
expression: "Directive::try_extract(source, TextSize::default())"
4+
---
5+
Ok(
6+
Some(
7+
Codes(
8+
Codes {
9+
range: 0..18,
10+
codes: [
11+
Code {
12+
code: "F401",
13+
range: 8..12,
14+
},
15+
Code {
16+
code: "F841",
17+
range: 14..18,
18+
},
19+
],
20+
},
21+
),
22+
),
23+
)
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
---
2+
source: crates/ruff_linter/src/noqa.rs
3+
expression: "Directive::try_extract(source, TextSize::default())"
4+
---
5+
Ok(
6+
Some(
7+
Codes(
8+
Codes {
9+
range: 0..19,
10+
codes: [
11+
Code {
12+
code: "F401",
13+
range: 8..12,
14+
},
15+
Code {
16+
code: "F841",
17+
range: 15..19,
18+
},
19+
],
20+
},
21+
),
22+
),
23+
)
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
---
2+
source: crates/ruff_linter/src/noqa.rs
3+
expression: "Directive::try_extract(source, TextSize::default())"
4+
---
5+
Ok(
6+
Some(
7+
Codes(
8+
Codes {
9+
range: 0..16,
10+
codes: [
11+
Code {
12+
code: "F401F841",
13+
range: 8..16,
14+
},
15+
],
16+
},
17+
),
18+
),
19+
)

0 commit comments

Comments
 (0)