Skip to content

Commit 71dda18

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

File tree

2 files changed

+17
-13
lines changed

2 files changed

+17
-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

+17-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,35 @@ 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+
115110
// Util function from util object
116111
'export default util.createRule<Options, MessageIds>({ create() {}, meta: {} });': {
117112
create: { type: 'FunctionExpression' },
118113
meta: { type: 'ObjectExpression' },
119114
isNewStyle: true,
120115
},
116+
'export default util.createRule({ create() {}, meta: {} });': {
117+
create: { type: 'FunctionExpression' },
118+
meta: { type: 'ObjectExpression' },
119+
isNewStyle: true,
120+
},
121+
121122
// Util function from util object with additional doc URL argument
122123
'export default ESLintUtils.RuleCreator(docsUrl)<Options, MessageIds>({ create() {}, meta: {} });': {
123124
create: { type: 'FunctionExpression' },
124125
meta: { type: 'ObjectExpression' },
125126
isNewStyle: true,
126127
},
128+
'export default ESLintUtils.RuleCreator(docsUrl)({ create() {}, meta: {} });': {
129+
create: { type: 'FunctionExpression' },
130+
meta: { type: 'ObjectExpression' },
131+
isNewStyle: true,
132+
},
127133
};
128134

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

0 commit comments

Comments
 (0)