From ef5713d6008d5c006994d5b8d61c9985e34da018 Mon Sep 17 00:00:00 2001 From: Boshen Date: Sat, 24 Feb 2024 17:50:30 +0800 Subject: [PATCH] chore(linter): add tests no import/no-deprecated (#2489) --- .../src/rules/import/no_deprecated.rs | 79 ++++++++++++++++--- .../src/snapshots/no_deprecated.snap | 5 ++ 2 files changed, 75 insertions(+), 9 deletions(-) create mode 100644 crates/oxc_linter/src/snapshots/no_deprecated.snap diff --git a/crates/oxc_linter/src/rules/import/no_deprecated.rs b/crates/oxc_linter/src/rules/import/no_deprecated.rs index fc22d2e94..0a4a758d9 100644 --- a/crates/oxc_linter/src/rules/import/no_deprecated.rs +++ b/crates/oxc_linter/src/rules/import/no_deprecated.rs @@ -12,13 +12,14 @@ use crate::{context::LintContext, rule::Rule}; #[diagnostic(severity(warning), help(""))] struct NoDeprecatedDiagnostic(Atom, #[label] pub Span); -/// +/// #[derive(Debug, Default, Clone)] pub struct NoDeprecated; declare_oxc_lint!( /// ### What it does - /// TODO + /// + /// Reports use of a deprecated name, as indicated by a JSDoc block with a @deprecated tag or TomDoc Deprecated: comment. NoDeprecated, nursery ); @@ -29,14 +30,74 @@ impl Rule for NoDeprecated { #[test] fn test() { - // use crate::tester::Tester; + use crate::tester::Tester; - // let pass = vec![]; + let pass = vec![ + r"import { x } from './fake'", + r"import bar from './bar'", + r"import { fine } from './deprecated'", + r"import { _undocumented } from './deprecated'", + r"import { fn } from './deprecated'", + r"import { fine } from './tomdoc-deprecated'", + r"import { _undocumented } from './tomdoc-deprecated'", + r"import * as depd from './deprecated'", + r"import * as depd from './deprecated'; console.log(depd.fine())", + r"import { deepDep } from './deep-deprecated'", + r"import { deepDep } from './deep-deprecated'; console.log(deepDep.fine())", + r"import { deepDep } from './deep-deprecated'; function x(deepDep) { console.log(deepDep.MY_TERRIBLE_ACTION) }", + r"for (let { foo, bar } of baz) {}", + r"for (let [ foo, bar ] of baz) {}", + r"const { x, y } = bar", + r"const { x, y, ...z } = bar", + r"let x; export { x }", + r"let x; export { x as y }", + r"export const x = null", + r"export var x = null", + r"export let x = null", + r"export default x", + r"export default class x {}", + r#"import json from "./data.json""#, + r#"import foo from "./foobar.json";"#, + r#"import foo from "./foobar";"#, + r#"import { foo } from "./issue-370-commonjs-namespace/bar""#, + r#"export * from "./issue-370-commonjs-namespace/bar""#, + r#"import * as a from "./commonjs-namespace/a"; a.b"#, + r#"import { foo } from "./ignore.invalid.extension""#, + // hoisting + r#"function x(deepDep) { console.log(deepDep.MY_TERRIBLE_ACTION) } import { deepDep } from "./deep-deprecated""#, + // TypeScript + r#"import * as hasDeprecated from "./ts-deprecated.ts""#, + ]; - // let fail = vec![]; + let fail = vec![ + // r#"import './malformed.js'"#, + // r#"import { fn } from './deprecated'"#, + // r#"import TerribleClass from './deprecated'"#, + // r#"import { MY_TERRIBLE_ACTION } from './deprecated'"#, + // r#"import { fn } from './deprecated'"#, + // r#"import { fn } from './tomdoc-deprecated'"#, + // r#"import TerribleClass from './tomdoc-deprecated'"#, + // r#"import { MY_TERRIBLE_ACTION } from './tomdoc-deprecated'"#, + // r#"import { MY_TERRIBLE_ACTION } from './deprecated'; function shadow(MY_TERRIBLE_ACTION) { console.log(MY_TERRIBLE_ACTION); }"#, + // r#"import { MY_TERRIBLE_ACTION, fine } from './deprecated'; console.log(fine)"#, + // r#"import { MY_TERRIBLE_ACTION } from './deprecated'; console.log(MY_TERRIBLE_ACTION)"#, + // r#"import { MY_TERRIBLE_ACTION } from './deprecated'; console.log(someOther.MY_TERRIBLE_ACTION)"#, + // r#"import { MY_TERRIBLE_ACTION } from './deprecated'; console.log(MY_TERRIBLE_ACTION.whatever())"#, + // r#"import { MY_TERRIBLE_ACTION } from './deprecated'; console.log(MY_TERRIBLE_ACTION(this, is, the, worst))"#, + // r#"import Thing from './deprecated-file'"#, + // r#"import Thing from './deprecated-file'; console.log(other.Thing)"#, + // r#"import * as depd from './deprecated'; console.log(depd.MY_TERRIBLE_ACTION)"#, + // r#"import * as deep from './deep-deprecated'; console.log(deep.deepDep.MY_TERRIBLE_ACTION)"#, + // r#"import { deepDep } from './deep-deprecated'; console.log(deepDep.MY_TERRIBLE_ACTION)"#, + // r#"import { deepDep } from './deep-deprecated'; function x(deepNDep) { console.log(deepDep.MY_TERRIBLE_ACTION) }"#, + // // hoisting + // r#"console.log(MY_TERRIBLE_ACTION); import { MY_TERRIBLE_ACTION } from "./deprecated""#, + // // TypeScript + // r#"import { foo } from "./ts-deprecated.ts"; console.log(foo())"#, + ]; - // Tester::new(NoDeprecated::NAME, pass, fail) - // .change_rule_path("index.js") - // .with_import_plugin(true) - // .test_and_snapshot(); + Tester::new(NoDeprecated::NAME, pass, fail) + .change_rule_path("index.js") + .with_import_plugin(true) + .test_and_snapshot(); } diff --git a/crates/oxc_linter/src/snapshots/no_deprecated.snap b/crates/oxc_linter/src/snapshots/no_deprecated.snap new file mode 100644 index 000000000..f8b295671 --- /dev/null +++ b/crates/oxc_linter/src/snapshots/no_deprecated.snap @@ -0,0 +1,5 @@ +--- +source: crates/oxc_linter/src/tester.rs +expression: no_deprecated +--- +