From 3fb74d26d3e97e99eee59644265b0ab669e5a560 Mon Sep 17 00:00:00 2001 From: Matt Wilkinson Date: Tue, 14 Nov 2023 11:26:51 +0000 Subject: [PATCH] Fix prefer-class-properties to ignore constructor overload declarations --- .changeset/healthy-llamas-mix.md | 5 +++++ .../lib/rules/prefer-class-properties.js | 3 ++- .../lib/rules/prefer-class-properties.test.js | 21 ++++++++++++++++++- 3 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 .changeset/healthy-llamas-mix.md diff --git a/.changeset/healthy-llamas-mix.md b/.changeset/healthy-llamas-mix.md new file mode 100644 index 00000000..619cced5 --- /dev/null +++ b/.changeset/healthy-llamas-mix.md @@ -0,0 +1,5 @@ +--- +'@shopify/eslint-plugin': patch +--- + +Fix prefer-class-properties to ignore empty constructor overload declarations diff --git a/packages/eslint-plugin/lib/rules/prefer-class-properties.js b/packages/eslint-plugin/lib/rules/prefer-class-properties.js index d42f791e..c8a58561 100644 --- a/packages/eslint-plugin/lib/rules/prefer-class-properties.js +++ b/packages/eslint-plugin/lib/rules/prefer-class-properties.js @@ -75,7 +75,8 @@ module.exports = { return classNode.body.body.find((propertyNode) => { return ( propertyNode.type === 'MethodDefinition' && - propertyNode.key.name === 'constructor' + propertyNode.key.name === 'constructor' && + propertyNode.value.body ); }); } diff --git a/packages/eslint-plugin/tests/lib/rules/prefer-class-properties.test.js b/packages/eslint-plugin/tests/lib/rules/prefer-class-properties.test.js index 221c3f60..b07d04e4 100644 --- a/packages/eslint-plugin/tests/lib/rules/prefer-class-properties.test.js +++ b/packages/eslint-plugin/tests/lib/rules/prefer-class-properties.test.js @@ -3,7 +3,7 @@ const {RuleTester} = require('eslint'); const rule = require('../../../lib/rules/prefer-class-properties'); const ruleTester = new RuleTester({ - parser: require.resolve('@babel/eslint-parser'), + parser: require.resolve('@typescript-eslint/parser'), parserOptions: { ecmaVersion: 6, }, @@ -127,6 +127,15 @@ ruleTester.run('prefer-class-properties', rule, { }`, options: ['always'], }, + { + code: `class Foo { + constructor(); + constructor() { + this.foo = {[foo]: 123}; + } + }`, + options: ['always'], + }, ], invalid: [ { @@ -243,5 +252,15 @@ ruleTester.run('prefer-class-properties', rule, { errors: assignErrors, options: ['always'], }, + { + code: `class Foo { + constructor(); + constructor(a: number) { + this['foo'] = 123; + } + }`, + errors: assignErrors, + options: ['always'], + }, ], });