Skip to content

Commit

Permalink
Merge branch 'main' into feat/issue5362-keyword-spacing---support-imp…
Browse files Browse the repository at this point in the history
…ort-type-syntax
  • Loading branch information
Omri Luzon committed Nov 14, 2022
2 parents 304d88c + f25a94f commit 8fbe5fc
Show file tree
Hide file tree
Showing 4 changed files with 164 additions and 3 deletions.
5 changes: 3 additions & 2 deletions packages/eslint-plugin/src/rules/no-shadow.ts
Expand Up @@ -147,8 +147,9 @@ export default util.createRule<Options, MessageIds>({
return false;
}

const id = variable.identifiers[0];
return util.isFunctionType(id.parent);
return variable.defs.every(
def => def.node.type === AST_NODE_TYPES.TSFunctionType,
);
}

function isGenericOfStaticMethod(
Expand Down
5 changes: 4 additions & 1 deletion packages/eslint-plugin/src/rules/promise-function-async.ts
Expand Up @@ -175,7 +175,10 @@ export default util.createRule<Options, MessageIds>({
}

// if current token is a keyword like `static` or `public` then skip it
while (keyToken.type === AST_TOKEN_TYPES.Keyword) {
while (
keyToken.type === AST_TOKEN_TYPES.Keyword &&
keyToken.range[0] < method.key.range[0]
) {
keyToken = sourceCode.getTokenAfter(keyToken)!;
}

Expand Down
75 changes: 75 additions & 0 deletions packages/eslint-plugin/tests/rules/no-shadow/no-shadow.test.ts
Expand Up @@ -12,6 +12,25 @@ const ruleTester = new RuleTester({

ruleTester.run('no-shadow TS tests', rule, {
valid: [
'function foo<T = (arg: any) => any>(arg: T) {}',
'function foo<T = ([arg]: [any]) => any>(arg: T) {}',
'function foo<T = ({ args }: { args: any }) => any>(arg: T) {}',
'function foo<T = (...args: any[]) => any>(fn: T, args: any[]) {}',
'function foo<T extends (...args: any[]) => any>(fn: T, args: any[]) {}',
'function foo<T extends (...args: any[]) => any>(fn: T, ...args: any[]) {}',
'function foo<T extends ([args]: any[]) => any>(fn: T, args: any[]) {}',
'function foo<T extends ([...args]: any[]) => any>(fn: T, args: any[]) {}',
'function foo<T extends ({ args }: { args: any }) => any>(fn: T, args: any) {}',
`
function foo<T extends (id: string, ...args: any[]) => any>(
fn: T,
...args: any[]
) {}
`,
`
type Args = 1;
function foo<T extends (Args: any) => void>(arg: T) {}
`,
// nested conditional types
`
export type ArrayInput<Func> = Func extends (arg0: Array<infer T>) => any
Expand Down Expand Up @@ -375,6 +394,22 @@ type T = 1;
},
{
code: `
type T = 1;
function foo<T>(arg: T) {}
`,
errors: [
{
messageId: 'noShadow',
data: {
name: 'T',
shadowedLine: 2,
shadowedColumn: 6,
},
},
],
},
{
code: `
function foo<T>() {
return function <T>() {};
}
Expand All @@ -392,6 +427,22 @@ function foo<T>() {
},
{
code: `
type T = string;
function foo<T extends (arg: any) => void>(arg: T) {}
`,
errors: [
{
messageId: 'noShadow',
data: {
name: 'T',
shadowedLine: 2,
shadowedColumn: 6,
},
},
],
},
{
code: `
const x = 1;
{
type x = string;
Expand Down Expand Up @@ -703,5 +754,29 @@ let y;
},
],
},
{
code: `
function foo<T extends (...args: any[]) => any>(fn: T, args: any[]) {}
`,
options: [
{
ignoreTypeValueShadow: false,
builtinGlobals: true,
},
],
globals: {
args: 'writable',
},
errors: [
{
messageId: 'noShadowGlobal',
data: {
name: 'args',
shadowedLine: 2,
shadowedColumn: 5,
},
},
],
},
],
});
82 changes: 82 additions & 0 deletions packages/eslint-plugin/tests/rules/promise-function-async.test.ts
Expand Up @@ -102,6 +102,13 @@ const invalidAsyncModifiers = {
constructor() {}
}
`,
`
class Foo {
async catch<T>(arg: Promise<T>) {
return arg;
}
}
`,
{
code: `
function returnsAny(): any {
Expand Down Expand Up @@ -670,5 +677,80 @@ class Test {
}
`,
},
// https://github.com/typescript-eslint/typescript-eslint/issues/5729
{
code: `
class Foo {
catch() {
return Promise.resolve(1);
}
public default() {
return Promise.resolve(2);
}
@decorator
private case<T>() {
return Promise.resolve(3);
}
}
`,
output: `
class Foo {
async catch() {
return Promise.resolve(1);
}
public async default() {
return Promise.resolve(2);
}
@decorator
private async case<T>() {
return Promise.resolve(3);
}
}
`,
errors: [
{
line: 3,
column: 3,
messageId,
},
{
line: 7,
column: 3,
messageId,
},
{
line: 12,
column: 3,
messageId,
},
],
},
{
code: `
const foo = {
catch() {
return Promise.resolve(1);
},
};
`,
output: `
const foo = {
async catch() {
return Promise.resolve(1);
},
};
`,
errors: [
{
line: 3,
column: 3,
messageId,
},
],
},
],
});

0 comments on commit 8fbe5fc

Please sign in to comment.