mirror of
https://github.com/idanoo/GoScrobble.git
synced 2024-11-24 09:25:15 +00:00
160 lines
6.7 KiB
JavaScript
160 lines
6.7 KiB
JavaScript
|
"use strict";
|
||
|
var __spreadArray = (this && this.__spreadArray) || function (to, from) {
|
||
|
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
|
||
|
to[j] = from[i];
|
||
|
return to;
|
||
|
};
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
exports.RULE_NAME = void 0;
|
||
|
var experimental_utils_1 = require("@typescript-eslint/experimental-utils");
|
||
|
var utils_1 = require("../utils");
|
||
|
var node_utils_1 = require("../node-utils");
|
||
|
exports.RULE_NAME = 'no-debug';
|
||
|
function isRenderVariableDeclarator(node, renderFunctions) {
|
||
|
if (node.init) {
|
||
|
if (node_utils_1.isAwaitExpression(node.init)) {
|
||
|
return (node.init.argument &&
|
||
|
node_utils_1.isRenderFunction(node.init.argument, __spreadArray([
|
||
|
'render'
|
||
|
], renderFunctions)));
|
||
|
}
|
||
|
else {
|
||
|
return (node_utils_1.isCallExpression(node.init) &&
|
||
|
node_utils_1.isRenderFunction(node.init, __spreadArray(['render'], renderFunctions)));
|
||
|
}
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
function hasTestingLibraryImportModule(importDeclarationNode) {
|
||
|
var literal = importDeclarationNode.source;
|
||
|
return utils_1.LIBRARY_MODULES.some(function (module) { return module === literal.value; });
|
||
|
}
|
||
|
exports.default = experimental_utils_1.ESLintUtils.RuleCreator(utils_1.getDocsUrl)({
|
||
|
name: exports.RULE_NAME,
|
||
|
meta: {
|
||
|
type: 'problem',
|
||
|
docs: {
|
||
|
description: 'Disallow unnecessary debug usages in the tests',
|
||
|
category: 'Best Practices',
|
||
|
recommended: 'warn',
|
||
|
},
|
||
|
messages: {
|
||
|
noDebug: 'Unexpected debug statement',
|
||
|
},
|
||
|
fixable: null,
|
||
|
schema: [
|
||
|
{
|
||
|
type: 'object',
|
||
|
properties: {
|
||
|
renderFunctions: {
|
||
|
type: 'array',
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
],
|
||
|
},
|
||
|
defaultOptions: [
|
||
|
{
|
||
|
renderFunctions: [],
|
||
|
},
|
||
|
],
|
||
|
create: function (context, _a) {
|
||
|
var _b;
|
||
|
var options = _a[0];
|
||
|
var hasDestructuredDebugStatement = false;
|
||
|
var renderVariableDeclarators = [];
|
||
|
var renderFunctions = options.renderFunctions;
|
||
|
var hasImportedScreen = false;
|
||
|
var wildcardImportName = null;
|
||
|
return _b = {
|
||
|
VariableDeclarator: function (node) {
|
||
|
if (isRenderVariableDeclarator(node, renderFunctions)) {
|
||
|
if (node_utils_1.isObjectPattern(node.id) &&
|
||
|
node.id.properties.some(function (property) {
|
||
|
return node_utils_1.isProperty(property) &&
|
||
|
node_utils_1.isIdentifier(property.key) &&
|
||
|
property.key.name === 'debug';
|
||
|
})) {
|
||
|
hasDestructuredDebugStatement = true;
|
||
|
}
|
||
|
if (node.id.type === 'Identifier') {
|
||
|
renderVariableDeclarators.push(node);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
_b["VariableDeclarator > CallExpression > Identifier[name=\"require\"]"] = function (node) {
|
||
|
var args = node.parent.arguments;
|
||
|
var literalNodeScreenModuleName = args.find(function (args) {
|
||
|
return node_utils_1.isLiteral(args) &&
|
||
|
typeof args.value === 'string' &&
|
||
|
utils_1.LIBRARY_MODULES.includes(args.value);
|
||
|
});
|
||
|
if (!literalNodeScreenModuleName) {
|
||
|
return;
|
||
|
}
|
||
|
var declaratorNode = node.parent
|
||
|
.parent;
|
||
|
hasImportedScreen =
|
||
|
node_utils_1.isObjectPattern(declaratorNode.id) &&
|
||
|
declaratorNode.id.properties.some(function (property) {
|
||
|
return node_utils_1.isProperty(property) &&
|
||
|
node_utils_1.isIdentifier(property.key) &&
|
||
|
property.key.name === 'screen';
|
||
|
});
|
||
|
},
|
||
|
_b.ImportDeclaration = function (node) {
|
||
|
if (!hasTestingLibraryImportModule(node))
|
||
|
return;
|
||
|
hasImportedScreen = node.specifiers.some(function (s) { return node_utils_1.isImportSpecifier(s) && s.imported.name === 'screen'; });
|
||
|
},
|
||
|
_b['ImportDeclaration ImportNamespaceSpecifier'] = function (node) {
|
||
|
var importDeclarationNode = node.parent;
|
||
|
if (!hasTestingLibraryImportModule(importDeclarationNode))
|
||
|
return;
|
||
|
wildcardImportName = node.local && node.local.name;
|
||
|
},
|
||
|
_b["CallExpression > Identifier[name=\"debug\"]"] = function (node) {
|
||
|
if (hasDestructuredDebugStatement) {
|
||
|
context.report({
|
||
|
node: node,
|
||
|
messageId: 'noDebug',
|
||
|
});
|
||
|
}
|
||
|
},
|
||
|
_b["CallExpression > MemberExpression > Identifier[name=\"debug\"]"] = function (node) {
|
||
|
var memberExpression = node.parent;
|
||
|
var identifier = memberExpression.object;
|
||
|
var memberExpressionName = identifier.name;
|
||
|
var isScreenDebugUsed = hasImportedScreen && memberExpressionName === 'screen';
|
||
|
var isNamespaceDebugUsed = wildcardImportName && memberExpressionName === wildcardImportName;
|
||
|
if (isScreenDebugUsed || isNamespaceDebugUsed) {
|
||
|
context.report({
|
||
|
node: node,
|
||
|
messageId: 'noDebug',
|
||
|
});
|
||
|
}
|
||
|
},
|
||
|
_b['Program:exit'] = function () {
|
||
|
renderVariableDeclarators.forEach(function (renderVar) {
|
||
|
var renderVarReferences = context
|
||
|
.getDeclaredVariables(renderVar)[0]
|
||
|
.references.slice(1);
|
||
|
renderVarReferences.forEach(function (ref) {
|
||
|
var parent = ref.identifier.parent;
|
||
|
if (node_utils_1.isMemberExpression(parent) &&
|
||
|
node_utils_1.isIdentifier(parent.property) &&
|
||
|
parent.property.name === 'debug' &&
|
||
|
node_utils_1.isCallExpression(parent.parent)) {
|
||
|
context.report({
|
||
|
node: parent.property,
|
||
|
messageId: 'noDebug',
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
},
|
||
|
_b;
|
||
|
},
|
||
|
});
|