mirror of
https://github.com/danbulant/oxc
synced 2026-05-24 12:21:58 +00:00
fix(linter/max-lines): point span to end of file for disable directive to work (#5117)
closes #4101
This commit is contained in:
parent
fc2e9adeff
commit
76c66b4326
3 changed files with 108 additions and 99 deletions
|
|
@ -10,6 +10,7 @@ enum DisabledRule<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A comment which disables one or more specific rules
|
/// A comment which disables one or more specific rules
|
||||||
|
#[derive(Debug)]
|
||||||
pub struct DisableRuleComment<'a> {
|
pub struct DisableRuleComment<'a> {
|
||||||
/// Span of the comment
|
/// Span of the comment
|
||||||
pub span: Span,
|
pub span: Span,
|
||||||
|
|
|
||||||
|
|
@ -78,6 +78,7 @@ impl Rule for MaxLines {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(clippy::cast_possible_truncation)]
|
||||||
fn run_once(&self, ctx: &LintContext) {
|
fn run_once(&self, ctx: &LintContext) {
|
||||||
let comment_lines = if self.skip_comments {
|
let comment_lines = if self.skip_comments {
|
||||||
let mut comment_lines: usize = 0;
|
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 {
|
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*/",
|
long comment*/",
|
||||||
Some(serde_json::json!([{ "max": 2, "skipComments": true, "skipBlankLines": true }])),
|
Some(serde_json::json!([{ "max": 2, "skipComments": true, "skipBlankLines": true }])),
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
"/* eslint-disable max-lines */
|
||||||
|
|
||||||
|
;
|
||||||
|
",
|
||||||
|
Some(serde_json::json!([{ "max": 1 }])),
|
||||||
|
),
|
||||||
];
|
];
|
||||||
|
|
||||||
let fail = vec![
|
let fail = vec![
|
||||||
|
|
|
||||||
|
|
@ -2,66 +2,66 @@
|
||||||
source: crates/oxc_linter/src/tester.rs
|
source: crates/oxc_linter/src/tester.rs
|
||||||
---
|
---
|
||||||
⚠ eslint(max-lines): File has too many lines (3).
|
⚠ eslint(max-lines): File has too many lines (3).
|
||||||
╭─[max_lines.tsx:1:1]
|
╭─[max_lines.tsx:3:8]
|
||||||
1 │ var xyz;
|
|
||||||
· ▲
|
|
||||||
2 │ var xyz;
|
2 │ var xyz;
|
||||||
|
3 │ var xyz;
|
||||||
|
· ▲
|
||||||
╰────
|
╰────
|
||||||
help: Maximum allowed is 2.
|
help: Maximum allowed is 2.
|
||||||
|
|
||||||
⚠ eslint(max-lines): File has too many lines (4).
|
⚠ eslint(max-lines): File has too many lines (4).
|
||||||
╭─[max_lines.tsx:1:1]
|
╭─[max_lines.tsx:4:7]
|
||||||
1 │ /* a multiline comment
|
3 │ var xy;
|
||||||
|
4 │ var xy;
|
||||||
· ▲
|
· ▲
|
||||||
2 │ that goes to many lines*/
|
|
||||||
╰────
|
╰────
|
||||||
help: Maximum allowed is 2.
|
help: Maximum allowed is 2.
|
||||||
|
|
||||||
⚠ eslint(max-lines): File has too many lines (3).
|
⚠ eslint(max-lines): File has too many lines (3).
|
||||||
╭─[max_lines.tsx:1:1]
|
╭─[max_lines.tsx:3:7]
|
||||||
1 │ //a single line comment
|
|
||||||
· ▲
|
|
||||||
2 │ var xy;
|
2 │ var xy;
|
||||||
|
3 │ var xy;
|
||||||
|
· ▲
|
||||||
╰────
|
╰────
|
||||||
help: Maximum allowed is 2.
|
help: Maximum allowed is 2.
|
||||||
|
|
||||||
⚠ eslint(max-lines): File has too many lines (5).
|
⚠ eslint(max-lines): File has too many lines (5).
|
||||||
╭─[max_lines.tsx:1:1]
|
╭─[max_lines.tsx:5:9]
|
||||||
1 │ var x;
|
4 │
|
||||||
|
5 │ var y;
|
||||||
· ▲
|
· ▲
|
||||||
2 │
|
|
||||||
╰────
|
╰────
|
||||||
help: Maximum allowed is 2.
|
help: Maximum allowed is 2.
|
||||||
|
|
||||||
⚠ eslint(max-lines): File has too many lines (8).
|
⚠ eslint(max-lines): File has too many lines (8).
|
||||||
╭─[max_lines.tsx:1:1]
|
╭─[max_lines.tsx:8:18]
|
||||||
1 │ //a single line comment
|
7 │ really really
|
||||||
|
8 │ long comment*/
|
||||||
· ▲
|
· ▲
|
||||||
2 │ var xy;
|
|
||||||
╰────
|
╰────
|
||||||
help: Maximum allowed is 2.
|
help: Maximum allowed is 2.
|
||||||
|
|
||||||
⚠ eslint(max-lines): File has too many lines (3).
|
⚠ eslint(max-lines): File has too many lines (3).
|
||||||
╭─[max_lines.tsx:1:1]
|
╭─[max_lines.tsx:3:9]
|
||||||
1 │ var x; // inline comment
|
|
||||||
· ▲
|
|
||||||
2 │ var y;
|
2 │ var y;
|
||||||
|
3 │ var z;
|
||||||
|
· ▲
|
||||||
╰────
|
╰────
|
||||||
help: Maximum allowed is 2.
|
help: Maximum allowed is 2.
|
||||||
|
|
||||||
⚠ eslint(max-lines): File has too many lines (4).
|
⚠ eslint(max-lines): File has too many lines (4).
|
||||||
╭─[max_lines.tsx:1:1]
|
╭─[max_lines.tsx:4:9]
|
||||||
1 │ var x; /* inline comment
|
3 │ var y;
|
||||||
|
4 │ var z;
|
||||||
· ▲
|
· ▲
|
||||||
2 │ spanning multiple lines */
|
|
||||||
╰────
|
╰────
|
||||||
help: Maximum allowed is 2.
|
help: Maximum allowed is 2.
|
||||||
|
|
||||||
⚠ eslint(max-lines): File has too many lines (8).
|
⚠ eslint(max-lines): File has too many lines (8).
|
||||||
╭─[max_lines.tsx:1:1]
|
╭─[max_lines.tsx:8:18]
|
||||||
1 │ //a single line comment
|
7 │ really really
|
||||||
|
8 │ long comment*/
|
||||||
· ▲
|
· ▲
|
||||||
2 │ var xy;
|
|
||||||
╰────
|
╰────
|
||||||
help: Maximum allowed is 2.
|
help: Maximum allowed is 2.
|
||||||
|
|
||||||
|
|
@ -78,10 +78,10 @@ source: crates/oxc_linter/src/tester.rs
|
||||||
help: Maximum allowed is 0.
|
help: Maximum allowed is 0.
|
||||||
|
|
||||||
⚠ eslint(max-lines): File has too many lines (2).
|
⚠ eslint(max-lines): File has too many lines (2).
|
||||||
╭─[max_lines.tsx:1:1]
|
╭─[max_lines.tsx:2:3]
|
||||||
1 │
|
1 │
|
||||||
· ▲
|
|
||||||
2 │
|
2 │
|
||||||
|
· ▲
|
||||||
╰────
|
╰────
|
||||||
help: Maximum allowed is 0.
|
help: Maximum allowed is 0.
|
||||||
|
|
||||||
|
|
@ -93,147 +93,145 @@ source: crates/oxc_linter/src/tester.rs
|
||||||
help: Maximum allowed is 0.
|
help: Maximum allowed is 0.
|
||||||
|
|
||||||
⚠ eslint(max-lines): File has too many lines (2).
|
⚠ eslint(max-lines): File has too many lines (2).
|
||||||
╭─[max_lines.tsx:1:1]
|
╭─[max_lines.tsx:2:3]
|
||||||
1 │ A
|
1 │ A
|
||||||
· ▲
|
|
||||||
2 │
|
2 │
|
||||||
|
· ▲
|
||||||
╰────
|
╰────
|
||||||
help: Maximum allowed is 0.
|
help: Maximum allowed is 0.
|
||||||
|
|
||||||
⚠ eslint(max-lines): File has too many lines (2).
|
⚠ eslint(max-lines): File has too many lines (2).
|
||||||
╭─[max_lines.tsx:1:1]
|
╭─[max_lines.tsx:2:4]
|
||||||
1 │ A
|
1 │ A
|
||||||
· ▲
|
|
||||||
2 │
|
2 │
|
||||||
|
· ▲
|
||||||
╰────
|
╰────
|
||||||
help: Maximum allowed is 0.
|
help: Maximum allowed is 0.
|
||||||
|
|
||||||
⚠ eslint(max-lines): File has too many lines (2).
|
⚠ eslint(max-lines): File has too many lines (2).
|
||||||
╭─[max_lines.tsx:1:1]
|
╭─[max_lines.tsx:2:4]
|
||||||
1 │ A
|
1 │ A
|
||||||
· ▲
|
|
||||||
2 │
|
2 │
|
||||||
|
· ▲
|
||||||
╰────
|
╰────
|
||||||
help: Maximum allowed is 1.
|
help: Maximum allowed is 1.
|
||||||
|
|
||||||
⚠ eslint(max-lines): File has too many lines (3).
|
⚠ eslint(max-lines): File has too many lines (3).
|
||||||
╭─[max_lines.tsx:1:1]
|
╭─[max_lines.tsx:3:3]
|
||||||
1 │ A
|
|
||||||
· ▲
|
|
||||||
2 │
|
2 │
|
||||||
|
3 │
|
||||||
|
· ▲
|
||||||
╰────
|
╰────
|
||||||
help: Maximum allowed is 1.
|
help: Maximum allowed is 1.
|
||||||
|
|
||||||
⚠ eslint(max-lines): File has too many lines (4).
|
⚠ eslint(max-lines): File has too many lines (4).
|
||||||
╭─[max_lines.tsx:1:1]
|
╭─[max_lines.tsx:4:14]
|
||||||
1 │ var a = 'a';
|
3 │ var c;
|
||||||
|
4 │ console.log
|
||||||
· ▲
|
· ▲
|
||||||
2 │ var x
|
|
||||||
╰────
|
╰────
|
||||||
help: Maximum allowed is 2.
|
help: Maximum allowed is 2.
|
||||||
|
|
||||||
⚠ eslint(max-lines): File has too many lines (3).
|
⚠ eslint(max-lines): File has too many lines (3).
|
||||||
╭─[max_lines.tsx:1:1]
|
╭─[max_lines.tsx:3:6]
|
||||||
1 │ var a = 'a',
|
|
||||||
· ▲
|
|
||||||
2 │ c,
|
2 │ c,
|
||||||
|
3 │ x;
|
||||||
|
· ▲
|
||||||
╰────
|
╰────
|
||||||
help: Maximum allowed is 2.
|
help: Maximum allowed is 2.
|
||||||
|
|
||||||
⚠ eslint(max-lines): File has too many lines (4).
|
⚠ eslint(max-lines): File has too many lines (4).
|
||||||
╭─[max_lines.tsx:1:1]
|
╭─[max_lines.tsx:4:3]
|
||||||
1 │ var a = 'a',
|
3 │ x;
|
||||||
|
4 │
|
||||||
· ▲
|
· ▲
|
||||||
2 │ c,
|
|
||||||
╰────
|
╰────
|
||||||
help: Maximum allowed is 2.
|
help: Maximum allowed is 2.
|
||||||
|
|
||||||
⚠ eslint(max-lines): File has too many lines (6).
|
⚠ eslint(max-lines): File has too many lines (6).
|
||||||
╭─[max_lines.tsx:1:1]
|
╭─[max_lines.tsx:6:3]
|
||||||
1 │
|
5 │ x;
|
||||||
|
6 │
|
||||||
· ▲
|
· ▲
|
||||||
2 │
|
|
||||||
3 │ var a = 'a',
|
|
||||||
╰────
|
╰────
|
||||||
help: Maximum allowed is 2.
|
help: Maximum allowed is 2.
|
||||||
|
|
||||||
⚠ eslint(max-lines): File has too many lines (6).
|
⚠ eslint(max-lines): File has too many lines (6).
|
||||||
╭─[max_lines.tsx:1:1]
|
╭─[max_lines.tsx:6:14]
|
||||||
1 │ var a = 'a';
|
5 │ // some block
|
||||||
|
6 │ // comments
|
||||||
· ▲
|
· ▲
|
||||||
2 │ var x
|
|
||||||
╰────
|
╰────
|
||||||
help: Maximum allowed is 2.
|
help: Maximum allowed is 2.
|
||||||
|
|
||||||
⚠ eslint(max-lines): File has too many lines (5).
|
⚠ eslint(max-lines): File has too many lines (5).
|
||||||
╭─[max_lines.tsx:1:1]
|
╭─[max_lines.tsx:5:23]
|
||||||
1 │ var a = 'a';
|
4 │ console.log
|
||||||
|
5 │ /* block comments */
|
||||||
· ▲
|
· ▲
|
||||||
2 │ var x
|
|
||||||
╰────
|
╰────
|
||||||
help: Maximum allowed is 2.
|
help: Maximum allowed is 2.
|
||||||
|
|
||||||
⚠ eslint(max-lines): File has too many lines (6).
|
⚠ eslint(max-lines): File has too many lines (6).
|
||||||
╭─[max_lines.tsx:1:1]
|
╭─[max_lines.tsx:6:3]
|
||||||
1 │ var a = 'a';
|
5 │ /* block comments */
|
||||||
|
6 │
|
||||||
· ▲
|
· ▲
|
||||||
2 │ var x
|
|
||||||
╰────
|
╰────
|
||||||
help: Maximum allowed is 2.
|
help: Maximum allowed is 2.
|
||||||
|
|
||||||
⚠ eslint(max-lines): File has too many lines (7).
|
⚠ eslint(max-lines): File has too many lines (7).
|
||||||
╭─[max_lines.tsx:1:1]
|
╭─[max_lines.tsx:7:15]
|
||||||
1 │ var a = 'a';
|
6 │
|
||||||
|
7 │ comments */
|
||||||
· ▲
|
· ▲
|
||||||
2 │ var x
|
|
||||||
╰────
|
╰────
|
||||||
help: Maximum allowed is 2.
|
help: Maximum allowed is 2.
|
||||||
|
|
||||||
⚠ eslint(max-lines): File has too many lines (4).
|
⚠ eslint(max-lines): File has too many lines (4).
|
||||||
╭─[max_lines.tsx:1:1]
|
╭─[max_lines.tsx:4:13]
|
||||||
1 │ var a = 'a';
|
3 │
|
||||||
|
4 │ // comment
|
||||||
· ▲
|
· ▲
|
||||||
2 │
|
|
||||||
╰────
|
╰────
|
||||||
help: Maximum allowed is 2.
|
help: Maximum allowed is 2.
|
||||||
|
|
||||||
⚠ eslint(max-lines): File has too many lines (8).
|
⚠ eslint(max-lines): File has too many lines (8).
|
||||||
╭─[max_lines.tsx:1:1]
|
╭─[max_lines.tsx:8:3]
|
||||||
1 │ var a = 'a';
|
7 │
|
||||||
|
8 │
|
||||||
· ▲
|
· ▲
|
||||||
2 │ var x
|
|
||||||
╰────
|
╰────
|
||||||
help: Maximum allowed is 2.
|
help: Maximum allowed is 2.
|
||||||
|
|
||||||
⚠ eslint(max-lines): File has too many lines (8).
|
⚠ eslint(max-lines): File has too many lines (8).
|
||||||
╭─[max_lines.tsx:1:1]
|
╭─[max_lines.tsx:8:3]
|
||||||
1 │ var a = 'a';
|
7 │
|
||||||
|
8 │
|
||||||
· ▲
|
· ▲
|
||||||
2 │
|
|
||||||
╰────
|
╰────
|
||||||
help: Maximum allowed is 2.
|
help: Maximum allowed is 2.
|
||||||
|
|
||||||
⚠ eslint(max-lines): File has too many lines (6).
|
⚠ eslint(max-lines): File has too many lines (6).
|
||||||
╭─[max_lines.tsx:1:1]
|
╭─[max_lines.tsx:6:5]
|
||||||
1 │ var a = 'a';
|
5 │ console.log
|
||||||
|
6 │ //
|
||||||
· ▲
|
· ▲
|
||||||
2 │ //
|
|
||||||
╰────
|
╰────
|
||||||
help: Maximum allowed is 2.
|
help: Maximum allowed is 2.
|
||||||
|
|
||||||
⚠ eslint(max-lines): File has too many lines (9).
|
⚠ eslint(max-lines): File has too many lines (9).
|
||||||
╭─[max_lines.tsx:1:1]
|
╭─[max_lines.tsx:9:5]
|
||||||
1 │ // hello world
|
8 │ e,
|
||||||
|
9 │ f;
|
||||||
· ▲
|
· ▲
|
||||||
2 │ /*hello
|
|
||||||
╰────
|
╰────
|
||||||
help: Maximum allowed is 2.
|
help: Maximum allowed is 2.
|
||||||
|
|
||||||
⚠ eslint(max-lines): File has too many lines (11).
|
⚠ eslint(max-lines): File has too many lines (11).
|
||||||
╭─[max_lines.tsx:1:1]
|
╭─[max_lines.tsx:11:13]
|
||||||
1 │
|
10 │
|
||||||
|
11 │ // comment
|
||||||
· ▲
|
· ▲
|
||||||
2 │ var x = '';
|
|
||||||
3 │
|
|
||||||
╰────
|
╰────
|
||||||
help: Maximum allowed is 2.
|
help: Maximum allowed is 2.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue