Skip to content

Commit

Permalink
Refactor prefer-modern-dom-api with stricter selector (#520)
Browse files Browse the repository at this point in the history
  • Loading branch information
fisker committed Feb 11, 2020
1 parent 34de844 commit dd7996e
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 9 deletions.
16 changes: 8 additions & 8 deletions rules/prefer-modern-dom-apis.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
'use strict';
const getDocumentationUrl = require('./utils/get-documentation-url');
const isValueNotUsable = require('./utils/is-value-not-usable');
const methodSelector = require('./utils/method-selector');

const selector = methodSelector({
length: 2
});

const getArgumentNameForReplaceChildOrInsertBefore = nodeArguments => {
if (nodeArguments.type === 'Identifier') {
Expand Down Expand Up @@ -123,14 +128,9 @@ const checkForInsertAdjacentTextOrInsertAdjacentElement = (context, node) => {

const create = context => {
return {
CallExpression(node) {
if (
node.callee.type === 'MemberExpression' &&
node.arguments.length === 2
) {
checkForReplaceChildOrInsertBefore(context, node);
checkForInsertAdjacentTextOrInsertAdjacentElement(context, node);
}
[selector](node) {
checkForReplaceChildOrInsertBefore(context, node);
checkForInsertAdjacentTextOrInsertAdjacentElement(context, node);
}
};
};
Expand Down
42 changes: 41 additions & 1 deletion test/prefer-modern-dom-apis.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,47 @@ ruleTester.run('prefer-modern-dom-apis', rule, {
'referenceNode.append(newNode);',
'referenceNode.append("text");',
'referenceNode.after(newNode);',
'referenceNode.after("text");'
'referenceNode.after("text");',
// Not `CallExpression`
'new parentNode.replaceChild(newNode, oldNode);',
'new parentNode.insertBefore(newNode, referenceNode);',
'new referenceNode.insertAdjacentText(\'beforebegin\', \'text\');',
'new referenceNode.insertAdjacentElement(\'beforebegin\', newNode);',
// Not `MemberExpression`
'replaceChild(newNode, oldNode);',
'insertBefore(newNode, referenceNode);',
'insertAdjacentText(\'beforebegin\', \'text\');',
'insertAdjacentElement(\'beforebegin\', newNode);',
// `callee.property` is not a `Identifier`
'parentNode[\'replaceChild\'](newNode, oldNode);',
'parentNode[\'insertBefore\'](newNode, referenceNode);',
'referenceNode[\'insertAdjacentText\'](\'beforebegin\', \'text\');',
'referenceNode[\'insertAdjacentElement\'](\'beforebegin\', newNode);',
// Computed
'parentNode[replaceChild](newNode, oldNode);',
'parentNode[insertBefore](newNode, referenceNode);',
'referenceNode[insertAdjacentText](\'beforebegin\', \'text\');',
'referenceNode[insertAdjacentElement](\'beforebegin\', newNode);',
// Not a legacy api
'parent.foo(a, b);',
// Less arguments
'parentNode.replaceChild(newNode);',
'parentNode.insertBefore(newNode);',
'referenceNode.insertAdjacentText(\'beforebegin\');',
'referenceNode.insertAdjacentElement(\'beforebegin\');',
// More arguments
'parentNode.replaceChild(newNode, oldNode, extra);',
'parentNode.insertBefore(newNode, referenceNode, extra);',
'referenceNode.insertAdjacentText(\'beforebegin\', \'text\', extra);',
'referenceNode.insertAdjacentElement(\'beforebegin\', newNode, extra);',
// `SpreadElement` arguments
'parentNode.replaceChild(...argumentsArray1, ...argumentsArray2);',
'parentNode.insertBefore(...argumentsArray1, ...argumentsArray2);',
'referenceNode.insertAdjacentText(...argumentsArray1, ...argumentsArray2);',
'referenceNode.insertAdjacentElement(...argumentsArray1, ...argumentsArray2);',
// `position` argument is not listed
'referenceNode.insertAdjacentText(\'foo\', \'text\');',
'referenceNode.insertAdjacentElement(\'foo\', newNode);'
],
invalid: [
// Tests for .replaceChild()
Expand Down

0 comments on commit dd7996e

Please sign in to comment.