Skip to content

Commit

Permalink
Update: Using ESLint AST selectors in some rules (fixes #59)
Browse files Browse the repository at this point in the history
  • Loading branch information
platinumazure committed Mar 29, 2017
1 parent 3ead40e commit d56416b
Show file tree
Hide file tree
Showing 9 changed files with 50 additions and 136 deletions.
12 changes: 5 additions & 7 deletions lib/rules/no-global-expect.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,11 @@ module.exports = {
const MESSAGE = "Unexpected global expect.";

return {
CallExpression: function (node) {
if (node.callee.type === "Identifier" && node.callee.name === "expect") {
context.report({
node: node,
message: MESSAGE
});
}
"CallExpression[callee.name='expect']": function (node) {
context.report({
node: node,
message: MESSAGE
});
}
};
}
Expand Down
4 changes: 2 additions & 2 deletions lib/rules/no-global-module-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ module.exports = {
}

return {
"CallExpression": function (node) {
if (node.callee.type === "Identifier" && isModuleOrTest(node.callee)) {
"CallExpression[callee.type='Identifier']": function (node) {
if (isModuleOrTest(node.callee)) {
context.report({
node: node,
message: MESSAGE,
Expand Down
28 changes: 8 additions & 20 deletions lib/rules/no-global-stop-start.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@
*/
"use strict";

const utils = require("../utils");

//------------------------------------------------------------------------------
// Rule Definition
//------------------------------------------------------------------------------
Expand All @@ -24,29 +22,19 @@ module.exports = {
create: function (context) {
const MESSAGE = "Unexpected global {{callee}}() call.";

function isGlobalStop(calleeNode) {
return calleeNode.type === "Identifier" && utils.isStop(calleeNode);
}

function isGlobalStart(calleeNode) {
return calleeNode.type === "Identifier" && utils.isStart(calleeNode);
}

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

return {
"CallExpression": function (node) {
if (isGlobalStop(node.callee) || isGlobalStart(node.callee)) {
context.report({
node: node,
message: MESSAGE,
data: {
callee: node.callee.name
}
});
}
"CallExpression[callee.name=/^(stop|start)$/]": function (node) {
context.report({
node: node,
message: MESSAGE,
data: {
callee: node.callee.name
}
});
}
};
}
Expand Down
22 changes: 5 additions & 17 deletions lib/rules/no-init.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,28 +22,16 @@ module.exports = {
create: function (context) {
const MESSAGE = "Do not use QUnit.init().";

function isQUnitInit(calleeNode) {
return calleeNode.type === "MemberExpression" &&
calleeNode.object &&
calleeNode.object.type === "Identifier" &&
calleeNode.object.name === "QUnit" &&
calleeNode.property &&
calleeNode.property.type === "Identifier" &&
calleeNode.property.name === "init";
}

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

return {
"CallExpression": function (node) {
if (isQUnitInit(node.callee)) {
context.report({
node: node,
message: MESSAGE
});
}
"CallExpression[callee.object.name='QUnit'][callee.property.name='init']": function (node) {
context.report({
node: node,
message: MESSAGE
});
}
};
}
Expand Down
23 changes: 5 additions & 18 deletions lib/rules/no-jsdump.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,29 +20,16 @@ module.exports = {
create: function (context) {
const MESSAGE = "Use QUnit.dump() instead of QUnit.jsDump().";

function isQUnitJsDump(calleeNode) {
return calleeNode &&
calleeNode.type === "MemberExpression" &&
calleeNode.object &&
calleeNode.object.type === "Identifier" &&
calleeNode.object.name === "QUnit" &&
calleeNode.property &&
calleeNode.property.type === "Identifier" &&
calleeNode.property.name === "jsDump";
}

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

return {
CallExpression: function (node) {
if (isQUnitJsDump(node.callee)) {
context.report({
node: node,
message: MESSAGE
});
}
"CallExpression[callee.object.name='QUnit'][callee.property.name='jsDump']": function (node) {
context.report({
node: node,
message: MESSAGE
});
}
};
}
Expand Down
23 changes: 5 additions & 18 deletions lib/rules/no-only.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,25 +20,12 @@ module.exports = {
create: function (context) {
const MESSAGE = "Unexpected QUnit.only call.";

function isQUnitOnly(calleeNode) {
return calleeNode &&
calleeNode.type === "MemberExpression" &&
calleeNode.object &&
calleeNode.object.type === "Identifier" &&
calleeNode.object.name === "QUnit" &&
calleeNode.property &&
calleeNode.property.type === "Identifier" &&
calleeNode.property.name === "only";
}

return {
"CallExpression": function (node) {
if (isQUnitOnly(node.callee)) {
context.report({
node: node,
message: MESSAGE
});
}
"CallExpression[callee.object.name='QUnit'][callee.property.name='only']": function (node) {
context.report({
node: node,
message: MESSAGE
});
}
};
}
Expand Down
23 changes: 5 additions & 18 deletions lib/rules/no-qunit-push.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,29 +20,16 @@ module.exports = {
create: function (context) {
const MESSAGE = "Do not use QUnit.push().";

function isQUnitPush(calleeNode) {
return calleeNode &&
calleeNode.type === "MemberExpression" &&
calleeNode.object &&
calleeNode.object.type === "Identifier" &&
calleeNode.object.name === "QUnit" &&
calleeNode.property &&
calleeNode.property.type === "Identifier" &&
calleeNode.property.name === "push";
}

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

return {
"CallExpression": function (node) {
if (isQUnitPush(node.callee)) {
context.report({
node: node,
message: MESSAGE
});
}
"CallExpression[callee.object.name='QUnit'][callee.property.name='push']": function (node) {
context.report({
node: node,
message: MESSAGE
});
}
};
}
Expand Down
29 changes: 10 additions & 19 deletions lib/rules/no-reassign-log-callbacks.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,28 +31,19 @@ module.exports = {
"testStart"
];

function isQUnitLogCallback(node) {
return node.type === "MemberExpression" &&
node.object &&
node.object.type === "Identifier" &&
node.object.name === "QUnit" &&
node.property.type === "Identifier" &&
LOG_CALLBACKS.indexOf(node.property.name) !== -1;
}

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

return {
"AssignmentExpression": function (node) {
if (isQUnitLogCallback(node.left)) {
context.report({
node: node,
message: MESSAGE
});
}
}
};
return LOG_CALLBACKS.reduce(function (memo, callback) {
memo[`AssignmentExpression[left.object.name='QUnit'][left.property.name='${callback}']`] = function (node) {
context.report({
node: node,
message: MESSAGE
});
};

return memo;
}, {});
}
};
22 changes: 5 additions & 17 deletions lib/rules/no-reset.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,28 +22,16 @@ module.exports = {
create: function (context) {
const MESSAGE = "Do not use QUnit.reset().";

function isQUnitReset(calleeNode) {
return calleeNode.type === "MemberExpression" &&
calleeNode.object &&
calleeNode.object.type === "Identifier" &&
calleeNode.object.name === "QUnit" &&
calleeNode.property &&
calleeNode.property.type === "Identifier" &&
calleeNode.property.name === "reset";
}

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

return {
"CallExpression": function (node) {
if (isQUnitReset(node.callee)) {
context.report({
node: node,
message: MESSAGE
});
}
"CallExpression[callee.object.name='QUnit'][callee.property.name='reset']": function (node) {
context.report({
node: node,
message: MESSAGE
});
}
};
}
Expand Down

0 comments on commit d56416b

Please sign in to comment.