Skip to content

Commit

Permalink
fix(linter/max-lines): point span to end of file for disable directiv…
Browse files Browse the repository at this point in the history
…e to work (#5117)

closes #4101
  • Loading branch information
Boshen authored and Dunqing committed Aug 23, 2024
1 parent e7bae98 commit 1e97f5b
Show file tree
Hide file tree
Showing 3 changed files with 108 additions and 99 deletions.
1 change: 1 addition & 0 deletions crates/oxc_linter/src/disable_directives.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
12 changes: 11 additions & 1 deletion crates/oxc_linter/src/rules/eslint/max_lines.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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)));
}
}
}
Expand Down Expand Up @@ -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![
Expand Down
194 changes: 96 additions & 98 deletions crates/oxc_linter/src/snapshots/max_lines.snap
Original file line number Diff line number Diff line change
Expand Up @@ -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]
1var xyz;
· ▲
╭─[max_lines.tsx:3:8]
2var xyz;
3var 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]
3var xy;
4var 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]
2var xy;
3var xy;
· ▲
╰────
help: Maximum allowed is 2.

eslint(max-lines): File has too many lines (5).
╭─[max_lines.tsx:1:1]
1var x;
· ▲
2
╭─[max_lines.tsx:5:9]
4
5var 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
8long comment*/
·
╰────
help: Maximum allowed is 2.

eslint(max-lines): File has too many lines (3).
╭─[max_lines.tsx:1:1]
1var x; // inline comment
· ▲
╭─[max_lines.tsx:3:9]
2var y;
3var z;
· ▲
╰────
help: Maximum allowed is 2.

eslint(max-lines): File has too many lines (4).
╭─[max_lines.tsx:1:1]
1var x; /* inline comment
· ▲
2 │ spanning multiple lines */
╭─[max_lines.tsx:4:9]
3 var y;
4var 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
8long comment*/
·
╰────
help: Maximum allowed is 2.

Expand All @@ -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.

Expand All @@ -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]
1A
· ▲
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]
1A
· ▲
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]
1A
· ▲
2
· ▲
╰────
help: Maximum allowed is 1.

eslint(max-lines): File has too many lines (3).
╭─[max_lines.tsx:1:1]
1A
· ▲
╭─[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]
1var a = 'a';
· ▲
2 var x
╭─[max_lines.tsx:4:14]
3 var c;
4console.log
·
╰────
help: Maximum allowed is 2.

eslint(max-lines): File has too many lines (3).
╭─[max_lines.tsx:1:1]
1var a = 'a',
· ▲
╭─[max_lines.tsx:3:6]
2c,
3x;
· ▲
╰────
help: Maximum allowed is 2.

eslint(max-lines): File has too many lines (4).
╭─[max_lines.tsx:1:1]
1var 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
3var a = 'a',
╭─[max_lines.tsx:6:3]
5x;
6
· ▲
╰────
help: Maximum allowed is 2.

eslint(max-lines): File has too many lines (6).
╭─[max_lines.tsx:1:1]
1var 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]
1var 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]
1var 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]
1var a = 'a';
· ▲
2 var x
╭─[max_lines.tsx:7:15]
6
7comments */
·
╰────
help: Maximum allowed is 2.

eslint(max-lines): File has too many lines (4).
╭─[max_lines.tsx:1:1]
1var 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]
1var 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]
1var 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]
1var 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,
9f;
·
╰────
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.

0 comments on commit 1e97f5b

Please sign in to comment.