@platformos/codemirror-language-client 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/README.md +91 -0
- package/dist/esm/CodeMirrorLanguageClient.d.ts +60 -0
- package/dist/esm/CodeMirrorLanguageClient.js +80 -0
- package/dist/esm/CodeMirrorLanguageClient.js.map +1 -0
- package/dist/esm/LanguageClient.d.ts +112 -0
- package/dist/esm/LanguageClient.js +187 -0
- package/dist/esm/LanguageClient.js.map +1 -0
- package/dist/esm/extensions/client.d.ts +6 -0
- package/dist/esm/extensions/client.js +12 -0
- package/dist/esm/extensions/client.js.map +1 -0
- package/dist/esm/extensions/complete.d.ts +17 -0
- package/dist/esm/extensions/complete.js +202 -0
- package/dist/esm/extensions/complete.js.map +1 -0
- package/dist/esm/extensions/complete.spec.d.ts +1 -0
- package/dist/esm/extensions/complete.spec.js +189 -0
- package/dist/esm/extensions/complete.spec.js.map +1 -0
- package/dist/esm/extensions/documentHighlights.d.ts +14 -0
- package/dist/esm/extensions/documentHighlights.js +78 -0
- package/dist/esm/extensions/documentHighlights.js.map +1 -0
- package/dist/esm/extensions/documentHighlights.spec.d.ts +1 -0
- package/dist/esm/extensions/documentHighlights.spec.js +99 -0
- package/dist/esm/extensions/documentHighlights.spec.js.map +1 -0
- package/dist/esm/extensions/hover.d.ts +16 -0
- package/dist/esm/extensions/hover.js +49 -0
- package/dist/esm/extensions/hover.js.map +1 -0
- package/dist/esm/extensions/hover.spec.d.ts +1 -0
- package/dist/esm/extensions/hover.spec.js +59 -0
- package/dist/esm/extensions/hover.spec.js.map +1 -0
- package/dist/esm/extensions/index.d.ts +6 -0
- package/dist/esm/extensions/index.js +7 -0
- package/dist/esm/extensions/index.js.map +1 -0
- package/dist/esm/extensions/lspLinter.d.ts +23 -0
- package/dist/esm/extensions/lspLinter.js +104 -0
- package/dist/esm/extensions/lspLinter.js.map +1 -0
- package/dist/esm/extensions/lspLinter.spec.d.ts +1 -0
- package/dist/esm/extensions/lspLinter.spec.js +141 -0
- package/dist/esm/extensions/lspLinter.spec.js.map +1 -0
- package/dist/esm/extensions/snippet.d.ts +19 -0
- package/dist/esm/extensions/snippet.js +25 -0
- package/dist/esm/extensions/snippet.js.map +1 -0
- package/dist/esm/extensions/snippet.spec.d.ts +1 -0
- package/dist/esm/extensions/snippet.spec.js +23 -0
- package/dist/esm/extensions/snippet.spec.js.map +1 -0
- package/dist/esm/extensions/textDocumentSync.d.ts +4 -0
- package/dist/esm/extensions/textDocumentSync.js +109 -0
- package/dist/esm/extensions/textDocumentSync.js.map +1 -0
- package/dist/esm/extensions/textDocumentSync.spec.d.ts +1 -0
- package/dist/esm/extensions/textDocumentSync.spec.js +163 -0
- package/dist/esm/extensions/textDocumentSync.spec.js.map +1 -0
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/test/MockClient.d.ts +18 -0
- package/dist/esm/test/MockClient.js +63 -0
- package/dist/esm/test/MockClient.js.map +1 -0
- package/dist/esm/tsconfig.tsbuildInfo +1 -0
- package/dist/esm/utils/simpleStateField.d.ts +3 -0
- package/dist/esm/utils/simpleStateField.js +17 -0
- package/dist/esm/utils/simpleStateField.js.map +1 -0
- package/dist/umd/CodeMirrorLanguageClient.d.ts +60 -0
- package/dist/umd/CodeMirrorLanguageClient.js +94 -0
- package/dist/umd/CodeMirrorLanguageClient.js.map +1 -0
- package/dist/umd/LanguageClient.d.ts +112 -0
- package/dist/umd/LanguageClient.js +202 -0
- package/dist/umd/LanguageClient.js.map +1 -0
- package/dist/umd/extensions/client.d.ts +6 -0
- package/dist/umd/extensions/client.js +25 -0
- package/dist/umd/extensions/client.js.map +1 -0
- package/dist/umd/extensions/complete.d.ts +17 -0
- package/dist/umd/extensions/complete.js +217 -0
- package/dist/umd/extensions/complete.js.map +1 -0
- package/dist/umd/extensions/documentHighlights.d.ts +14 -0
- package/dist/umd/extensions/documentHighlights.js +93 -0
- package/dist/umd/extensions/documentHighlights.js.map +1 -0
- package/dist/umd/extensions/hover.d.ts +16 -0
- package/dist/umd/extensions/hover.js +64 -0
- package/dist/umd/extensions/hover.js.map +1 -0
- package/dist/umd/extensions/index.d.ts +6 -0
- package/dist/umd/extensions/index.js +36 -0
- package/dist/umd/extensions/index.js.map +1 -0
- package/dist/umd/extensions/lspLinter.d.ts +23 -0
- package/dist/umd/extensions/lspLinter.js +119 -0
- package/dist/umd/extensions/lspLinter.js.map +1 -0
- package/dist/umd/extensions/snippet.d.ts +19 -0
- package/dist/umd/extensions/snippet.js +38 -0
- package/dist/umd/extensions/snippet.js.map +1 -0
- package/dist/umd/extensions/textDocumentSync.d.ts +4 -0
- package/dist/umd/extensions/textDocumentSync.js +122 -0
- package/dist/umd/extensions/textDocumentSync.js.map +1 -0
- package/dist/umd/index.d.ts +2 -0
- package/dist/umd/index.js +29 -0
- package/dist/umd/index.js.map +1 -0
- package/dist/umd/test/MockClient.d.ts +18 -0
- package/dist/umd/test/MockClient.js +77 -0
- package/dist/umd/test/MockClient.js.map +1 -0
- package/dist/umd/tsconfig.tsbuildInfo +1 -0
- package/dist/umd/utils/simpleStateField.d.ts +3 -0
- package/dist/umd/utils/simpleStateField.js +30 -0
- package/dist/umd/utils/simpleStateField.js.map +1 -0
- package/package.json +67 -0
- package/playground/src/index.html +10 -0
- package/playground/src/language-server-worker.ts +82 -0
- package/playground/src/playground.ts +251 -0
- package/playground/tsconfig.json +26 -0
- package/playground/webpack.config.js +85 -0
- package/src/CodeMirrorLanguageClient.ts +179 -0
- package/src/LanguageClient.ts +329 -0
- package/src/extensions/client.ts +17 -0
- package/src/extensions/complete.spec.ts +200 -0
- package/src/extensions/complete.ts +274 -0
- package/src/extensions/documentHighlights.spec.ts +111 -0
- package/src/extensions/documentHighlights.ts +91 -0
- package/src/extensions/hover.spec.ts +68 -0
- package/src/extensions/hover.ts +66 -0
- package/src/extensions/index.ts +19 -0
- package/src/extensions/lspLinter.spec.ts +156 -0
- package/src/extensions/lspLinter.ts +154 -0
- package/src/extensions/snippet.spec.ts +31 -0
- package/src/extensions/snippet.ts +42 -0
- package/src/extensions/textDocumentSync.spec.ts +188 -0
- package/src/extensions/textDocumentSync.ts +138 -0
- package/src/index.ts +2 -0
- package/src/test/MockClient.ts +96 -0
- package/src/utils/simpleStateField.ts +22 -0
- package/tsconfig.json +18 -0
- package/tsconfig.umd.json +9 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
(function (factory) {
|
|
2
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
|
+
var v = factory(require, exports);
|
|
4
|
+
if (v !== undefined) module.exports = v;
|
|
5
|
+
}
|
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
|
7
|
+
define(["require", "exports", "@codemirror/autocomplete", "vscode-languageserver-protocol", "./client", "./textDocumentSync", "@codemirror/state", "./snippet"], factory);
|
|
8
|
+
}
|
|
9
|
+
})(function (require, exports) {
|
|
10
|
+
"use strict";
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.infoRendererFacet = exports.lspComplete = void 0;
|
|
13
|
+
exports.complete = complete;
|
|
14
|
+
const autocomplete_1 = require("@codemirror/autocomplete");
|
|
15
|
+
const vscode_languageserver_protocol_1 = require("vscode-languageserver-protocol");
|
|
16
|
+
const client_1 = require("./client");
|
|
17
|
+
const textDocumentSync_1 = require("./textDocumentSync");
|
|
18
|
+
const state_1 = require("@codemirror/state");
|
|
19
|
+
const snippet_1 = require("./snippet");
|
|
20
|
+
const lspComplete = (overrides = {}) => (0, autocomplete_1.autocompletion)({
|
|
21
|
+
activateOnTyping: true,
|
|
22
|
+
override: [complete],
|
|
23
|
+
maxRenderedOptions: 20,
|
|
24
|
+
...overrides,
|
|
25
|
+
});
|
|
26
|
+
exports.lspComplete = lspComplete;
|
|
27
|
+
exports.infoRendererFacet = state_1.Facet.define({
|
|
28
|
+
static: true,
|
|
29
|
+
combine: (values) => values[0] ?? undefined,
|
|
30
|
+
});
|
|
31
|
+
async function complete(context) {
|
|
32
|
+
const word = context.matchBefore(/\w+/);
|
|
33
|
+
const serverCapabilities = context.state.facet(client_1.serverCapabilitiesFacet.reader);
|
|
34
|
+
const triggerCharacters = serverCapabilities.completionProvider?.triggerCharacters ?? [];
|
|
35
|
+
const previousChar = context.state.doc.sliceString(context.pos - 1, context.pos);
|
|
36
|
+
const isTriggerCharacter = triggerCharacters.includes(previousChar);
|
|
37
|
+
const canComplete = isTriggerCharacter || word || context.pos === 0;
|
|
38
|
+
if (!canComplete)
|
|
39
|
+
return null;
|
|
40
|
+
const client = context.state.facet(client_1.clientFacet.reader);
|
|
41
|
+
const fileUri = context.state.facet(client_1.fileUriFacet.reader);
|
|
42
|
+
const infoRenderer = context.state.facet(exports.infoRendererFacet.reader);
|
|
43
|
+
const textDocument = context.state.field(textDocumentSync_1.textDocumentField);
|
|
44
|
+
const lspContext = isTriggerCharacter
|
|
45
|
+
? { triggerKind: vscode_languageserver_protocol_1.CompletionTriggerKind.TriggerCharacter, triggerCharacter: previousChar }
|
|
46
|
+
: { triggerKind: vscode_languageserver_protocol_1.CompletionTriggerKind.Invoked };
|
|
47
|
+
const results = await client.sendRequest(vscode_languageserver_protocol_1.CompletionRequest.type, {
|
|
48
|
+
textDocument: { uri: fileUri },
|
|
49
|
+
position: textDocument.positionAt(context.pos),
|
|
50
|
+
context: lspContext,
|
|
51
|
+
});
|
|
52
|
+
// No results
|
|
53
|
+
if (results === null || (Array.isArray(results) && results.length === 0))
|
|
54
|
+
return null;
|
|
55
|
+
return {
|
|
56
|
+
from: word?.from ?? context.pos,
|
|
57
|
+
options: items(results).map(toCodeMirrorCompletion(infoRenderer, textDocument)),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
const toCodeMirrorCompletion = (infoRenderer, textDocument) => (completionItem) => {
|
|
61
|
+
switch (completionItem.insertTextFormat) {
|
|
62
|
+
case vscode_languageserver_protocol_1.InsertTextFormat.Snippet:
|
|
63
|
+
return {
|
|
64
|
+
label: completionItem.insertText ?? completionItem.label,
|
|
65
|
+
displayLabel: completionItem.label,
|
|
66
|
+
apply: applySnippet(completionItem, textDocument),
|
|
67
|
+
type: convertLSPKindToCodeMirrorKind(completionItem.kind),
|
|
68
|
+
info: infoRenderer ? (_) => infoRenderer(completionItem) : undefined,
|
|
69
|
+
};
|
|
70
|
+
case vscode_languageserver_protocol_1.InsertTextFormat.PlainText:
|
|
71
|
+
default: {
|
|
72
|
+
return {
|
|
73
|
+
label: completionItem.insertText ?? completionItem.label,
|
|
74
|
+
displayLabel: completionItem.label,
|
|
75
|
+
apply: hasApplicableTextEdit(completionItem)
|
|
76
|
+
? (view, completion) => applyEdit(view, completion, completionItem, textDocument)
|
|
77
|
+
: undefined,
|
|
78
|
+
type: convertLSPKindToCodeMirrorKind(completionItem.kind),
|
|
79
|
+
info: infoRenderer ? (_) => infoRenderer(completionItem) : undefined,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
function hasApplicableTextEdit(completionItem) {
|
|
85
|
+
return (!!completionItem.textEdit &&
|
|
86
|
+
(vscode_languageserver_protocol_1.TextEdit.is(completionItem.textEdit) || vscode_languageserver_protocol_1.InsertReplaceEdit.is(completionItem.textEdit)));
|
|
87
|
+
}
|
|
88
|
+
const applySnippet = (item, textDocument) => {
|
|
89
|
+
const { textEdit } = item;
|
|
90
|
+
let from = null;
|
|
91
|
+
let to = null;
|
|
92
|
+
let newText = '';
|
|
93
|
+
if (vscode_languageserver_protocol_1.TextEdit.is(textEdit)) {
|
|
94
|
+
from = textDocument.offsetAt(textEdit.range.start);
|
|
95
|
+
to = textDocument.offsetAt(textEdit.range.end);
|
|
96
|
+
newText = textEdit.newText;
|
|
97
|
+
}
|
|
98
|
+
else if (textEdit && vscode_languageserver_protocol_1.InsertReplaceEdit.is(textEdit)) {
|
|
99
|
+
from = textDocument.offsetAt(textEdit.replace.start);
|
|
100
|
+
to = textDocument.offsetAt(textEdit.replace.end);
|
|
101
|
+
newText = textEdit.newText;
|
|
102
|
+
}
|
|
103
|
+
else if (item.insertText) {
|
|
104
|
+
newText = item.insertText;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
newText = item.label;
|
|
108
|
+
}
|
|
109
|
+
const template = (0, snippet_1.translateSnippet)(newText);
|
|
110
|
+
// Because we might replace text with textEdit, we can't use snippet as is.
|
|
111
|
+
// we'll need to infer the from/to from the textEdit.
|
|
112
|
+
const apply = (0, autocomplete_1.snippet)(template);
|
|
113
|
+
return (view, completion, defaultFrom, defaultTo) => {
|
|
114
|
+
apply(view, completion, from ?? defaultFrom, to ?? defaultTo);
|
|
115
|
+
};
|
|
116
|
+
};
|
|
117
|
+
var CMCompletionType;
|
|
118
|
+
(function (CMCompletionType) {
|
|
119
|
+
CMCompletionType["Class"] = "class";
|
|
120
|
+
CMCompletionType["Constant"] = "constant";
|
|
121
|
+
CMCompletionType["Enum"] = "enum";
|
|
122
|
+
CMCompletionType["Function"] = "function";
|
|
123
|
+
CMCompletionType["Interface"] = "interface";
|
|
124
|
+
CMCompletionType["Keyword"] = "keyword";
|
|
125
|
+
CMCompletionType["Method"] = "method";
|
|
126
|
+
CMCompletionType["Namespace"] = "namespace";
|
|
127
|
+
CMCompletionType["Property"] = "property";
|
|
128
|
+
CMCompletionType["Text"] = "text";
|
|
129
|
+
CMCompletionType["Type"] = "type";
|
|
130
|
+
CMCompletionType["Variable"] = "variable";
|
|
131
|
+
})(CMCompletionType || (CMCompletionType = {}));
|
|
132
|
+
function convertLSPKindToCodeMirrorKind(kind) {
|
|
133
|
+
if (!kind)
|
|
134
|
+
return CMCompletionType.Text;
|
|
135
|
+
switch (kind) {
|
|
136
|
+
case vscode_languageserver_protocol_1.CompletionItemKind.Constructor:
|
|
137
|
+
case vscode_languageserver_protocol_1.CompletionItemKind.Class:
|
|
138
|
+
return CMCompletionType.Class;
|
|
139
|
+
case vscode_languageserver_protocol_1.CompletionItemKind.Constant:
|
|
140
|
+
return CMCompletionType.Constant;
|
|
141
|
+
case vscode_languageserver_protocol_1.CompletionItemKind.Enum:
|
|
142
|
+
case vscode_languageserver_protocol_1.CompletionItemKind.EnumMember:
|
|
143
|
+
return CMCompletionType.Enum;
|
|
144
|
+
case vscode_languageserver_protocol_1.CompletionItemKind.Snippet:
|
|
145
|
+
case vscode_languageserver_protocol_1.CompletionItemKind.Function:
|
|
146
|
+
return CMCompletionType.Function;
|
|
147
|
+
case vscode_languageserver_protocol_1.CompletionItemKind.Interface:
|
|
148
|
+
return CMCompletionType.Interface;
|
|
149
|
+
case vscode_languageserver_protocol_1.CompletionItemKind.Operator:
|
|
150
|
+
case vscode_languageserver_protocol_1.CompletionItemKind.Keyword:
|
|
151
|
+
return CMCompletionType.Keyword;
|
|
152
|
+
case vscode_languageserver_protocol_1.CompletionItemKind.Method:
|
|
153
|
+
return CMCompletionType.Method;
|
|
154
|
+
case vscode_languageserver_protocol_1.CompletionItemKind.File:
|
|
155
|
+
case vscode_languageserver_protocol_1.CompletionItemKind.Folder:
|
|
156
|
+
case vscode_languageserver_protocol_1.CompletionItemKind.Module:
|
|
157
|
+
return CMCompletionType.Namespace;
|
|
158
|
+
case vscode_languageserver_protocol_1.CompletionItemKind.Property:
|
|
159
|
+
case vscode_languageserver_protocol_1.CompletionItemKind.Reference:
|
|
160
|
+
case vscode_languageserver_protocol_1.CompletionItemKind.Field:
|
|
161
|
+
return CMCompletionType.Property;
|
|
162
|
+
case vscode_languageserver_protocol_1.CompletionItemKind.Struct:
|
|
163
|
+
case vscode_languageserver_protocol_1.CompletionItemKind.TypeParameter:
|
|
164
|
+
return CMCompletionType.Type;
|
|
165
|
+
case vscode_languageserver_protocol_1.CompletionItemKind.Event:
|
|
166
|
+
case vscode_languageserver_protocol_1.CompletionItemKind.Value:
|
|
167
|
+
case vscode_languageserver_protocol_1.CompletionItemKind.Variable:
|
|
168
|
+
return CMCompletionType.Variable;
|
|
169
|
+
case vscode_languageserver_protocol_1.CompletionItemKind.Color:
|
|
170
|
+
case vscode_languageserver_protocol_1.CompletionItemKind.Unit:
|
|
171
|
+
case vscode_languageserver_protocol_1.CompletionItemKind.Text:
|
|
172
|
+
default:
|
|
173
|
+
return CMCompletionType.Text;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
function applyEdit(view, completion, item, textDocument) {
|
|
177
|
+
const { textEdit } = item;
|
|
178
|
+
let start = 0;
|
|
179
|
+
let end = 0;
|
|
180
|
+
let newText = '';
|
|
181
|
+
if (vscode_languageserver_protocol_1.TextEdit.is(textEdit)) {
|
|
182
|
+
start = textDocument.offsetAt(textEdit.range.start);
|
|
183
|
+
end = textDocument.offsetAt(textEdit.range.end);
|
|
184
|
+
newText = textEdit.newText;
|
|
185
|
+
}
|
|
186
|
+
else if (vscode_languageserver_protocol_1.InsertReplaceEdit.is(textEdit)) {
|
|
187
|
+
start = textDocument.offsetAt(textEdit.replace.start);
|
|
188
|
+
end = textDocument.offsetAt(textEdit.replace.end);
|
|
189
|
+
newText = textEdit.newText;
|
|
190
|
+
}
|
|
191
|
+
view.dispatch({
|
|
192
|
+
// Tell the completion engine which item we chose
|
|
193
|
+
annotations: [autocomplete_1.pickedCompletion.of(completion)],
|
|
194
|
+
// Move cursor to after the text
|
|
195
|
+
selection: { anchor: start + newText.length, head: start + newText.length },
|
|
196
|
+
// Apply the text edit
|
|
197
|
+
changes: view.state.changes({
|
|
198
|
+
from: start,
|
|
199
|
+
to: end,
|
|
200
|
+
insert: newText,
|
|
201
|
+
}),
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
function isCompletionList(results) {
|
|
205
|
+
return results.isIncomplete !== undefined;
|
|
206
|
+
}
|
|
207
|
+
function items(results) {
|
|
208
|
+
if (isCompletionList(results)) {
|
|
209
|
+
return results.items.map((item) => ({
|
|
210
|
+
...results.itemDefaults,
|
|
211
|
+
...item,
|
|
212
|
+
}));
|
|
213
|
+
}
|
|
214
|
+
return results;
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
//# sourceMappingURL=complete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"complete.js","sourceRoot":"","sources":["../../../src/extensions/complete.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This extension requests LSP Document Highlights [1] when the user types or
|
|
3
|
+
* change its code selection.
|
|
4
|
+
*
|
|
5
|
+
* Those are then transformed into CodeMirror decorations and applied to the editor.
|
|
6
|
+
*
|
|
7
|
+
* [1]: https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_documentHighlight
|
|
8
|
+
*/
|
|
9
|
+
import { Extension } from '@codemirror/state';
|
|
10
|
+
import { Decoration, DecorationSet, EditorView } from '@codemirror/view';
|
|
11
|
+
export declare const documentHighlightsClass = "cmlc-document-highlights";
|
|
12
|
+
export declare const highlightDeco: Decoration;
|
|
13
|
+
export declare function getDecorations(view: EditorView): Promise<DecorationSet>;
|
|
14
|
+
export declare function lspDocumentHighlights(): Extension;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
(function (factory) {
|
|
2
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
|
+
var v = factory(require, exports);
|
|
4
|
+
if (v !== undefined) module.exports = v;
|
|
5
|
+
}
|
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
|
7
|
+
define(["require", "exports", "@codemirror/state", "@codemirror/view", "vscode-languageserver-protocol", "./client", "./textDocumentSync"], factory);
|
|
8
|
+
}
|
|
9
|
+
})(function (require, exports) {
|
|
10
|
+
"use strict";
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.highlightDeco = exports.documentHighlightsClass = void 0;
|
|
13
|
+
exports.getDecorations = getDecorations;
|
|
14
|
+
exports.lspDocumentHighlights = lspDocumentHighlights;
|
|
15
|
+
/**
|
|
16
|
+
* This extension requests LSP Document Highlights [1] when the user types or
|
|
17
|
+
* change its code selection.
|
|
18
|
+
*
|
|
19
|
+
* Those are then transformed into CodeMirror decorations and applied to the editor.
|
|
20
|
+
*
|
|
21
|
+
* [1]: https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#textDocument_documentHighlight
|
|
22
|
+
*/
|
|
23
|
+
const state_1 = require("@codemirror/state");
|
|
24
|
+
const view_1 = require("@codemirror/view");
|
|
25
|
+
const vscode_languageserver_protocol_1 = require("vscode-languageserver-protocol");
|
|
26
|
+
const client_1 = require("./client");
|
|
27
|
+
const textDocumentSync_1 = require("./textDocumentSync");
|
|
28
|
+
// We will use this CSS class to decorate all document highlights
|
|
29
|
+
exports.documentHighlightsClass = 'cmlc-document-highlights';
|
|
30
|
+
exports.highlightDeco = view_1.Decoration.mark({ class: exports.documentHighlightsClass });
|
|
31
|
+
const highlightStyles = state_1.Prec.low(view_1.EditorView.theme({
|
|
32
|
+
[`.${exports.documentHighlightsClass}`]: {
|
|
33
|
+
// Set background color to a light gray that matches a subtle highlight on
|
|
34
|
+
// a light theme
|
|
35
|
+
'background-color': 'rgba(0,0,0,0.1)',
|
|
36
|
+
},
|
|
37
|
+
}));
|
|
38
|
+
const setDocumentHighlights = state_1.StateEffect.define();
|
|
39
|
+
const documentHighlightsStateField = state_1.StateField.define({
|
|
40
|
+
create: () => view_1.Decoration.none,
|
|
41
|
+
update(value, tr) {
|
|
42
|
+
let updatedValue = value;
|
|
43
|
+
for (const effect of tr.effects) {
|
|
44
|
+
if (effect.is(setDocumentHighlights)) {
|
|
45
|
+
updatedValue = effect.value;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return updatedValue;
|
|
49
|
+
},
|
|
50
|
+
// This is some CM obscure API shit that registers this state field
|
|
51
|
+
// into the CM state and makes it so CM will show the decorations
|
|
52
|
+
provide: (f) => view_1.EditorView.decorations.from(f),
|
|
53
|
+
});
|
|
54
|
+
async function getDecorations(view) {
|
|
55
|
+
const client = view.state.facet(client_1.clientFacet.reader);
|
|
56
|
+
const uri = view.state.facet(client_1.fileUriFacet.reader);
|
|
57
|
+
const textDocument = view.state.field(textDocumentSync_1.textDocumentField);
|
|
58
|
+
// If the client doesn't support those requests, don't ask for them.
|
|
59
|
+
if (!client.serverCapabilities?.documentHighlightProvider) {
|
|
60
|
+
return view_1.Decoration.none;
|
|
61
|
+
}
|
|
62
|
+
const results = await client.sendRequest(vscode_languageserver_protocol_1.DocumentHighlightRequest.type, {
|
|
63
|
+
textDocument: { uri },
|
|
64
|
+
position: textDocument.positionAt(view.state.selection.main.from),
|
|
65
|
+
});
|
|
66
|
+
if (!results) {
|
|
67
|
+
return view_1.Decoration.none;
|
|
68
|
+
}
|
|
69
|
+
const decorations = results
|
|
70
|
+
.map((highlight) => ({
|
|
71
|
+
from: textDocument.offsetAt(highlight.range.start),
|
|
72
|
+
to: textDocument.offsetAt(highlight.range.end),
|
|
73
|
+
}))
|
|
74
|
+
.sort((a, b) => a.from - b.from) // CM wants them sorted ascending or else it freaks out
|
|
75
|
+
.map(({ from, to }) => exports.highlightDeco.range(from, to));
|
|
76
|
+
return view_1.Decoration.set(decorations);
|
|
77
|
+
}
|
|
78
|
+
function lspDocumentHighlights() {
|
|
79
|
+
const decorationHandler = view_1.EditorView.updateListener.of((update) => {
|
|
80
|
+
// We only want to query the language server for document highlights
|
|
81
|
+
// the document has changed or the selection has moved
|
|
82
|
+
if (update.docChanged || update.selectionSet) {
|
|
83
|
+
getDecorations(update.view).then((deco) => {
|
|
84
|
+
update.view.dispatch({
|
|
85
|
+
effects: setDocumentHighlights.of(deco),
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
return [documentHighlightsStateField, decorationHandler, highlightStyles];
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
//# sourceMappingURL=documentHighlights.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documentHighlights.js","sourceRoot":"","sources":["../../../src/extensions/documentHighlights.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Hover } from 'vscode-languageserver-protocol';
|
|
2
|
+
import { Facet } from '@codemirror/state';
|
|
3
|
+
import { EditorView, Tooltip, TooltipView, hoverTooltip } from '@codemirror/view';
|
|
4
|
+
type SecondArgType<F> = F extends (_: any, arg: infer A) => any ? A : never;
|
|
5
|
+
export type HoverOptions = Partial<SecondArgType<typeof hoverTooltip>>;
|
|
6
|
+
/**
|
|
7
|
+
* A HoverRenderer would be equivalent to the Hover window in VS Code. It
|
|
8
|
+
* shows the documentation for the symbol under the cursor.
|
|
9
|
+
*
|
|
10
|
+
* Takes a LSP Hover as argument and must return a TooltipView (type {} and autocomplete for required params).
|
|
11
|
+
*/
|
|
12
|
+
export type HoverRenderer = (view: EditorView, hover: Hover) => TooltipView;
|
|
13
|
+
export declare const hoverRendererFacet: Facet<HoverRenderer | undefined, HoverRenderer | undefined>;
|
|
14
|
+
export declare const lspHover: (overrides?: HoverOptions) => import("@codemirror/state").Extension;
|
|
15
|
+
export declare function hover(view: EditorView, pos: number, _side: -1 | 1): Promise<Tooltip | null>;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
(function (factory) {
|
|
2
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
|
+
var v = factory(require, exports);
|
|
4
|
+
if (v !== undefined) module.exports = v;
|
|
5
|
+
}
|
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
|
7
|
+
define(["require", "exports", "vscode-languageserver-protocol", "./client", "./textDocumentSync", "@codemirror/state", "@codemirror/view"], factory);
|
|
8
|
+
}
|
|
9
|
+
})(function (require, exports) {
|
|
10
|
+
"use strict";
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.lspHover = exports.hoverRendererFacet = void 0;
|
|
13
|
+
exports.hover = hover;
|
|
14
|
+
const vscode_languageserver_protocol_1 = require("vscode-languageserver-protocol");
|
|
15
|
+
const client_1 = require("./client");
|
|
16
|
+
const textDocumentSync_1 = require("./textDocumentSync");
|
|
17
|
+
const state_1 = require("@codemirror/state");
|
|
18
|
+
const view_1 = require("@codemirror/view");
|
|
19
|
+
exports.hoverRendererFacet = state_1.Facet.define({
|
|
20
|
+
static: true,
|
|
21
|
+
combine: (values) => values[0] ?? undefined,
|
|
22
|
+
});
|
|
23
|
+
const lspHover = (overrides = {}) => (0, view_1.hoverTooltip)(hover, {
|
|
24
|
+
...overrides,
|
|
25
|
+
});
|
|
26
|
+
exports.lspHover = lspHover;
|
|
27
|
+
async function hover(view, pos, _side) {
|
|
28
|
+
const client = view.state.facet(client_1.clientFacet.reader);
|
|
29
|
+
const fileUri = view.state.facet(client_1.fileUriFacet.reader);
|
|
30
|
+
const hoverRenderer = view.state.facet(exports.hoverRendererFacet.reader);
|
|
31
|
+
const textDocument = view.state.field(textDocumentSync_1.textDocumentField);
|
|
32
|
+
if (!hoverRenderer)
|
|
33
|
+
return null;
|
|
34
|
+
const result = await client.sendRequest(vscode_languageserver_protocol_1.HoverRequest.type, {
|
|
35
|
+
textDocument: { uri: fileUri },
|
|
36
|
+
position: textDocument.positionAt(pos),
|
|
37
|
+
});
|
|
38
|
+
// No results
|
|
39
|
+
if (result === null)
|
|
40
|
+
return null;
|
|
41
|
+
let { from, to, text } = view.state.doc.lineAt(pos);
|
|
42
|
+
let start = pos;
|
|
43
|
+
let end = pos;
|
|
44
|
+
if (result.range) {
|
|
45
|
+
start = textDocument.offsetAt(result.range.start);
|
|
46
|
+
end = textDocument.offsetAt(result.range.end);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
// basic "current word" algo
|
|
50
|
+
while (start > from && /\w/.test(text[start - from - 1]))
|
|
51
|
+
start--;
|
|
52
|
+
while (end < to && /\w/.test(text[end - from]))
|
|
53
|
+
end++;
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
pos: start,
|
|
57
|
+
end: end,
|
|
58
|
+
above: true,
|
|
59
|
+
create: (view) => hoverRenderer(view, result),
|
|
60
|
+
arrow: false,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
//# sourceMappingURL=hover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hover.js","sourceRoot":"","sources":["../../../src/extensions/hover.ts"],"names":[],"mappings":";;;;;;;;;;;;IA8BA,sBAmCC;IAjED,mFAAqE;IACrE,qCAAqD;IACrD,yDAAuD;IACvD,6CAA0C;IAC1C,2CAAkF;IAarE,QAAA,kBAAkB,GAAG,aAAK,CAAC,MAAM,CAG5C;QACA,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,SAAS;KAC5C,CAAC,CAAC;IAEI,MAAM,QAAQ,GAAG,CAAC,YAA0B,EAAE,EAAE,EAAE,CACvD,IAAA,mBAAY,EAAC,KAAK,EAAE;QAClB,GAAG,SAAS;KACb,CAAC,CAAC;IAHQ,QAAA,QAAQ,YAGhB;IAEE,KAAK,UAAU,KAAK,CAAC,IAAgB,EAAE,GAAW,EAAE,KAAa;QACtE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAW,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,qBAAY,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,0BAAkB,CAAC,MAAM,CAAC,CAAC;QAClE,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,oCAAiB,CAAC,CAAC;QAEzD,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC;QAEhC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,6CAAY,CAAC,IAAI,EAAE;YACzD,YAAY,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE;YAC9B,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;SACvC,CAAC,CAAC;QAEH,aAAa;QACb,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAEjC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpD,IAAI,KAAK,GAAG,GAAG,CAAC;QAChB,IAAI,GAAG,GAAG,GAAG,CAAC;QACd,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAClD,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,4BAA4B;YAC5B,OAAO,KAAK,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;gBAAE,KAAK,EAAE,CAAC;YAClE,OAAO,GAAG,GAAG,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;gBAAE,GAAG,EAAE,CAAC;QACxD,CAAC;QAED,OAAO;YACL,GAAG,EAAE,KAAK;YACV,GAAG,EAAE,GAAG;YACR,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC;YAC7C,KAAK,EAAE,KAAK;SACb,CAAC;IACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { clientFacet, fileUriFacet, serverCapabilitiesFacet } from './client';
|
|
2
|
+
export { AutocompleteOptions, InfoRenderer, complete, infoRendererFacet, lspComplete, } from './complete';
|
|
3
|
+
export { documentHighlightsClass, lspDocumentHighlights } from './documentHighlights';
|
|
4
|
+
export { HoverOptions, HoverRenderer, hover, lspHover } from './hover';
|
|
5
|
+
export { DiagnosticRenderer, LinterOptions, diagnosticRendererFacet, diagnosticsFacet, lspDiagnosticsField, lspLinter, } from './lspLinter';
|
|
6
|
+
export { textDocumentField, textDocumentSync } from './textDocumentSync';
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
(function (factory) {
|
|
2
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
|
+
var v = factory(require, exports);
|
|
4
|
+
if (v !== undefined) module.exports = v;
|
|
5
|
+
}
|
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
|
7
|
+
define(["require", "exports", "./client", "./complete", "./documentHighlights", "./hover", "./lspLinter", "./textDocumentSync"], factory);
|
|
8
|
+
}
|
|
9
|
+
})(function (require, exports) {
|
|
10
|
+
"use strict";
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.textDocumentSync = exports.textDocumentField = exports.lspLinter = exports.lspDiagnosticsField = exports.diagnosticsFacet = exports.diagnosticRendererFacet = exports.lspHover = exports.hover = exports.lspDocumentHighlights = exports.documentHighlightsClass = exports.lspComplete = exports.infoRendererFacet = exports.complete = exports.serverCapabilitiesFacet = exports.fileUriFacet = exports.clientFacet = void 0;
|
|
13
|
+
var client_1 = require("./client");
|
|
14
|
+
Object.defineProperty(exports, "clientFacet", { enumerable: true, get: function () { return client_1.clientFacet; } });
|
|
15
|
+
Object.defineProperty(exports, "fileUriFacet", { enumerable: true, get: function () { return client_1.fileUriFacet; } });
|
|
16
|
+
Object.defineProperty(exports, "serverCapabilitiesFacet", { enumerable: true, get: function () { return client_1.serverCapabilitiesFacet; } });
|
|
17
|
+
var complete_1 = require("./complete");
|
|
18
|
+
Object.defineProperty(exports, "complete", { enumerable: true, get: function () { return complete_1.complete; } });
|
|
19
|
+
Object.defineProperty(exports, "infoRendererFacet", { enumerable: true, get: function () { return complete_1.infoRendererFacet; } });
|
|
20
|
+
Object.defineProperty(exports, "lspComplete", { enumerable: true, get: function () { return complete_1.lspComplete; } });
|
|
21
|
+
var documentHighlights_1 = require("./documentHighlights");
|
|
22
|
+
Object.defineProperty(exports, "documentHighlightsClass", { enumerable: true, get: function () { return documentHighlights_1.documentHighlightsClass; } });
|
|
23
|
+
Object.defineProperty(exports, "lspDocumentHighlights", { enumerable: true, get: function () { return documentHighlights_1.lspDocumentHighlights; } });
|
|
24
|
+
var hover_1 = require("./hover");
|
|
25
|
+
Object.defineProperty(exports, "hover", { enumerable: true, get: function () { return hover_1.hover; } });
|
|
26
|
+
Object.defineProperty(exports, "lspHover", { enumerable: true, get: function () { return hover_1.lspHover; } });
|
|
27
|
+
var lspLinter_1 = require("./lspLinter");
|
|
28
|
+
Object.defineProperty(exports, "diagnosticRendererFacet", { enumerable: true, get: function () { return lspLinter_1.diagnosticRendererFacet; } });
|
|
29
|
+
Object.defineProperty(exports, "diagnosticsFacet", { enumerable: true, get: function () { return lspLinter_1.diagnosticsFacet; } });
|
|
30
|
+
Object.defineProperty(exports, "lspDiagnosticsField", { enumerable: true, get: function () { return lspLinter_1.lspDiagnosticsField; } });
|
|
31
|
+
Object.defineProperty(exports, "lspLinter", { enumerable: true, get: function () { return lspLinter_1.lspLinter; } });
|
|
32
|
+
var textDocumentSync_1 = require("./textDocumentSync");
|
|
33
|
+
Object.defineProperty(exports, "textDocumentField", { enumerable: true, get: function () { return textDocumentSync_1.textDocumentField; } });
|
|
34
|
+
Object.defineProperty(exports, "textDocumentSync", { enumerable: true, get: function () { return textDocumentSync_1.textDocumentSync; } });
|
|
35
|
+
});
|
|
36
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/extensions/index.ts"],"names":[],"mappings":";;;;;;;;;;;;IAAA,mCAA8E;IAArE,qGAAA,WAAW,OAAA;IAAE,sGAAA,YAAY,OAAA;IAAE,iHAAA,uBAAuB,OAAA;IAC3D,uCAMoB;IAHlB,oGAAA,QAAQ,OAAA;IACR,6GAAA,iBAAiB,OAAA;IACjB,uGAAA,WAAW,OAAA;IAEb,2DAAsF;IAA7E,6HAAA,uBAAuB,OAAA;IAAE,2HAAA,qBAAqB,OAAA;IACvD,iCAAuE;IAAjC,8FAAA,KAAK,OAAA;IAAE,iGAAA,QAAQ,OAAA;IACrD,yCAOqB;IAJnB,oHAAA,uBAAuB,OAAA;IACvB,6GAAA,gBAAgB,OAAA;IAChB,gHAAA,mBAAmB,OAAA;IACnB,sGAAA,SAAS,OAAA;IAEX,uDAAyE;IAAhE,qHAAA,iBAAiB,OAAA;IAAE,oHAAA,gBAAgB,OAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Diagnostic as CodeMirrorDiagnostic, linter } from '@codemirror/lint';
|
|
2
|
+
import { Extension, Facet } from '@codemirror/state';
|
|
3
|
+
import { EditorView, PluginValue, ViewPlugin } from '@codemirror/view';
|
|
4
|
+
import { Diagnostic as LSPDiagnostic } from 'vscode-languageserver-protocol';
|
|
5
|
+
declare class DiagnosticsPlugin implements PluginValue {
|
|
6
|
+
private handlers;
|
|
7
|
+
constructor(view: EditorView);
|
|
8
|
+
destroy(): void;
|
|
9
|
+
}
|
|
10
|
+
export declare const setLSPDiagnosticsVersion: import("@codemirror/state").StateEffectType<number | null>;
|
|
11
|
+
export declare const lspDiagnosticsVersionField: import("@codemirror/state").StateField<number | null>;
|
|
12
|
+
export declare const setLSPDiagnostics: import("@codemirror/state").StateEffectType<LSPDiagnostic[]>;
|
|
13
|
+
export declare const lspDiagnosticsField: import("@codemirror/state").StateField<LSPDiagnostic[]>;
|
|
14
|
+
export declare const diagnosticsFacet: Facet<CodeMirrorDiagnostic[], CodeMirrorDiagnostic[]>;
|
|
15
|
+
export type DiagnosticRenderer = (lspDiagnostic: LSPDiagnostic) => Node;
|
|
16
|
+
export declare const diagnosticRendererFacet: Facet<DiagnosticRenderer | undefined, DiagnosticRenderer | undefined>;
|
|
17
|
+
export declare const computedCodeMirrorDiagnosticsValueProvider: Extension;
|
|
18
|
+
type SecondArgType<F> = F extends (_: any, second: infer A) => any ? A : never;
|
|
19
|
+
export type LinterOptions = SecondArgType<typeof linter>;
|
|
20
|
+
export declare const diagnosticsLinter: (overrides: LinterOptions) => Extension;
|
|
21
|
+
export declare const diagnosticsPlugin: ViewPlugin<DiagnosticsPlugin>;
|
|
22
|
+
export declare const lspLinter: (linterOptions?: LinterOptions) => Extension;
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
(function (factory) {
|
|
2
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
|
+
var v = factory(require, exports);
|
|
4
|
+
if (v !== undefined) module.exports = v;
|
|
5
|
+
}
|
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
|
7
|
+
define(["require", "exports", "@codemirror/lint", "@codemirror/state", "@codemirror/view", "vscode-languageserver-protocol", "../utils/simpleStateField", "./client", "./textDocumentSync"], factory);
|
|
8
|
+
}
|
|
9
|
+
})(function (require, exports) {
|
|
10
|
+
"use strict";
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.lspLinter = exports.diagnosticsPlugin = exports.diagnosticsLinter = exports.computedCodeMirrorDiagnosticsValueProvider = exports.diagnosticRendererFacet = exports.diagnosticsFacet = exports.lspDiagnosticsField = exports.setLSPDiagnostics = exports.lspDiagnosticsVersionField = exports.setLSPDiagnosticsVersion = void 0;
|
|
13
|
+
const lint_1 = require("@codemirror/lint");
|
|
14
|
+
const state_1 = require("@codemirror/state");
|
|
15
|
+
const view_1 = require("@codemirror/view");
|
|
16
|
+
const vscode_languageserver_protocol_1 = require("vscode-languageserver-protocol");
|
|
17
|
+
const simpleStateField_1 = require("../utils/simpleStateField");
|
|
18
|
+
const client_1 = require("./client");
|
|
19
|
+
const textDocumentSync_1 = require("./textDocumentSync");
|
|
20
|
+
class DiagnosticsPlugin {
|
|
21
|
+
constructor(view) {
|
|
22
|
+
const client = view.state.facet(client_1.clientFacet.reader);
|
|
23
|
+
const fileUri = view.state.facet(client_1.fileUriFacet.reader);
|
|
24
|
+
this.handlers = [];
|
|
25
|
+
this.handlers.push(client.onNotification(vscode_languageserver_protocol_1.PublishDiagnosticsNotification.type, (params) => {
|
|
26
|
+
if (params.uri !== fileUri)
|
|
27
|
+
return;
|
|
28
|
+
view.dispatch({
|
|
29
|
+
effects: [
|
|
30
|
+
exports.setLSPDiagnosticsVersion.of(params.version ?? null),
|
|
31
|
+
exports.setLSPDiagnostics.of(params.diagnostics),
|
|
32
|
+
],
|
|
33
|
+
});
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
destroy() {
|
|
37
|
+
this.handlers.forEach((disposable) => disposable.dispose());
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.setLSPDiagnosticsVersion = state_1.StateEffect.define();
|
|
41
|
+
exports.lspDiagnosticsVersionField = (0, simpleStateField_1.simpleStateField)(exports.setLSPDiagnosticsVersion, null);
|
|
42
|
+
exports.setLSPDiagnostics = state_1.StateEffect.define();
|
|
43
|
+
exports.lspDiagnosticsField = (0, simpleStateField_1.simpleStateField)(exports.setLSPDiagnostics, []);
|
|
44
|
+
exports.diagnosticsFacet = state_1.Facet.define({
|
|
45
|
+
combine: (values) => values[0],
|
|
46
|
+
});
|
|
47
|
+
exports.diagnosticRendererFacet = state_1.Facet.define({
|
|
48
|
+
combine: (values) => (values.length > 0 ? values[0] : undefined),
|
|
49
|
+
});
|
|
50
|
+
exports.computedCodeMirrorDiagnosticsValueProvider = exports.diagnosticsFacet.compute([textDocumentSync_1.textDocumentField, exports.lspDiagnosticsField, exports.lspDiagnosticsVersionField], (state) => {
|
|
51
|
+
const doc = state.field(textDocumentSync_1.textDocumentField);
|
|
52
|
+
const lspDiagnosticsVersion = state.field(exports.lspDiagnosticsVersionField);
|
|
53
|
+
// If the diagnostics version and doc version don't match, it means
|
|
54
|
+
// the diagnostics are stale.
|
|
55
|
+
if (lspDiagnosticsVersion !== doc.version) {
|
|
56
|
+
return [];
|
|
57
|
+
}
|
|
58
|
+
const lspDiagnostics = state.field(exports.lspDiagnosticsField);
|
|
59
|
+
const diagnosticRenderer = state.facet(exports.diagnosticRendererFacet.reader);
|
|
60
|
+
return lspDiagnostics.map((diagnostic) => lspToCodeMirrorDiagnostic(diagnostic, doc, diagnosticRenderer));
|
|
61
|
+
});
|
|
62
|
+
const diagnosticsLinter = (overrides) => (0, lint_1.linter)((view) => {
|
|
63
|
+
const diagnostics = view.state.facet(exports.diagnosticsFacet.reader);
|
|
64
|
+
return diagnostics;
|
|
65
|
+
}, {
|
|
66
|
+
delay: 100,
|
|
67
|
+
needsRefresh(update) {
|
|
68
|
+
const currVersion = update.state.field(exports.lspDiagnosticsVersionField);
|
|
69
|
+
const prevVersion = update.startState.field(exports.lspDiagnosticsVersionField);
|
|
70
|
+
// Checking against any kind of changes otherwise the squiggly line disappears!!
|
|
71
|
+
return (update.geometryChanged ||
|
|
72
|
+
update.viewportChanged ||
|
|
73
|
+
update.heightChanged ||
|
|
74
|
+
update.focusChanged ||
|
|
75
|
+
update.docChanged ||
|
|
76
|
+
update.transactions[0]?.reconfigured ||
|
|
77
|
+
prevVersion !== currVersion);
|
|
78
|
+
},
|
|
79
|
+
...overrides,
|
|
80
|
+
});
|
|
81
|
+
exports.diagnosticsLinter = diagnosticsLinter;
|
|
82
|
+
exports.diagnosticsPlugin = view_1.ViewPlugin.fromClass(DiagnosticsPlugin);
|
|
83
|
+
const lspLinter = (linterOptions = {}) => [
|
|
84
|
+
textDocumentSync_1.textDocumentField,
|
|
85
|
+
exports.lspDiagnosticsField,
|
|
86
|
+
exports.lspDiagnosticsVersionField,
|
|
87
|
+
exports.computedCodeMirrorDiagnosticsValueProvider,
|
|
88
|
+
(0, exports.diagnosticsLinter)(linterOptions),
|
|
89
|
+
exports.diagnosticsPlugin,
|
|
90
|
+
];
|
|
91
|
+
exports.lspLinter = lspLinter;
|
|
92
|
+
function lspToCodeMirrorSeverity(severity) {
|
|
93
|
+
switch (severity) {
|
|
94
|
+
case vscode_languageserver_protocol_1.DiagnosticSeverity.Error: {
|
|
95
|
+
return 'error';
|
|
96
|
+
}
|
|
97
|
+
case vscode_languageserver_protocol_1.DiagnosticSeverity.Warning: {
|
|
98
|
+
return 'warning';
|
|
99
|
+
}
|
|
100
|
+
case vscode_languageserver_protocol_1.DiagnosticSeverity.Hint:
|
|
101
|
+
case vscode_languageserver_protocol_1.DiagnosticSeverity.Information:
|
|
102
|
+
default: {
|
|
103
|
+
return 'info';
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function lspToCodeMirrorDiagnostic(lspDiagnostic, textDocument, diagnosticRenderer) {
|
|
108
|
+
const { range, message, severity } = lspDiagnostic;
|
|
109
|
+
const { start, end } = range;
|
|
110
|
+
return {
|
|
111
|
+
from: textDocument.offsetAt(start),
|
|
112
|
+
to: textDocument.offsetAt(end),
|
|
113
|
+
message,
|
|
114
|
+
severity: lspToCodeMirrorSeverity(severity),
|
|
115
|
+
renderMessage: diagnosticRenderer ? () => diagnosticRenderer(lspDiagnostic) : undefined,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
//# sourceMappingURL=lspLinter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lspLinter.js","sourceRoot":"","sources":["../../../src/extensions/lspLinter.ts"],"names":[],"mappings":"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"}
|