123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- "use strict";
- /**
- * @license
- * Copyright 2017 Palantir Technologies, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- Object.defineProperty(exports, "__esModule", { value: true });
- var tslib_1 = require("tslib");
- var tsutils_1 = require("tsutils");
- var ts = require("typescript");
- var Lint = require("../index");
- var Rule = /** @class */ (function (_super) {
- tslib_1.__extends(Rule, _super);
- function Rule() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- Rule.FAILURE_NEEDS_SPACE = function (count) {
- return "Needs " + count + " whitespace" + (count > 1 ? "s" : "") + " within parentheses";
- };
- Rule.FAILURE_NO_EXTRA_SPACE = function (count) {
- return "No more than " + count + " whitespace" + (count > 1 ? "s" : "") + " within parentheses allowed";
- };
- Rule.prototype.apply = function (sourceFile) {
- return this.applyWithWalker(new SpaceWithinParensWalker(sourceFile, this.ruleName, parseOptions(this.ruleArguments[0])));
- };
- /* tslint:disable:object-literal-sort-keys */
- Rule.metadata = {
- ruleName: "space-within-parens",
- description: "Enforces spaces within parentheses or disallow them. Empty parentheses () are always allowed.",
- hasFix: true,
- optionsDescription: Lint.Utils.dedent(templateObject_1 || (templateObject_1 = tslib_1.__makeTemplateObject(["\n You may enforce the amount of whitespace within parentheses.\n "], ["\n You may enforce the amount of whitespace within parentheses.\n "]))),
- options: { type: "number", min: 0 },
- type: "style",
- typescriptOnly: false,
- };
- /* tslint:enable:object-literal-sort-keys */
- Rule.FAILURE_NO_SPACE = "Whitespace within parentheses is not allowed";
- return Rule;
- }(Lint.Rules.AbstractRule));
- exports.Rule = Rule;
- function parseOptions(whitespaceSize) {
- var size = 0;
- if (typeof whitespaceSize === "number") {
- if (whitespaceSize >= 0) {
- size = whitespaceSize;
- }
- }
- else if (typeof whitespaceSize === "string") {
- var parsedSize = parseInt(whitespaceSize, 10);
- if (!Number.isNaN(parsedSize) && parsedSize >= 0) {
- size = parsedSize;
- }
- }
- return {
- size: size,
- };
- }
- var SpaceWithinParensWalker = /** @class */ (function (_super) {
- tslib_1.__extends(SpaceWithinParensWalker, _super);
- function SpaceWithinParensWalker() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- SpaceWithinParensWalker.prototype.walk = function (sourceFile) {
- var _this = this;
- tsutils_1.forEachToken(sourceFile, function (token) {
- if (token.kind === ts.SyntaxKind.OpenParenToken) {
- if (sourceFile.text.charAt(token.end) !== ")") {
- _this.checkOpenParenToken(token);
- }
- }
- else if (token.kind === ts.SyntaxKind.CloseParenToken) {
- if (sourceFile.text.charAt(token.end - 2) !== "(") {
- _this.checkCloseParenToken(token);
- }
- }
- });
- };
- SpaceWithinParensWalker.prototype.checkOpenParenToken = function (tokenNode) {
- var currentPos = tokenNode.end;
- var currentChar = this.sourceFile.text.charCodeAt(currentPos);
- var allowedSpaceCount = this.options.size;
- while (ts.isWhiteSpaceSingleLine(currentChar)) {
- ++currentPos;
- currentChar = this.sourceFile.text.charCodeAt(currentPos);
- }
- if (!ts.isLineBreak(currentChar)) {
- var whitespaceCount = currentPos - tokenNode.end;
- if (whitespaceCount !== allowedSpaceCount) {
- var length = 0;
- var pos = tokenNode.end;
- if (whitespaceCount > allowedSpaceCount) {
- pos += allowedSpaceCount;
- length = whitespaceCount - allowedSpaceCount;
- }
- else if (whitespaceCount > 0 && whitespaceCount < allowedSpaceCount) {
- pos += allowedSpaceCount - whitespaceCount;
- }
- this.addFailureAtWithFix(pos, length, whitespaceCount);
- }
- }
- };
- SpaceWithinParensWalker.prototype.checkCloseParenToken = function (tokenNode) {
- var currentPos = tokenNode.end - 2;
- var currentChar = this.sourceFile.text.charCodeAt(currentPos);
- var allowedSpaceCount = this.options.size;
- while (ts.isWhiteSpaceSingleLine(currentChar)) {
- --currentPos;
- currentChar = this.sourceFile.text.charCodeAt(currentPos);
- }
- /**
- * Number 40 is open parenthese char code, we skip this cause
- * it's already been caught by `checkOpenParenToken`
- */
- if (!ts.isLineBreak(currentChar) && currentChar !== 40) {
- var whitespaceCount = tokenNode.end - currentPos - 2;
- if (whitespaceCount !== allowedSpaceCount) {
- var length = 0;
- var pos = currentPos + 1;
- if (whitespaceCount > allowedSpaceCount) {
- length = whitespaceCount - allowedSpaceCount;
- }
- this.addFailureAtWithFix(pos, length, whitespaceCount);
- }
- }
- };
- SpaceWithinParensWalker.prototype.addFailureAtWithFix = function (position, length, whitespaceCount) {
- var lintMsg;
- var lintFix;
- var allowedSpaceCount = this.options.size;
- if (allowedSpaceCount === 0) {
- lintMsg = Rule.FAILURE_NO_SPACE;
- lintFix = Lint.Replacement.deleteText(position, length);
- }
- else if (allowedSpaceCount > whitespaceCount) {
- lintMsg = Rule.FAILURE_NEEDS_SPACE(allowedSpaceCount - whitespaceCount);
- var whitespace = " ".repeat(allowedSpaceCount - whitespaceCount);
- lintFix = Lint.Replacement.appendText(position, whitespace);
- }
- else {
- lintMsg = Rule.FAILURE_NO_EXTRA_SPACE(allowedSpaceCount);
- lintFix = Lint.Replacement.deleteText(position, whitespaceCount - allowedSpaceCount);
- }
- this.addFailureAt(position, length, lintMsg, lintFix);
- };
- return SpaceWithinParensWalker;
- }(Lint.AbstractWalker));
- var templateObject_1;
|