Skip to content

Commit 00d6e80

Browse files
committed
Fix: False negative with TypeScript rules that don't have type parameters (fixes #202)
1 parent 0ebc427 commit 00d6e80

File tree

2 files changed

+22
-13
lines changed

2 files changed

+22
-13
lines changed

lib/utils.js

-2
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,6 @@ function getRuleExportsESM (ast) {
119119
return { create: node, meta: null, isNewStyle: false };
120120
} else if (
121121
node.type === 'CallExpression' &&
122-
node.typeParameters &&
123-
node.typeParameters.params.length === 2 && // Expecting: <Options, MessageIds>
124122
node.arguments.length === 1 &&
125123
node.arguments[0].type === 'ObjectExpression' &&
126124
// Check various TypeScript rule helper formats.

tests/lib/utils.js

+22-11
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,6 @@ describe('utils', () => {
5454
'export default foo.bar(123);',
5555
'export default foo.bar()(123);',
5656

57-
// Correct TypeScript helper structure but missing parameterized types:
58-
'export default createESLintRule({ create() {}, meta: {} });',
59-
'export default util.createRule({ create() {}, meta: {} });',
60-
'export default ESLintUtils.RuleCreator(docsUrl)({ create() {}, meta: {} });',
6157
].forEach(noRuleCase => {
6258
it(`returns null for ${noRuleCase}`, () => {
6359
const ast = espree.parse(noRuleCase, { ecmaVersion: 8, range: true, sourceType: 'module' });
@@ -75,13 +71,6 @@ describe('utils', () => {
7571
'export default foo<Options, MessageIds>(123);',
7672
'export default foo.bar<Options, MessageIds>(123);',
7773
'export default foo.bar()<Options, MessageIds>(123);',
78-
79-
// Correct TypeScript helper structure but missing parameterized types:
80-
'export default createESLintRule({ create() {}, meta: {} });',
81-
'export default createESLintRule<>({ create() {}, meta: {} });',
82-
'export default createESLintRule<OnlyOneType>({ create() {}, meta: {} });',
83-
'export default util.createRule({ create() {}, meta: {} });',
84-
'export default ESLintUtils.RuleCreator(docsUrl)({ create() {}, meta: {} });',
8574
].forEach(noRuleCase => {
8675
it(`returns null for ${noRuleCase}`, () => {
8776
const ast = typescriptEslintParser.parse(noRuleCase, { ecmaVersion: 8, range: true, sourceType: 'module' });
@@ -112,18 +101,40 @@ describe('utils', () => {
112101
meta: { type: 'ObjectExpression' },
113102
isNewStyle: true,
114103
},
104+
'export default createESLintRule<>({ create() {}, meta: {} });': {
105+
create: { type: 'FunctionExpression' },
106+
meta: { type: 'ObjectExpression' },
107+
isNewStyle: true,
108+
},
109+
'export default createESLintRule({ create() {}, meta: {} });': {
110+
create: { type: 'FunctionExpression' },
111+
meta: { type: 'ObjectExpression' },
112+
isNewStyle: true,
113+
},
114+
115115
// Util function from util object
116116
'export default util.createRule<Options, MessageIds>({ create() {}, meta: {} });': {
117117
create: { type: 'FunctionExpression' },
118118
meta: { type: 'ObjectExpression' },
119119
isNewStyle: true,
120120
},
121+
'export default util.createRule({ create() {}, meta: {} });': {
122+
create: { type: 'FunctionExpression' },
123+
meta: { type: 'ObjectExpression' },
124+
isNewStyle: true,
125+
},
126+
121127
// Util function from util object with additional doc URL argument
122128
'export default ESLintUtils.RuleCreator(docsUrl)<Options, MessageIds>({ create() {}, meta: {} });': {
123129
create: { type: 'FunctionExpression' },
124130
meta: { type: 'ObjectExpression' },
125131
isNewStyle: true,
126132
},
133+
'export default ESLintUtils.RuleCreator(docsUrl)({ create() {}, meta: {} });': {
134+
create: { type: 'FunctionExpression' },
135+
meta: { type: 'ObjectExpression' },
136+
isNewStyle: true,
137+
},
127138
};
128139

129140
Object.keys(CASES).forEach(ruleSource => {

0 commit comments

Comments
 (0)