fix(generic-spacing): improve cases

This commit is contained in:
Anthony Fu 2022-11-02 17:21:24 +08:00
parent e13613fd5f
commit ff6a1fad6a
2 changed files with 25 additions and 11 deletions

View File

@ -13,12 +13,24 @@ type Foo<
`function foo< `function foo<
T T
>() {}`, >() {}`,
'const foo = <T>(name: T) => name',
`interface Log {
foo<T>(name: T): void
}`,
`interface Log {
<T>(name: T): void
}`,
] ]
const invalids = [ const invalids = [
['type Foo<T=true> = T', 'type Foo<T = true> = T'], ['type Foo<T=true> = T', 'type Foo<T = true> = T'],
['type Foo<T,K> = T', 'type Foo<T, K> = T'], ['type Foo<T,K> = T', 'type Foo<T, K> = T'],
['type Foo<T=false,K=1|2> = T', 'type Foo<T = false, K = 1|2> = T', 3], ['type Foo<T=false,K=1|2> = T', 'type Foo<T = false, K = 1|2> = T', 3],
['function foo <T>() {}', 'function foo<T>() {}'], ['function foo <T>() {}', 'function foo<T>() {}'],
[`interface Log {
foo <T>(name: T): void
}`, `interface Log {
foo<T>(name: T): void
}`],
] as const ] as const
it('runs', () => { it('runs', () => {

View File

@ -23,17 +23,19 @@ export default createEslintRule<Options, MessageIds>({
const sourceCode = context.getSourceCode() const sourceCode = context.getSourceCode()
return { return {
TSTypeParameterDeclaration: (node) => { TSTypeParameterDeclaration: (node) => {
const pre = sourceCode.text.slice(0, node.range[0]) if (!['TSCallSignatureDeclaration', 'ArrowFunctionExpression'].includes(node.parent.type)) {
const preSpace = pre.match(/(\s+)$/)?.[0] const pre = sourceCode.text.slice(0, node.range[0])
// strip space before <T> const preSpace = pre.match(/(\s+)$/)?.[0]
if (preSpace && preSpace.length) { // strip space before <T>
context.report({ if (preSpace && preSpace.length) {
node, context.report({
messageId: 'genericSpacingMismatch', node,
*fix(fixer) { messageId: 'genericSpacingMismatch',
yield fixer.replaceTextRange([node.range[0] - preSpace.length, node.range[0]], '') *fix(fixer) {
}, yield fixer.replaceTextRange([node.range[0] - preSpace.length, node.range[0]], '')
}) },
})
}
} }
// add space between <T,K> // add space between <T,K>