Skip to content

Commit 1d35ba8

Browse files
authored
Merge pull request #84 from nlfurniss/fix-jquery-vars
Fix logic to detect jQuery being assigned to a var
2 parents 54aa63c + f4b757f commit 1d35ba8

File tree

3 files changed

+31
-9
lines changed

3 files changed

+31
-9
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,4 @@
1616
/libpeerconnection.log
1717
npm-debug.log
1818
testem.log
19+
/.vscode

lib/rules/no-jquery-methods.js

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,22 @@
44
'use strict';
55

66
const { get } = require('../utils/get');
7+
const JQUERY_ALIASES = ['$', 'jQuery'];
78

89
function getMessage(blackListName) {
910
return `The use of jQuery's ${blackListName} method has been deprecated.`;
1011
}
1112

1213
function isJQueryCaller(node, name = null) {
13-
let pName = get(node, 'object.callee.property.name') === '$';
14-
let cName = get(node, 'object.callee.name') === '$';
15-
let lName = get(node, 'object.name') === name;
14+
const calleePropertyNameisJquery = get(node, 'object.callee.property.name') === '$';
15+
const calleeNameIsJquery = get(node, 'object.callee.name') === '$';
16+
const calleeNameIsLocalJquery = get(node, 'object.callee.name') === name;
17+
const ObjectNameisLocalJquery = get(node, 'object.name') === name;
1618

17-
return pName || cName || lName;
19+
return calleePropertyNameisJquery
20+
|| calleeNameIsJquery
21+
|| calleeNameIsLocalJquery
22+
|| ObjectNameisLocalJquery;
1823
}
1924

2025
function getLocalImportName(node, sourceName) {
@@ -36,7 +41,6 @@ module.exports = {
3641
create(context) {
3742
const BLACKLIST = context.options[0] || [];
3843
let jQueryLocalName = null;
39-
let varDecIDName = null;
4044

4145
return {
4246

@@ -48,8 +52,17 @@ module.exports = {
4852
},
4953

5054
VariableDeclarator(node) {
51-
varDecIDName = get(node, 'id.name');
52-
jQueryLocalName = jQueryLocalName === get(node, 'init.name') ? varDecIDName : null;
55+
const varDecIDName = get(node, 'id.name');
56+
// Get the name of what was assigned to the variable.
57+
const varAssignment = get(node, 'init.callee.property.name')
58+
|| get(node, 'init.property.name')
59+
|| get(node, 'init.name')
60+
|| '';
61+
const varAssignmentIsJquery = JQUERY_ALIASES.includes(varAssignment);
62+
63+
if (varAssignmentIsJquery) {
64+
jQueryLocalName = varDecIDName;
65+
}
5366
},
5467

5568
CallExpression(node) {
@@ -69,8 +82,6 @@ module.exports = {
6982
let blackListName = BLACKLIST.includes(propertyName) ? propertyName : false;
7083
let isThisExpression = get(node, 'object.type').includes('ThisExpression');
7184

72-
jQueryLocalName = isThisExpression && propertyName.includes('$') ? varDecIDName : jQueryLocalName;
73-
7485
if (!isThisExpression && blackListName && isJQueryCaller(node, jQueryLocalName)) {
7586
context.report({ node: node.property, message: getMessage(blackListName) });
7687
}

tests/lib/rules/no-jquery-methods.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,16 @@ ruleTester.run('no-jquery-methods', rule, {
9292
}
9393
});`,
9494
options: [BLACKLISTMETHOD]
95+
},
96+
{
97+
code: `
98+
export default Ember.Component({
99+
myFunc() {
100+
const output = this.privateMethod();
101+
this.$elem.style.height1 = output.height;
102+
}
103+
});`,
104+
options: ['height']
95105
}
96106
],
97107
invalid: [

0 commit comments

Comments
 (0)