fix(linter): do not run getter-return in typescript (#3693)

This commit is contained in:
Boshen 2024-06-15 23:44:37 +08:00 committed by GitHub
parent 750a534455
commit de0690f2e5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 47 additions and 77 deletions

View file

@ -54,6 +54,10 @@ declare_oxc_lint!(
impl Rule for GetterReturn {
fn run<'a>(&self, node: &AstNode<'a>, ctx: &LintContext<'a>) {
// https://eslint.org/docs/latest/rules/getter-return#handled_by_typescript
if ctx.source_type().is_typescript() {
return;
}
match node.kind() {
AstKind::Function(func) if !func.is_typescript_syntax() => {
self.run_diagnostic(node, ctx, func.span);
@ -350,54 +354,12 @@ fn test() {
("foo.defineProperties(null, { bar: { get() {} } });", None),
("foo.create(null, { bar: { get() {} } });", None),
("var foo = { get willThrowSoValid() { throw MyException() } };", None),
("export abstract class Foo { protected abstract get foobar(): number; }", None),
(
"class T {
theme: number;
get type(): number {
switch (theme) {
case 1: return 1;
case 2: return 2;
default: return 3;
}
throw new Error('test')
}
}",
None,
),
(
"class T {
theme: number;
get type(): number {
switch (theme) {
case 1: return 1;
case 2: return 2;
default: return 3;
}
}
}",
None,
),
(
"const originalClearTimeout = targetWindow.clearTimeout;
Object.defineProperty(targetWindow, 'vscodeOriginalClearTimeout', { get: () => originalClearTimeout });
",
None,
),
(
"class T {
get width(): number | undefined {
const val = undefined
if (!val) {
return;
}
return val * val;
}
}",
None,
),
("function fn(): void { console.log('test') }", None),
];
let fail = vec![
@ -437,5 +399,7 @@ fn test() {
("(Object?.create)(foo, { bar: { get: function (){} } });", Some(serde_json::json!([{ "allowImplicit": true }]))),
];
Tester::new(GetterReturn::NAME, pass, fail).test_and_snapshot();
Tester::new(GetterReturn::NAME, pass, fail)
.change_rule_path_extension("js")
.test_and_snapshot();
}

View file

@ -3,14 +3,14 @@ source: crates/oxc_linter/src/tester.rs
expression: getter_return
---
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:20]
╭─[getter_return.js:1:20]
1 │ var foo = { get bar() {} };
· ─────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:2:6]
╭─[getter_return.js:2:6]
1 │ var foo = { get
2 │ bar () {} };
· ─────
@ -18,49 +18,49 @@ expression: getter_return
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:20]
╭─[getter_return.js:1:20]
1 │ var foo = { get bar(){if(baz) {return true;}} };
· ──────────────────────────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:20]
╭─[getter_return.js:1:20]
1 │ var foo = { get bar() { ~function () {return true;}} };
· ─────────────────────────────────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:20]
╭─[getter_return.js:1:20]
1 │ var foo = { get bar() { return; } };
· ──────────────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:20]
╭─[getter_return.js:1:20]
1 │ var foo = { get bar() {} };
· ─────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:20]
╭─[getter_return.js:1:20]
1 │ var foo = { get bar() {if (baz) {return;}} };
· ───────────────────────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:20]
╭─[getter_return.js:1:20]
1 │ class foo { get bar(){} }
· ────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:3:4]
╭─[getter_return.js:3:4]
2 │ static get
3 │ bar(){} }
· ────
@ -68,175 +68,175 @@ expression: getter_return
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:20]
╭─[getter_return.js:1:20]
1 │ class foo { get bar(){ if (baz) { return true; }}}
· ──────────────────────────────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:20]
╭─[getter_return.js:1:20]
1 │ class foo { get bar(){ ~function () { return true; }()}}
· ────────────────────────────────────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:20]
╭─[getter_return.js:1:20]
1 │ class foo { get bar(){} }
· ────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:20]
╭─[getter_return.js:1:20]
1 │ class foo { get bar(){if (baz) {return true;} } }
· ────────────────────────────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:42]
╭─[getter_return.js:1:42]
1 │ Object.defineProperty(foo, 'bar', { get: function (){}});
· ─────────────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:42]
╭─[getter_return.js:1:42]
1 │ Object.defineProperty(foo, 'bar', { get: function getfoo (){}});
· ────────────────────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:40]
╭─[getter_return.js:1:40]
1 │ Object.defineProperty(foo, 'bar', { get(){} });
· ────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:42]
╭─[getter_return.js:1:42]
1 │ Object.defineProperty(foo, 'bar', { get: () => {}});
· ────────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:42]
╭─[getter_return.js:1:42]
1 │ Object.defineProperty(foo, "bar", { get: function (){if(bar) {return true;}}});
· ───────────────────────────────────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:42]
╭─[getter_return.js:1:42]
1 │ Object.defineProperty(foo, "bar", { get: function (){ ~function () { return true; }()}});
· ─────────────────────────────────────────────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:43]
╭─[getter_return.js:1:43]
1 │ Reflect.defineProperty(foo, 'bar', { get: function (){}});
· ─────────────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:34]
╭─[getter_return.js:1:34]
1 │ Object.create(foo, { bar: { get: function() {} } })
· ─────────────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:32]
╭─[getter_return.js:1:32]
1 │ Object.create(foo, { bar: { get() {} } })
· ─────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:34]
╭─[getter_return.js:1:34]
1 │ Object.create(foo, { bar: { get: () => {} } })
· ────────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:44]
╭─[getter_return.js:1:44]
1 │ Object.defineProperties(foo, { bar: { get: function () {}} });
· ──────────────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:44]
╭─[getter_return.js:1:44]
1 │ Object.defineProperties(foo, { bar: { get: function (){if(bar) {return true;}}}});
· ───────────────────────────────────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:44]
╭─[getter_return.js:1:44]
1 │ Object.defineProperties(foo, { bar: { get: function () {~function () { return true; }()}} });
· ─────────────────────────────────────────────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:42]
╭─[getter_return.js:1:42]
1 │ Object.defineProperty(foo, "bar", { get: function (){}});
· ─────────────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:34]
╭─[getter_return.js:1:34]
1 │ Object.create(foo, { bar: { get: function (){} } });
· ─────────────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:43]
╭─[getter_return.js:1:43]
1 │ Reflect.defineProperty(foo, "bar", { get: function (){}});
· ─────────────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:43]
╭─[getter_return.js:1:43]
1 │ Object?.defineProperty(foo, 'bar', { get: function (){} });
· ─────────────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:45]
╭─[getter_return.js:1:45]
1 │ (Object?.defineProperty)(foo, 'bar', { get: function (){} });
· ─────────────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:43]
╭─[getter_return.js:1:43]
1 │ Object?.defineProperty(foo, 'bar', { get: function (){} });
· ─────────────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:45]
╭─[getter_return.js:1:45]
1 │ (Object?.defineProperty)(foo, 'bar', { get: function (){} });
· ─────────────
╰────
help: Return a value from all code paths in getter.
⚠ eslint(getter-return): Expected to always return a value in getter.
╭─[getter_return.tsx:1:37]
╭─[getter_return.js:1:37]
1 │ (Object?.create)(foo, { bar: { get: function (){} } });
· ─────────────
╰────

View file

@ -134,6 +134,12 @@ impl Tester {
self
}
/// Change the extension of the path
pub fn change_rule_path_extension(mut self, ext: &str) -> Self {
self.rule_path = self.rule_path.with_extension(ext);
self
}
pub fn with_import_plugin(mut self, yes: bool) -> Self {
self.import_plugin = yes;
self