diff --git a/crates/oxc_linter/src/rules/typescript/no_var_requires.rs b/crates/oxc_linter/src/rules/typescript/no_var_requires.rs index 9fbdba70b..ba1f10f64 100644 --- a/crates/oxc_linter/src/rules/typescript/no_var_requires.rs +++ b/crates/oxc_linter/src/rules/typescript/no_var_requires.rs @@ -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 = 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(); diff --git a/crates/oxc_linter/src/snapshots/no_var_requires.snap b/crates/oxc_linter/src/snapshots/no_var_requires.snap index eaa5621ed..6d4671421 100644 --- a/crates/oxc_linter/src/snapshots/no_var_requires.snap +++ b/crates/oxc_linter/src/snapshots/no_var_requires.snap @@ -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'));