fix(linter/max-lines): point span to end of file for disable directive to work (#5117)

closes #4101
This commit is contained in:
Boshen 2024-08-23 10:20:16 +00:00
parent fc2e9adeff
commit 76c66b4326
3 changed files with 108 additions and 99 deletions

View file

@ -10,6 +10,7 @@ enum DisabledRule<'a> {
}
/// A comment which disables one or more specific rules
#[derive(Debug)]
pub struct DisableRuleComment<'a> {
/// Span of the comment
pub span: Span,

View file

@ -78,6 +78,7 @@ impl Rule for MaxLines {
}
}
#[allow(clippy::cast_possible_truncation)]
fn run_once(&self, ctx: &LintContext) {
let comment_lines = if self.skip_comments {
let mut comment_lines: usize = 0;
@ -125,7 +126,9 @@ impl Rule for MaxLines {
};
if lines_in_file.saturating_sub(blank_lines).saturating_sub(comment_lines) > self.max {
ctx.diagnostic(max_lines_diagnostic(lines_in_file, self.max, Span::new(0, 0)));
// Point to end of the file for `eslint-disable max-lines` to work.
let end = ctx.source_text().len().saturating_sub(1) as u32;
ctx.diagnostic(max_lines_diagnostic(lines_in_file, self.max, Span::new(end, end)));
}
}
}
@ -192,6 +195,13 @@ fn test() {
long comment*/",
Some(serde_json::json!([{ "max": 2, "skipComments": true, "skipBlankLines": true }])),
),
(
"/* eslint-disable max-lines */
;
",
Some(serde_json::json!([{ "max": 1 }])),
),
];
let fail = vec![

View file

@ -2,66 +2,66 @@
source: crates/oxc_linter/src/tester.rs
---
⚠ eslint(max-lines): File has too many lines (3).
╭─[max_lines.tsx:1:1]
1 │ var xyz;
· ▲
╭─[max_lines.tsx:3:8]
2 │ var xyz;
3 │ var xyz;
· ▲
╰────
help: Maximum allowed is 2.
⚠ eslint(max-lines): File has too many lines (4).
╭─[max_lines.tsx:1:1]
1 │ /* a multiline comment
· ▲
2 │ that goes to many lines*/
╭─[max_lines.tsx:4:7]
3 │ var xy;
4 │ var xy;
· ▲
╰────
help: Maximum allowed is 2.
⚠ eslint(max-lines): File has too many lines (3).
╭─[max_lines.tsx:1:1]
1 │ //a single line comment
· ▲
╭─[max_lines.tsx:3:7]
2 │ var xy;
3 │ var xy;
· ▲
╰────
help: Maximum allowed is 2.
⚠ eslint(max-lines): File has too many lines (5).
╭─[max_lines.tsx:1:1]
1 │ var x;
· ▲
2 │
╭─[max_lines.tsx:5:9]
4 │
5 │ var y;
· ▲
╰────
help: Maximum allowed is 2.
⚠ eslint(max-lines): File has too many lines (8).
╭─[max_lines.tsx:1:1]
1 │ //a single line comment
· ▲
2 │ var xy;
╭─[max_lines.tsx:8:18]
7 │ really really
8 │ long comment*/
· ▲
╰────
help: Maximum allowed is 2.
⚠ eslint(max-lines): File has too many lines (3).
╭─[max_lines.tsx:1:1]
1 │ var x; // inline comment
· ▲
╭─[max_lines.tsx:3:9]
2 │ var y;
3 │ var z;
· ▲
╰────
help: Maximum allowed is 2.
⚠ eslint(max-lines): File has too many lines (4).
╭─[max_lines.tsx:1:1]
1 │ var x; /* inline comment
· ▲
2 │ spanning multiple lines */
╭─[max_lines.tsx:4:9]
3 │ var y;
4 │ var z;
· ▲
╰────
help: Maximum allowed is 2.
⚠ eslint(max-lines): File has too many lines (8).
╭─[max_lines.tsx:1:1]
1 │ //a single line comment
· ▲
2 │ var xy;
╭─[max_lines.tsx:8:18]
7 │ really really
8 │ long comment*/
· ▲
╰────
help: Maximum allowed is 2.
@ -78,10 +78,10 @@ source: crates/oxc_linter/src/tester.rs
help: Maximum allowed is 0.
⚠ eslint(max-lines): File has too many lines (2).
╭─[max_lines.tsx:1:1]
╭─[max_lines.tsx:2:3]
1 │
· ▲
2 │
· ▲
╰────
help: Maximum allowed is 0.
@ -93,147 +93,145 @@ source: crates/oxc_linter/src/tester.rs
help: Maximum allowed is 0.
⚠ eslint(max-lines): File has too many lines (2).
╭─[max_lines.tsx:1:1]
╭─[max_lines.tsx:2:3]
1 │ A
· ▲
2 │
· ▲
╰────
help: Maximum allowed is 0.
⚠ eslint(max-lines): File has too many lines (2).
╭─[max_lines.tsx:1:1]
╭─[max_lines.tsx:2:4]
1 │ A
· ▲
2 │
· ▲
╰────
help: Maximum allowed is 0.
⚠ eslint(max-lines): File has too many lines (2).
╭─[max_lines.tsx:1:1]
╭─[max_lines.tsx:2:4]
1 │ A
· ▲
2 │
· ▲
╰────
help: Maximum allowed is 1.
⚠ eslint(max-lines): File has too many lines (3).
╭─[max_lines.tsx:1:1]
1 │ A
· ▲
╭─[max_lines.tsx:3:3]
2 │
3 │
· ▲
╰────
help: Maximum allowed is 1.
⚠ eslint(max-lines): File has too many lines (4).
╭─[max_lines.tsx:1:1]
1 │ var a = 'a';
· ▲
2 │ var x
╭─[max_lines.tsx:4:14]
3 │ var c;
4 │ console.log
· ▲
╰────
help: Maximum allowed is 2.
⚠ eslint(max-lines): File has too many lines (3).
╭─[max_lines.tsx:1:1]
1 │ var a = 'a',
· ▲
╭─[max_lines.tsx:3:6]
2 │ c,
3 │ x;
· ▲
╰────
help: Maximum allowed is 2.
⚠ eslint(max-lines): File has too many lines (4).
╭─[max_lines.tsx:1:1]
1 │ var a = 'a',
· ▲
2 │ c,
╭─[max_lines.tsx:4:3]
3 │ x;
4 │
· ▲
╰────
help: Maximum allowed is 2.
⚠ eslint(max-lines): File has too many lines (6).
╭─[max_lines.tsx:1:1]
1 │
· ▲
2 │
3 │ var a = 'a',
╭─[max_lines.tsx:6:3]
5 │ x;
6 │
· ▲
╰────
help: Maximum allowed is 2.
⚠ eslint(max-lines): File has too many lines (6).
╭─[max_lines.tsx:1:1]
1 │ var a = 'a';
· ▲
2 │ var x
╭─[max_lines.tsx:6:14]
5 │ // some block
6 │ // comments
· ▲
╰────
help: Maximum allowed is 2.
⚠ eslint(max-lines): File has too many lines (5).
╭─[max_lines.tsx:1:1]
1 │ var a = 'a';
· ▲
2 │ var x
╭─[max_lines.tsx:5:23]
4 │ console.log
5 │ /* block comments */
· ▲
╰────
help: Maximum allowed is 2.
⚠ eslint(max-lines): File has too many lines (6).
╭─[max_lines.tsx:1:1]
1 │ var a = 'a';
· ▲
2 │ var x
╭─[max_lines.tsx:6:3]
5 │ /* block comments */
6 │
· ▲
╰────
help: Maximum allowed is 2.
⚠ eslint(max-lines): File has too many lines (7).
╭─[max_lines.tsx:1:1]
1 │ var a = 'a';
· ▲
2 │ var x
╭─[max_lines.tsx:7:15]
6 │
7 │ comments */
· ▲
╰────
help: Maximum allowed is 2.
⚠ eslint(max-lines): File has too many lines (4).
╭─[max_lines.tsx:1:1]
1 │ var a = 'a';
· ▲
2 │
╭─[max_lines.tsx:4:13]
3 │
4 │ // comment
· ▲
╰────
help: Maximum allowed is 2.
⚠ eslint(max-lines): File has too many lines (8).
╭─[max_lines.tsx:1:1]
1 │ var a = 'a';
· ▲
2 │ var x
╭─[max_lines.tsx:8:3]
7 │
8 │
· ▲
╰────
help: Maximum allowed is 2.
⚠ eslint(max-lines): File has too many lines (8).
╭─[max_lines.tsx:1:1]
1 │ var a = 'a';
· ▲
2 │
╭─[max_lines.tsx:8:3]
7 │
8 │
· ▲
╰────
help: Maximum allowed is 2.
⚠ eslint(max-lines): File has too many lines (6).
╭─[max_lines.tsx:1:1]
1 │ var a = 'a';
· ▲
2 │ //
╭─[max_lines.tsx:6:5]
5 │ console.log
6 │ //
· ▲
╰────
help: Maximum allowed is 2.
⚠ eslint(max-lines): File has too many lines (9).
╭─[max_lines.tsx:1:1]
1 │ // hello world
· ▲
2 │ /*hello
╭─[max_lines.tsx:9:5]
8 │ e,
9 │ f;
· ▲
╰────
help: Maximum allowed is 2.
⚠ eslint(max-lines): File has too many lines (11).
╭─[max_lines.tsx:1:1]
1 │
· ▲
2 │ var x = '';
3 │
╰────
╭─[max_lines.tsx:11:13]
10 │
11 │ // comment
· ▲
╰────
help: Maximum allowed is 2.