1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.diagnosticTypeToLSSeverity = exports.atomIdeDiagnosticToLSDiagnostic = void 0;
|
4 | const ls = require("../languageclient");
|
5 | const convert_1 = require("../convert");
|
6 | const linter_push_v2_adapter_1 = require("./linter-push-v2-adapter");
|
7 | /** @deprecated Use Linter V2 service */
|
8 | class IdeDiagnosticAdapter extends linter_push_v2_adapter_1.default {
|
9 | constructor() {
|
10 | super(...arguments);
|
11 | this._diagnosticCodes = new Map();
|
12 | }
|
13 | /**
|
14 | * Public: Capture the diagnostics sent from a langguage server, convert them to the Linter V2 format and forward them
|
15 | * on to any attached {V2IndieDelegate}s.
|
16 | *
|
17 | * @deprecated Use Linter V2 service
|
18 | * @param params The {PublishDiagnosticsParams} received from the language server that should be captured and
|
19 | * forwarded on to any attached {V2IndieDelegate}s.
|
20 | */
|
21 | captureDiagnostics(params) {
|
22 | const path = convert_1.default.uriToPath(params.uri);
|
23 | const codeMap = new Map();
|
24 | const messages = params.diagnostics.map((d) => {
|
25 | const linterMessage = this.diagnosticToV2Message(path, d);
|
26 | codeMap.set(getCodeKey(linterMessage.location.position, d.message), d.code);
|
27 | return linterMessage;
|
28 | });
|
29 | this._diagnosticMap.set(path, messages);
|
30 | this._diagnosticCodes.set(path, codeMap);
|
31 | this._indies.forEach((i) => i.setMessages(path, messages));
|
32 | }
|
33 | /**
|
34 | * Public: get diagnostics for the given linter messages
|
35 | *
|
36 | * @deprecated Use Linter V2 service
|
37 | * @param linterMessages An array of linter {V2Message}
|
38 | * @param editor
|
39 | * @returns An array of LS {Diagnostic[]}
|
40 | */
|
41 | getLSDiagnosticsForIdeDiagnostics(diagnostics, editor) {
|
42 | return diagnostics.map((diagnostic) => this.getLSDiagnosticForIdeDiagnostic(diagnostic, editor));
|
43 | }
|
44 | /**
|
45 | * Public: Get the {Diagnostic} that is associated with the given {atomIde.Diagnostic}.
|
46 | *
|
47 | * @deprecated Use Linter V2 service
|
48 | * @param diagnostic The {atomIde.Diagnostic} object to fetch the {Diagnostic} for.
|
49 | * @param editor
|
50 | * @returns The associated {Diagnostic}.
|
51 | */
|
52 | getLSDiagnosticForIdeDiagnostic(diagnostic, editor) {
|
53 | // Retrieve the stored diagnostic code if it exists.
|
54 | // Until the Linter API provides a place to store the code,
|
55 | // there's no real way for the code actions API to give it back to us.
|
56 | const converted = atomIdeDiagnosticToLSDiagnostic(diagnostic);
|
57 | if (diagnostic.range != null && diagnostic.text != null) {
|
58 | const code = this.getDiagnosticCode(editor, diagnostic.range, diagnostic.text);
|
59 | if (code != null) {
|
60 | converted.code = code;
|
61 | }
|
62 | }
|
63 | return converted;
|
64 | }
|
65 | /**
|
66 | * Private: Get the recorded diagnostic code for a range/message. Diagnostic codes are tricky because there's no
|
67 | * suitable place in the Linter API for them. For now, we'll record the original code for each range/message
|
68 | * combination and retrieve it when needed (e.g. for passing back into code actions)
|
69 | */
|
70 | getDiagnosticCode(editor, range, text) {
|
71 | const path = editor.getPath();
|
72 | if (path != null) {
|
73 | const diagnosticCodes = this._diagnosticCodes.get(path);
|
74 | if (diagnosticCodes != null) {
|
75 | return diagnosticCodes.get(getCodeKey(range, text)) || null;
|
76 | }
|
77 | }
|
78 | return null;
|
79 | }
|
80 | }
|
81 | exports.default = IdeDiagnosticAdapter;
|
82 | /** @deprecated Use Linter V2 service */
|
83 | function atomIdeDiagnosticToLSDiagnostic(diagnostic) {
|
84 | // TODO: support diagnostic codes and codeDescriptions
|
85 | // TODO!: support data
|
86 | return {
|
87 | range: convert_1.default.atomRangeToLSRange(diagnostic.range),
|
88 | severity: diagnosticTypeToLSSeverity(diagnostic.type),
|
89 | source: diagnostic.providerName,
|
90 | message: diagnostic.text || "",
|
91 | };
|
92 | }
|
93 | exports.atomIdeDiagnosticToLSDiagnostic = atomIdeDiagnosticToLSDiagnostic;
|
94 | /** @deprecated Use Linter V2 service */
|
95 | function diagnosticTypeToLSSeverity(type) {
|
96 | switch (type) {
|
97 | case "Error":
|
98 | return ls.DiagnosticSeverity.Error;
|
99 | case "Warning":
|
100 | return ls.DiagnosticSeverity.Warning;
|
101 | case "Info":
|
102 | return ls.DiagnosticSeverity.Information;
|
103 | default:
|
104 | throw Error(`Unexpected diagnostic type ${type}`);
|
105 | }
|
106 | }
|
107 | exports.diagnosticTypeToLSSeverity = diagnosticTypeToLSSeverity;
|
108 | function getCodeKey(range, text) {
|
109 | return [].concat(...range.serialize(), text).join(",");
|
110 | }
|
111 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ25vc3RpYy1hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2FkYXB0ZXJzL2RpYWdub3N0aWMtYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSx3Q0FBdUM7QUFDdkMsd0NBQWdDO0FBQ2hDLHFFQUEwRDtBQUsxRCx3Q0FBd0M7QUFDeEMsTUFBcUIsb0JBQXFCLFNBQVEsZ0NBQW1CO0lBQXJFOztRQUNVLHFCQUFnQixHQUFvRCxJQUFJLEdBQUcsRUFBRSxDQUFBO0lBMkV2RixDQUFDO0lBekVDOzs7Ozs7O09BT0c7SUFDSSxrQkFBa0IsQ0FBQyxNQUFtQztRQUMzRCxNQUFNLElBQUksR0FBRyxpQkFBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDMUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtRQUN6QixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzVDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUE7WUFDekQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUMzRSxPQUFPLGFBQWEsQ0FBQTtRQUN0QixDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQTtRQUN2QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUN4QyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFB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ZW50IjpbImltcG9ydCAqIGFzIGF0b21JZGUgZnJvbSBcImF0b20taWRlLWJhc2VcIlxuaW1wb3J0ICogYXMgYXRvbSBmcm9tIFwiYXRvbVwiXG5pbXBvcnQgKiBhcyBscyBmcm9tIFwiLi4vbGFuZ3VhZ2VjbGllbnRcIlxuaW1wb3J0IENvbnZlcnQgZnJvbSBcIi4uL2NvbnZlcnRcIlxuaW1wb3J0IExpbnRlclB1c2hWMkFkYXB0ZXIgZnJvbSBcIi4vbGludGVyLXB1c2gtdjItYWRhcHRlclwiXG5cbi8qKiBAZGVwcmVjYXRlZCBVc2UgTGludGVyIFYyIHNlcnZpY2UgKi9cbmV4cG9ydCB0eXBlIERpYWdub3N0aWNDb2RlID0gbnVtYmVyIHwgc3RyaW5nXG5cbi8qKiBAZGVwcmVjYXRlZCBVc2UgTGludGVyIFYyIHNlcnZpY2UgKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElkZURpYWdub3N0aWNBZGFwdGVyIGV4dGVuZHMgTGludGVyUHVzaFYyQWRhcHRlciB7XG4gIHByaXZhdGUgX2RpYWdub3N0aWNDb2RlczogTWFwPHN0cmluZywgTWFwPHN0cmluZywgRGlhZ25vc3RpY0NvZGUgfCBudWxsPj4gPSBuZXcgTWFwKClcblxuICAvKipcbiAgICogUHVibGljOiBDYXB0dXJlIHRoZSBkaWFnbm9zdGljcyBzZW50IGZyb20gYSBsYW5nZ3VhZ2Ugc2VydmVyLCBjb252ZXJ0IHRoZW0gdG8gdGhlIExpbnRlciBWMiBmb3JtYXQgYW5kIGZvcndhcmQgdGhlbVxuICAgKiBvbiB0byBhbnkgYXR0YWNoZWQge1YySW5kaWVEZWxlZ2F0ZX1zLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgTGludGVyIFYyIHNlcnZpY2VcbiAgICogQHBhcmFtIHBhcmFtcyBUaGUge1B1Ymxpc2hEaWFnbm9zdGljc1BhcmFtc30gcmVjZWl2ZWQgZnJvbSB0aGUgbGFuZ3VhZ2Ugc2VydmVyIHRoYXQgc2hvdWxkIGJlIGNhcHR1cmVkIGFuZFxuICAgKiAgIGZvcndhcmRlZCBvbiB0byBhbnkgYXR0YWNoZWQge1YySW5kaWVEZWxlZ2F0ZX1zLlxuICAgKi9cbiAgcHVibGljIGNhcHR1cmVEaWFnbm9zdGljcyhwYXJhbXM6IGxzLlB1Ymxpc2hEaWFnbm9zdGljc1BhcmFtcyk6IHZvaWQge1xuICAgIGNvbnN0IHBhdGggPSBDb252ZXJ0LnVyaVRvUGF0aChwYXJhbXMudXJpKVxuICAgIGNvbnN0IGNvZGVNYXAgPSBuZXcgTWFwKClcbiAgICBjb25zdCBtZXNzYWdlcyA9IHBhcmFtcy5kaWFnbm9zdGljcy5tYXAoKGQpID0+IHtcbiAgICAgIGNvbnN0IGxpbnRlck1lc3NhZ2UgPSB0aGlzLmRpYWdub3N0aWNUb1YyTWVzc2FnZShwYXRoLCBkKVxuICAgICAgY29kZU1hcC5zZXQoZ2V0Q29kZUtleShsaW50ZXJNZXNzYWdlLmxvY2F0aW9uLnBvc2l0aW9uLCBkLm1lc3NhZ2UpLCBkLmNvZGUpXG4gICAgICByZXR1cm4gbGludGVyTWVzc2FnZVxuICAgIH0pXG4gICAgdGhpcy5fZGlhZ25vc3RpY01hcC5zZXQocGF0aCwgbWVzc2FnZXMpXG4gICAgdGhpcy5fZGlhZ25vc3RpY0NvZGVzLnNldChwYXRoLCBjb2RlTWFwKVxuICAgIHRoaXMuX2luZGllcy5mb3JFYWNoKChpKSA9PiBpLnNldE1lc3NhZ2VzKHBhdGgsIG1lc3NhZ2VzKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBQdWJsaWM6IGdldCBkaWFnbm9zdGljcyBmb3IgdGhlIGdpdmVuIGxpbnRlciBtZXNzYWdlc1xuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgTGludGVyIFYyIHNlcnZpY2VcbiAgICogQHBhcmFtIGxpbnRlck1lc3NhZ2VzIEFuIGFycmF5IG9mIGxpbnRlciB7VjJNZXNzYWdlfVxuICAgKiBAcGFyYW0gZWRpdG9yXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIExTIHtEaWFnbm9zdGljW119XG4gICAqL1xuICBwdWJsaWMgZ2V0TFNEaWFnbm9zdGljc0ZvcklkZURpYWdub3N0aWNzKFxuICAgIGRpYWdub3N0aWNzOiBhdG9tSWRlLkRpYWdub3N0aWNbXSxcbiAgICBlZGl0b3I6IGF0b20uVGV4dEVkaXRvclxuICApOiBscy5EaWFnbm9zdGljW10ge1xuICAgIHJldHVybiBkaWFnbm9zdGljcy5tYXAoKGRpYWdub3N0aWMpID0+IHRoaXMuZ2V0TFNEaWFnbm9zdGljRm9ySWRlRGlhZ25vc3RpYyhkaWFnbm9zdGljLCBlZGl0b3IpKVxuICB9XG5cbiAgLyoqXG4gICAqIFB1YmxpYzogR2V0IHRoZSB7RGlhZ25vc3RpY30gdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIHthdG9tSWRlLkRpYWdub3N0aWN9LlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgTGludGVyIFYyIHNlcnZpY2VcbiAgICogQHBhcmFtIGRpYWdub3N0aWMgVGhlIHthdG9tSWRlLkRpYWdub3N0aWN9IG9iamVjdCB0byBmZXRjaCB0aGUge0RpYWdub3N0aWN9IGZvci5cbiAgICogQHBhcmFtIGVkaXRvclxuICAgKiBAcmV0dXJucyBUaGUgYXNzb2NpYXRlZCB7RGlhZ25vc3RpY30uXG4gICAqL1xuICBwdWJsaWMgZ2V0TFNEaWFnbm9zdGljRm9ySWRlRGlhZ25vc3RpYyhkaWFnbm9zdGljOiBhdG9tSWRlLkRpYWdub3N0aWMsIGVkaXRvcjogYXRvbS5UZXh0RWRpdG9yKTogbHMuRGlhZ25vc3RpYyB7XG4gICAgLy8gUmV0cmlldmUgdGhlIHN0b3JlZCBkaWFnbm9zdGljIGNvZGUgaWYgaXQgZXhpc3RzLlxuICAgIC8vIFVudGlsIHRoZSBMaW50ZXIgQVBJIHByb3ZpZGVzIGEgcGxhY2UgdG8gc3RvcmUgdGhlIGNvZGUsXG4gICAgLy8gdGhlcmUncyBubyByZWFsIHdheSBmb3IgdGhlIGNvZGUgYWN0aW9ucyBBUEkgdG8gZ2l2ZSBpdCBiYWNrIHRvIHVzLlxuICAgIGNvbnN0IGNvbnZlcnRlZCA9IGF0b21JZGVEaWFnbm9zdGljVG9MU0RpYWdub3N0aWMoZGlhZ25vc3RpYylcbiAgICBpZiAoZGlhZ25vc3RpYy5yYW5nZSAhPSBudWxsICYmIGRpYWdub3N0aWMudGV4dCAhPSBudWxsKSB7XG4gICAgICBjb25zdCBjb2RlID0gdGhpcy5nZXREaWFnbm9zdGljQ29kZShlZGl0b3IsIGRpYWdub3N0aWMucmFuZ2UsIGRpYWdub3N0aWMudGV4dClcbiAgICAgIGlmIChjb2RlICE9IG51bGwpIHtcbiAgICAgICAgY29udmVydGVkLmNvZGUgPSBjb2RlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb252ZXJ0ZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBQcml2YXRlOiBHZXQgdGhlIHJlY29yZGVkIGRpYWdub3N0aWMgY29kZSBmb3IgYSByYW5nZS9tZXNzYWdlLiBEaWFnbm9zdGljIGNvZGVzIGFyZSB0cmlja3kgYmVjYXVzZSB0aGVyZSdzIG5vXG4gICAqIHN1aXRhYmxlIHBsYWNlIGluIHRoZSBMaW50ZXIgQVBJIGZvciB0aGVtLiBGb3Igbm93LCB3ZSdsbCByZWNvcmQgdGhlIG9yaWdpbmFsIGNvZGUgZm9yIGVhY2ggcmFuZ2UvbWVzc2FnZVxuICAgKiBjb21iaW5hdGlvbiBhbmQgcmV0cmlldmUgaXQgd2hlbiBuZWVkZWQgKGUuZy4gZm9yIHBhc3NpbmcgYmFjayBpbnRvIGNvZGUgYWN0aW9ucylcbiAgICovXG4gIHByaXZhdGUgZ2V0RGlhZ25vc3RpY0NvZGUoZWRpdG9yOiBhdG9tLlRleHRFZGl0b3IsIHJhbmdlOiBhdG9tLlJhbmdlLCB0ZXh0OiBzdHJpbmcpOiBEaWFnbm9zdGljQ29kZSB8IG51bGwge1xuICAgIGNvbnN0IHBhdGggPSBlZGl0b3IuZ2V0UGF0aCgpXG4gICAgaWYgKHBhdGggIT0gbnVsbCkge1xuICAgICAgY29uc3QgZGlhZ25vc3RpY0NvZGVzID0gdGhpcy5fZGlhZ25vc3RpY0NvZGVzLmdldChwYXRoKVxuICAgICAgaWYgKGRpYWdub3N0aWNDb2RlcyAhPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBkaWFnbm9zdGljQ29kZXMuZ2V0KGdldENvZGVLZXkocmFuZ2UsIHRleHQpKSB8fCBudWxsXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cbn1cblxuLyoqIEBkZXByZWNhdGVkIFVzZSBMaW50ZXIgVjIgc2VydmljZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0b21JZGVEaWFnbm9zdGljVG9MU0RpYWdub3N0aWMoZGlhZ25vc3RpYzogYXRvbUlkZS5EaWFnbm9zdGljKTogbHMuRGlhZ25vc3RpYyB7XG4gIC8vIFRPRE86IHN1cHBvcnQgZGlhZ25vc3RpYyBjb2RlcyBhbmQgY29kZURlc2NyaXB0aW9uc1xuICAvLyBUT0RPITogc3VwcG9ydCBkYXRhXG4gIHJldHVybiB7XG4gICAgcmFuZ2U6IENvbnZlcnQuYXRvbVJhbmdlVG9MU1JhbmdlKGRpYWdub3N0aWMucmFuZ2UpLFxuICAgIHNldmVyaXR5OiBkaWFnbm9zdGljVHlwZVRvTFNTZXZlcml0eShkaWFnbm9zdGljLnR5cGUpLFxuICAgIHNvdXJjZTogZGlhZ25vc3RpYy5wcm92aWRlck5hbWUsXG4gICAgbWVzc2FnZTogZGlhZ25vc3RpYy50ZXh0IHx8IFwiXCIsXG4gIH1cbn1cblxuLyoqIEBkZXByZWNhdGVkIFVzZSBMaW50ZXIgVjIgc2VydmljZSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpYWdub3N0aWNUeXBlVG9MU1NldmVyaXR5KHR5cGU6IGF0b21JZGUuRGlhZ25vc3RpY1R5cGUpOiBscy5EaWFnbm9zdGljU2V2ZXJpdHkge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFwiRXJyb3JcIjpcbiAgICAgIHJldHVybiBscy5EaWFnbm9zdGljU2V2ZXJpdHkuRXJyb3JcbiAgICBjYXNlIFwiV2FybmluZ1wiOlxuICAgICAgcmV0dXJuIGxzLkRpYWdub3N0aWNTZXZlcml0eS5XYXJuaW5nXG4gICAgY2FzZSBcIkluZm9cIjpcbiAgICAgIHJldHVybiBscy5EaWFnbm9zdGljU2V2ZXJpdHkuSW5mb3JtYXRpb25cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgRXJyb3IoYFVuZXhwZWN0ZWQgZGlhZ25vc3RpYyB0eXBlICR7dHlwZX1gKVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldENvZGVLZXkocmFuZ2U6IGF0b20uUmFuZ2UsIHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiAoW10gYXMgYW55W10pLmNvbmNhdCguLi5yYW5nZS5zZXJpYWxpemUoKSwgdGV4dCkuam9pbihcIixcIilcbn1cbiJdfQ== |
\ | No newline at end of file |