Sitelet https://github.com/eslint-stylistic/eslint-stylistic/commit/0f7b4614
Skip to content

Commit 0f7b461

Browse files
authored
fix(type-annotation-spacing): handle type annotation in parens (#836)
1 parent 6929b22 commit 0f7b461

2 files changed

Lines changed: 23 additions & 13 deletions

File tree

‎packages/eslint-plugin/rules/type-annotation-spacing/type-annotation-spacing.test.ts‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1171,6 +1171,8 @@ interface Foo {
11711171
},
11721172
// https://github.com/typescript-eslint/typescript-eslint/issues/1663
11731173
'type ConstructorFn = new (...args: any[]) => any;',
1174+
// https://github.com/eslint-stylistic/eslint-stylistic/issues/441
1175+
`function error_is_reported_ok(): (void) {}`,
11741176
],
11751177
invalid: [
11761178
{
@@ -3786,6 +3788,13 @@ type Foo = {
37863788
},
37873789
],
37883790
},
3791+
{
3792+
code: `function error_is_reported_ok():(void) {}`,
3793+
output: `function error_is_reported_ok(): (void) {}`,
3794+
errors: [
3795+
{ messageId: 'expectedSpaceAfter', data: { type: ':' }, line: 1, column: 32 },
3796+
],
3797+
},
37893798
],
37903799
})
37913800

‎packages/eslint-plugin/rules/type-annotation-spacing/type-annotation-spacing.ts‎

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type { ASTNode, Tree } from '#types'
2+
import { isNotOpeningParenToken } from '#utils/ast'
23
import { createRule } from '#utils/create-rule'
34

45
import {
@@ -165,8 +166,9 @@ export default createRule<Options, MessageIds>({
165166
function checkTypeAnnotationSpacing(
166167
typeAnnotation: Tree.TypeNode,
167168
): void {
168-
const nextNode = typeAnnotation
169-
const punctuatorTokenEnd = sourceCode.getTokenBefore(nextNode)!
169+
/** :, => */
170+
const punctuatorTokenEnd = sourceCode.getTokenBefore(typeAnnotation, isNotOpeningParenToken)!
171+
/** :, =>, ?() */
170172
let punctuatorTokenStart = punctuatorTokenEnd
171173
let previousToken = sourceCode.getTokenBefore(punctuatorTokenEnd)!
172174
let type = punctuatorTokenEnd.value
@@ -177,9 +179,8 @@ export default createRule<Options, MessageIds>({
177179
const { before, after } = getRules(ruleSet, typeAnnotation)
178180

179181
if (type === ':' && previousToken.value === '?') {
180-
if (
181-
sourceCode.isSpaceBetween(previousToken, punctuatorTokenStart)
182-
) {
182+
// space between ? and :
183+
if (sourceCode.isSpaceBetween(previousToken, punctuatorTokenStart)) {
183184
context.report({
184185
node: punctuatorTokenStart,
185186
messageId: 'unexpectedSpaceBetween',
@@ -209,11 +210,9 @@ export default createRule<Options, MessageIds>({
209210
}
210211
}
211212

212-
const previousDelta
213-
= punctuatorTokenStart.range[0] - previousToken.range[1]
214-
const nextDelta = nextNode.range[0] - punctuatorTokenEnd.range[1]
213+
const hasNextSpace = sourceCode.isSpaceBetween(punctuatorTokenEnd, typeAnnotation)
215214

216-
if (after && nextDelta === 0) {
215+
if (after && !hasNextSpace) {
217216
context.report({
218217
node: punctuatorTokenEnd,
219218
messageId: 'expectedSpaceAfter',
@@ -225,7 +224,7 @@ export default createRule<Options, MessageIds>({
225224
},
226225
})
227226
}
228-
else if (!after && nextDelta > 0) {
227+
else if (!after && hasNextSpace) {
229228
context.report({
230229
node: punctuatorTokenEnd,
231230
messageId: 'unexpectedSpaceAfter',
@@ -235,13 +234,15 @@ export default createRule<Options, MessageIds>({
235234
fix(fixer) {
236235
return fixer.removeRange([
237236
punctuatorTokenEnd.range[1],
238-
nextNode.range[0],
237+
typeAnnotation.range[0],
239238
])
240239
},
241240
})
242241
}
243242

244-
if (before && previousDelta === 0) {
243+
const hasPrevSpace = sourceCode.isSpaceBetween(previousToken, punctuatorTokenStart)
244+
245+
if (before && !hasPrevSpace) {
245246
context.report({
246247
node: punctuatorTokenStart,
247248
messageId: 'expectedSpaceBefore',
@@ -253,7 +254,7 @@ export default createRule<Options, MessageIds>({
253254
},
254255
})
255256
}
256-
else if (!before && previousDelta > 0) {
257+
else if (!before && hasPrevSpace) {
257258
context.report({
258259
node: punctuatorTokenStart,
259260
messageId: 'unexpectedSpaceBefore',

0 commit comments

Comments
 (0)