assemblyscript/lib/tslint/asFormatter.ts
2018-02-25 00:13:39 +01:00

54 lines
1.9 KiB
TypeScript

import { AbstractFormatter } from "tslint/lib/language/formatter/abstractFormatter";
import { IFormatterMetadata } from "tslint/lib/language/formatter/formatter";
import { RuleFailure } from "tslint/lib/language/rule/rule";
const colorBlue: string = "\u001b[93m";
const colorYellow: string = "\u001b[93m";
const colorRed: string = "\u001b[91m";
const colorReset: string = "\u001b[0m";
export class Formatter extends AbstractFormatter {
static metadata: IFormatterMetadata = {
formatterName: "as",
description: "AssemblyScript's TSLint formatter.",
sample: "Similar to ASC's output.",
consumer: "human",
};
lastSeverity: string;
lastFailure: string;
format(failures: RuleFailure[]): string {
return `${this.mapToMessages(failures).join("\n")}\n`;
}
mapToMessages(failures: RuleFailure[]): string[] {
return failures.map((failure: RuleFailure) => {
const fileName = failure.getFileName();
const failureString = failure.getFailure();
const ruleName = failure.getRuleName();
const lineAndCharacter = failure.getStartPosition().getLineAndCharacter();
const positionTuple = `:${lineAndCharacter.line + 1}:${lineAndCharacter.character + 1}`;
if (this.lastSeverity == failure.getRuleSeverity() && this.lastFailure == failureString) {
return " in " + fileName + positionTuple;
} else {
var message = this.lastSeverity ? "\n" : "";
switch (this.lastSeverity = failure.getRuleSeverity()) {
case "warning":
message += colorYellow + "WARNING:" + colorReset;
break;
case "error":
message += colorRed + "ERROR:" + colorReset;
break;
default:
message += failure.getRuleSeverity();
break;
}
this.lastFailure = failureString;
return message + " " + failureString + " [" + ruleName + "]\n in " + fileName + positionTuple;
}
});
}
}