UNPKG

14.5 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.diagnosticTypeToLSSeverity = exports.atomIdeDiagnosticToLSDiagnostic = void 0;
4const ls = require("../languageclient");
5const convert_1 = require("../convert");
6const linter_push_v2_adapter_1 = require("./linter-push-v2-adapter");
7/** @deprecated Use Linter V2 service */
8class 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}
81exports.default = IdeDiagnosticAdapter;
82/** @deprecated Use Linter V2 service */
83function 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}
93exports.atomIdeDiagnosticToLSDiagnostic = atomIdeDiagnosticToLSDiagnostic;
94/** @deprecated Use Linter V2 service */
95function 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}
107exports.diagnosticTypeToLSSeverity = diagnosticTypeToLSSeverity;
108function 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