@masknet/eslint-plugin
Version:
eslint plugin for masknet
62 lines • 2.41 kB
JavaScript
import { isIdentifierName, isLiteralValue, isMemberExpression } from '../node.js';
import { createRule } from '../rule.js';
export default createRule({
name: 'prefer-fetch',
meta: {
type: 'problem',
docs: {
description: 'Enforce fetch',
recommended: 'stylistic',
},
schema: [],
messages: {
callee: "Should use 'fetch' instead",
},
},
create(context) {
return {
ImportDeclaration(node) {
const packageName = node.source.value;
const disallow = packageName === 'axios' || packageName === 'request';
if (!disallow)
return;
context.report({ node, messageId: 'callee' });
},
NewExpression(node) {
const disallow = isXMLHttpRequest(node) || isActiveXObject(node);
if (!disallow)
return;
context.report({ node, messageId: 'callee' });
},
CallExpression(node) {
const disallow = is$HTTP(node) || isJQuery(node) || isRequire(node, 'axios') || isRequire(node, 'request');
if (!disallow)
return;
context.report({ node, messageId: 'callee' });
},
};
},
});
function isXMLHttpRequest({ callee }) {
return isIdentifierName(callee, 'XMLHttpRequest');
}
function isActiveXObject(expr) {
// cspell:ignore XMLHTTP
return isIdentifierName(expr.callee, 'ActiveXObject') && isLiteralValue(expr.arguments[0], /xmlhttp/i);
}
function isRequire(node, value) {
return isIdentifierName(node.callee, 'require') && isLiteralValue(node.arguments[0], value);
}
function is$HTTP({ callee }) {
const SYMBOL = '$http';
return isIdentifierName(callee, SYMBOL) || (isMemberExpression(callee) && isIdentifierName(callee.object, SYMBOL));
}
function isJQuery({ callee, parent }) {
const SYMBOLS = ['$', 'jQuery'];
const methods = ['ajax', 'get', 'post', 'getJSON', 'getScript'];
return ((isIdentifierName(callee, SYMBOLS) && isMemberExpression(parent) && isIdentifierName(parent.property, 'load')) ||
(isMemberExpression(callee) &&
isIdentifierName(callee.object, SYMBOLS) &&
isIdentifierName(callee.property, methods)));
}
//# sourceMappingURL=prefer-fetch.js.map