-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathvalidation.ts
43 lines (35 loc) · 1.51 KB
/
validation.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
import {Node} from "./model/model";
import {Position} from "./model/position";
export enum IssueType { LEXICAL, SYNTACTIC, SEMANTIC}
export enum IssueSeverity { ERROR, WARNING, INFO}
export interface IssueArg {
name: string;
value: string;
}
export class Issue {
constructor(
public readonly type: IssueType,
public readonly message: string,
public readonly severity: IssueSeverity,
public readonly position?: Position,
public readonly node?: Node,
public readonly code?: string,
public readonly args: IssueArg[] = []
) {
if (!position) {
this.position = node?.position;
}
}
static lexical(message: string, severity: IssueSeverity = IssueSeverity.ERROR, position?: Position,
node?: Node, code?: string, args: IssueArg[] = []): Issue {
return new Issue(IssueType.LEXICAL, message, severity, position, node, code, args);
}
static syntactic(message: string, severity: IssueSeverity = IssueSeverity.ERROR, position?: Position,
node?: Node, code?: string, args: IssueArg[] = []): Issue {
return new Issue(IssueType.SYNTACTIC, message, severity, position, node, code, args);
}
static semantic(message: string, severity: IssueSeverity = IssueSeverity.ERROR, position?: Position,
node?: Node, code?: string, args: IssueArg[] = []): Issue {
return new Issue(IssueType.SEMANTIC, message, severity, position, node, code, args);
}
}