Skip to content

Commit

Permalink
fix: correctly handle rules that are missing meta or have meta / …
Browse files Browse the repository at this point in the history
…`create` defined in variables (#225)
  • Loading branch information
bmish committed Oct 26, 2021
1 parent 6a09dbe commit badd4eb
Show file tree
Hide file tree
Showing 36 changed files with 444 additions and 170 deletions.
8 changes: 4 additions & 4 deletions docs/rules/no-deprecated-context-methods.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ Examples of **incorrect** code for this rule:
module.exports = {
create (context) {
return {
Program (node) {
const firstToken = context.getFirstToken(node);
Program (ast) {
const firstToken = context.getFirstToken(ast);
},
};
},
Expand All @@ -55,8 +55,8 @@ module.exports = {
const sourceCode = context.getSourceCode();

return {
Program (node) {
const firstToken = sourceCode.getFirstToken(node);
Program (ast) {
const firstToken = sourceCode.getFirstToken(ast);
},
};
},
Expand Down
5 changes: 3 additions & 2 deletions lib/rules/fixer-return.js
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,9 @@ module.exports = {
}

return {
Program (node) {
contextIdentifiers = utils.getContextIdentifiers(context, node);
Program (ast) {
const sourceCode = context.getSourceCode();
contextIdentifiers = utils.getContextIdentifiers(sourceCode.scopeManager, ast);
},

// Stacks this function's information.
Expand Down
4 changes: 2 additions & 2 deletions lib/rules/no-deprecated-context-methods.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,8 @@ module.exports = {
// ----------------------------------------------------------------------

return {
'Program:exit' () {
[...utils.getContextIdentifiers(context, sourceCode.ast)]
'Program:exit' (ast) {
[...utils.getContextIdentifiers(sourceCode.scopeManager, ast)]
.filter(
contextId =>
contextId.parent.type === 'MemberExpression' &&
Expand Down
4 changes: 2 additions & 2 deletions lib/rules/no-deprecated-report-api.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ module.exports = {
// ----------------------------------------------------------------------

return {
Program (node) {
contextIdentifiers = utils.getContextIdentifiers(context, node);
Program (ast) {
contextIdentifiers = utils.getContextIdentifiers(sourceCode.scopeManager, ast);
},
CallExpression (node) {
if (
Expand Down
3 changes: 2 additions & 1 deletion lib/rules/no-missing-placeholders.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@ module.exports = {

return {
Program (ast) {
contextIdentifiers = utils.getContextIdentifiers(context, ast);
const sourceCode = context.getSourceCode();
contextIdentifiers = utils.getContextIdentifiers(sourceCode.scopeManager, ast);
},
CallExpression (node) {
if (
Expand Down
3 changes: 2 additions & 1 deletion lib/rules/no-unused-placeholders.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@ module.exports = {

return {
Program (ast) {
contextIdentifiers = utils.getContextIdentifiers(context, ast);
const sourceCode = context.getSourceCode();
contextIdentifiers = utils.getContextIdentifiers(sourceCode.scopeManager, ast);
},
CallExpression (node) {
if (
Expand Down
2 changes: 1 addition & 1 deletion lib/rules/no-useless-token-range.js
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ module.exports = {

return {
'Program:exit' (ast) {
[...utils.getSourceCodeIdentifiers(context, ast)]
[...utils.getSourceCodeIdentifiers(sourceCode.scopeManager, ast)]
.filter(identifier => identifier.parent.type === 'MemberExpression' &&
identifier.parent.object === identifier &&
identifier.parent.property.type === 'Identifier' &&
Expand Down
6 changes: 3 additions & 3 deletions lib/rules/prefer-message-ids.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,9 @@ module.exports = {

return {
Program (ast) {
contextIdentifiers = utils.getContextIdentifiers(context, ast);
contextIdentifiers = utils.getContextIdentifiers(sourceCode.scopeManager, ast);

if (info === null || info.meta === null) {
if (info === null) {
return;
}

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

if (!messagesNode) {
context.report({ node: metaNode, messageId: 'messagesMissing' });
context.report({ node: metaNode || info.create, messageId: 'messagesMissing' });
return;
}

Expand Down
4 changes: 2 additions & 2 deletions lib/rules/prefer-placeholders.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ module.exports = {
// ----------------------------------------------------------------------

return {
Program (node) {
contextIdentifiers = utils.getContextIdentifiers(context, node);
Program (ast) {
contextIdentifiers = utils.getContextIdentifiers(scopeManager, ast);
},
CallExpression (node) {
if (
Expand Down
4 changes: 2 additions & 2 deletions lib/rules/prefer-replace-text.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ module.exports = {
let contextIdentifiers;

return {
Program (node) {
contextIdentifiers = utils.getContextIdentifiers(context, node);
Program (ast) {
contextIdentifiers = utils.getContextIdentifiers(sourceCode.scopeManager, ast);
},

// Stacks this function's information.
Expand Down
7 changes: 4 additions & 3 deletions lib/rules/report-message-format.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,10 @@ module.exports = {
// ----------------------------------------------------------------------

return {
Program (node) {
contextIdentifiers = utils.getContextIdentifiers(context, node);
const ruleInfo = utils.getRuleInfo(context.getSourceCode());
Program (ast) {
const sourceCode = context.getSourceCode();
contextIdentifiers = utils.getContextIdentifiers(sourceCode.scopeManager, ast);
const ruleInfo = utils.getRuleInfo(sourceCode);
const messagesObject = ruleInfo &&
ruleInfo.meta &&
ruleInfo.meta.type === 'ObjectExpression' &&
Expand Down
10 changes: 5 additions & 5 deletions lib/rules/require-meta-docs-description.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,12 @@ module.exports = {
},

create (context) {
const sourceCode = context.getSourceCode();
const info = utils.getRuleInfo(sourceCode);

return {
Program () {
if (info === null || info.meta === null) {
const sourceCode = context.getSourceCode();
const info = utils.getRuleInfo(sourceCode);

if (info === null) {
return;
}

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

if (!descriptionNode) {
context.report({ node: docsNode ? docsNode : metaNode, messageId: 'missing' });
context.report({ node: docsNode || metaNode || info.create, messageId: 'missing' });
return;
}

Expand Down
4 changes: 2 additions & 2 deletions lib/rules/require-meta-fixable.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,8 @@ module.exports = {
// ----------------------------------------------------------------------

return {
Program (node) {
contextIdentifiers = utils.getContextIdentifiers(context, node);
Program (ast) {
contextIdentifiers = utils.getContextIdentifiers(sourceCode.scopeManager, ast);
},
CallExpression (node) {
if (
Expand Down
6 changes: 3 additions & 3 deletions lib/rules/require-meta-has-suggestions.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ module.exports = {
let ruleReportsSuggestions;

return {
Program (node) {
contextIdentifiers = utils.getContextIdentifiers(context, node);
Program (ast) {
contextIdentifiers = utils.getContextIdentifiers(sourceCode.scopeManager, ast);
},
CallExpression (node) {
if (
Expand Down Expand Up @@ -71,7 +71,7 @@ module.exports = {
if (!hasSuggestionsProperty) {
// Rule reports suggestions but is missing the `meta.hasSuggestions` property altogether.
context.report({
node: metaNode ? metaNode : ruleInfo.create,
node: metaNode || ruleInfo.create,
messageId: 'shouldBeSuggestable',
fix (fixer) {
if (metaNode && metaNode.type === 'ObjectExpression') {
Expand Down
12 changes: 6 additions & 6 deletions lib/rules/require-meta-schema.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ module.exports = {
const sourceCode = context.getSourceCode();
const { scopeManager } = sourceCode;
const info = utils.getRuleInfo(sourceCode);
if (info === null || info.meta === null) {
if (info === null) {
return {};
}

Expand All @@ -57,7 +57,7 @@ module.exports = {

return {
Program (ast) {
contextIdentifiers = utils.getContextIdentifiers(context, ast);
contextIdentifiers = utils.getContextIdentifiers(scopeManager, ast);

schemaNode =
metaNode &&
Expand Down Expand Up @@ -106,16 +106,16 @@ module.exports = {
'Program:exit' () {
if (!schemaNode && requireSchemaPropertyWhenOptionless) {
context.report({
node: metaNode,
node: metaNode || info.create,
messageId: 'missing',
suggest: isUsingOptions ? [] : [
suggest: !isUsingOptions && metaNode && metaNode.type === 'ObjectExpression' ? [
{
messageId: 'addEmptySchema',
fix (fixer) {
return utils.insertProperty(fixer, metaNode, 'schema: []', sourceCode);
},
},
],
] : [],
});
}
},
Expand All @@ -130,7 +130,7 @@ module.exports = {
node.property.name === 'options'
) {
isUsingOptions = true;
context.report({ node: schemaNode || metaNode, messageId: 'foundOptionsUsage' });
context.report({ node: schemaNode || metaNode || info.create, messageId: 'foundOptionsUsage' });
}
},
};
Expand Down
14 changes: 5 additions & 9 deletions lib/rules/require-meta-type.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,20 +31,16 @@ module.exports = {
},

create (context) {
const sourceCode = context.getSourceCode();
const info = utils.getRuleInfo(sourceCode);

// ----------------------------------------------------------------------
// Helpers
// ----------------------------------------------------------------------

// ----------------------------------------------------------------------
// Public
// ----------------------------------------------------------------------

return {
Program () {
if (info === null || info.meta === null) {
const sourceCode = context.getSourceCode();
const info = utils.getRuleInfo(sourceCode);

if (info === null) {
return;
}

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

if (!typeNode) {
context.report({ node: metaNode, messageId: 'missing' });
context.report({ node: metaNode || info.create, messageId: 'missing' });
return;
}

Expand Down
Loading

0 comments on commit badd4eb

Please sign in to comment.