fix(linter): change no-var-requires to severity warning

This commit is contained in:
Boshen 2023-07-21 11:08:33 +08:00
parent 73338cb377
commit 06aac508f8
No known key found for this signature in database
GPG key ID: A69211CB52CC6548
2 changed files with 29 additions and 28 deletions

View file

@ -12,7 +12,7 @@ use crate::{context::LintContext, rule::Rule, AstNode};
#[error(
"typescript-eslint(no-var-requires): Use ES6 style imports or import foo = require(\"foo\") imports."
)]
#[diagnostic(severity(error))]
#[diagnostic(severity(warning))]
struct NoVarRequiresDiagnostic(#[label] pub Span);
#[derive(Debug, Default, Clone)]
@ -20,13 +20,13 @@ pub struct NoVarRequires;
declare_oxc_lint!(
/// ### What it does
///
///
/// Disallow `require` statements except in import statements
///
///
/// ### Why is this bad?
///
///
/// In other words, the use of forms such as var foo = require("foo") are banned. Instead use ES6 style imports or import foo = require("foo") imports.
///
///
/// ```typescript
/// var foo = require('foo');
/// const foo = require('foo');
@ -44,7 +44,7 @@ impl Rule for NoVarRequires {
if let AstKind::CallExpression(expr) = node.kind() && expr.is_require_call() {
if ctx.scopes().get_bindings(node.scope_id()).contains_key("require") {
return;
}
}
if let Some(parent_node) = ctx.nodes().parent_node(node.id()) {
if let AstKind::Argument(_) = parent_node.kind() {
@ -64,12 +64,15 @@ impl Rule for NoVarRequires {
}
fn is_target_node(node_kind: &AstKind<'_>) -> bool {
matches!(node_kind, AstKind::CallExpression(_)
| AstKind::MemberExpression(_)
| AstKind::NewExpression(_)
| AstKind::TSAsExpression(_)
| AstKind::TSTypeAssertion(_)
| AstKind::VariableDeclarator(_))
matches!(
node_kind,
AstKind::CallExpression(_)
| AstKind::MemberExpression(_)
| AstKind::NewExpression(_)
| AstKind::TSAsExpression(_)
| AstKind::TSTypeAssertion(_)
| AstKind::VariableDeclarator(_)
)
}
#[test]
@ -98,15 +101,13 @@ fn test() {
"let foo = trick(require?.('foo'));",
"let foo = trick?.(require('foo'));",
"const foo = require('./foo.json') as Foo;",
// Because of TypeScript disallows angle bracket type assertions in .tsx files, comment out this below case all tests parsing as tsx.
// "const foo = <Foo>require('./foo.json');",
"const foo: Foo = require('./foo.json').default;",
r#"
const configValidator = new Validator(require('./a.json'));
configValidator.addSchema(require('./a.json'));
"#
"#,
];
Tester::new_without_config(NoVarRequires::NAME, pass, fail).test_and_snapshot();

View file

@ -2,73 +2,73 @@
source: crates/oxc_linter/src/tester.rs
expression: no_var_requires
---
× typescript-eslint(no-var-requires): Use ES6 style imports or import foo = require("foo") imports.
typescript-eslint(no-var-requires): Use ES6 style imports or import foo = require("foo") imports.
╭─[no_var_requires.tsx:1:1]
1 │ var foo = require('foo');
· ──────────────
╰────
× typescript-eslint(no-var-requires): Use ES6 style imports or import foo = require("foo") imports.
typescript-eslint(no-var-requires): Use ES6 style imports or import foo = require("foo") imports.
╭─[no_var_requires.tsx:1:1]
1 │ const foo = require('foo');
· ──────────────
╰────
× typescript-eslint(no-var-requires): Use ES6 style imports or import foo = require("foo") imports.
typescript-eslint(no-var-requires): Use ES6 style imports or import foo = require("foo") imports.
╭─[no_var_requires.tsx:1:1]
1 │ let foo = require('foo');
· ──────────────
╰────
× typescript-eslint(no-var-requires): Use ES6 style imports or import foo = require("foo") imports.
typescript-eslint(no-var-requires): Use ES6 style imports or import foo = require("foo") imports.
╭─[no_var_requires.tsx:1:1]
1 │ let foo = trick(require('foo'));
· ──────────────
╰────
× typescript-eslint(no-var-requires): Use ES6 style imports or import foo = require("foo") imports.
typescript-eslint(no-var-requires): Use ES6 style imports or import foo = require("foo") imports.
╭─[no_var_requires.tsx:1:1]
1 │ var foo = require?.('foo');
· ────────────────
╰────
× typescript-eslint(no-var-requires): Use ES6 style imports or import foo = require("foo") imports.
typescript-eslint(no-var-requires): Use ES6 style imports or import foo = require("foo") imports.
╭─[no_var_requires.tsx:1:1]
1 │ const foo = require?.('foo');
· ────────────────
╰────
× typescript-eslint(no-var-requires): Use ES6 style imports or import foo = require("foo") imports.
typescript-eslint(no-var-requires): Use ES6 style imports or import foo = require("foo") imports.
╭─[no_var_requires.tsx:1:1]
1 │ let foo = require?.('foo');
· ────────────────
╰────
× typescript-eslint(no-var-requires): Use ES6 style imports or import foo = require("foo") imports.
typescript-eslint(no-var-requires): Use ES6 style imports or import foo = require("foo") imports.
╭─[no_var_requires.tsx:1:1]
1 │ let foo = trick(require?.('foo'));
· ────────────────
╰────
× typescript-eslint(no-var-requires): Use ES6 style imports or import foo = require("foo") imports.
typescript-eslint(no-var-requires): Use ES6 style imports or import foo = require("foo") imports.
╭─[no_var_requires.tsx:1:1]
1 │ let foo = trick?.(require('foo'));
· ──────────────
╰────
× typescript-eslint(no-var-requires): Use ES6 style imports or import foo = require("foo") imports.
typescript-eslint(no-var-requires): Use ES6 style imports or import foo = require("foo") imports.
╭─[no_var_requires.tsx:1:1]
1 │ const foo = require('./foo.json') as Foo;
· ─────────────────────
╰────
× typescript-eslint(no-var-requires): Use ES6 style imports or import foo = require("foo") imports.
typescript-eslint(no-var-requires): Use ES6 style imports or import foo = require("foo") imports.
╭─[no_var_requires.tsx:1:1]
1 │ const foo: Foo = require('./foo.json').default;
· ─────────────────────
╰────
× typescript-eslint(no-var-requires): Use ES6 style imports or import foo = require("foo") imports.
typescript-eslint(no-var-requires): Use ES6 style imports or import foo = require("foo") imports.
╭─[no_var_requires.tsx:1:1]
1 │
2 │ const configValidator = new Validator(require('./a.json'));
@ -76,7 +76,7 @@ expression: no_var_requires
3 │ configValidator.addSchema(require('./a.json'));
╰────
× typescript-eslint(no-var-requires): Use ES6 style imports or import foo = require("foo") imports.
typescript-eslint(no-var-requires): Use ES6 style imports or import foo = require("foo") imports.
╭─[no_var_requires.tsx:2:1]
2 │ const configValidator = new Validator(require('./a.json'));
3 │ configValidator.addSchema(require('./a.json'));