4 * Copyright 2013 Palantir Technologies, Inc.
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 Object.defineProperty(exports, "__esModule", { value: true });
19 var tslib_1 = require("tslib");
20 var chalk_1 = require("chalk");
21 var abstractFormatter_1 = require("../language/formatter/abstractFormatter");
22 var Utils = require("../utils");
23 var Formatter = /** @class */ (function (_super) {
24 tslib_1.__extends(Formatter, _super);
25 function Formatter() {
26 return _super !== null && _super.apply(this, arguments) || this;
28 /* tslint:enable:object-literal-sort-keys */
29 Formatter.prototype.format = function (failures) {
30 failures = this.sortFailures(failures);
31 var outputLines = this.mapToMessages(failures);
32 // Removes initial blank line
33 if (outputLines[0] === "") {
36 return outputLines.join("\n") + "\n";
38 Formatter.prototype.mapToMessages = function (failures) {
39 if (failures.length === 0) {
43 var positionMaxSize = this.getPositionMaxSize(failures);
44 var ruleMaxSize = this.getRuleMaxSize(failures);
46 for (var _i = 0, failures_1 = failures; _i < failures_1.length; _i++) {
47 var failure = failures_1[_i];
48 var fileName = failure.getFileName();
49 var lineAndCharacter = failure.getStartPosition().getLineAndCharacter();
50 var positionTuple = lineAndCharacter.line + 1 + ":" + (lineAndCharacter.character + 1);
51 // Output the name of each file once
52 if (currentFile !== fileName) {
54 outputLines.push("" + fileName + chalk_1.default.hidden(":" + positionTuple));
55 currentFile = fileName;
57 var failureString = failure.getFailure();
58 failureString = chalk_1.default.yellow(failureString);
60 var ruleName = failure.getRuleName();
61 ruleName = this.pad(ruleName, ruleMaxSize);
62 ruleName = chalk_1.default.grey(ruleName);
64 positionTuple = this.pad(positionTuple, positionMaxSize);
66 failure.getRuleSeverity() === "warning"
67 ? chalk_1.default.blue(failure.getRuleSeverity().toUpperCase() + ": " + positionTuple)
68 : chalk_1.default.red(failure.getRuleSeverity().toUpperCase() + ": " + positionTuple);
70 var output = positionTuple + " " + ruleName + " " + failureString;
71 outputLines.push(output);
75 Formatter.prototype.pad = function (str, len) {
76 var padder = Array(len + 1).join(" ");
77 return (str + padder).substring(0, padder.length);
79 Formatter.prototype.getPositionMaxSize = function (failures) {
80 var positionMaxSize = 0;
81 for (var _i = 0, failures_2 = failures; _i < failures_2.length; _i++) {
82 var failure = failures_2[_i];
83 var lineAndCharacter = failure.getStartPosition().getLineAndCharacter();
84 var positionSize = (lineAndCharacter.line + 1 + ":" + (lineAndCharacter.character + 1))
86 if (positionSize > positionMaxSize) {
87 positionMaxSize = positionSize;
90 return positionMaxSize;
92 Formatter.prototype.getRuleMaxSize = function (failures) {
94 for (var _i = 0, failures_3 = failures; _i < failures_3.length; _i++) {
95 var failure = failures_3[_i];
96 var ruleSize = failure.getRuleName().length;
97 if (ruleSize > ruleMaxSize) {
98 ruleMaxSize = ruleSize;
103 /* tslint:disable:object-literal-sort-keys */
104 Formatter.metadata = {
105 formatterName: "stylish",
106 description: "Human-readable formatter which creates stylish messages.",
107 descriptionDetails: Utils.dedent(templateObject_1 || (templateObject_1 = tslib_1.__makeTemplateObject(["\n The output matches what is produced by ESLint's stylish formatter.\n Its readability is enhanced through spacing and colouring."], ["\n The output matches what is produced by ESLint's stylish formatter.\n Its readability is enhanced through spacing and colouring."]))),
108 sample: Utils.dedent(templateObject_2 || (templateObject_2 = tslib_1.__makeTemplateObject(["\n myFile.ts\n Error: 1:14 semicolon Missing semicolon"], ["\n myFile.ts\n Error: 1:14 semicolon Missing semicolon"]))),
112 }(abstractFormatter_1.AbstractFormatter));
113 exports.Formatter = Formatter;
114 var templateObject_1, templateObject_2;