Socket
Socket
Sign inDemoInstall

eslint-plugin-unicorn

Package Overview
Dependencies
Maintainers
1
Versions
106
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

eslint-plugin-unicorn - npm Package Compare versions

Comparing version 12.1.0 to 13.0.0

rules/utils/get-documentation-url.js

20

package.json
{
"name": "eslint-plugin-unicorn",
"version": "12.1.0",
"version": "13.0.0",
"description": "Various awesome ESLint rules",

@@ -17,2 +17,3 @@ "license": "MIT",

"test": "xo && nyc ava",
"lint": "./test/lint/lint.js",
"integration": "./test/integration/test.js"

@@ -38,3 +39,3 @@ },

"eslint-ast-utils": "^1.1.0",
"eslint-template-visitor": "^1.0.0",
"eslint-template-visitor": "^1.1.0",
"import-modules": "^2.0.0",

@@ -50,15 +51,16 @@ "lodash.camelcase": "^4.3.0",

"reserved-words": "^0.1.2",
"safe-regex": "^2.0.2",
"safe-regex": "^2.1.1",
"semver": "^6.3.0"
},
"devDependencies": {
"ava": "^2.3.0",
"@lubien/fixture-beta-package": "^1.0.0-beta.1",
"ava": "^2.4.0",
"babel-eslint": "^10.0.3",
"chalk": "^2.4.2",
"coveralls": "^3.0.6",
"coveralls": "^3.0.7",
"del": "^5.1.0",
"eslint": "^6.5.1",
"eslint-ava-rule-tester": "^3.0.0",
"eslint": "^6.6.0",
"eslint-ava-rule-tester": "^4.0.0",
"eslint-plugin-eslint-plugin": "2.1.0",
"execa": "^2.0.4",
"execa": "^3.2.0",
"listr": "^0.14.3",

@@ -72,3 +74,3 @@ "nyc": "^14.1.1",

"peerDependencies": {
"eslint": ">=6.3.0"
"eslint": ">=6.6.0"
},

@@ -75,0 +77,0 @@ "ava": {

'use strict';
const astUtils = require('eslint-ast-utils');
const avoidCapture = require('./utils/avoid-capture');
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');

@@ -24,5 +24,5 @@ // Matches `someObj.then([FunctionExpression | ArrowFunctionExpression])`

const [arg0] = node.arguments;
const [firstArgument] = node.arguments;
return arg0.type === 'FunctionExpression' || arg0.type === 'ArrowFunctionExpression';
return firstArgument.type === 'FunctionExpression' || firstArgument.type === 'ArrowFunctionExpression';
}

@@ -69,3 +69,3 @@

const variables = scopeManager.getDeclaredVariables(scopeNode);
const variables = scopeManager.getDeclaredVariables(scopeNode);
for (const variable of variables) {

@@ -123,4 +123,4 @@ if (variable.name !== node.name) {

const scope = context.getScope();
const errName = avoidCapture(name, [scope.variableScope], ecmaVersion);
push(node.param.name === errName || errName);
const errorName = avoidCapture(name, [scope.variableScope], ecmaVersion);
push(node.param.name === errorName || errorName);
},

@@ -150,3 +150,3 @@ 'CatchClause:exit': node => {

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -153,0 +153,0 @@ fixable: 'code',

'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');

@@ -175,3 +175,3 @@ const MESSAGE_ID_ARROW = 'ArrowFunctionExpression';

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -178,0 +178,0 @@ messages: {

'use strict';
const upperfirst = require('lodash.upperfirst');
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');

@@ -181,3 +181,3 @@ const MESSAGE_ID_INVALID_EXPORT = 'invalidExport';

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -184,0 +184,0 @@ fixable: 'code',

'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');

@@ -97,5 +97,5 @@ const errorConstructors = new Set([

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
}
}
};

@@ -7,3 +7,3 @@ 'use strict';

const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');

@@ -131,3 +131,3 @@ const escapeWithLowercase = /((?:^|[^\\])(?:\\\\)*)\\(x[a-f\d]{2}|u[a-f\d]{4}|u{(?:[a-f\d]+)})/;

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -134,0 +134,0 @@ fixable: 'code'

@@ -6,3 +6,3 @@ 'use strict';

const baseRule = require('eslint/lib/rules/no-warning-comments');
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');

@@ -25,3 +25,3 @@ const MESSAGE_ID_AVOID_MULTIPLE_DATES = 'avoidMultipleDates';

const pkgDependencies = {
const packageDependencies = {
...packageJson.dependencies,

@@ -32,4 +32,4 @@ ...packageJson.devDependencies

const DEPENDENCY_INCLUSION_RE = /^[+|-]\s*@?[\S+]\/?\S+/;
const VERSION_COMPARISON_RE = /^(@?[\S+]\/?\S+)@(>|>=)([\d]+(\.\d+){0,2})/;
const PKG_VERSION_RE = /^(>|>=)([\d]+(\.\d+){0,2})\s*$/;
const VERSION_COMPARISON_RE = /^(@?[\S+]\/?\S+)@(>|>=)([\d]+(\.\d+){0,2}(-[\da-z-]+(\.[\da-z-]+)*)?(\+[\da-z-]+(\.[\da-z-]+)*)?)/i;
const PKG_VERSION_RE = /^(>|>=)([\d]+(\.\d+){0,2}(-[\da-z-]+(\.[\da-z-]+)*)?(\+[\da-z-]+(\.[\da-z-]+)*)?)\s*$/;
const ISO8601_DATE = /(\d{4})-(\d{2})-(\d{2})/;

@@ -164,5 +164,33 @@

function tryToCoerceVersion(version) {
function tryToCoerceVersion(rawVersion) {
let version = rawVersion;
// Remove leading things like `^1.0.0`, `>1.0.0`
const leadingNoises = [
'>=',
'<=',
'>',
'<',
'~',
'^'
];
const foundTrailingNoise = leadingNoises.find(noise => version.startsWith(noise));
if (foundTrailingNoise) {
version = version.slice(foundTrailingNoise.length);
}
// Get only the first member for cases such as `1.0.0 - 2.9999.9999`
const parts = version.split(' ');
if (parts.length > 1) {
version = parts[0];
}
if (semver.valid(version)) {
return version;
}
try {
return semver.coerce(version);
// Try to semver.parse a perfect match while semver.coerce tries to fix errors
// But coerce can't parse pre-releases.
return semver.parse(version) || semver.coerce(version);
} catch (_) {

@@ -290,7 +318,7 @@ return false;

const pkgVersion = tryToCoerceVersion(packageJson.version);
const desidedPkgVersion = tryToCoerceVersion(version);
const packageVersion = tryToCoerceVersion(packageJson.version);
const desidedPackageVersion = tryToCoerceVersion(version);
const compare = semverComparisonForOperator(condition);
if (compare(pkgVersion, desidedPkgVersion)) {
if (compare(packageVersion, desidedPackageVersion)) {
context.report({

@@ -312,3 +340,3 @@ node: null,

uses++;
const targetPackageRawVersion = pkgDependencies[dependency.name];
const targetPackageRawVersion = packageDependencies[dependency.name];
const hasTargetPackage = Boolean(targetPackageRawVersion);

@@ -361,3 +389,3 @@

const pkgEngines = packageJson.engines || {};
const packageEngines = packageJson.engines || {};

@@ -367,3 +395,3 @@ for (const engine of engines) {

const targetPackageRawEngineVersion = pkgEngines.node;
const targetPackageRawEngineVersion = packageEngines.node;
const hasTargetEngine = Boolean(targetPackageRawEngineVersion);

@@ -478,3 +506,3 @@

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -481,0 +509,0 @@ messages: {

'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');

@@ -167,3 +167,3 @@ const operatorTypes = {

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -170,0 +170,0 @@ fixable: 'code',

@@ -7,3 +7,3 @@ 'use strict';

const upperfirst = require('lodash.upperfirst');
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');
const cartesianProductSamples = require('./utils/cartesian-product-samples');

@@ -60,15 +60,13 @@

@param {unknown} context
@param {object} options
@returns {string[]} The chosen cases.
*/
function getChosenCases(context) {
const option = context.options[0] || {};
if (option.case) {
return [option.case];
function getChosenCases(options) {
if (options.case) {
return [options.case];
}
if (option.cases) {
const cases = Object.keys(option.cases)
.filter(cases => option.cases[cases]);
if (options.cases) {
const cases = Object.keys(options.cases)
.filter(cases => options.cases[cases]);

@@ -100,6 +98,6 @@ return cases.length > 0 ? cases : ['kebabCase'];

function splitFilename(filename) {
const res = leadingUnserscoresRegex.exec(filename);
const result = leadingUnserscoresRegex.exec(filename);
const leading = (res && res[1]) || '';
const tailing = (res && res[2]) || filename;
const leading = (result && result[1]) || '';
const tailing = (result && result[2]) || filename;

@@ -150,3 +148,11 @@ const words = [];

const create = context => {
const chosenCases = getChosenCases(context);
const options = context.options[0] || {};
const chosenCases = getChosenCases(options);
const ignore = (options.ignore || []).map(item => {
if (item instanceof RegExp) {
return item;
}
return new RegExp(item, 'u');
});
const chosenCasesFunctions = chosenCases.map(case_ => ignoreNumbers(cases[case_].fn));

@@ -163,4 +169,5 @@ const filenameWithExtension = context.getFilename();

const filename = path.basename(filenameWithExtension, extension);
const base = filename + extension;
if (filename + extension === 'index.js') {
if (base === 'index.js' || ignore.some(regexp => regexp.test(base))) {
return;

@@ -207,2 +214,6 @@ }

]
},
ignore: {
type: 'array',
uniqueItems: true
}

@@ -230,2 +241,6 @@ },

additionalProperties: false
},
ignore: {
type: 'array',
uniqueItems: true
}

@@ -243,3 +258,3 @@ },

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -246,0 +261,0 @@ schema,

'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');

@@ -9,3 +9,3 @@ const regexp = /^(@.*?\/.*?|[./]+?.*?)(?:\/(\.|(?:index(?:\.js)?))?)$/;

const importIndex = (context, node, argument) => {
if (isImportingIndex(argument.value)) {
if (argument && isImportingIndex(argument.value)) {
context.report({

@@ -31,3 +31,3 @@ node,

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -34,0 +34,0 @@ fixable: 'code'

'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');

@@ -74,3 +74,3 @@ const enforceNew = new Set([

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -77,0 +77,0 @@ fixable: 'code'

'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');

@@ -10,7 +10,7 @@ const disableRegex = /^eslint-disable(-next-line|-line)?($|(\s+(@[\w-]+\/(?:[\w-]+\/)?)?[\w-]+)?)/;

const value = comment.value.trim();
const res = disableRegex.exec(value);
const result = disableRegex.exec(value);
if (
res && // It's a eslint-disable comment
!res[2] // But it did not specify any rules
result && // It's a eslint-disable comment
!result[2] // But it did not specify any rules
) {

@@ -37,5 +37,5 @@ context.report({

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
}
}
};
'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');

@@ -24,3 +24,3 @@ const create = context => ({

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -27,0 +27,0 @@ fixable: 'code'

'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');

@@ -73,8 +73,8 @@ const getConsoleMethod = node => {

const {
arguments: args
arguments: arguments_
} = node;
const fixables = args.map((nodeArgument, i) => {
const fixables = arguments_.map((nodeArgument, i) => {
const fixLeading = i !== 0;
const fixTrailing = i !== (args.length - 1);
const fixTrailing = i !== (arguments_.length - 1);

@@ -95,3 +95,3 @@ const value = getArgumentValue(context, nodeArgument);

const fixArg = (context, fixable, fixer) => {
const fixArgument = (context, fixable, fixer) => {
const {

@@ -128,3 +128,3 @@ nodeArgument,

message: buildErrorMessage(method),
fix: fixer => fixArg(context, fixable, fixer)
fix: fixer => fixArgument(context, fixable, fixer)
});

@@ -141,3 +141,3 @@ }

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -144,0 +144,0 @@ fixable: 'code'

'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');

@@ -32,10 +32,10 @@ const iteratorMethods = new Map([

const getNumberOfArguments = node => node.callee.property && iteratorMethods.get(node.callee.property.name);
const parseArgument = (context, arg) => arg.type === 'Identifier' ? arg.name : context.getSourceCode().getText(arg);
const parseArgument = (context, argument) => argument.type === 'Identifier' ? argument.name : context.getSourceCode().getText(argument);
const fix = (context, node) => {
const numberOfArgs = getNumberOfArguments(node);
const numberOfArguments = getNumberOfArguments(node);
const argument = node.arguments[0];
const argumentString = numberOfArgs === 1 ? 'x' : 'a, b';
const argumentString = numberOfArguments === 1 ? 'x' : 'a, b';
return fixer => fixer.replaceText(argument, `${numberOfArgs === 1 ? argumentString : `(${argumentString})`} => ${parseArgument(context, argument)}(${argumentString})`);
return fixer => fixer.replaceText(argument, `${numberOfArguments === 1 ? argumentString : `(${argumentString})`} => ${parseArgument(context, argument)}(${argumentString})`);
};

@@ -54,6 +54,6 @@

if (isIteratorMethod(node) && hasFunctionArgument(node) && node.arguments.length <= getNumberOfArguments(node)) {
const [arg] = node.arguments;
const [argument] = node.arguments;
context.report({
node: arg,
node: argument,
message: 'Do not pass a function reference directly to an iterator method.',

@@ -71,3 +71,3 @@ fix: fix(context, node)

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -74,0 +74,0 @@ fixable: 'code'

'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');
const isLiteralValue = require('./utils/is-literal-value');
const defaultElementName = 'element';
const isLiteralValue = value => node => node && node.type === 'Literal' && node.value === value;
const isLiteralZero = isLiteralValue(0);
const isLiteralOne = isLiteralValue(1);
const isLiteralZero = node => isLiteralValue(node, 0);
const isLiteralOne = node => isLiteralValue(node, 1);

@@ -251,3 +251,3 @@ const isIdentifierWithName = (node, name) => node && node.type === 'Identifier' && node.name === name;

.map(s => getReferencesInChildScopes(s, name))
.reduce((acc, scopeReferences) => [...acc, ...scopeReferences], [])
.reduce((accumulator, scopeReferences) => [...accumulator, ...scopeReferences], [])
];

@@ -364,3 +364,3 @@ };

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -367,0 +367,0 @@ fixable: 'code'

'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');

@@ -32,3 +32,3 @@ function checkEscape(context, node, value) {

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -35,0 +35,0 @@ fixable: 'code'

'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');

@@ -187,3 +187,3 @@ const MESSAGE_ID = 'noKeywordPrefix';

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -190,0 +190,0 @@ fixable: 'code',

'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');

@@ -53,3 +53,3 @@ const isParethesized = (sourceCode, node) => {

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -56,0 +56,0 @@ fixable: 'code'

'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');
const inferMethod = args => (args.length > 0 && typeof args[0].value === 'number') ? 'alloc' : 'from';
const inferMethod = arguments_ => (arguments_.length > 0 && typeof arguments_[0].value === 'number') ? 'alloc' : 'from';

@@ -29,3 +29,3 @@ const create = context => {

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -32,0 +32,0 @@ fixable: 'code'

'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');
const isLiteralValue = require('./utils/is-literal-value');
const isLiteralWorkerThreads = node => isLiteralValue(node, 'worker_threads');
const create = context => {

@@ -22,11 +25,11 @@ const startsWithHashBang = context.getSourceCode().lines[0].indexOf('#!') === 0;

if (callee.type === 'Identifier' && callee.name === 'require') {
const args = node.arguments;
const arguments_ = node.arguments;
if (args.length === 0) {
if (arguments_.length === 0) {
return;
}
const [argument] = args;
const [argument] = arguments_;
if (argument.type === 'Literal' && argument.value === 'worker_threads') {
if (isLiteralWorkerThreads(argument)) {
requiredWorkerThreadsModule = true;

@@ -63,3 +66,3 @@ return;

if (source.type === 'Literal' && source.value === 'worker_threads') {
if (isLiteralWorkerThreads(source)) {
requiredWorkerThreadsModule = true;

@@ -84,5 +87,5 @@ }

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
}
}
};
'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');

@@ -31,5 +31,5 @@ const isCommaFollowedWithComma = (element, index, array) => {

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
}
}
};
'use strict';
const safeRegex = require('safe-regex');
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');

@@ -23,9 +23,9 @@ const message = 'Unsafe regular expression.';

'NewExpression[callee.name="RegExp"]': node => {
const args = node.arguments;
const arguments_ = node.arguments;
if (args.length === 0 || args[0].type !== 'Literal') {
if (arguments_.length === 0 || arguments_[0].type !== 'Literal') {
return;
}
const hasRegExp = args[0].regex;
const hasRegExp = arguments_[0].regex;

@@ -35,7 +35,7 @@ let pattern;

if (hasRegExp) {
({pattern} = args[0].regex);
flags = args[1] && args[1].type === 'Literal' ? args[1].value : args[0].regex.flags;
({pattern} = arguments_[0].regex);
flags = arguments_[1] && arguments_[1].type === 'Literal' ? arguments_[1].value : arguments_[0].regex.flags;
} else {
pattern = args[0].value;
flags = args[1] && args[1].type === 'Literal' ? args[1].value : '';
pattern = arguments_[0].value;
flags = arguments_[1] && arguments_[1].type === 'Literal' ? arguments_[1].value : '';
}

@@ -58,5 +58,5 @@

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
}
}
};
'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');

@@ -78,4 +78,4 @@ const getDeclaratorOrPropertyValue = declaratorOrProperty => {

const isUnusedVariable = variable => {
const hasReadRef = variable.references.some(ref => ref.isRead());
return !hasReadRef;
const hasReadReference = variable.references.some(reference => reference.isRead());
return !hasReadReference;
};

@@ -238,5 +238,5 @@

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
}
}
};
'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');

@@ -51,3 +51,3 @@ const MESSAGE_ZERO_FRACTION = 'Don\'t use a zero fraction in the number.';

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -54,0 +54,0 @@ fixable: 'code'

'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');

@@ -37,3 +37,3 @@ const fix = value => {

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -40,0 +40,0 @@ fixable: 'code'

'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');
const domEventsJson = require('./utils/dom-events.json');
const nestedEvents = Object.keys(domEventsJson).map(key => domEventsJson[key]);
const eventTypes = new Set(nestedEvents.reduce((accEvents, events) => accEvents.concat(events), []));
const eventTypes = new Set(nestedEvents.reduce((accumulatorEvents, events) => accumulatorEvents.concat(events), []));
const getEventMethodName = memberExpression => memberExpression.property.name;

@@ -162,3 +162,3 @@ const getEventTypeName = eventMethodName => eventMethodName.slice('on'.length);

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -165,0 +165,0 @@ fixable: 'code',

'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');
const isValidVariableName = require('./utils/is-valid-variable-name');

@@ -7,5 +7,5 @@

const getDataAttributeName = arg => {
if (arg.type === 'Literal') {
return (arg.value.match(/^data-(.+)/) || ['', ''])[1];
const getDataAttributeName = argument => {
if (argument.type === 'Literal') {
return (argument.value.match(/^data-(.+)/) || ['', ''])[1];
}

@@ -16,3 +16,3 @@

const parseNodeText = (context, arg) => context.getSourceCode().getText(arg);
const parseNodeText = (context, argument) => context.getSourceCode().getText(argument);

@@ -77,3 +77,3 @@ const dashToCamelCase = string => string.replace(/-([a-z])/g, s => s[1].toUpperCase());

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -80,0 +80,0 @@ fixable: 'code'

'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');
const quoteString = require('./utils/quote-string');

@@ -204,7 +204,7 @@

// When the event parameter itself is destructured directly
const isEventParamDestructured = event.type === 'ObjectPattern';
if (isEventParamDestructured) {
const isEventParameterDestructured = event.type === 'ObjectPattern';
if (isEventParameterDestructured) {
// Check for properties
for (const prop of event.properties) {
if (prop === node) {
for (const property of event.properties) {
if (property === node) {
report(node.value);

@@ -223,3 +223,3 @@ }

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -226,0 +226,0 @@ fixable: 'code'

'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');
const isObjectMethod = require('./utils/is-object-method');
const isMathPow = node => {
const {callee} = node;
return (
callee.type === 'MemberExpression' &&
callee.object.type === 'Identifier' &&
callee.object.name === 'Math' &&
callee.property.type === 'Identifier' &&
callee.property.name === 'pow'
);
};
const isMathPow = node => isObjectMethod(node, 'Math', 'pow');
const parseArgument = (source, arg) => {
const text = source.getText(arg);
const parseArgument = (source, argument) => {
const text = source.getText(argument);
switch (arg.type) {
switch (argument.type) {
case 'Identifier':
return arg.name;
return argument.name;
case 'Literal':

@@ -66,3 +58,3 @@ return text;

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -69,0 +61,0 @@ fixable: 'code'

'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');
const isMethodNamed = require('./utils/is-method-named');

@@ -154,3 +154,3 @@

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -157,0 +157,0 @@ fixable: 'code',

'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');
const isMethodNamed = require('./utils/is-method-named');
const isLiteralValue = require('./utils/is-literal-value');
const message = 'Use `.includes()`, rather than `.indexOf()`, when checking for existence.';
// Ignore {_,lodash,underscore}.indexOf
const ignoredVariables = new Set(['_', 'lodash', 'underscore']);
const isNegativeOne = (operator, value) => operator === '-' && value === 1;
const isIgnoredTarget = node => node.type === 'Identifier' && ignoredVariables.has(node.name);
const isNegativeOne = node => node.type === 'UnaryExpression' && node.operator === '-' && node.argument && node.argument.type === 'Literal' && node.argument.value === 1;
const isLiteralZero = node => isLiteralValue(node, 0);
const isNegativeResult = node => ['===', '==', '<'].includes(node.operator);

@@ -17,3 +21,3 @@ const report = (context, node, target, argumentsNodes) => {

// Strip default `fromIndex`
if (argumentsNodes.length === 2 && argumentsNodes[1].type === 'Literal' && argumentsNodes[1].value === 0) {
if (isLiteralZero(argumentsNodes[1])) {
argumentsNodes = argumentsNodes.slice(0, 1);

@@ -26,6 +30,5 @@ }

node,
message: 'Use `.includes()`, rather than `.indexOf()`, when checking for existence.',
message,
fix: fixer => {
const isNot = node => ['===', '==', '<'].includes(node.operator) ? '!' : '';
const replacement = `${isNot(node)}${targetSource}.includes(${argumentsSource.join(', ')})`;
const replacement = `${isNegativeResult(node) ? '!' : ''}${targetSource}.includes(${argumentsSource.join(', ')})`;
return fixer.replaceText(node, replacement);

@@ -57,19 +60,13 @@ }

if (right.type === 'UnaryExpression') {
const {argument} = right;
if (argument.type !== 'Literal') {
return;
}
const {value} = argument;
if (['!==', '!=', '>', '===', '=='].includes(node.operator) && isNegativeOne(right.operator, value)) {
report(context, node, target, argumentsNodes);
}
if (
(['!==', '!=', '>', '===', '=='].includes(node.operator) && isNegativeOne(right)) ||
(['>=', '<'].includes(node.operator) && isLiteralZero(right))
) {
report(
context,
node,
target,
argumentsNodes
);
}
if (right.type === 'Literal' && ['>=', '<'].includes(node.operator) && right.value === 0) {
report(context, node, target, argumentsNodes);
}
}

@@ -83,3 +80,3 @@ });

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -86,0 +83,0 @@ fixable: 'code'

'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');

@@ -57,3 +57,3 @@ const getMethodName = memberExpression => memberExpression.property.name;

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -60,0 +60,0 @@ fixable: 'code'

'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');

@@ -32,4 +32,4 @@ const getMethodName = callee => {

const getArgumentName = args => {
const [identifier] = args;
const getArgumentName = arguments_ => {
const [identifier] = arguments_;

@@ -85,3 +85,3 @@ if (identifier.type === 'ThisExpression') {

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -88,0 +88,0 @@ fixable: 'code'

'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');

@@ -11,3 +11,3 @@ const forbiddenIdentifierNames = new Map([

const getReplacementForId = value => `#${value}`;
const getReplacementForClass = value => value.match(/\S+/g).map(e => `.${e}`).join('');
const getReplacementForClass = value => value.match(/\S+/g).map(className => `.${className}`).join('');

@@ -116,3 +116,3 @@ const getQuotedReplacement = (node, value) => {

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -119,0 +119,0 @@ fixable: 'code'

'use strict';
const astUtils = require('eslint-ast-utils');
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');
const isLiteralValue = require('./utils/is-literal-value');
const isApplySignature = (argument1, argument2) => (
((argument1.type === 'Literal' && argument1.raw === 'null') ||
(isLiteralValue(argument1, null) ||
argument1.type === 'ThisExpression') &&

@@ -13,4 +14,4 @@ (argument2.type === 'ArrayExpression' ||

const getReflectApplyCall = (sourceCode, func, receiver, args) => (
`Reflect.apply(${sourceCode.getText(func)}, ${sourceCode.getText(receiver)}, ${sourceCode.getText(args)})`
const getReflectApplyCall = (sourceCode, func, receiver, arguments_) => (
`Reflect.apply(${sourceCode.getText(func)}, ${sourceCode.getText(receiver)}, ${sourceCode.getText(arguments_)})`
);

@@ -83,3 +84,3 @@

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -86,0 +87,0 @@ fixable: 'code'

'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');
const isObjectMethod = require('./utils/is-object-method');
const isArrayFrom = node => {
const {callee} = node;
return (
callee.type === 'MemberExpression' &&
callee.object.type === 'Identifier' &&
callee.object.name === 'Array' &&
callee.property.type === 'Identifier' &&
callee.property.name === 'from'
);
};
const isArrayFrom = node => isObjectMethod(node, 'Array', 'from');
const isArrayLike = argument => argument && argument.type !== 'ObjectExpression';

@@ -33,11 +24,11 @@

fix: fixer => {
const arrayLikeArg = parseArgument(context, node.arguments[0]);
const replacement = `[...${arrayLikeArg}]`;
const arrayLikeArgument = parseArgument(context, node.arguments[0]);
const replacement = `[...${arrayLikeArgument}]`;
if (node.arguments.length > 1) {
const mapFn = parseArgument(context, node.arguments[1]);
const thisArg = node.arguments.length === 3 ? parseArgument(context, node.arguments[2]) : null;
const thisArgReplacement = thisArg ? `, ${thisArg}` : '';
const thisArgument = node.arguments.length === 3 ? parseArgument(context, node.arguments[2]) : null;
const thisArgumentReplacement = thisArgument ? `, ${thisArgument}` : '';
return fixer.replaceText(node, `${replacement}.map(${mapFn}${thisArgReplacement})`);
return fixer.replaceText(node, `${replacement}.map(${mapFn}${thisArgumentReplacement})`);
}

@@ -58,3 +49,3 @@

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -61,0 +52,0 @@ fixable: 'code'

'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');

@@ -15,15 +15,15 @@ const doesNotContain = (string, characters) => characters.every(character => !string.includes(character));

const {callee} = node;
const prop = callee.property;
const {property} = callee;
if (!(prop && callee.type === 'MemberExpression')) {
if (!(property && callee.type === 'MemberExpression')) {
return;
}
const args = node.arguments;
const arguments_ = node.arguments;
let regex;
if (prop.name === 'test' && callee.object.regex) {
if (property.name === 'test' && callee.object.regex) {
({regex} = callee.object);
} else if (prop.name === 'match' && args && args[0] && args[0].regex) {
({regex} = args[0]);
} else if (property.name === 'match' && arguments_ && arguments_[0] && arguments_[0].regex) {
({regex} = arguments_[0]);
} else {

@@ -58,5 +58,5 @@ return;

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
}
}
};
'use strict';
const eslintTemplateVisitor = require('eslint-template-visitor');
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');

@@ -60,3 +60,3 @@ const templates = eslintTemplateVisitor();

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -63,0 +63,0 @@ fixable: 'code'

'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');

@@ -27,3 +27,3 @@ const message = 'Prefer `.textContent` over `.innerText`.';

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -30,0 +30,0 @@ fixable: 'code'

'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');

@@ -125,3 +125,3 @@ const tcIdentifiers = new Set([

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -128,0 +128,0 @@ fixable: 'code'

@@ -7,3 +7,3 @@ 'use strict';

const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');
const avoidCapture = require('./utils/avoid-capture');

@@ -145,3 +145,4 @@ const cartesianProductSamples = require('./utils/cartesian-product-samples');

docs: {
documents: true
documents: true,
documentation: true
},

@@ -202,4 +203,4 @@ elem: {

checkDefaultAndNamespaceImports = false,
checkShorthandImports = false,
checkDefaultAndNamespaceImports = 'internal',
checkShorthandImports = 'internal',
checkShorthandProperties = false,

@@ -496,2 +497,14 @@

const isInternalImport = node => {
let source = '';
if (node.type === 'Variable') {
source = node.node.init.arguments[0].value;
} else if (node.type === 'ImportBinding') {
source = node.parent.source.value;
}
return !source.includes('node_modules') && (source.startsWith('.') || source.startsWith('/'));
};
const create = context => {

@@ -559,8 +572,20 @@ const {

if (!options.checkDefaultAndNamespaceImports && isDefaultOrNamespaceImportName(definition.name)) {
return;
if (isDefaultOrNamespaceImportName(definition.name)) {
if (!options.checkDefaultAndNamespaceImports) {
return;
}
if (options.checkDefaultAndNamespaceImports === 'internal' && !isInternalImport(definition)) {
return;
}
}
if (!options.checkShorthandImports && isShorthandImportIdentifier(definition.name)) {
return;
if (isShorthandImportIdentifier(definition.name)) {
if (!options.checkShorthandImports) {
return;
}
if (options.checkShorthandImports === 'internal' && !isInternalImport(definition)) {
return;
}
}

@@ -691,4 +716,10 @@

checkDefaultAndNamespaceImports: {type: 'boolean'},
checkShorthandImports: {type: 'boolean'},
checkDefaultAndNamespaceImports: {
type: ['boolean', 'string'],
pattern: 'internal'
},
checkShorthandImports: {
type: ['boolean', 'string'],
pattern: 'internal'
},
checkShorthandProperties: {type: 'boolean'},

@@ -730,3 +761,3 @@

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -733,0 +764,0 @@ fixable: 'code',

'use strict';
const cleanRegexp = require('clean-regexp');
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');
const quoteString = require('./utils/quote-string');

@@ -30,9 +30,9 @@

'NewExpression[callee.name="RegExp"]': node => {
const args = node.arguments;
const arguments_ = node.arguments;
if (args.length === 0 || args[0].type !== 'Literal') {
if (arguments_.length === 0 || arguments_[0].type !== 'Literal') {
return;
}
const hasRegExp = args[0].regex;
const hasRegExp = arguments_[0].regex;

@@ -42,7 +42,7 @@ let oldPattern;

if (hasRegExp) {
oldPattern = args[0].regex.pattern;
flags = args[1] && args[1].type === 'Literal' ? args[1].value : args[0].regex.flags;
oldPattern = arguments_[0].regex.pattern;
flags = arguments_[1] && arguments_[1].type === 'Literal' ? arguments_[1].value : arguments_[0].regex.flags;
} else {
oldPattern = args[0].value;
flags = args[1] && args[1].type === 'Literal' ? args[1].value : '';
oldPattern = arguments_[0].value;
flags = arguments_[1] && arguments_[1].type === 'Literal' ? arguments_[1].value : '';
}

@@ -65,3 +65,3 @@

message,
fix: fixer => fixer.replaceText(args[0], fixed)
fix: fixer => fixer.replaceText(arguments_[0], fixed)
});

@@ -78,3 +78,3 @@ }

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -81,0 +81,0 @@ fixable: 'code'

'use strict';
const getDocsUrl = require('./utils/get-docs-url');
const getDocumentationUrl = require('./utils/get-documentation-url');

@@ -26,3 +26,3 @@ const customError = /^(?:[A-Z][a-z\d]*)*Error$/;

docs: {
url: getDocsUrl(__filename)
url: getDocumentationUrl(__filename)
},

@@ -29,0 +29,0 @@ fixable: 'code'

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc