Skip to content

Commit badd4eb

Browse files
authored
fix: correctly handle rules that are missing meta or have meta / create defined in variables (#225)
1 parent 6a09dbe commit badd4eb

36 files changed

+444
-170
lines changed

Diff for: docs/rules/no-deprecated-context-methods.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ Examples of **incorrect** code for this rule:
3939
module.exports = {
4040
create (context) {
4141
return {
42-
Program (node) {
43-
const firstToken = context.getFirstToken(node);
42+
Program (ast) {
43+
const firstToken = context.getFirstToken(ast);
4444
},
4545
};
4646
},
@@ -55,8 +55,8 @@ module.exports = {
5555
const sourceCode = context.getSourceCode();
5656

5757
return {
58-
Program (node) {
59-
const firstToken = sourceCode.getFirstToken(node);
58+
Program (ast) {
59+
const firstToken = sourceCode.getFirstToken(ast);
6060
},
6161
};
6262
},

Diff for: lib/rules/fixer-return.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,9 @@ module.exports = {
9393
}
9494

9595
return {
96-
Program (node) {
97-
contextIdentifiers = utils.getContextIdentifiers(context, node);
96+
Program (ast) {
97+
const sourceCode = context.getSourceCode();
98+
contextIdentifiers = utils.getContextIdentifiers(sourceCode.scopeManager, ast);
9899
},
99100

100101
// Stacks this function's information.

Diff for: lib/rules/no-deprecated-context-methods.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ module.exports = {
5858
// ----------------------------------------------------------------------
5959

6060
return {
61-
'Program:exit' () {
62-
[...utils.getContextIdentifiers(context, sourceCode.ast)]
61+
'Program:exit' (ast) {
62+
[...utils.getContextIdentifiers(sourceCode.scopeManager, ast)]
6363
.filter(
6464
contextId =>
6565
contextId.parent.type === 'MemberExpression' &&

Diff for: lib/rules/no-deprecated-report-api.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ module.exports = {
3636
// ----------------------------------------------------------------------
3737

3838
return {
39-
Program (node) {
40-
contextIdentifiers = utils.getContextIdentifiers(context, node);
39+
Program (ast) {
40+
contextIdentifiers = utils.getContextIdentifiers(sourceCode.scopeManager, ast);
4141
},
4242
CallExpression (node) {
4343
if (

Diff for: lib/rules/no-missing-placeholders.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ module.exports = {
3737

3838
return {
3939
Program (ast) {
40-
contextIdentifiers = utils.getContextIdentifiers(context, ast);
40+
const sourceCode = context.getSourceCode();
41+
contextIdentifiers = utils.getContextIdentifiers(sourceCode.scopeManager, ast);
4142
},
4243
CallExpression (node) {
4344
if (

Diff for: lib/rules/no-unused-placeholders.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ module.exports = {
3737

3838
return {
3939
Program (ast) {
40-
contextIdentifiers = utils.getContextIdentifiers(context, ast);
40+
const sourceCode = context.getSourceCode();
41+
contextIdentifiers = utils.getContextIdentifiers(sourceCode.scopeManager, ast);
4142
},
4243
CallExpression (node) {
4344
if (

Diff for: lib/rules/no-useless-token-range.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ module.exports = {
107107

108108
return {
109109
'Program:exit' (ast) {
110-
[...utils.getSourceCodeIdentifiers(context, ast)]
110+
[...utils.getSourceCodeIdentifiers(sourceCode.scopeManager, ast)]
111111
.filter(identifier => identifier.parent.type === 'MemberExpression' &&
112112
identifier.parent.object === identifier &&
113113
identifier.parent.property.type === 'Identifier' &&

Diff for: lib/rules/prefer-message-ids.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@ module.exports = {
3636

3737
return {
3838
Program (ast) {
39-
contextIdentifiers = utils.getContextIdentifiers(context, ast);
39+
contextIdentifiers = utils.getContextIdentifiers(sourceCode.scopeManager, ast);
4040

41-
if (info === null || info.meta === null) {
41+
if (info === null) {
4242
return;
4343
}
4444

@@ -49,7 +49,7 @@ module.exports = {
4949
metaNode.properties.find(p => p.type === 'Property' && utils.getKeyName(p) === 'messages');
5050

5151
if (!messagesNode) {
52-
context.report({ node: metaNode, messageId: 'messagesMissing' });
52+
context.report({ node: metaNode || info.create, messageId: 'messagesMissing' });
5353
return;
5454
}
5555

Diff for: lib/rules/prefer-placeholders.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ module.exports = {
3939
// ----------------------------------------------------------------------
4040

4141
return {
42-
Program (node) {
43-
contextIdentifiers = utils.getContextIdentifiers(context, node);
42+
Program (ast) {
43+
contextIdentifiers = utils.getContextIdentifiers(scopeManager, ast);
4444
},
4545
CallExpression (node) {
4646
if (

Diff for: lib/rules/prefer-replace-text.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ module.exports = {
3838
let contextIdentifiers;
3939

4040
return {
41-
Program (node) {
42-
contextIdentifiers = utils.getContextIdentifiers(context, node);
41+
Program (ast) {
42+
contextIdentifiers = utils.getContextIdentifiers(sourceCode.scopeManager, ast);
4343
},
4444

4545
// Stacks this function's information.

Diff for: lib/rules/report-message-format.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,10 @@ module.exports = {
5959
// ----------------------------------------------------------------------
6060

6161
return {
62-
Program (node) {
63-
contextIdentifiers = utils.getContextIdentifiers(context, node);
64-
const ruleInfo = utils.getRuleInfo(context.getSourceCode());
62+
Program (ast) {
63+
const sourceCode = context.getSourceCode();
64+
contextIdentifiers = utils.getContextIdentifiers(sourceCode.scopeManager, ast);
65+
const ruleInfo = utils.getRuleInfo(sourceCode);
6566
const messagesObject = ruleInfo &&
6667
ruleInfo.meta &&
6768
ruleInfo.meta.type === 'ObjectExpression' &&

Diff for: lib/rules/require-meta-docs-description.js

+5-5
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,12 @@ module.exports = {
3939
},
4040

4141
create (context) {
42-
const sourceCode = context.getSourceCode();
43-
const info = utils.getRuleInfo(sourceCode);
44-
4542
return {
4643
Program () {
47-
if (info === null || info.meta === null) {
44+
const sourceCode = context.getSourceCode();
45+
const info = utils.getRuleInfo(sourceCode);
46+
47+
if (info === null) {
4848
return;
4949
}
5050

@@ -62,7 +62,7 @@ module.exports = {
6262
docsNode.value.properties.find(p => p.type === 'Property' && utils.getKeyName(p) === 'description');
6363

6464
if (!descriptionNode) {
65-
context.report({ node: docsNode ? docsNode : metaNode, messageId: 'missing' });
65+
context.report({ node: docsNode || metaNode || info.create, messageId: 'missing' });
6666
return;
6767
}
6868

Diff for: lib/rules/require-meta-fixable.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ module.exports = {
5757
// ----------------------------------------------------------------------
5858

5959
return {
60-
Program (node) {
61-
contextIdentifiers = utils.getContextIdentifiers(context, node);
60+
Program (ast) {
61+
contextIdentifiers = utils.getContextIdentifiers(sourceCode.scopeManager, ast);
6262
},
6363
CallExpression (node) {
6464
if (

Diff for: lib/rules/require-meta-has-suggestions.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ module.exports = {
3131
let ruleReportsSuggestions;
3232

3333
return {
34-
Program (node) {
35-
contextIdentifiers = utils.getContextIdentifiers(context, node);
34+
Program (ast) {
35+
contextIdentifiers = utils.getContextIdentifiers(sourceCode.scopeManager, ast);
3636
},
3737
CallExpression (node) {
3838
if (
@@ -71,7 +71,7 @@ module.exports = {
7171
if (!hasSuggestionsProperty) {
7272
// Rule reports suggestions but is missing the `meta.hasSuggestions` property altogether.
7373
context.report({
74-
node: metaNode ? metaNode : ruleInfo.create,
74+
node: metaNode || ruleInfo.create,
7575
messageId: 'shouldBeSuggestable',
7676
fix (fixer) {
7777
if (metaNode && metaNode.type === 'ObjectExpression') {

Diff for: lib/rules/require-meta-schema.js

+6-6
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ module.exports = {
4141
const sourceCode = context.getSourceCode();
4242
const { scopeManager } = sourceCode;
4343
const info = utils.getRuleInfo(sourceCode);
44-
if (info === null || info.meta === null) {
44+
if (info === null) {
4545
return {};
4646
}
4747

@@ -57,7 +57,7 @@ module.exports = {
5757

5858
return {
5959
Program (ast) {
60-
contextIdentifiers = utils.getContextIdentifiers(context, ast);
60+
contextIdentifiers = utils.getContextIdentifiers(scopeManager, ast);
6161

6262
schemaNode =
6363
metaNode &&
@@ -106,16 +106,16 @@ module.exports = {
106106
'Program:exit' () {
107107
if (!schemaNode && requireSchemaPropertyWhenOptionless) {
108108
context.report({
109-
node: metaNode,
109+
node: metaNode || info.create,
110110
messageId: 'missing',
111-
suggest: isUsingOptions ? [] : [
111+
suggest: !isUsingOptions && metaNode && metaNode.type === 'ObjectExpression' ? [
112112
{
113113
messageId: 'addEmptySchema',
114114
fix (fixer) {
115115
return utils.insertProperty(fixer, metaNode, 'schema: []', sourceCode);
116116
},
117117
},
118-
],
118+
] : [],
119119
});
120120
}
121121
},
@@ -130,7 +130,7 @@ module.exports = {
130130
node.property.name === 'options'
131131
) {
132132
isUsingOptions = true;
133-
context.report({ node: schemaNode || metaNode, messageId: 'foundOptionsUsage' });
133+
context.report({ node: schemaNode || metaNode || info.create, messageId: 'foundOptionsUsage' });
134134
}
135135
},
136136
};

Diff for: lib/rules/require-meta-type.js

+5-9
Original file line numberDiff line numberDiff line change
@@ -31,20 +31,16 @@ module.exports = {
3131
},
3232

3333
create (context) {
34-
const sourceCode = context.getSourceCode();
35-
const info = utils.getRuleInfo(sourceCode);
36-
37-
// ----------------------------------------------------------------------
38-
// Helpers
39-
// ----------------------------------------------------------------------
40-
4134
// ----------------------------------------------------------------------
4235
// Public
4336
// ----------------------------------------------------------------------
4437

4538
return {
4639
Program () {
47-
if (info === null || info.meta === null) {
40+
const sourceCode = context.getSourceCode();
41+
const info = utils.getRuleInfo(sourceCode);
42+
43+
if (info === null) {
4844
return;
4945
}
5046

@@ -55,7 +51,7 @@ module.exports = {
5551
metaNode.properties.find(p => p.type === 'Property' && utils.getKeyName(p) === 'type');
5652

5753
if (!typeNode) {
58-
context.report({ node: metaNode, messageId: 'missing' });
54+
context.report({ node: metaNode || info.create, messageId: 'missing' });
5955
return;
6056
}
6157

0 commit comments

Comments
 (0)