Skip to content
This repository has been archived by the owner on Mar 25, 2021. It is now read-only.

Commit

Permalink
Sort failures by failure's line and character
Browse files Browse the repository at this point in the history
  • Loading branch information
eggggger committed Oct 19, 2017
1 parent 7719167 commit f16d4d3
Showing 1 changed file with 21 additions and 1 deletion.
22 changes: 21 additions & 1 deletion src/linter.ts
Expand Up @@ -131,7 +131,9 @@ class Linter {
throw new Error(`formatter '${formatterName}' not found`);
}

const output = formatter.format(this.failures, this.fixes);
// Sort failures by failure's line and character.
const failures = this.sortFailures(this.failures);
const output = formatter.format(failures, this.fixes);

const errorCount = this.failures.filter((failure) => failure.getRuleSeverity() === "error").length;
return {
Expand All @@ -144,6 +146,24 @@ class Linter {
};
}

public sortFailures(failures: RuleFailure[]): RuleFailure[] {
let sortedFailures: RuleFailure[] = [];

const fileFailuresMap = createMultiMap(failures, (failure) => [failure.getFileName(), failure]);
fileFailuresMap.forEach((fileFailures) => {
sortedFailures = sortedFailures.concat(fileFailures.sort((failureA, failureB) => {
const failureALineAndCharacter = failureA.getStartPosition().getLineAndCharacter();
const failureBLineAndCharacter = failureB.getStartPosition().getLineAndCharacter();
if (failureALineAndCharacter.line === failureBLineAndCharacter.line) {
return failureALineAndCharacter.character - failureBLineAndCharacter.character;
}
return failureALineAndCharacter.line - failureBLineAndCharacter.line;
}));
});

return sortedFailures;
}

private getAllFailures(sourceFile: ts.SourceFile, enabledRules: IRule[]): RuleFailure[] {
const failures = flatMap(enabledRules, (rule) => this.applyRule(rule, sourceFile));
return removeDisabledFailures(sourceFile, failures);
Expand Down

0 comments on commit f16d4d3

Please sign in to comment.