-
-
Notifications
You must be signed in to change notification settings - Fork 237
/
EsLintIssueFactory.ts
65 lines (58 loc) · 1.83 KB
/
EsLintIssueFactory.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import { FileAwareEsLintMessage } from './FileAwareEsLintMessage';
import { deduplicateAndSortIssues, Issue } from '../Issue';
import { IssueOrigin } from '../IssueOrigin';
import { IssueSeverity } from '../IssueSeverity';
import { LintReport, LintResult } from '../../types/eslint';
function createIssueFromEsLintMessage(message: FileAwareEsLintMessage): Issue {
return {
origin: IssueOrigin.ESLINT,
code: message.ruleId ? String(message.ruleId) : '[unknown]',
severity:
message.severity === 1 ? IssueSeverity.WARNING : IssueSeverity.ERROR,
message: message.message,
file: message.filePath,
line: message.line,
character: message.column
};
}
function createFileAwareEsLintMessagesFromEsLintResult(
result: LintResult
): FileAwareEsLintMessage[] {
return result.messages.map(message => ({
...message,
filePath: result.filePath
}));
}
function createFileAwareEsLintMessagesFromEsLintReport(
report: LintReport
): FileAwareEsLintMessage[] {
return report.results.reduce<FileAwareEsLintMessage[]>(
(messages, result) => [
...messages,
...createFileAwareEsLintMessagesFromEsLintResult(result)
],
[]
);
}
function createFileAwareEsLintMessagesFromEsLintReports(
reports: LintReport[]
): FileAwareEsLintMessage[] {
return reports.reduce<FileAwareEsLintMessage[]>(
(messages, report) => [
...messages,
...createFileAwareEsLintMessagesFromEsLintReport(report)
],
[]
);
}
function createIssuesFromEsLintMessages(
messages: FileAwareEsLintMessage[]
): Issue[] {
return deduplicateAndSortIssues(messages.map(createIssueFromEsLintMessage));
}
function createIssuesFromEsLintReports(reports: LintReport[]): Issue[] {
return createIssuesFromEsLintMessages(
createFileAwareEsLintMessagesFromEsLintReports(reports)
);
}
export { createIssuesFromEsLintReports };