This commit is contained in:
darenhsu
2022-07-17 13:16:16 +08:00
parent 84759556ff
commit befd344ab0
28070 changed files with 4008428 additions and 1 deletions
@@ -0,0 +1,43 @@
const errors = [ {
ruleId: 'prefer-string-slice',
} ];
module.exports = (ruleTester, rule) => ruleTester.run('prefer-string-slice', rule, {
valid: [
'foo.slice()',
'foo.slice(0)',
'foo.slice(1, 2)',
'foo.slice(-3, -2)',
],
invalid: [
{
code: 'foo.substr()',
output: 'foo.slice()',
errors,
},
{
code: '"foo".substr()',
output: '"foo".slice()',
errors,
},
{
code: 'foo.substr(start)',
errors,
},
{
code: '"foo".substr(1)',
errors,
},
{
code: 'foo.substr(start, length)',
errors,
},
{
code: '"foo".substr(1, 3)',
errors,
},
],
});
@@ -0,0 +1,41 @@
'use strict';
const eslintTemplateVisitor = require('../..');
const templates = eslintTemplateVisitor();
const objectVariable = templates.variable();
const argumentsVariable = templates.spreadVariable();
const substrCallTemplate = templates.template`${objectVariable}.substr(${argumentsVariable})`;
const create = context => {
const sourceCode = context.getSourceCode();
return templates.visitor({
[substrCallTemplate](node) {
const objectNode = substrCallTemplate.context.getMatch(objectVariable);
const argumentNodes = substrCallTemplate.context.getMatch(argumentsVariable);
const problem = {
node,
message: 'Prefer `String#slice()` over `String#substr()`.',
};
const canFix = argumentNodes.length === 0;
if (canFix) {
problem.fix = fixer => fixer.replaceText(node, sourceCode.getText(objectNode) + '.slice()');
}
context.report(problem);
},
});
};
module.exports = {
create,
meta: {
type: 'suggestion',
fixable: 'code',
},
};
@@ -0,0 +1,14 @@
import test from 'ava';
import avaRuleTester from 'eslint-ava-rule-tester';
import run from './_common';
import rule from './after';
const ruleTester = avaRuleTester(test, {
env: {
es6: true,
},
});
run(ruleTester, rule);
@@ -0,0 +1,39 @@
'use strict';
const create = context => {
const sourceCode = context.getSourceCode();
return {
CallExpression(node) {
if (node.callee.type !== 'MemberExpression'
|| node.callee.property.type !== 'Identifier'
|| node.callee.property.name !== 'substr'
) {
return;
}
const objectNode = node.callee.object;
const problem = {
node,
message: 'Prefer `String#slice()` over `String#substr()`.',
};
const canFix = node.arguments.length === 0;
if (canFix) {
problem.fix = fixer => fixer.replaceText(node, sourceCode.getText(objectNode) + '.slice()');
}
context.report(problem);
},
};
};
module.exports = {
create,
meta: {
type: 'suggestion',
fixable: 'code',
},
};
@@ -0,0 +1,14 @@
import test from 'ava';
import avaRuleTester from 'eslint-ava-rule-tester';
import run from './_common';
import rule from './before';
const ruleTester = avaRuleTester(test, {
env: {
es6: true,
},
});
run(ruleTester, rule);