aboutsummaryrefslogtreecommitdiffstats
path: root/language-web/src/main/js/editor/xtextServiceResults.ts
diff options
context:
space:
mode:
Diffstat (limited to 'language-web/src/main/js/editor/xtextServiceResults.ts')
-rw-r--r--language-web/src/main/js/editor/xtextServiceResults.ts61
1 files changed, 61 insertions, 0 deletions
diff --git a/language-web/src/main/js/editor/xtextServiceResults.ts b/language-web/src/main/js/editor/xtextServiceResults.ts
new file mode 100644
index 00000000..2a66566a
--- /dev/null
+++ b/language-web/src/main/js/editor/xtextServiceResults.ts
@@ -0,0 +1,61 @@
1export interface IDocumentStateResult {
2 stateId: string;
3}
4
5export function isDocumentStateResult(result: unknown): result is IDocumentStateResult {
6 const documentStateResult = result as IDocumentStateResult;
7 return typeof documentStateResult.stateId === 'string';
8}
9
10export const VALID_CONFLICTS = ['invalidStateId', 'canceled'] as const;
11
12export type Conflict = typeof VALID_CONFLICTS[number];
13
14export interface IServiceConflictResult {
15 conflict: Conflict;
16}
17
18export function isServiceConflictResult(result: unknown): result is IServiceConflictResult {
19 const serviceConflictResult = result as IServiceConflictResult;
20 return typeof serviceConflictResult.conflict === 'string'
21 && VALID_CONFLICTS.includes(serviceConflictResult.conflict);
22}
23
24export const VALID_SEVERITIES = ['error', 'warning', 'info', 'ignore'] as const;
25
26export type Severity = typeof VALID_SEVERITIES[number];
27
28export interface IIssue {
29 description: string;
30
31 severity: Severity;
32
33 line: number;
34
35 column: number;
36
37 offset: number;
38
39 length: number;
40}
41
42export function isIssue(value: unknown): value is IIssue {
43 const issue = value as IIssue;
44 return typeof issue.description === 'string'
45 && typeof issue.severity === 'string'
46 && VALID_SEVERITIES.includes(issue.severity)
47 && typeof issue.line === 'number'
48 && typeof issue.column === 'number'
49 && typeof issue.offset === 'number'
50 && typeof issue.length === 'number';
51}
52
53export interface IValidationResult {
54 issues: IIssue[];
55}
56
57export function isValidationResult(result: unknown): result is IValidationResult {
58 const validationResult = result as IValidationResult;
59 return Array.isArray(validationResult.issues)
60 && validationResult.issues.every(isIssue);
61}