From 37bfd8f3e9ba7cd554bfa5a11e299f50885f56e2 Mon Sep 17 00:00:00 2001 From: Jacob Bandes-Storch Date: Tue, 16 Aug 2022 18:20:14 -0700 Subject: [PATCH 1/6] feat(eslint-plugin): [explicit-member-accessibility] autofix missing accessibility --- .../rules/explicit-member-accessibility.ts | 36 +++- .../explicit-member-accessibility.test.ts | 162 ++++++++++++++++-- 2 files changed, 183 insertions(+), 15 deletions(-) diff --git a/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts b/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts index b67221aee54..d8c718635ae 100644 --- a/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts +++ b/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts @@ -93,7 +93,7 @@ export default util.createRule({ nodeType: string, node: TSESTree.Node, nodeName: string, - fix: TSESLint.ReportFixFunction | null = null, + fix: TSESLint.ReportFixFunction, ): void { context.report({ node, @@ -159,6 +159,7 @@ export default util.createRule({ nodeType, methodDefinition, methodName, + getMissingAccessibilityFixer(methodDefinition), ); } } @@ -205,6 +206,30 @@ export default util.createRule({ }; } + /** + * Creates a fixer that adds a "public" keyword with following spaces + */ + function getMissingAccessibilityFixer( + node: + | TSESTree.MethodDefinition + | TSESTree.PropertyDefinition + | TSESTree.TSAbstractMethodDefinition + | TSESTree.TSAbstractPropertyDefinition + | TSESTree.TSParameterProperty, + ): TSESLint.ReportFixFunction { + return function (fixer: TSESLint.RuleFixer): TSESLint.RuleFix | null { + if (node.decorators && node.decorators.length > 0) { + const lastDecorator = node.decorators[node.decorators.length - 1]; + const nextToken = sourceCode.getTokenAfter(lastDecorator); + if (!nextToken) { + return null; + } + return fixer.insertTextBefore(nextToken, 'public '); + } + return fixer.insertTextBefore(node, 'public '); + }; + } + /** * Checks if property has an accessibility modifier. * @param propertyDefinition The node representing a PropertyDefinition. @@ -244,6 +269,7 @@ export default util.createRule({ nodeType, propertyDefinition, propertyName, + getMissingAccessibilityFixer(propertyDefinition), ); } } @@ -273,7 +299,13 @@ export default util.createRule({ switch (paramPropCheck) { case 'explicit': { if (!node.accessibility) { - reportIssue('missingAccessibility', nodeType, node, nodeName); + reportIssue( + 'missingAccessibility', + nodeType, + node, + nodeName, + getMissingAccessibilityFixer(node), + ); } break; } diff --git a/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts b/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts index 829e2987ad1..d62ec9275f8 100644 --- a/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts +++ b/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts @@ -368,7 +368,11 @@ export class XXXX { line: 3, }, ], - output: null, + output: ` +export class XXXX { + public constructor(public readonly value: string) {} +} + `, }, { filename: 'test.ts', @@ -379,7 +383,11 @@ export class WithParameterProperty { `, options: [{ accessibility: 'explicit' }], errors: [{ messageId: 'missingAccessibility' }], - output: null, + output: ` +export class WithParameterProperty { + public constructor(public readonly value: string) {} +} + `, }, { filename: 'test.ts', @@ -398,7 +406,11 @@ export class XXXX { }, ], errors: [{ messageId: 'missingAccessibility' }], - output: null, + output: ` +export class XXXX { + public constructor(public readonly samosa: string) {} +} + `, }, { filename: 'test.ts', @@ -414,7 +426,11 @@ class Test { }, ], errors: [{ messageId: 'missingAccessibility' }], - output: null, + output: ` +class Test { + public constructor(public readonly foo: string) {} +} + `, }, { filename: 'test.ts', @@ -437,7 +453,14 @@ class Test { column: 3, }, ], - output: null, + output: ` +class Test { + public x: number; + public getX() { + return this.x; + } +} + `, }, { filename: 'test.ts', @@ -460,7 +483,14 @@ class Test { column: 3, }, ], - output: null, + output: ` +class Test { + private x: number; + public getX() { + return this.x; + } +} + `, }, { filename: 'test.ts', @@ -492,7 +522,14 @@ class Test { column: 3, }, ], - output: null, + output: ` +class Test { + public x?: number; + public getX?() { + return this.x; + } +} + `, }, { filename: 'test.ts', @@ -621,7 +658,20 @@ class Test { }, ], options: [{ overrides: { constructors: 'no-public' } }], - output: null, + output: ` +class Test { + private x: number; + constructor(x: number) { + this.x = x; + } + public get internalValue() { + return this.x; + } + public set internalValue(value: number) { + this.x = value; + } +} + `, }, { filename: 'test.ts', @@ -656,7 +706,20 @@ class Test { column: 3, }, ], - output: null, + output: ` +class Test { + private x: number; + public constructor(x: number) { + this.x = x; + } + public get internalValue() { + return this.x; + } + public set internalValue(value: number) { + this.x = value; + } +} + `, }, { filename: 'test.ts', @@ -680,7 +743,14 @@ class Test { overrides: { parameterProperties: 'no-public' }, }, ], - output: null, + output: ` +class Test { + public constructor(public x: number) {} + public foo(): string { + return 'foo'; + } +} + `, }, { filename: 'test.ts', @@ -696,7 +766,11 @@ class Test { column: 3, }, ], - output: null, + output: ` +class Test { + public constructor(public x: number) {} +} + `, }, { filename: 'test.ts', @@ -744,7 +818,11 @@ class Test { column: 3, }, ], - output: null, + output: ` +class Test { + public x = 2; +} + `, }, { filename: 'test.ts', @@ -788,7 +866,11 @@ class Test { column: 3, }, ], - output: null, + output: ` +class Test { + public constructor(public ...x: any[]) {} +} + `, }, { filename: 'test.ts', @@ -1073,6 +1155,11 @@ abstract class SomeClass { column: 3, }, ], + output: ` +abstract class SomeClass { + public abstract method(): string; +} + `, }, { code: ` @@ -1114,6 +1201,11 @@ abstract class SomeClass { column: 3, }, ], + output: ` +abstract class SomeClass { + public abstract x: string; +} + `, }, { code: ` @@ -1137,6 +1229,50 @@ abstract class SomeClass { output: ` abstract class SomeClass { abstract x: string; +} + `, + }, + { + code: ` +class DecoratedClass { + constructor(@foo @bar() readonly arg: string) {} + @foo @bar() x: string; + @foo @bar() getX() { + return this.x; + } + @foo + @bar() + get y() { + return this.x; + } + @foo @bar() set y(@foo @bar() value: x) { + this.x = x; + } +} + `, + errors: [ + { messageId: 'missingAccessibility', line: 3, column: 3 }, + { messageId: 'missingAccessibility', line: 3, column: 15 }, + { messageId: 'missingAccessibility', line: 4, column: 3 }, + { messageId: 'missingAccessibility', line: 5, column: 3 }, + { messageId: 'missingAccessibility', line: 8, column: 3 }, + { messageId: 'missingAccessibility', line: 13, column: 3 }, + ], + output: ` +class DecoratedClass { + public constructor(@foo @bar() public readonly arg: string) {} + @foo @bar() public x: string; + @foo @bar() public getX() { + return this.x; + } + @foo + @bar() + public get y() { + return this.x; + } + @foo @bar() public set y(@foo @bar() value: x) { + this.x = x; + } } `, }, From a9552253ef4f9cf940b0e82a3fb7d22aa2934919 Mon Sep 17 00:00:00 2001 From: Jacob Bandes-Storch Date: Wed, 17 Aug 2022 18:35:11 -0700 Subject: [PATCH 2/6] Convert auto-fix to suggestions --- .../rules/explicit-member-accessibility.ts | 153 +- .../explicit-member-accessibility.test.ts | 1259 +++++++++++++++-- 2 files changed, 1197 insertions(+), 215 deletions(-) diff --git a/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts b/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts index d8c718635ae..7fc98c8a748 100644 --- a/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts +++ b/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts @@ -25,13 +25,19 @@ interface Config { type Options = [Config]; -type MessageIds = 'unwantedPublicAccessibility' | 'missingAccessibility'; +type MessageIds = + | 'unwantedPublicAccessibility' + | 'missingAccessibility' + | 'addPublicAccessibility' + | 'addPrivateAccessibility' + | 'addProtectedAccessibility'; const accessibilityLevel = { enum: ['explicit', 'no-public', 'off'] }; export default util.createRule({ name: 'explicit-member-accessibility', meta: { + hasSuggestions: true, type: 'problem', docs: { description: @@ -43,6 +49,9 @@ export default util.createRule({ messages: { missingAccessibility: 'Missing accessibility modifier on {{type}} {{name}}.', + addPublicAccessibility: "Add 'public' accessibility modifier", + addPrivateAccessibility: "Add 'private' accessibility modifier", + addProtectedAccessibility: "Add 'protected' accessibility modifier", unwantedPublicAccessibility: 'Public accessibility modifier on {{type}} {{name}}.', }, @@ -85,26 +94,6 @@ export default util.createRule({ const propCheck = overrides.properties ?? baseCheck; const paramPropCheck = overrides.parameterProperties ?? baseCheck; const ignoredMethodNames = new Set(option.ignoredMethodNames ?? []); - /** - * Generates the report for rule violations - */ - function reportIssue( - messageId: MessageIds, - nodeType: string, - node: TSESTree.Node, - nodeName: string, - fix: TSESLint.ReportFixFunction, - ): void { - context.report({ - node, - messageId, - data: { - type: nodeType, - name: nodeName, - }, - fix, - }); - } /** * Checks if a method declaration has an accessibility modifier. @@ -146,21 +135,25 @@ export default util.createRule({ check === 'no-public' && methodDefinition.accessibility === 'public' ) { - reportIssue( - 'unwantedPublicAccessibility', - nodeType, - methodDefinition, - methodName, - getUnwantedPublicAccessibilityFixer(methodDefinition), - ); + context.report({ + node: methodDefinition, + messageId: 'unwantedPublicAccessibility', + data: { + type: nodeType, + name: methodName, + }, + fix: getUnwantedPublicAccessibilityFixer(methodDefinition), + }); } else if (check === 'explicit' && !methodDefinition.accessibility) { - reportIssue( - 'missingAccessibility', - nodeType, - methodDefinition, - methodName, - getMissingAccessibilityFixer(methodDefinition), - ); + context.report({ + node: methodDefinition, + messageId: 'missingAccessibility', + data: { + type: nodeType, + name: methodName, + }, + suggest: getMissingAccessibilitySuggestions(methodDefinition), + }); } } @@ -209,25 +202,43 @@ export default util.createRule({ /** * Creates a fixer that adds a "public" keyword with following spaces */ - function getMissingAccessibilityFixer( + function getMissingAccessibilitySuggestions( node: | TSESTree.MethodDefinition | TSESTree.PropertyDefinition | TSESTree.TSAbstractMethodDefinition | TSESTree.TSAbstractPropertyDefinition | TSESTree.TSParameterProperty, - ): TSESLint.ReportFixFunction { - return function (fixer: TSESLint.RuleFixer): TSESLint.RuleFix | null { + ): TSESLint.ReportSuggestionArray { + function fix( + accessibility: TSESTree.Accessibility, + fixer: TSESLint.RuleFixer, + ): TSESLint.RuleFix | null { if (node.decorators && node.decorators.length > 0) { const lastDecorator = node.decorators[node.decorators.length - 1]; const nextToken = sourceCode.getTokenAfter(lastDecorator); if (!nextToken) { return null; } - return fixer.insertTextBefore(nextToken, 'public '); + return fixer.insertTextBefore(nextToken, `${accessibility} `); } - return fixer.insertTextBefore(node, 'public '); - }; + return fixer.insertTextBefore(node, `${accessibility} `); + } + + return [ + { + messageId: 'addPublicAccessibility', + fix: fixer => fix('public', fixer), + }, + { + messageId: 'addPrivateAccessibility', + fix: fixer => fix('private', fixer), + }, + { + messageId: 'addProtectedAccessibility', + fix: fixer => fix('protected', fixer), + }, + ]; } /** @@ -253,24 +264,28 @@ export default util.createRule({ propCheck === 'no-public' && propertyDefinition.accessibility === 'public' ) { - reportIssue( - 'unwantedPublicAccessibility', - nodeType, - propertyDefinition, - propertyName, - getUnwantedPublicAccessibilityFixer(propertyDefinition), - ); + context.report({ + node: propertyDefinition, + messageId: 'unwantedPublicAccessibility', + data: { + type: nodeType, + name: propertyName, + }, + fix: getUnwantedPublicAccessibilityFixer(propertyDefinition), + }); } else if ( propCheck === 'explicit' && !propertyDefinition.accessibility ) { - reportIssue( - 'missingAccessibility', - nodeType, - propertyDefinition, - propertyName, - getMissingAccessibilityFixer(propertyDefinition), - ); + context.report({ + node: propertyDefinition, + messageId: 'missingAccessibility', + data: { + type: nodeType, + name: propertyName, + }, + suggest: getMissingAccessibilitySuggestions(propertyDefinition), + }); } } @@ -299,25 +314,29 @@ export default util.createRule({ switch (paramPropCheck) { case 'explicit': { if (!node.accessibility) { - reportIssue( - 'missingAccessibility', - nodeType, + context.report({ node, - nodeName, - getMissingAccessibilityFixer(node), - ); + messageId: 'missingAccessibility', + data: { + type: nodeType, + name: nodeName, + }, + suggest: getMissingAccessibilitySuggestions(node), + }); } break; } case 'no-public': { if (node.accessibility === 'public' && node.readonly) { - reportIssue( - 'unwantedPublicAccessibility', - nodeType, + context.report({ node, - nodeName, - getUnwantedPublicAccessibilityFixer(node), - ); + messageId: 'unwantedPublicAccessibility', + data: { + type: nodeType, + name: nodeName, + }, + fix: getUnwantedPublicAccessibilityFixer(node), + }); } break; } diff --git a/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts b/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts index d62ec9275f8..3a0bb1f61bc 100644 --- a/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts +++ b/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts @@ -352,7 +352,7 @@ class Test { export class XXXX { public constructor(readonly value: string) {} } - `, + `.trim(), options: [ { accessibility: 'off', @@ -365,14 +365,35 @@ export class XXXX { { messageId: 'missingAccessibility', column: 22, - line: 3, - }, - ], - output: ` + line: 2, + suggestions: [ + { + messageId: 'addPublicAccessibility', + output: ` export class XXXX { public constructor(public readonly value: string) {} } - `, + `.trim(), + }, + { + messageId: 'addPrivateAccessibility', + output: ` +export class XXXX { + public constructor(private readonly value: string) {} +} + `.trim(), + }, + { + messageId: 'addProtectedAccessibility', + output: ` +export class XXXX { + public constructor(protected readonly value: string) {} +} + `.trim(), + }, + ], + }, + ], }, { filename: 'test.ts', @@ -380,14 +401,39 @@ export class XXXX { export class WithParameterProperty { public constructor(readonly value: string) {} } - `, + `.trim(), options: [{ accessibility: 'explicit' }], - errors: [{ messageId: 'missingAccessibility' }], - output: ` + errors: [ + { + messageId: 'missingAccessibility', + suggestions: [ + { + messageId: 'addPublicAccessibility', + output: ` export class WithParameterProperty { public constructor(public readonly value: string) {} } - `, + `.trim(), + }, + { + messageId: 'addPrivateAccessibility', + output: ` +export class WithParameterProperty { + public constructor(private readonly value: string) {} +} + `.trim(), + }, + { + messageId: 'addProtectedAccessibility', + output: ` +export class WithParameterProperty { + public constructor(protected readonly value: string) {} +} + `.trim(), + }, + ], + }, + ], }, { filename: 'test.ts', @@ -395,7 +441,7 @@ export class WithParameterProperty { export class XXXX { public constructor(readonly samosa: string) {} } - `, + `.trim(), options: [ { accessibility: 'off', @@ -405,12 +451,37 @@ export class XXXX { }, }, ], - errors: [{ messageId: 'missingAccessibility' }], - output: ` + errors: [ + { + messageId: 'missingAccessibility', + suggestions: [ + { + messageId: 'addPublicAccessibility', + output: ` export class XXXX { public constructor(public readonly samosa: string) {} } - `, + `.trim(), + }, + { + messageId: 'addPrivateAccessibility', + output: ` +export class XXXX { + public constructor(private readonly samosa: string) {} +} + `.trim(), + }, + { + messageId: 'addProtectedAccessibility', + output: ` +export class XXXX { + public constructor(protected readonly samosa: string) {} +} + `.trim(), + }, + ], + }, + ], }, { filename: 'test.ts', @@ -418,19 +489,44 @@ export class XXXX { class Test { public constructor(readonly foo: string) {} } - `, + `.trim(), options: [ { accessibility: 'explicit', overrides: { parameterProperties: 'explicit' }, }, ], - errors: [{ messageId: 'missingAccessibility' }], - output: ` + errors: [ + { + messageId: 'missingAccessibility', + suggestions: [ + { + messageId: 'addPublicAccessibility', + output: ` class Test { public constructor(public readonly foo: string) {} } - `, + `.trim(), + }, + { + messageId: 'addPrivateAccessibility', + output: ` +class Test { + public constructor(private readonly foo: string) {} +} + `.trim(), + }, + { + messageId: 'addProtectedAccessibility', + output: ` +class Test { + public constructor(protected readonly foo: string) {} +} + `.trim(), + }, + ], + }, + ], }, { filename: 'test.ts', @@ -441,7 +537,7 @@ class Test { return this.x; } } - `, + `.trim(), errors: [ { messageId: 'missingAccessibility', @@ -449,18 +545,48 @@ class Test { type: 'class property', name: 'x', }, - line: 3, + line: 2, column: 3, - }, - ], - output: ` + suggestions: [ + { + messageId: 'addPublicAccessibility', + + output: ` class Test { public x: number; public getX() { return this.x; } } - `, + `.trim(), + }, + { + messageId: 'addPrivateAccessibility', + + output: ` +class Test { + private x: number; + public getX() { + return this.x; + } +} + `.trim(), + }, + { + messageId: 'addProtectedAccessibility', + + output: ` +class Test { + protected x: number; + public getX() { + return this.x; + } +} + `.trim(), + }, + ], + }, + ], }, { filename: 'test.ts', @@ -471,7 +597,7 @@ class Test { return this.x; } } - `, + `.trim(), errors: [ { messageId: 'missingAccessibility', @@ -479,18 +605,45 @@ class Test { type: 'method definition', name: 'getX', }, - line: 4, + line: 3, column: 3, - }, - ], - output: ` + suggestions: [ + { + messageId: 'addPublicAccessibility', + output: ` class Test { private x: number; public getX() { return this.x; } } - `, + `.trim(), + }, + { + messageId: 'addPrivateAccessibility', + output: ` +class Test { + private x: number; + private getX() { + return this.x; + } +} + `.trim(), + }, + { + messageId: 'addProtectedAccessibility', + output: ` +class Test { + private x: number; + protected getX() { + return this.x; + } +} + `.trim(), + }, + ], + }, + ], }, { filename: 'test.ts', @@ -501,7 +654,7 @@ class Test { return this.x; } } - `, + `.trim(), errors: [ { messageId: 'missingAccessibility', @@ -509,8 +662,43 @@ class Test { type: 'class property', name: 'x', }, - line: 3, + line: 2, column: 3, + suggestions: [ + { + messageId: 'addPublicAccessibility', + output: ` +class Test { + public x?: number; + getX?() { + return this.x; + } +} + `.trim(), + }, + { + messageId: 'addPrivateAccessibility', + output: ` +class Test { + private x?: number; + getX?() { + return this.x; + } +} + `.trim(), + }, + { + messageId: 'addProtectedAccessibility', + output: ` +class Test { + protected x?: number; + getX?() { + return this.x; + } +} + `.trim(), + }, + ], }, { messageId: 'missingAccessibility', @@ -518,18 +706,45 @@ class Test { type: 'method definition', name: 'getX', }, - line: 4, + line: 3, column: 3, - }, - ], - output: ` + suggestions: [ + { + messageId: 'addPublicAccessibility', + output: ` class Test { - public x?: number; + x?: number; public getX?() { return this.x; } } - `, + `.trim(), + }, + { + messageId: 'addPrivateAccessibility', + output: ` +class Test { + x?: number; + private getX?() { + return this.x; + } +} + `.trim(), + }, + { + messageId: 'addProtectedAccessibility', + output: ` +class Test { + x?: number; + protected getX?() { + return this.x; + } +} + `.trim(), + }, + ], + }, + ], }, { filename: 'test.ts', @@ -644,21 +859,16 @@ class Test { this.x = value; } } - `, + `.trim(), errors: [ { messageId: 'missingAccessibility', - line: 7, - column: 3, - }, - { - messageId: 'missingAccessibility', - line: 10, + line: 6, column: 3, - }, - ], - options: [{ overrides: { constructors: 'no-public' } }], - output: ` + suggestions: [ + { + messageId: 'addPublicAccessibility', + output: ` class Test { private x: number; constructor(x: number) { @@ -667,118 +877,408 @@ class Test { public get internalValue() { return this.x; } - public set internalValue(value: number) { + set internalValue(value: number) { this.x = value; } } - `, - }, - { - filename: 'test.ts', - code: ` + `.trim(), + }, + { + messageId: 'addPrivateAccessibility', + output: ` class Test { private x: number; constructor(x: number) { this.x = x; } - get internalValue() { + private get internalValue() { return this.x; } set internalValue(value: number) { this.x = value; } } - `, - errors: [ - { - messageId: 'missingAccessibility', - line: 4, - column: 3, - }, - { - messageId: 'missingAccessibility', - line: 7, - column: 3, + `.trim(), + }, + { + messageId: 'addProtectedAccessibility', + output: ` +class Test { + private x: number; + constructor(x: number) { + this.x = x; + } + protected get internalValue() { + return this.x; + } + set internalValue(value: number) { + this.x = value; + } +} + `.trim(), + }, + ], }, { messageId: 'missingAccessibility', - line: 10, + line: 9, column: 3, - }, - ], - output: ` + suggestions: [ + { + messageId: 'addPublicAccessibility', + output: ` class Test { private x: number; - public constructor(x: number) { + constructor(x: number) { this.x = x; } - public get internalValue() { + get internalValue() { return this.x; } public set internalValue(value: number) { this.x = value; } } - `, - }, - { - filename: 'test.ts', - code: ` + `.trim(), + }, + { + messageId: 'addPrivateAccessibility', + output: ` class Test { - constructor(public x: number) {} - public foo(): string { - return 'foo'; + private x: number; + constructor(x: number) { + this.x = x; + } + get internalValue() { + return this.x; + } + private set internalValue(value: number) { + this.x = value; } } - `, - errors: [ - { - messageId: 'missingAccessibility', - line: 3, - column: 3, - }, - ], - options: [ - { - overrides: { parameterProperties: 'no-public' }, - }, - ], - output: ` + `.trim(), + }, + { + messageId: 'addProtectedAccessibility', + output: ` class Test { - public constructor(public x: number) {} - public foo(): string { - return 'foo'; + private x: number; + constructor(x: number) { + this.x = x; + } + get internalValue() { + return this.x; + } + protected set internalValue(value: number) { + this.x = value; } } - `, + `.trim(), + }, + ], + }, + ], + options: [{ overrides: { constructors: 'no-public' } }], }, { filename: 'test.ts', code: ` class Test { - constructor(public x: number) {} + private x: number; + constructor(x: number) { + this.x = x; + } + get internalValue() { + return this.x; + } + set internalValue(value: number) { + this.x = value; + } } - `, + `.trim(), errors: [ { messageId: 'missingAccessibility', line: 3, column: 3, - }, - ], - output: ` + suggestions: [ + { + messageId: 'addPublicAccessibility', + output: ` class Test { - public constructor(public x: number) {} + private x: number; + public constructor(x: number) { + this.x = x; + } + get internalValue() { + return this.x; + } + set internalValue(value: number) { + this.x = value; + } } - `, - }, - { - filename: 'test.ts', - code: ` + `.trim(), + }, + { + messageId: 'addPrivateAccessibility', + output: ` class Test { - constructor(public readonly x: number) {} -} - `, + private x: number; + private constructor(x: number) { + this.x = x; + } + get internalValue() { + return this.x; + } + set internalValue(value: number) { + this.x = value; + } +} + `.trim(), + }, + { + messageId: 'addProtectedAccessibility', + output: ` +class Test { + private x: number; + protected constructor(x: number) { + this.x = x; + } + get internalValue() { + return this.x; + } + set internalValue(value: number) { + this.x = value; + } +} + `.trim(), + }, + ], + }, + { + messageId: 'missingAccessibility', + line: 6, + column: 3, + suggestions: [ + { + messageId: 'addPublicAccessibility', + output: ` +class Test { + private x: number; + constructor(x: number) { + this.x = x; + } + public get internalValue() { + return this.x; + } + set internalValue(value: number) { + this.x = value; + } +} + `.trim(), + }, + { + messageId: 'addPrivateAccessibility', + output: ` +class Test { + private x: number; + constructor(x: number) { + this.x = x; + } + private get internalValue() { + return this.x; + } + set internalValue(value: number) { + this.x = value; + } +} + `.trim(), + }, + { + messageId: 'addProtectedAccessibility', + output: ` +class Test { + private x: number; + constructor(x: number) { + this.x = x; + } + protected get internalValue() { + return this.x; + } + set internalValue(value: number) { + this.x = value; + } +} + `.trim(), + }, + ], + }, + { + messageId: 'missingAccessibility', + line: 9, + column: 3, + suggestions: [ + { + messageId: 'addPublicAccessibility', + output: ` +class Test { + private x: number; + constructor(x: number) { + this.x = x; + } + get internalValue() { + return this.x; + } + public set internalValue(value: number) { + this.x = value; + } +} + `.trim(), + }, + { + messageId: 'addPrivateAccessibility', + output: ` +class Test { + private x: number; + constructor(x: number) { + this.x = x; + } + get internalValue() { + return this.x; + } + private set internalValue(value: number) { + this.x = value; + } +} + `.trim(), + }, + { + messageId: 'addProtectedAccessibility', + output: ` +class Test { + private x: number; + constructor(x: number) { + this.x = x; + } + get internalValue() { + return this.x; + } + protected set internalValue(value: number) { + this.x = value; + } +} + `.trim(), + }, + ], + }, + ], + }, + { + filename: 'test.ts', + code: ` +class Test { + constructor(public x: number) {} + public foo(): string { + return 'foo'; + } +} + `.trim(), + errors: [ + { + messageId: 'missingAccessibility', + line: 2, + column: 3, + suggestions: [ + { + messageId: 'addPublicAccessibility', + output: ` +class Test { + public constructor(public x: number) {} + public foo(): string { + return 'foo'; + } +} + `.trim(), + }, + { + messageId: 'addPrivateAccessibility', + output: ` +class Test { + private constructor(public x: number) {} + public foo(): string { + return 'foo'; + } +} + `.trim(), + }, + { + messageId: 'addProtectedAccessibility', + output: ` +class Test { + protected constructor(public x: number) {} + public foo(): string { + return 'foo'; + } +} + `.trim(), + }, + ], + }, + ], + options: [ + { + overrides: { parameterProperties: 'no-public' }, + }, + ], + }, + { + filename: 'test.ts', + code: ` +class Test { + constructor(public x: number) {} +} + `.trim(), + errors: [ + { + messageId: 'missingAccessibility', + line: 2, + column: 3, + suggestions: [ + { + messageId: 'addPublicAccessibility', + output: ` +class Test { + public constructor(public x: number) {} +} + `.trim(), + }, + { + messageId: 'addPrivateAccessibility', + output: ` +class Test { + private constructor(public x: number) {} +} + `.trim(), + }, + { + messageId: 'addProtectedAccessibility', + output: ` +class Test { + protected constructor(public x: number) {} +} + `.trim(), + }, + ], + }, + ], + }, + { + filename: 'test.ts', + code: ` +class Test { + constructor(public readonly x: number) {} +} + `, options: [ { accessibility: 'off', @@ -804,7 +1304,7 @@ class Test { class Test { x = 2; } - `, + `.trim(), options: [ { accessibility: 'off', @@ -814,15 +1314,36 @@ class Test { errors: [ { messageId: 'missingAccessibility', - line: 3, + line: 2, column: 3, - }, - ], - output: ` + suggestions: [ + { + messageId: 'addPublicAccessibility', + output: ` class Test { public x = 2; } - `, + `.trim(), + }, + { + messageId: 'addPrivateAccessibility', + output: ` +class Test { + private x = 2; +} + `.trim(), + }, + { + messageId: 'addProtectedAccessibility', + output: ` +class Test { + protected x = 2; +} + `.trim(), + }, + ], + }, + ], }, { filename: 'test.ts', @@ -857,20 +1378,41 @@ class Test { class Test { constructor(public ...x: any[]) {} } - `, + `.trim(), options: [{ accessibility: 'explicit' }], errors: [ { messageId: 'missingAccessibility', - line: 3, + line: 2, column: 3, - }, - ], - output: ` + suggestions: [ + { + messageId: 'addPublicAccessibility', + output: ` class Test { public constructor(public ...x: any[]) {} } - `, + `.trim(), + }, + { + messageId: 'addPrivateAccessibility', + output: ` +class Test { + private constructor(public ...x: any[]) {} +} + `.trim(), + }, + { + messageId: 'addProtectedAccessibility', + output: ` +class Test { + protected constructor(public ...x: any[]) {} +} + `.trim(), + }, + ], + }, + ], }, { filename: 'test.ts', @@ -1146,20 +1688,41 @@ class Test { abstract class SomeClass { abstract method(): string; } - `, + `.trim(), options: [{ accessibility: 'explicit' }], errors: [ { messageId: 'missingAccessibility', - line: 3, + line: 2, column: 3, - }, - ], - output: ` + suggestions: [ + { + messageId: 'addPublicAccessibility', + output: ` abstract class SomeClass { public abstract method(): string; } - `, + `.trim(), + }, + { + messageId: 'addPrivateAccessibility', + output: ` +abstract class SomeClass { + private abstract method(): string; +} + `.trim(), + }, + { + messageId: 'addProtectedAccessibility', + output: ` +abstract class SomeClass { + protected abstract method(): string; +} + `.trim(), + }, + ], + }, + ], }, { code: ` @@ -1192,20 +1755,41 @@ abstract class SomeClass { abstract class SomeClass { abstract x: string; } - `, + `.trim(), options: [{ accessibility: 'explicit' }], errors: [ { messageId: 'missingAccessibility', - line: 3, + line: 2, column: 3, - }, - ], - output: ` + suggestions: [ + { + messageId: 'addPublicAccessibility', + output: ` abstract class SomeClass { public abstract x: string; } - `, + `.trim(), + }, + { + messageId: 'addPrivateAccessibility', + output: ` +abstract class SomeClass { + private abstract x: string; +} + `.trim(), + }, + { + messageId: 'addProtectedAccessibility', + output: ` +abstract class SomeClass { + protected abstract x: string; +} + `.trim(), + }, + ], + }, + ], }, { code: ` @@ -1249,32 +1833,411 @@ class DecoratedClass { this.x = x; } } - `, + `.trim(), errors: [ - { messageId: 'missingAccessibility', line: 3, column: 3 }, - { messageId: 'missingAccessibility', line: 3, column: 15 }, - { messageId: 'missingAccessibility', line: 4, column: 3 }, - { messageId: 'missingAccessibility', line: 5, column: 3 }, - { messageId: 'missingAccessibility', line: 8, column: 3 }, - { messageId: 'missingAccessibility', line: 13, column: 3 }, - ], - output: ` + { + messageId: 'missingAccessibility', + line: 2, + column: 3, + suggestions: [ + { + messageId: 'addPublicAccessibility', + output: ` +class DecoratedClass { + public constructor(@foo @bar() readonly arg: string) {} + @foo @bar() x: string; + @foo @bar() getX() { + return this.x; + } + @foo + @bar() + get y() { + return this.x; + } + @foo @bar() set y(@foo @bar() value: x) { + this.x = x; + } +} + `.trim(), + }, + { + messageId: 'addPrivateAccessibility', + output: ` class DecoratedClass { - public constructor(@foo @bar() public readonly arg: string) {} + private constructor(@foo @bar() readonly arg: string) {} + @foo @bar() x: string; + @foo @bar() getX() { + return this.x; + } + @foo + @bar() + get y() { + return this.x; + } + @foo @bar() set y(@foo @bar() value: x) { + this.x = x; + } +} + `.trim(), + }, + { + messageId: 'addProtectedAccessibility', + output: ` +class DecoratedClass { + protected constructor(@foo @bar() readonly arg: string) {} + @foo @bar() x: string; + @foo @bar() getX() { + return this.x; + } + @foo + @bar() + get y() { + return this.x; + } + @foo @bar() set y(@foo @bar() value: x) { + this.x = x; + } +} + `.trim(), + }, + ], + }, + { + messageId: 'missingAccessibility', + line: 2, + column: 15, + suggestions: [ + { + messageId: 'addPublicAccessibility', + output: ` +class DecoratedClass { + constructor(@foo @bar() public readonly arg: string) {} + @foo @bar() x: string; + @foo @bar() getX() { + return this.x; + } + @foo + @bar() + get y() { + return this.x; + } + @foo @bar() set y(@foo @bar() value: x) { + this.x = x; + } +} + `.trim(), + }, + { + messageId: 'addPrivateAccessibility', + output: ` +class DecoratedClass { + constructor(@foo @bar() private readonly arg: string) {} + @foo @bar() x: string; + @foo @bar() getX() { + return this.x; + } + @foo + @bar() + get y() { + return this.x; + } + @foo @bar() set y(@foo @bar() value: x) { + this.x = x; + } +} + `.trim(), + }, + { + messageId: 'addProtectedAccessibility', + output: ` +class DecoratedClass { + constructor(@foo @bar() protected readonly arg: string) {} + @foo @bar() x: string; + @foo @bar() getX() { + return this.x; + } + @foo + @bar() + get y() { + return this.x; + } + @foo @bar() set y(@foo @bar() value: x) { + this.x = x; + } +} + `.trim(), + }, + ], + }, + { + messageId: 'missingAccessibility', + line: 3, + column: 3, + suggestions: [ + { + messageId: 'addPublicAccessibility', + output: ` +class DecoratedClass { + constructor(@foo @bar() readonly arg: string) {} @foo @bar() public x: string; + @foo @bar() getX() { + return this.x; + } + @foo + @bar() + get y() { + return this.x; + } + @foo @bar() set y(@foo @bar() value: x) { + this.x = x; + } +} + `.trim(), + }, + { + messageId: 'addPrivateAccessibility', + output: ` +class DecoratedClass { + constructor(@foo @bar() readonly arg: string) {} + @foo @bar() private x: string; + @foo @bar() getX() { + return this.x; + } + @foo + @bar() + get y() { + return this.x; + } + @foo @bar() set y(@foo @bar() value: x) { + this.x = x; + } +} + `.trim(), + }, + { + messageId: 'addProtectedAccessibility', + output: ` +class DecoratedClass { + constructor(@foo @bar() readonly arg: string) {} + @foo @bar() protected x: string; + @foo @bar() getX() { + return this.x; + } + @foo + @bar() + get y() { + return this.x; + } + @foo @bar() set y(@foo @bar() value: x) { + this.x = x; + } +} + `.trim(), + }, + ], + }, + { + messageId: 'missingAccessibility', + line: 4, + column: 3, + suggestions: [ + { + messageId: 'addPublicAccessibility', + output: ` +class DecoratedClass { + constructor(@foo @bar() readonly arg: string) {} + @foo @bar() x: string; @foo @bar() public getX() { return this.x; } @foo @bar() + get y() { + return this.x; + } + @foo @bar() set y(@foo @bar() value: x) { + this.x = x; + } +} + `.trim(), + }, + { + messageId: 'addPrivateAccessibility', + output: ` +class DecoratedClass { + constructor(@foo @bar() readonly arg: string) {} + @foo @bar() x: string; + @foo @bar() private getX() { + return this.x; + } + @foo + @bar() + get y() { + return this.x; + } + @foo @bar() set y(@foo @bar() value: x) { + this.x = x; + } +} + `.trim(), + }, + { + messageId: 'addProtectedAccessibility', + output: ` +class DecoratedClass { + constructor(@foo @bar() readonly arg: string) {} + @foo @bar() x: string; + @foo @bar() protected getX() { + return this.x; + } + @foo + @bar() + get y() { + return this.x; + } + @foo @bar() set y(@foo @bar() value: x) { + this.x = x; + } +} + `.trim(), + }, + ], + }, + { + messageId: 'missingAccessibility', + line: 7, + column: 3, + suggestions: [ + { + messageId: 'addPublicAccessibility', + output: ` +class DecoratedClass { + constructor(@foo @bar() readonly arg: string) {} + @foo @bar() x: string; + @foo @bar() getX() { + return this.x; + } + @foo + @bar() public get y() { return this.x; } + @foo @bar() set y(@foo @bar() value: x) { + this.x = x; + } +} + `.trim(), + }, + { + messageId: 'addPrivateAccessibility', + output: ` +class DecoratedClass { + constructor(@foo @bar() readonly arg: string) {} + @foo @bar() x: string; + @foo @bar() getX() { + return this.x; + } + @foo + @bar() + private get y() { + return this.x; + } + @foo @bar() set y(@foo @bar() value: x) { + this.x = x; + } +} + `.trim(), + }, + { + messageId: 'addProtectedAccessibility', + output: ` +class DecoratedClass { + constructor(@foo @bar() readonly arg: string) {} + @foo @bar() x: string; + @foo @bar() getX() { + return this.x; + } + @foo + @bar() + protected get y() { + return this.x; + } + @foo @bar() set y(@foo @bar() value: x) { + this.x = x; + } +} + `.trim(), + }, + ], + }, + { + messageId: 'missingAccessibility', + line: 12, + column: 3, + suggestions: [ + { + messageId: 'addPublicAccessibility', + output: ` +class DecoratedClass { + constructor(@foo @bar() readonly arg: string) {} + @foo @bar() x: string; + @foo @bar() getX() { + return this.x; + } + @foo + @bar() + get y() { + return this.x; + } @foo @bar() public set y(@foo @bar() value: x) { this.x = x; } } - `, + `.trim(), + }, + { + messageId: 'addPrivateAccessibility', + output: ` +class DecoratedClass { + constructor(@foo @bar() readonly arg: string) {} + @foo @bar() x: string; + @foo @bar() getX() { + return this.x; + } + @foo + @bar() + get y() { + return this.x; + } + @foo @bar() private set y(@foo @bar() value: x) { + this.x = x; + } +} + `.trim(), + }, + { + messageId: 'addProtectedAccessibility', + output: ` +class DecoratedClass { + constructor(@foo @bar() readonly arg: string) {} + @foo @bar() x: string; + @foo @bar() getX() { + return this.x; + } + @foo + @bar() + get y() { + return this.x; + } + @foo @bar() protected set y(@foo @bar() value: x) { + this.x = x; + } +} + `.trim(), + }, + ], + }, + ], }, ], }); From 5fd7ae328c4b72a6848c1369279cab78d4ce81c8 Mon Sep 17 00:00:00 2001 From: Jacob Bandes-Storch Date: Thu, 18 Aug 2022 11:22:42 -0700 Subject: [PATCH 3/6] remove trim()s --- .../explicit-member-accessibility.test.ts | 226 +++++++++--------- 1 file changed, 113 insertions(+), 113 deletions(-) diff --git a/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts b/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts index d6b911283d1..706e1ec41bb 100644 --- a/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts +++ b/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts @@ -352,7 +352,7 @@ class Test { export class XXXX { public constructor(readonly value: string) {} } - `.trim(), + `, options: [ { accessibility: 'off', @@ -365,7 +365,7 @@ export class XXXX { { messageId: 'missingAccessibility', column: 22, - line: 2, + line: 3, suggestions: [ { messageId: 'addPublicAccessibility', @@ -373,7 +373,7 @@ export class XXXX { export class XXXX { public constructor(public readonly value: string) {} } - `.trim(), + `, }, { messageId: 'addPrivateAccessibility', @@ -381,7 +381,7 @@ export class XXXX { export class XXXX { public constructor(private readonly value: string) {} } - `.trim(), + `, }, { messageId: 'addProtectedAccessibility', @@ -389,7 +389,7 @@ export class XXXX { export class XXXX { public constructor(protected readonly value: string) {} } - `.trim(), + `, }, ], }, @@ -401,7 +401,7 @@ export class XXXX { export class WithParameterProperty { public constructor(readonly value: string) {} } - `.trim(), + `, options: [{ accessibility: 'explicit' }], errors: [ { @@ -413,7 +413,7 @@ export class WithParameterProperty { export class WithParameterProperty { public constructor(public readonly value: string) {} } - `.trim(), + `, }, { messageId: 'addPrivateAccessibility', @@ -421,7 +421,7 @@ export class WithParameterProperty { export class WithParameterProperty { public constructor(private readonly value: string) {} } - `.trim(), + `, }, { messageId: 'addProtectedAccessibility', @@ -429,7 +429,7 @@ export class WithParameterProperty { export class WithParameterProperty { public constructor(protected readonly value: string) {} } - `.trim(), + `, }, ], }, @@ -441,7 +441,7 @@ export class WithParameterProperty { export class XXXX { public constructor(readonly samosa: string) {} } - `.trim(), + `, options: [ { accessibility: 'off', @@ -461,7 +461,7 @@ export class XXXX { export class XXXX { public constructor(public readonly samosa: string) {} } - `.trim(), + `, }, { messageId: 'addPrivateAccessibility', @@ -469,7 +469,7 @@ export class XXXX { export class XXXX { public constructor(private readonly samosa: string) {} } - `.trim(), + `, }, { messageId: 'addProtectedAccessibility', @@ -477,7 +477,7 @@ export class XXXX { export class XXXX { public constructor(protected readonly samosa: string) {} } - `.trim(), + `, }, ], }, @@ -489,7 +489,7 @@ export class XXXX { class Test { public constructor(readonly foo: string) {} } - `.trim(), + `, options: [ { accessibility: 'explicit', @@ -506,7 +506,7 @@ class Test { class Test { public constructor(public readonly foo: string) {} } - `.trim(), + `, }, { messageId: 'addPrivateAccessibility', @@ -514,7 +514,7 @@ class Test { class Test { public constructor(private readonly foo: string) {} } - `.trim(), + `, }, { messageId: 'addProtectedAccessibility', @@ -522,7 +522,7 @@ class Test { class Test { public constructor(protected readonly foo: string) {} } - `.trim(), + `, }, ], }, @@ -537,7 +537,7 @@ class Test { return this.x; } } - `.trim(), + `, errors: [ { messageId: 'missingAccessibility', @@ -545,7 +545,7 @@ class Test { type: 'class property', name: 'x', }, - line: 2, + line: 3, column: 3, suggestions: [ { @@ -558,7 +558,7 @@ class Test { return this.x; } } - `.trim(), + `, }, { messageId: 'addPrivateAccessibility', @@ -570,7 +570,7 @@ class Test { return this.x; } } - `.trim(), + `, }, { messageId: 'addProtectedAccessibility', @@ -582,7 +582,7 @@ class Test { return this.x; } } - `.trim(), + `, }, ], }, @@ -597,7 +597,7 @@ class Test { return this.x; } } - `.trim(), + `, errors: [ { messageId: 'missingAccessibility', @@ -605,7 +605,7 @@ class Test { type: 'method definition', name: 'getX', }, - line: 3, + line: 4, column: 3, suggestions: [ { @@ -617,7 +617,7 @@ class Test { return this.x; } } - `.trim(), + `, }, { messageId: 'addPrivateAccessibility', @@ -628,7 +628,7 @@ class Test { return this.x; } } - `.trim(), + `, }, { messageId: 'addProtectedAccessibility', @@ -639,7 +639,7 @@ class Test { return this.x; } } - `.trim(), + `, }, ], }, @@ -654,7 +654,7 @@ class Test { return this.x; } } - `.trim(), + `, errors: [ { messageId: 'missingAccessibility', @@ -662,7 +662,7 @@ class Test { type: 'class property', name: 'x', }, - line: 2, + line: 3, column: 3, suggestions: [ { @@ -674,7 +674,7 @@ class Test { return this.x; } } - `.trim(), + `, }, { messageId: 'addPrivateAccessibility', @@ -685,7 +685,7 @@ class Test { return this.x; } } - `.trim(), + `, }, { messageId: 'addProtectedAccessibility', @@ -696,7 +696,7 @@ class Test { return this.x; } } - `.trim(), + `, }, ], }, @@ -706,7 +706,7 @@ class Test { type: 'method definition', name: 'getX', }, - line: 3, + line: 4, column: 3, suggestions: [ { @@ -718,7 +718,7 @@ class Test { return this.x; } } - `.trim(), + `, }, { messageId: 'addPrivateAccessibility', @@ -729,7 +729,7 @@ class Test { return this.x; } } - `.trim(), + `, }, { messageId: 'addProtectedAccessibility', @@ -740,7 +740,7 @@ class Test { return this.x; } } - `.trim(), + `, }, ], }, @@ -859,11 +859,11 @@ class Test { this.x = value; } } - `.trim(), + `, errors: [ { messageId: 'missingAccessibility', - line: 6, + line: 7, column: 3, suggestions: [ { @@ -881,7 +881,7 @@ class Test { this.x = value; } } - `.trim(), + `, }, { messageId: 'addPrivateAccessibility', @@ -898,7 +898,7 @@ class Test { this.x = value; } } - `.trim(), + `, }, { messageId: 'addProtectedAccessibility', @@ -915,13 +915,13 @@ class Test { this.x = value; } } - `.trim(), + `, }, ], }, { messageId: 'missingAccessibility', - line: 9, + line: 10, column: 3, suggestions: [ { @@ -939,7 +939,7 @@ class Test { this.x = value; } } - `.trim(), + `, }, { messageId: 'addPrivateAccessibility', @@ -956,7 +956,7 @@ class Test { this.x = value; } } - `.trim(), + `, }, { messageId: 'addProtectedAccessibility', @@ -973,7 +973,7 @@ class Test { this.x = value; } } - `.trim(), + `, }, ], }, @@ -995,11 +995,11 @@ class Test { this.x = value; } } - `.trim(), + `, errors: [ { messageId: 'missingAccessibility', - line: 3, + line: 4, column: 3, suggestions: [ { @@ -1017,7 +1017,7 @@ class Test { this.x = value; } } - `.trim(), + `, }, { messageId: 'addPrivateAccessibility', @@ -1034,7 +1034,7 @@ class Test { this.x = value; } } - `.trim(), + `, }, { messageId: 'addProtectedAccessibility', @@ -1051,13 +1051,13 @@ class Test { this.x = value; } } - `.trim(), + `, }, ], }, { messageId: 'missingAccessibility', - line: 6, + line: 7, column: 3, suggestions: [ { @@ -1075,7 +1075,7 @@ class Test { this.x = value; } } - `.trim(), + `, }, { messageId: 'addPrivateAccessibility', @@ -1092,7 +1092,7 @@ class Test { this.x = value; } } - `.trim(), + `, }, { messageId: 'addProtectedAccessibility', @@ -1109,13 +1109,13 @@ class Test { this.x = value; } } - `.trim(), + `, }, ], }, { messageId: 'missingAccessibility', - line: 9, + line: 10, column: 3, suggestions: [ { @@ -1133,7 +1133,7 @@ class Test { this.x = value; } } - `.trim(), + `, }, { messageId: 'addPrivateAccessibility', @@ -1150,7 +1150,7 @@ class Test { this.x = value; } } - `.trim(), + `, }, { messageId: 'addProtectedAccessibility', @@ -1167,7 +1167,7 @@ class Test { this.x = value; } } - `.trim(), + `, }, ], }, @@ -1182,11 +1182,11 @@ class Test { return 'foo'; } } - `.trim(), + `, errors: [ { messageId: 'missingAccessibility', - line: 2, + line: 3, column: 3, suggestions: [ { @@ -1198,7 +1198,7 @@ class Test { return 'foo'; } } - `.trim(), + `, }, { messageId: 'addPrivateAccessibility', @@ -1209,7 +1209,7 @@ class Test { return 'foo'; } } - `.trim(), + `, }, { messageId: 'addProtectedAccessibility', @@ -1220,7 +1220,7 @@ class Test { return 'foo'; } } - `.trim(), + `, }, ], }, @@ -1237,11 +1237,11 @@ class Test { class Test { constructor(public x: number) {} } - `.trim(), + `, errors: [ { messageId: 'missingAccessibility', - line: 2, + line: 3, column: 3, suggestions: [ { @@ -1250,7 +1250,7 @@ class Test { class Test { public constructor(public x: number) {} } - `.trim(), + `, }, { messageId: 'addPrivateAccessibility', @@ -1258,7 +1258,7 @@ class Test { class Test { private constructor(public x: number) {} } - `.trim(), + `, }, { messageId: 'addProtectedAccessibility', @@ -1266,7 +1266,7 @@ class Test { class Test { protected constructor(public x: number) {} } - `.trim(), + `, }, ], }, @@ -1304,7 +1304,7 @@ class Test { class Test { x = 2; } - `.trim(), + `, options: [ { accessibility: 'off', @@ -1314,7 +1314,7 @@ class Test { errors: [ { messageId: 'missingAccessibility', - line: 2, + line: 3, column: 3, suggestions: [ { @@ -1323,7 +1323,7 @@ class Test { class Test { public x = 2; } - `.trim(), + `, }, { messageId: 'addPrivateAccessibility', @@ -1331,7 +1331,7 @@ class Test { class Test { private x = 2; } - `.trim(), + `, }, { messageId: 'addProtectedAccessibility', @@ -1339,7 +1339,7 @@ class Test { class Test { protected x = 2; } - `.trim(), + `, }, ], }, @@ -1378,12 +1378,12 @@ class Test { class Test { constructor(public ...x: any[]) {} } - `.trim(), + `, options: [{ accessibility: 'explicit' }], errors: [ { messageId: 'missingAccessibility', - line: 2, + line: 3, column: 3, suggestions: [ { @@ -1392,7 +1392,7 @@ class Test { class Test { public constructor(public ...x: any[]) {} } - `.trim(), + `, }, { messageId: 'addPrivateAccessibility', @@ -1400,7 +1400,7 @@ class Test { class Test { private constructor(public ...x: any[]) {} } - `.trim(), + `, }, { messageId: 'addProtectedAccessibility', @@ -1408,7 +1408,7 @@ class Test { class Test { protected constructor(public ...x: any[]) {} } - `.trim(), + `, }, ], }, @@ -1688,12 +1688,12 @@ class Test { abstract class SomeClass { abstract method(): string; } - `.trim(), + `, options: [{ accessibility: 'explicit' }], errors: [ { messageId: 'missingAccessibility', - line: 2, + line: 3, column: 3, suggestions: [ { @@ -1702,7 +1702,7 @@ abstract class SomeClass { abstract class SomeClass { public abstract method(): string; } - `.trim(), + `, }, { messageId: 'addPrivateAccessibility', @@ -1710,7 +1710,7 @@ abstract class SomeClass { abstract class SomeClass { private abstract method(): string; } - `.trim(), + `, }, { messageId: 'addProtectedAccessibility', @@ -1718,7 +1718,7 @@ abstract class SomeClass { abstract class SomeClass { protected abstract method(): string; } - `.trim(), + `, }, ], }, @@ -1755,12 +1755,12 @@ abstract class SomeClass { abstract class SomeClass { abstract x: string; } - `.trim(), + `, options: [{ accessibility: 'explicit' }], errors: [ { messageId: 'missingAccessibility', - line: 2, + line: 3, column: 3, suggestions: [ { @@ -1769,7 +1769,7 @@ abstract class SomeClass { abstract class SomeClass { public abstract x: string; } - `.trim(), + `, }, { messageId: 'addPrivateAccessibility', @@ -1777,7 +1777,7 @@ abstract class SomeClass { abstract class SomeClass { private abstract x: string; } - `.trim(), + `, }, { messageId: 'addProtectedAccessibility', @@ -1785,7 +1785,7 @@ abstract class SomeClass { abstract class SomeClass { protected abstract x: string; } - `.trim(), + `, }, ], }, @@ -1833,11 +1833,11 @@ class DecoratedClass { this.x = x; } } - `.trim(), + `, errors: [ { messageId: 'missingAccessibility', - line: 2, + line: 3, column: 3, suggestions: [ { @@ -1858,7 +1858,7 @@ class DecoratedClass { this.x = x; } } - `.trim(), + `, }, { messageId: 'addPrivateAccessibility', @@ -1878,7 +1878,7 @@ class DecoratedClass { this.x = x; } } - `.trim(), + `, }, { messageId: 'addProtectedAccessibility', @@ -1898,13 +1898,13 @@ class DecoratedClass { this.x = x; } } - `.trim(), + `, }, ], }, { messageId: 'missingAccessibility', - line: 2, + line: 3, column: 15, suggestions: [ { @@ -1925,7 +1925,7 @@ class DecoratedClass { this.x = x; } } - `.trim(), + `, }, { messageId: 'addPrivateAccessibility', @@ -1945,7 +1945,7 @@ class DecoratedClass { this.x = x; } } - `.trim(), + `, }, { messageId: 'addProtectedAccessibility', @@ -1965,13 +1965,13 @@ class DecoratedClass { this.x = x; } } - `.trim(), + `, }, ], }, { messageId: 'missingAccessibility', - line: 3, + line: 4, column: 3, suggestions: [ { @@ -1992,7 +1992,7 @@ class DecoratedClass { this.x = x; } } - `.trim(), + `, }, { messageId: 'addPrivateAccessibility', @@ -2012,7 +2012,7 @@ class DecoratedClass { this.x = x; } } - `.trim(), + `, }, { messageId: 'addProtectedAccessibility', @@ -2032,13 +2032,13 @@ class DecoratedClass { this.x = x; } } - `.trim(), + `, }, ], }, { messageId: 'missingAccessibility', - line: 4, + line: 5, column: 3, suggestions: [ { @@ -2059,7 +2059,7 @@ class DecoratedClass { this.x = x; } } - `.trim(), + `, }, { messageId: 'addPrivateAccessibility', @@ -2079,7 +2079,7 @@ class DecoratedClass { this.x = x; } } - `.trim(), + `, }, { messageId: 'addProtectedAccessibility', @@ -2099,13 +2099,13 @@ class DecoratedClass { this.x = x; } } - `.trim(), + `, }, ], }, { messageId: 'missingAccessibility', - line: 7, + line: 8, column: 3, suggestions: [ { @@ -2126,7 +2126,7 @@ class DecoratedClass { this.x = x; } } - `.trim(), + `, }, { messageId: 'addPrivateAccessibility', @@ -2146,7 +2146,7 @@ class DecoratedClass { this.x = x; } } - `.trim(), + `, }, { messageId: 'addProtectedAccessibility', @@ -2166,13 +2166,13 @@ class DecoratedClass { this.x = x; } } - `.trim(), + `, }, ], }, { messageId: 'missingAccessibility', - line: 12, + line: 13, column: 3, suggestions: [ { @@ -2193,7 +2193,7 @@ class DecoratedClass { this.x = x; } } - `.trim(), + `, }, { messageId: 'addPrivateAccessibility', @@ -2213,7 +2213,7 @@ class DecoratedClass { this.x = x; } } - `.trim(), + `, }, { messageId: 'addProtectedAccessibility', @@ -2233,7 +2233,7 @@ class DecoratedClass { this.x = x; } } - `.trim(), + `, }, ], }, From d38da5164bf6450b3bd431682627a4d1bed6a25b Mon Sep 17 00:00:00 2001 From: Jacob Bandes-Storch Date: Thu, 18 Aug 2022 11:27:17 -0700 Subject: [PATCH 4/6] Update packages/eslint-plugin/src/rules/explicit-member-accessibility.ts Co-authored-by: Josh Goldberg --- .../eslint-plugin/src/rules/explicit-member-accessibility.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts b/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts index fc1f6fe8a2d..39791563bd3 100644 --- a/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts +++ b/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts @@ -232,7 +232,7 @@ export default util.createRule({ accessibility: TSESTree.Accessibility, fixer: TSESLint.RuleFixer, ): TSESLint.RuleFix | null { - if (node.decorators && node.decorators.length > 0) { + if (node?.decorators?.length) { const lastDecorator = node.decorators[node.decorators.length - 1]; const nextToken = sourceCode.getTokenAfter(lastDecorator); if (!nextToken) { From 46234897c0093485b271218f89700338e6efd1e6 Mon Sep 17 00:00:00 2001 From: Jacob Bandes-Storch Date: Thu, 18 Aug 2022 11:33:54 -0700 Subject: [PATCH 5/6] merge message IDs --- .../rules/explicit-member-accessibility.ts | 17 +- .../explicit-member-accessibility.test.ts | 225 ++++++++++++------ 2 files changed, 158 insertions(+), 84 deletions(-) diff --git a/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts b/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts index 39791563bd3..679379f4386 100644 --- a/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts +++ b/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts @@ -28,9 +28,7 @@ type Options = [Config]; type MessageIds = | 'unwantedPublicAccessibility' | 'missingAccessibility' - | 'addPublicAccessibility' - | 'addPrivateAccessibility' - | 'addProtectedAccessibility'; + | 'addExplicitAccessibility'; const accessibilityLevel = { oneOf: [ @@ -64,11 +62,9 @@ export default util.createRule({ messages: { missingAccessibility: 'Missing accessibility modifier on {{type}} {{name}}.', - addPublicAccessibility: "Add 'public' accessibility modifier", - addPrivateAccessibility: "Add 'private' accessibility modifier", - addProtectedAccessibility: "Add 'protected' accessibility modifier", unwantedPublicAccessibility: 'Public accessibility modifier on {{type}} {{name}}.', + addExplicitAccessibility: "Add '{{ type }}' accessibility modifier", }, schema: [ { @@ -245,15 +241,18 @@ export default util.createRule({ return [ { - messageId: 'addPublicAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'public' }, fix: fixer => fix('public', fixer), }, { - messageId: 'addPrivateAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'private' }, fix: fixer => fix('private', fixer), }, { - messageId: 'addProtectedAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'protected' }, fix: fixer => fix('protected', fixer), }, ]; diff --git a/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts b/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts index 706e1ec41bb..04a6fa55842 100644 --- a/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts +++ b/packages/eslint-plugin/tests/rules/explicit-member-accessibility.test.ts @@ -368,7 +368,8 @@ export class XXXX { line: 3, suggestions: [ { - messageId: 'addPublicAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'public' }, output: ` export class XXXX { public constructor(public readonly value: string) {} @@ -376,7 +377,8 @@ export class XXXX { `, }, { - messageId: 'addPrivateAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'private' }, output: ` export class XXXX { public constructor(private readonly value: string) {} @@ -384,7 +386,8 @@ export class XXXX { `, }, { - messageId: 'addProtectedAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'protected' }, output: ` export class XXXX { public constructor(protected readonly value: string) {} @@ -408,7 +411,8 @@ export class WithParameterProperty { messageId: 'missingAccessibility', suggestions: [ { - messageId: 'addPublicAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'public' }, output: ` export class WithParameterProperty { public constructor(public readonly value: string) {} @@ -416,7 +420,8 @@ export class WithParameterProperty { `, }, { - messageId: 'addPrivateAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'private' }, output: ` export class WithParameterProperty { public constructor(private readonly value: string) {} @@ -424,7 +429,8 @@ export class WithParameterProperty { `, }, { - messageId: 'addProtectedAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'protected' }, output: ` export class WithParameterProperty { public constructor(protected readonly value: string) {} @@ -456,7 +462,8 @@ export class XXXX { messageId: 'missingAccessibility', suggestions: [ { - messageId: 'addPublicAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'public' }, output: ` export class XXXX { public constructor(public readonly samosa: string) {} @@ -464,7 +471,8 @@ export class XXXX { `, }, { - messageId: 'addPrivateAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'private' }, output: ` export class XXXX { public constructor(private readonly samosa: string) {} @@ -472,7 +480,8 @@ export class XXXX { `, }, { - messageId: 'addProtectedAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'protected' }, output: ` export class XXXX { public constructor(protected readonly samosa: string) {} @@ -501,7 +510,8 @@ class Test { messageId: 'missingAccessibility', suggestions: [ { - messageId: 'addPublicAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'public' }, output: ` class Test { public constructor(public readonly foo: string) {} @@ -509,7 +519,8 @@ class Test { `, }, { - messageId: 'addPrivateAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'private' }, output: ` class Test { public constructor(private readonly foo: string) {} @@ -517,7 +528,8 @@ class Test { `, }, { - messageId: 'addProtectedAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'protected' }, output: ` class Test { public constructor(protected readonly foo: string) {} @@ -549,7 +561,8 @@ class Test { column: 3, suggestions: [ { - messageId: 'addPublicAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'public' }, output: ` class Test { @@ -561,7 +574,8 @@ class Test { `, }, { - messageId: 'addPrivateAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'private' }, output: ` class Test { @@ -573,7 +587,8 @@ class Test { `, }, { - messageId: 'addProtectedAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'protected' }, output: ` class Test { @@ -609,7 +624,8 @@ class Test { column: 3, suggestions: [ { - messageId: 'addPublicAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'public' }, output: ` class Test { private x: number; @@ -620,7 +636,8 @@ class Test { `, }, { - messageId: 'addPrivateAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'private' }, output: ` class Test { private x: number; @@ -631,7 +648,8 @@ class Test { `, }, { - messageId: 'addProtectedAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'protected' }, output: ` class Test { private x: number; @@ -666,7 +684,8 @@ class Test { column: 3, suggestions: [ { - messageId: 'addPublicAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'public' }, output: ` class Test { public x?: number; @@ -677,7 +696,8 @@ class Test { `, }, { - messageId: 'addPrivateAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'private' }, output: ` class Test { private x?: number; @@ -688,7 +708,8 @@ class Test { `, }, { - messageId: 'addProtectedAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'protected' }, output: ` class Test { protected x?: number; @@ -710,7 +731,8 @@ class Test { column: 3, suggestions: [ { - messageId: 'addPublicAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'public' }, output: ` class Test { x?: number; @@ -721,7 +743,8 @@ class Test { `, }, { - messageId: 'addPrivateAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'private' }, output: ` class Test { x?: number; @@ -732,7 +755,8 @@ class Test { `, }, { - messageId: 'addProtectedAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'protected' }, output: ` class Test { x?: number; @@ -867,7 +891,8 @@ class Test { column: 3, suggestions: [ { - messageId: 'addPublicAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'public' }, output: ` class Test { private x: number; @@ -884,7 +909,8 @@ class Test { `, }, { - messageId: 'addPrivateAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'private' }, output: ` class Test { private x: number; @@ -901,7 +927,8 @@ class Test { `, }, { - messageId: 'addProtectedAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'protected' }, output: ` class Test { private x: number; @@ -925,7 +952,8 @@ class Test { column: 3, suggestions: [ { - messageId: 'addPublicAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'public' }, output: ` class Test { private x: number; @@ -942,7 +970,8 @@ class Test { `, }, { - messageId: 'addPrivateAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'private' }, output: ` class Test { private x: number; @@ -959,7 +988,8 @@ class Test { `, }, { - messageId: 'addProtectedAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'protected' }, output: ` class Test { private x: number; @@ -1003,7 +1033,8 @@ class Test { column: 3, suggestions: [ { - messageId: 'addPublicAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'public' }, output: ` class Test { private x: number; @@ -1020,7 +1051,8 @@ class Test { `, }, { - messageId: 'addPrivateAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'private' }, output: ` class Test { private x: number; @@ -1037,7 +1069,8 @@ class Test { `, }, { - messageId: 'addProtectedAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'protected' }, output: ` class Test { private x: number; @@ -1061,7 +1094,8 @@ class Test { column: 3, suggestions: [ { - messageId: 'addPublicAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'public' }, output: ` class Test { private x: number; @@ -1078,7 +1112,8 @@ class Test { `, }, { - messageId: 'addPrivateAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'private' }, output: ` class Test { private x: number; @@ -1095,7 +1130,8 @@ class Test { `, }, { - messageId: 'addProtectedAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'protected' }, output: ` class Test { private x: number; @@ -1119,7 +1155,8 @@ class Test { column: 3, suggestions: [ { - messageId: 'addPublicAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'public' }, output: ` class Test { private x: number; @@ -1136,7 +1173,8 @@ class Test { `, }, { - messageId: 'addPrivateAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'private' }, output: ` class Test { private x: number; @@ -1153,7 +1191,8 @@ class Test { `, }, { - messageId: 'addProtectedAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'protected' }, output: ` class Test { private x: number; @@ -1190,7 +1229,8 @@ class Test { column: 3, suggestions: [ { - messageId: 'addPublicAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'public' }, output: ` class Test { public constructor(public x: number) {} @@ -1201,7 +1241,8 @@ class Test { `, }, { - messageId: 'addPrivateAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'private' }, output: ` class Test { private constructor(public x: number) {} @@ -1212,7 +1253,8 @@ class Test { `, }, { - messageId: 'addProtectedAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'protected' }, output: ` class Test { protected constructor(public x: number) {} @@ -1245,7 +1287,8 @@ class Test { column: 3, suggestions: [ { - messageId: 'addPublicAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'public' }, output: ` class Test { public constructor(public x: number) {} @@ -1253,7 +1296,8 @@ class Test { `, }, { - messageId: 'addPrivateAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'private' }, output: ` class Test { private constructor(public x: number) {} @@ -1261,7 +1305,8 @@ class Test { `, }, { - messageId: 'addProtectedAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'protected' }, output: ` class Test { protected constructor(public x: number) {} @@ -1318,7 +1363,8 @@ class Test { column: 3, suggestions: [ { - messageId: 'addPublicAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'public' }, output: ` class Test { public x = 2; @@ -1326,7 +1372,8 @@ class Test { `, }, { - messageId: 'addPrivateAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'private' }, output: ` class Test { private x = 2; @@ -1334,7 +1381,8 @@ class Test { `, }, { - messageId: 'addProtectedAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'protected' }, output: ` class Test { protected x = 2; @@ -1387,7 +1435,8 @@ class Test { column: 3, suggestions: [ { - messageId: 'addPublicAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'public' }, output: ` class Test { public constructor(public ...x: any[]) {} @@ -1395,7 +1444,8 @@ class Test { `, }, { - messageId: 'addPrivateAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'private' }, output: ` class Test { private constructor(public ...x: any[]) {} @@ -1403,7 +1453,8 @@ class Test { `, }, { - messageId: 'addProtectedAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'protected' }, output: ` class Test { protected constructor(public ...x: any[]) {} @@ -1697,7 +1748,8 @@ abstract class SomeClass { column: 3, suggestions: [ { - messageId: 'addPublicAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'public' }, output: ` abstract class SomeClass { public abstract method(): string; @@ -1705,7 +1757,8 @@ abstract class SomeClass { `, }, { - messageId: 'addPrivateAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'private' }, output: ` abstract class SomeClass { private abstract method(): string; @@ -1713,7 +1766,8 @@ abstract class SomeClass { `, }, { - messageId: 'addProtectedAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'protected' }, output: ` abstract class SomeClass { protected abstract method(): string; @@ -1764,7 +1818,8 @@ abstract class SomeClass { column: 3, suggestions: [ { - messageId: 'addPublicAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'public' }, output: ` abstract class SomeClass { public abstract x: string; @@ -1772,7 +1827,8 @@ abstract class SomeClass { `, }, { - messageId: 'addPrivateAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'private' }, output: ` abstract class SomeClass { private abstract x: string; @@ -1780,7 +1836,8 @@ abstract class SomeClass { `, }, { - messageId: 'addProtectedAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'protected' }, output: ` abstract class SomeClass { protected abstract x: string; @@ -1841,7 +1898,8 @@ class DecoratedClass { column: 3, suggestions: [ { - messageId: 'addPublicAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'public' }, output: ` class DecoratedClass { public constructor(@foo @bar() readonly arg: string) {} @@ -1861,7 +1919,8 @@ class DecoratedClass { `, }, { - messageId: 'addPrivateAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'private' }, output: ` class DecoratedClass { private constructor(@foo @bar() readonly arg: string) {} @@ -1881,7 +1940,8 @@ class DecoratedClass { `, }, { - messageId: 'addProtectedAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'protected' }, output: ` class DecoratedClass { protected constructor(@foo @bar() readonly arg: string) {} @@ -1908,7 +1968,8 @@ class DecoratedClass { column: 15, suggestions: [ { - messageId: 'addPublicAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'public' }, output: ` class DecoratedClass { constructor(@foo @bar() public readonly arg: string) {} @@ -1928,7 +1989,8 @@ class DecoratedClass { `, }, { - messageId: 'addPrivateAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'private' }, output: ` class DecoratedClass { constructor(@foo @bar() private readonly arg: string) {} @@ -1948,7 +2010,8 @@ class DecoratedClass { `, }, { - messageId: 'addProtectedAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'protected' }, output: ` class DecoratedClass { constructor(@foo @bar() protected readonly arg: string) {} @@ -1975,7 +2038,8 @@ class DecoratedClass { column: 3, suggestions: [ { - messageId: 'addPublicAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'public' }, output: ` class DecoratedClass { constructor(@foo @bar() readonly arg: string) {} @@ -1995,7 +2059,8 @@ class DecoratedClass { `, }, { - messageId: 'addPrivateAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'private' }, output: ` class DecoratedClass { constructor(@foo @bar() readonly arg: string) {} @@ -2015,7 +2080,8 @@ class DecoratedClass { `, }, { - messageId: 'addProtectedAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'protected' }, output: ` class DecoratedClass { constructor(@foo @bar() readonly arg: string) {} @@ -2042,7 +2108,8 @@ class DecoratedClass { column: 3, suggestions: [ { - messageId: 'addPublicAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'public' }, output: ` class DecoratedClass { constructor(@foo @bar() readonly arg: string) {} @@ -2062,7 +2129,8 @@ class DecoratedClass { `, }, { - messageId: 'addPrivateAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'private' }, output: ` class DecoratedClass { constructor(@foo @bar() readonly arg: string) {} @@ -2082,7 +2150,8 @@ class DecoratedClass { `, }, { - messageId: 'addProtectedAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'protected' }, output: ` class DecoratedClass { constructor(@foo @bar() readonly arg: string) {} @@ -2109,7 +2178,8 @@ class DecoratedClass { column: 3, suggestions: [ { - messageId: 'addPublicAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'public' }, output: ` class DecoratedClass { constructor(@foo @bar() readonly arg: string) {} @@ -2129,7 +2199,8 @@ class DecoratedClass { `, }, { - messageId: 'addPrivateAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'private' }, output: ` class DecoratedClass { constructor(@foo @bar() readonly arg: string) {} @@ -2149,7 +2220,8 @@ class DecoratedClass { `, }, { - messageId: 'addProtectedAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'protected' }, output: ` class DecoratedClass { constructor(@foo @bar() readonly arg: string) {} @@ -2176,7 +2248,8 @@ class DecoratedClass { column: 3, suggestions: [ { - messageId: 'addPublicAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'public' }, output: ` class DecoratedClass { constructor(@foo @bar() readonly arg: string) {} @@ -2196,7 +2269,8 @@ class DecoratedClass { `, }, { - messageId: 'addPrivateAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'private' }, output: ` class DecoratedClass { constructor(@foo @bar() readonly arg: string) {} @@ -2216,7 +2290,8 @@ class DecoratedClass { `, }, { - messageId: 'addProtectedAccessibility', + messageId: 'addExplicitAccessibility', + data: { type: 'protected' }, output: ` class DecoratedClass { constructor(@foo @bar() readonly arg: string) {} From b46d54ea7955ed87392b30d84817cf9c5c439244 Mon Sep 17 00:00:00 2001 From: Jacob Bandes-Storch Date: Thu, 18 Aug 2022 11:59:45 -0700 Subject: [PATCH 6/6] ! --- .../eslint-plugin/src/rules/explicit-member-accessibility.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts b/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts index 679379f4386..292747ca04c 100644 --- a/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts +++ b/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts @@ -230,10 +230,7 @@ export default util.createRule({ ): TSESLint.RuleFix | null { if (node?.decorators?.length) { const lastDecorator = node.decorators[node.decorators.length - 1]; - const nextToken = sourceCode.getTokenAfter(lastDecorator); - if (!nextToken) { - return null; - } + const nextToken = sourceCode.getTokenAfter(lastDecorator)!; return fixer.insertTextBefore(nextToken, `${accessibility} `); } return fixer.insertTextBefore(node, `${accessibility} `);