aboutsummaryrefslogtreecommitdiff
path: root/server/out/diagnostics.js
blob: cc8a76fcb771671dd3cf41a7fa4fb05ac3ecf304 (plain)
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
66
67
68
69
70
71
72
73
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const node_1 = require("vscode-languageserver/node");
const vscode_languageserver_1 = require("vscode-languageserver");
class WingDiagnostics {
    static run(textDocument, version, results) {
        try {
            const text = textDocument.getText();
            let diagnostics = [];
            let pos = -1;
            let linesPositions = text.replace(/\r\n/gm, "\n").split("\n").map(i => {
                let start = pos + 1;
                let end = pos + i.length + 1;
                pos = end;
                return [
                    start,
                    end
                ];
            });
            let problems = 0;
            for (let problem of results.problems) {
                problems++;
                let severity = node_1.DiagnosticSeverity.Hint;
                switch (problem.type) {
                    case "warning":
                        severity = node_1.DiagnosticSeverity.Warning;
                        break;
                    case "error":
                        severity = node_1.DiagnosticSeverity.Error;
                        break;
                    case "deprecation":
                        severity = node_1.DiagnosticSeverity.Information;
                        break;
                }
                const diagnostic = {
                    severity,
                    range: {
                        start: textDocument.positionAt(linesPositions[problem.line - 1][0]),
                        end: textDocument.positionAt(linesPositions[problem.line - 1][1])
                    },
                    message: problem.message,
                    source: 'wing-' + version + " "
                };
                if (problem.type === "deprecation") {
                    diagnostic.tags = [vscode_languageserver_1.DiagnosticTag.Deprecated];
                }
                diagnostic.code = problem.code ?? null;
                diagnostic.relatedInformation = [
                    {
                        location: {
                            uri: problem.source.uri === "_self" ? textDocument.uri : "file://" + problem.source.uri,
                            range: {
                                start: textDocument.positionAt(linesPositions[problem.source.line - 1][0]),
                                end: textDocument.positionAt(linesPositions[problem.source.line - 1][1])
                            }
                        },
                        message: problem.source.name
                    }
                ];
                diagnostics.push(diagnostic);
            }
            const pattern = /\b[A-Z]{2,}\b/g;
            let m;
            return diagnostics;
        }
        catch (e) {
            console.error(e);
            return [];
        }
    }
}
exports.default = WingDiagnostics;
//# sourceMappingURL=diagnostics.js.map