tslint-eslint-rules
Version:
Improve your TSLint with the missing ESLint Rules
197 lines (195 loc) • 23.3 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var ts = require("typescript");
var Lint = require("tslint");
var OPTION_ALWAYS = 'always';
var RULE_NAME = 'array-bracket-spacing';
var Rule = (function (_super) {
tslib_1.__extends(Rule, _super);
function Rule() {
return _super !== null && _super.apply(this, arguments) || this;
}
Rule.prototype.apply = function (sourceFile) {
var walker = new ArrayBracketSpacingWalker(sourceFile, this.getOptions());
return this.applyWithWalker(walker);
};
Rule.metadata = {
ruleName: RULE_NAME,
description: 'enforce consistent spacing inside array brackets',
rationale: Lint.Utils.dedent(templateObject_1 || (templateObject_1 = tslib_1.__makeTemplateObject(["\n A number of style guides require or disallow spaces between array brackets and other tokens.\n This rule applies to both array literals and destructuring assignments (ECMAScript 6).\n "], ["\n A number of style guides require or disallow spaces between array brackets and other tokens.\n This rule applies to both array literals and destructuring assignments (ECMAScript 6).\n "]))),
optionsDescription: Lint.Utils.dedent(templateObject_2 || (templateObject_2 = tslib_1.__makeTemplateObject(["\n The rule takes one or two options. The first is a string, which can be:\n\n - `\"never\"` (default) disallows spaces inside array brackets\n - `\"always\"`requires one or more spaces or newlines inside array brackets\n\n The second option is an object for exceptions to the `\"never\"` option:\n\n - `\"singleValue\": true` requires one or more spaces or newlines inside brackets of array\n literals that contain a single element\n - `\"objectsInArrays\": true` requires one or more spaces or newlines between brackets of\n array literals and braces of their object literal elements\n `[ {` or `} ]`\n - `\"arraysInArrays\": true` requires one or more spaces or newlines between brackets of\n array literals and brackets of their array literal elements\n `[ [` or `] ]`\n\n When using the `\"always\"` option the second option takes on these exceptions:\n\n - `\"singleValue\": false` disallows spaces inside brackets of array literals that contain a\n single element\n - `\"objectsInArrays\": false` disallows spaces between brackets of array literals and braces\n of their object literal elements `[ {` or `} ]`\n - `\"arraysInArrays\": false` disallows spaces between brackets of array literals and brackets\n of their array literal elements `[ [` or `] ]`\n\n This rule has build-in exceptions:\n\n - `\"never\"` (and also the exceptions to the `\"always\"` option) allows newlines inside\n array brackets, because this is a common pattern\n - `\"always\"` does not require spaces or newlines in empty array literals `[]`\n "], ["\n The rule takes one or two options. The first is a string, which can be:\n\n - \\`\"never\"\\` (default) disallows spaces inside array brackets\n - \\`\"always\"\\`requires one or more spaces or newlines inside array brackets\n\n The second option is an object for exceptions to the \\`\"never\"\\` option:\n\n - \\`\"singleValue\": true\\` requires one or more spaces or newlines inside brackets of array\n literals that contain a single element\n - \\`\"objectsInArrays\": true\\` requires one or more spaces or newlines between brackets of\n array literals and braces of their object literal elements\n \\`[ {\\` or \\`} ]\\`\n - \\`\"arraysInArrays\": true\\` requires one or more spaces or newlines between brackets of\n array literals and brackets of their array literal elements\n \\`[ [\\` or \\`] ]\\`\n\n When using the \\`\"always\"\\` option the second option takes on these exceptions:\n\n - \\`\"singleValue\": false\\` disallows spaces inside brackets of array literals that contain a\n single element\n - \\`\"objectsInArrays\": false\\` disallows spaces between brackets of array literals and braces\n of their object literal elements \\`[ {\\` or \\`} ]\\`\n - \\`\"arraysInArrays\": false\\` disallows spaces between brackets of array literals and brackets\n of their array literal elements \\`[ [\\` or \\`] ]\\`\n\n This rule has build-in exceptions:\n\n - \\`\"never\"\\` (and also the exceptions to the \\`\"always\"\\` option) allows newlines inside\n array brackets, because this is a common pattern\n - \\`\"always\"\\` does not require spaces or newlines in empty array literals \\`[]\\`\n "]))),
options: {
anyOf: [
{
type: 'array',
items: [
{
enum: ['always', 'never']
}
],
minItems: 0,
maxItems: 1
},
{
type: 'object',
properties: {
singleValue: {
type: 'boolean'
},
objectsInArrays: {
type: 'boolean'
},
arraysInArrays: {
type: 'boolean'
}
},
additionalProperties: false
}
]
},
optionExamples: [
Lint.Utils.dedent(templateObject_3 || (templateObject_3 = tslib_1.__makeTemplateObject(["\n \"", "\": [true, \"always\"]\n "], ["\n \"", "\": [true, \"always\"]\n "])), RULE_NAME),
Lint.Utils.dedent(templateObject_4 || (templateObject_4 = tslib_1.__makeTemplateObject(["\n \"", "\": [true, \"never\"]\n "], ["\n \"", "\": [true, \"never\"]\n "])), RULE_NAME),
Lint.Utils.dedent(templateObject_5 || (templateObject_5 = tslib_1.__makeTemplateObject(["\n \"", "\": [true, \"never\", {\n \"arraysInArrays\": true\n }]\n "], ["\n \"", "\": [true, \"never\", {\n \"arraysInArrays\": true\n }]\n "])), RULE_NAME)
],
typescriptOnly: false,
type: 'style'
};
return Rule;
}(Lint.Rules.AbstractRule));
exports.Rule = Rule;
var ArrayBracketSpacingWalker = (function (_super) {
tslib_1.__extends(ArrayBracketSpacingWalker, _super);
function ArrayBracketSpacingWalker(sourceFile, options) {
var _this = _super.call(this, sourceFile, options) || this;
_this.singleValueException = false;
_this.objectsInArraysException = false;
_this.arraysInArraysException = false;
var ruleOptions = _this.getOptions();
_this.spaced = _this.hasOption(OPTION_ALWAYS) || (ruleOptions && ruleOptions.length === 0);
var opt = ruleOptions[1];
var isDef = function (x) { return typeof x !== 'undefined'; };
if (opt) {
_this.singleValueException = isDef(opt.singleValue) && opt.singleValue !== _this.spaced;
_this.objectsInArraysException = isDef(opt.objectsInArrays) && opt.objectsInArrays !== _this.spaced;
_this.arraysInArraysException = isDef(opt.arraysInArrays) && opt.arraysInArrays !== _this.spaced;
}
return _this;
}
ArrayBracketSpacingWalker.prototype.report = function (start, msg, fix) {
this.addFailure(this.createFailure(start, 1, msg, fix));
};
ArrayBracketSpacingWalker.prototype.reportNoBeginningSpace = function (token, space) {
var start = token.getStart(this.getSourceFile());
var fix = Lint.Replacement.deleteText(start + 1, space);
this.report(start, 'There should be no space after "["', fix);
};
ArrayBracketSpacingWalker.prototype.reportRequiredBeginningSpace = function (token) {
var start = token.getStart(this.getSourceFile());
var fix = Lint.Replacement.appendText(start + 1, ' ');
this.report(start, 'A space is required after "["', fix);
};
ArrayBracketSpacingWalker.prototype.reportRequiredEndingSpace = function (token) {
var start = token.getStart(this.getSourceFile());
var fix = Lint.Replacement.appendText(start, ' ');
this.report(start, 'A space is required before "]"', fix);
};
ArrayBracketSpacingWalker.prototype.reportNoEndingSpace = function (token, space) {
var start = token.getStart(this.getSourceFile());
var fix = Lint.Replacement.deleteText(start - space, space);
this.report(start, 'There should be no space before "]"', fix);
};
ArrayBracketSpacingWalker.prototype.visitNode = function (node) {
if (node.kind === ts.SyntaxKind.ArrayBindingPattern) {
this.validateArraySpacing(node, node.elements);
}
_super.prototype.visitNode.call(this, node);
};
ArrayBracketSpacingWalker.prototype.visitArrayLiteralExpression = function (node) {
this.validateArraySpacing(node, node.elements);
_super.prototype.visitArrayLiteralExpression.call(this, node);
};
ArrayBracketSpacingWalker.prototype.isObjectType = function (node) {
return node && node.kind === ts.SyntaxKind.ObjectLiteralExpression;
};
ArrayBracketSpacingWalker.prototype.isArrayType = function (node) {
if (node) {
if (node.kind === ts.SyntaxKind.ArrayLiteralExpression) {
return true;
}
var firstChild = node.getChildAt(0);
if (firstChild && firstChild.kind === ts.SyntaxKind.ArrayBindingPattern) {
return true;
}
}
return false;
};
ArrayBracketSpacingWalker.prototype.validateArraySpacing = function (node, elements) {
var _this = this;
if (this.spaced && elements.length === 0) {
return;
}
var first = node.getChildAt(0);
var last = node.getChildAt(2);
var firstElement = elements[0];
var lastElement = elements[elements.length - 1];
var second = firstElement || last;
var penultimate = lastElement || first;
if (second.pos === second.end) {
second = node.getChildAt(1).getChildAt(1);
}
if (elements.hasTrailingComma) {
penultimate = elements;
}
var mustBeSpaced = function (token) { return (_this.singleValueException && elements.length === 1 ||
_this.objectsInArraysException && _this.isObjectType(token) ||
_this.arraysInArraysException && _this.isArrayType(token)) ? !_this.spaced : _this.spaced; };
var openingBracketMustBeSpaced = mustBeSpaced(firstElement);
var closingBracketMustBeSpaced = mustBeSpaced(lastElement);
var spaceAfterOpeningBracket = this.getSpaceBetween(first, second, false);
var isBreakAfterOpeningBracket = this.isLineBreakBetween(first, second);
var spaceBeforeClosingBracket = this.getSpaceBetween(penultimate, last, true);
var isBreakBeforeClosingBracket = this.isLineBreakBetween(penultimate, last);
if (!isBreakAfterOpeningBracket) {
if (openingBracketMustBeSpaced && !spaceAfterOpeningBracket) {
this.reportRequiredBeginningSpace(first);
}
else if (!openingBracketMustBeSpaced && spaceAfterOpeningBracket) {
this.reportNoBeginningSpace(first, spaceAfterOpeningBracket);
}
}
if (first !== penultimate && !isBreakBeforeClosingBracket) {
if (closingBracketMustBeSpaced && !spaceBeforeClosingBracket) {
this.reportRequiredEndingSpace(last);
}
else if (!closingBracketMustBeSpaced && spaceBeforeClosingBracket) {
this.reportNoEndingSpace(last, spaceBeforeClosingBracket);
}
}
};
ArrayBracketSpacingWalker.prototype.getSpaceBetween = function (node, nextNode, trailing) {
var end = nextNode.getStart(this.getSourceFile());
var start = node.end;
var text = this.getSourceFile().text.substring(start, end);
var m = text.match(/\/\*.*\*\//);
if (m && typeof m.index === 'number') {
var len = m[0].length;
return trailing ? end - (start + m.index + len) : m.index;
}
return end - start;
};
ArrayBracketSpacingWalker.prototype.isLineBreakBetween = function (node, nextNode) {
return this.getEndPosition(node).line !== this.getStartPosition(nextNode).line;
};
ArrayBracketSpacingWalker.prototype.getStartPosition = function (node) {
var srcFile = this.getSourceFile();
return srcFile.getLineAndCharacterOfPosition(node.getStart(srcFile));
};
ArrayBracketSpacingWalker.prototype.getEndPosition = function (node) {
return this.getSourceFile().getLineAndCharacterOfPosition(node.end);
};
return ArrayBracketSpacingWalker;
}(Lint.RuleWalker));
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJ1bGVzL2FycmF5QnJhY2tldFNwYWNpbmdSdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUFpQztBQUNqQyw2QkFBK0I7QUFFL0IsSUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDO0FBQy9CLElBQU0sU0FBUyxHQUFHLHVCQUF1QixDQUFDO0FBRTFDO0lBQTBCLGdDQUF1QjtJQUFqRDs7SUEyRkEsQ0FBQztJQUpRLG9CQUFLLEdBQVosVUFBYSxVQUF5QjtRQUNwQyxJQUFNLE1BQU0sR0FBRyxJQUFJLHlCQUF5QixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUM1RSxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQXpGYSxhQUFRLEdBQXVCO1FBQzNDLFFBQVEsRUFBRSxTQUFTO1FBQ25CLFdBQVcsRUFBRSxrREFBa0Q7UUFDL0QsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSx1UkFBQSw0TUFHekIsSUFBQTtRQUNILGtCQUFrQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxzN0RBQUEsbThEQStCbEMsSUFBQTtRQUNILE9BQU8sRUFBRTtZQUNQLEtBQUssRUFBRTtnQkFDTDtvQkFDRSxJQUFJLEVBQUUsT0FBTztvQkFDYixLQUFLLEVBQUU7d0JBQ0w7NEJBQ0UsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQzt5QkFDMUI7cUJBQ0Y7b0JBQ0QsUUFBUSxFQUFFLENBQUM7b0JBQ1gsUUFBUSxFQUFFLENBQUM7aUJBQ1o7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsVUFBVSxFQUFFO3dCQUNWLFdBQVcsRUFBRTs0QkFDWCxJQUFJLEVBQUUsU0FBUzt5QkFDaEI7d0JBQ0QsZUFBZSxFQUFFOzRCQUNmLElBQUksRUFBRSxTQUFTO3lCQUNoQjt3QkFDRCxjQUFjLEVBQUU7NEJBQ2QsSUFBSSxFQUFF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QU0sQ0FBQztZQUN4QixPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7U0FDM0Q7UUFDRCxPQUFPLEdBQUcsR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVPLHNEQUFrQixHQUExQixVQUEyQixJQUFrQixFQUFFLFFBQWlCO1FBQzlELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNqRixDQUFDO0lBRU8sb0RBQWdCLEdBQXhCLFVBQXlCLElBQWE7UUFDcEMsSUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JDLE9BQU8sT0FBTyxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRU8sa0RBQWMsR0FBdEIsVUFBdUIsSUFBa0I7UUFDdkMsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFDSCxnQ0FBQztBQUFELENBOUpBLEFBOEpDLENBOUp1QyxJQUFJLENBQUMsVUFBVSxHQThKdEQiLCJmaWxlIjoicnVsZXMvYXJyYXlCcmFja2V0U3BhY2luZ1J1bGUuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL2ptbG9wZXovdHNsaW50LWVzbGludC1ydWxlcy9zcmMifQ==