From 80683cb72d867d186b1165dbaf9133b5d191dd73 Mon Sep 17 00:00:00 2001 From: Codeco Date: Tue, 9 Jun 2020 17:40:16 -0300 Subject: [PATCH 1/4] feat(eslint-plugin): [space-before-function-paren] enable rule to abstract function (#2192) --- .../src/rules/space-before-function-paren.ts | 17 +++++++++++------ .../rules/space-before-function-paren.test.ts | 5 +++++ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/packages/eslint-plugin/src/rules/space-before-function-paren.ts b/packages/eslint-plugin/src/rules/space-before-function-paren.ts index 41a817938da..204a6097d3d 100644 --- a/packages/eslint-plugin/src/rules/space-before-function-paren.ts +++ b/packages/eslint-plugin/src/rules/space-before-function-paren.ts @@ -75,9 +75,10 @@ export default util.createRule({ node: | TSESTree.ArrowFunctionExpression | TSESTree.FunctionDeclaration - | TSESTree.FunctionExpression, + | TSESTree.FunctionExpression + | TSESTree.TSAbstractMethodDefinition, ): boolean { - if (node.id) { + if (Reflect.get(node, 'id')) { return true; } @@ -85,6 +86,7 @@ export default util.createRule({ return ( parent.type === AST_NODE_TYPES.MethodDefinition || + parent.type === AST_NODE_TYPES.TSAbstractMethodDefinition || (parent.type === AST_NODE_TYPES.Property && (parent.kind === 'get' || parent.kind === 'set' || parent.method)) ); @@ -99,7 +101,8 @@ export default util.createRule({ node: | TSESTree.ArrowFunctionExpression | TSESTree.FunctionDeclaration - | TSESTree.FunctionExpression, + | TSESTree.FunctionExpression + | TSESTree.TSAbstractMethodDefinition, ): FuncOption { if (node.type === AST_NODE_TYPES.ArrowFunctionExpression) { // Always ignore non-async functions and arrow functions without parens, e.g. async foo => bar @@ -113,7 +116,7 @@ export default util.createRule({ return overrideConfig.named ?? baseConfig; // `generator-star-spacing` should warn anonymous generators. E.g. `function* () {}` - } else if (!node.generator) { + } else if (!Reflect.get(node, 'generator')) { return overrideConfig.anonymous ?? baseConfig; } @@ -129,7 +132,8 @@ export default util.createRule({ node: | TSESTree.ArrowFunctionExpression | TSESTree.FunctionDeclaration - | TSESTree.FunctionExpression, + | TSESTree.FunctionExpression + | TSESTree.TSAbstractMethodDefinition, ): void { const functionConfig = getConfigForFunction(node); @@ -161,7 +165,7 @@ export default util.createRule({ } else if ( !hasSpacing && functionConfig === 'always' && - (!node.typeParameters || node.id) + (!node.typeParameters || Reflect.get(node, 'id')) ) { context.report({ node, @@ -176,6 +180,7 @@ export default util.createRule({ ArrowFunctionExpression: checkFunction, FunctionDeclaration: checkFunction, FunctionExpression: checkFunction, + TSAbstractMethodDefinition: checkFunction, }; }, }); diff --git a/packages/eslint-plugin/tests/rules/space-before-function-paren.test.ts b/packages/eslint-plugin/tests/rules/space-before-function-paren.test.ts index 944ea672f1f..35fd888c3aa 100644 --- a/packages/eslint-plugin/tests/rules/space-before-function-paren.test.ts +++ b/packages/eslint-plugin/tests/rules/space-before-function-paren.test.ts @@ -148,6 +148,11 @@ ruleTester.run('space-before-function-paren', rule, { options: ['never'], parserOptions: { ecmaVersion: 8 }, }, + 'abstract class Foo { constructor () {} abstract method () }', + { + code: 'abstract class Foo { constructor() {} abstract method() }', + options: ['never'], + } ], invalid: [ From 54e952cb91af276b68a2e3c03a05592d8db40b9b Mon Sep 17 00:00:00 2001 From: Codeco Date: Tue, 9 Jun 2020 17:58:49 -0300 Subject: [PATCH 2/4] feat(eslint-plugin): [space-before-function-paren] enable rule to abstract function (#2192) --- .../tests/rules/space-before-function-paren.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/eslint-plugin/tests/rules/space-before-function-paren.test.ts b/packages/eslint-plugin/tests/rules/space-before-function-paren.test.ts index 35fd888c3aa..5de3b0e6378 100644 --- a/packages/eslint-plugin/tests/rules/space-before-function-paren.test.ts +++ b/packages/eslint-plugin/tests/rules/space-before-function-paren.test.ts @@ -152,7 +152,7 @@ ruleTester.run('space-before-function-paren', rule, { { code: 'abstract class Foo { constructor() {} abstract method() }', options: ['never'], - } + }, ], invalid: [ From 075c9a2fac17fdfbdb10f60fb46615eaade189f0 Mon Sep 17 00:00:00 2001 From: Codeco Date: Mon, 22 Jun 2020 00:46:43 -0300 Subject: [PATCH 3/4] feat(eslint-plugin): [space-before-function-paren] handle abstract functions --- .../eslint-plugin/src/rules/space-before-function-paren.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/eslint-plugin/src/rules/space-before-function-paren.ts b/packages/eslint-plugin/src/rules/space-before-function-paren.ts index 204a6097d3d..6799541c54b 100644 --- a/packages/eslint-plugin/src/rules/space-before-function-paren.ts +++ b/packages/eslint-plugin/src/rules/space-before-function-paren.ts @@ -78,7 +78,7 @@ export default util.createRule({ | TSESTree.FunctionExpression | TSESTree.TSAbstractMethodDefinition, ): boolean { - if (Reflect.get(node, 'id')) { + if ('id' in node && node.id != null) { return true; } @@ -116,7 +116,7 @@ export default util.createRule({ return overrideConfig.named ?? baseConfig; // `generator-star-spacing` should warn anonymous generators. E.g. `function* () {}` - } else if (!Reflect.get(node, 'generator')) { + } else if (!('generator' in node) || node.generator == false) { return overrideConfig.anonymous ?? baseConfig; } @@ -165,7 +165,7 @@ export default util.createRule({ } else if ( !hasSpacing && functionConfig === 'always' && - (!node.typeParameters || Reflect.get(node, 'id')) + (!node.typeParameters || ('id' in node && node != null)) ) { context.report({ node, From 510f5f3741a2700ee0a87bff391369b5de58d60e Mon Sep 17 00:00:00 2001 From: Brad Zacher Date: Mon, 6 Jul 2020 09:48:39 -0700 Subject: [PATCH 4/4] eqeqeq --- packages/eslint-plugin/src/rules/space-before-function-paren.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/eslint-plugin/src/rules/space-before-function-paren.ts b/packages/eslint-plugin/src/rules/space-before-function-paren.ts index 6799541c54b..f06327e2dd5 100644 --- a/packages/eslint-plugin/src/rules/space-before-function-paren.ts +++ b/packages/eslint-plugin/src/rules/space-before-function-paren.ts @@ -116,7 +116,7 @@ export default util.createRule({ return overrideConfig.named ?? baseConfig; // `generator-star-spacing` should warn anonymous generators. E.g. `function* () {}` - } else if (!('generator' in node) || node.generator == false) { + } else if (!('generator' in node) || node.generator === false) { return overrideConfig.anonymous ?? baseConfig; }