Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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]
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]
3var 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]
1var 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]
1var 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.

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]
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]
1var 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]
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 │
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]
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
7 │ comments */
·
╰────
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,
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.