@platformos/codemirror-language-client 0.0.7 → 0.0.8
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 +6 -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.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 +18 -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 +18 -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 +4 -4
- package/playground/src/index.html +2 -2
- package/playground/src/language-server-worker.ts +1 -5
- package/playground/src/playground.ts +65 -77
- package/playground/webpack.config.js +1 -3
- package/playground/dist/c79446f35d8df82b1201.7baf47407c339642d100.hot-update.json +0 -1
- package/playground/dist/c79446f35d8df82b1201.7e0989b9d82d407d3fa3.hot-update.json +0 -1
- package/playground/dist/index.html +0 -10
- package/playground/dist/language-server-worker.d.ts +0 -12
- package/playground/dist/main.7baf47407c339642d100.hot-update.js +0 -29
- package/playground/dist/main.7baf47407c339642d100.hot-update.js.map +0 -1
- package/playground/dist/main.7baf47407c339642d100.hot-update.json +0 -1
- package/playground/dist/main.7e0989b9d82d407d3fa3.hot-update.js +0 -29
- package/playground/dist/main.7e0989b9d82d407d3fa3.hot-update.js.map +0 -1
- package/playground/dist/main.7e0989b9d82d407d3fa3.hot-update.json +0 -1
- package/playground/dist/main.bundle.js +0 -59960
- package/playground/dist/main.bundle.js.map +0 -1
- package/playground/dist/src_language-server-worker_ts.7baf47407c339642d100.hot-update.js +0 -11
- package/playground/dist/src_language-server-worker_ts.7baf47407c339642d100.hot-update.js.map +0 -1
- package/playground/dist/src_language-server-worker_ts.7e0989b9d82d407d3fa3.hot-update.js +0 -11
- package/playground/dist/src_language-server-worker_ts.7e0989b9d82d407d3fa3.hot-update.js.map +0 -1
- package/playground/dist/src_language-server-worker_ts.bundle.js +0 -27934
- package/playground/dist/src_language-server-worker_ts.bundle.js.map +0 -1
- package/playground/dist/vendors-node_modules_cross-fetch_dist_browser-ponyfill_js-node_modules_line-column_lib_line-c-6a6d49.bundle.js +0 -100265
- package/playground/dist/vendors-node_modules_cross-fetch_dist_browser-ponyfill_js-node_modules_line-column_lib_line-c-6a6d49.bundle.js.map +0 -1
- /package/{playground/dist/playground.d.ts → dist/esm/extensions/complete.spec.d.ts} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Extension } from '@codemirror/state';
|
|
2
|
+
import { Dependencies, LanguageClient } from './LanguageClient';
|
|
3
|
+
import { AutocompleteOptions, DiagnosticRenderer, HoverOptions, HoverRenderer, InfoRenderer, LinterOptions } from './extensions';
|
|
4
|
+
export { Dependencies };
|
|
5
|
+
export interface FeatureFlags {
|
|
6
|
+
shouldComplete: boolean;
|
|
7
|
+
shouldLint: boolean;
|
|
8
|
+
shouldHover: boolean;
|
|
9
|
+
}
|
|
10
|
+
export type ClientDependencies = Partial<Dependencies>;
|
|
11
|
+
export interface CodeMirrorDependencies {
|
|
12
|
+
/**
|
|
13
|
+
* The infoRenderer is a function that returns a DOM node that contains the documentation
|
|
14
|
+
* for a completion item. Presumably does markdown conversions to DOM nodes.
|
|
15
|
+
*
|
|
16
|
+
* A function that takes a completion object and returns a DOM node.
|
|
17
|
+
*/
|
|
18
|
+
infoRenderer?: InfoRenderer;
|
|
19
|
+
/**
|
|
20
|
+
* Say you wanted to change the settings of the `autocomplete` extension,
|
|
21
|
+
* you'd do it with that.
|
|
22
|
+
*/
|
|
23
|
+
autocompleteOptions?: AutocompleteOptions;
|
|
24
|
+
/**
|
|
25
|
+
* Say you wanted to change the settings of the `linter` extension,
|
|
26
|
+
* you'd do it with that.
|
|
27
|
+
*/
|
|
28
|
+
linterOptions?: LinterOptions;
|
|
29
|
+
/**
|
|
30
|
+
* The diagnosticRenderer is a function that returns a DOM node that
|
|
31
|
+
* contains the content of a diagnostic. It overrides the default
|
|
32
|
+
* rendering logic for diagnostics.
|
|
33
|
+
*/
|
|
34
|
+
diagnosticRenderer?: DiagnosticRenderer;
|
|
35
|
+
/**
|
|
36
|
+
* The hoverRenderer is a function that returns a DOM node that contains the documentation
|
|
37
|
+
* for the item under the cursor. The documentation is provided by the Language Server.
|
|
38
|
+
*/
|
|
39
|
+
hoverRenderer?: HoverRenderer;
|
|
40
|
+
/**
|
|
41
|
+
* Say you wanted to change the settings of the `hoverTooltip` extension,
|
|
42
|
+
* you'd do it with that.
|
|
43
|
+
*/
|
|
44
|
+
hoverOptions?: HoverOptions;
|
|
45
|
+
}
|
|
46
|
+
export declare class CodeMirrorLanguageClient {
|
|
47
|
+
private readonly worker;
|
|
48
|
+
readonly client: LanguageClient;
|
|
49
|
+
private readonly infoRenderer;
|
|
50
|
+
private readonly autocompleteExtension;
|
|
51
|
+
private readonly diagnosticRenderer;
|
|
52
|
+
private readonly linterExtension;
|
|
53
|
+
private readonly hoverRenderer;
|
|
54
|
+
private readonly hoverExtension;
|
|
55
|
+
private readonly documentHighlightsExtension;
|
|
56
|
+
constructor(worker: Worker, { log, initializationOptions }?: ClientDependencies, { infoRenderer, autocompleteOptions, diagnosticRenderer, linterOptions, hoverRenderer, hoverOptions, }?: CodeMirrorDependencies);
|
|
57
|
+
start(): Promise<void>;
|
|
58
|
+
stop(): Promise<void>;
|
|
59
|
+
extension(fileUri: string, { shouldLint, shouldComplete, shouldHover }?: FeatureFlags): Extension[];
|
|
60
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { MarkupKind } from 'vscode-languageserver-protocol';
|
|
2
|
+
import { LanguageClient } from './LanguageClient';
|
|
3
|
+
import { clientFacet, diagnosticRendererFacet, fileUriFacet, infoRendererFacet, lspComplete, lspDocumentHighlights, lspHover, lspLinter, serverCapabilitiesFacet, textDocumentSync, } from './extensions';
|
|
4
|
+
import { hoverRendererFacet } from './extensions/hover';
|
|
5
|
+
/**
|
|
6
|
+
* The client capabilities are how we tell the language server what
|
|
7
|
+
* features we support so that they have the opportunity to skip doing
|
|
8
|
+
* things that the client does not support. Everything is false by default,
|
|
9
|
+
* but we migth need to change that and this is where we'll do it.
|
|
10
|
+
*/
|
|
11
|
+
const clientCapabilities = {
|
|
12
|
+
textDocument: {
|
|
13
|
+
documentHighlight: {
|
|
14
|
+
dynamicRegistration: false,
|
|
15
|
+
},
|
|
16
|
+
completion: {
|
|
17
|
+
// We send the completion context to the server
|
|
18
|
+
contextSupport: true,
|
|
19
|
+
completionItem: {
|
|
20
|
+
snippetSupport: true,
|
|
21
|
+
insertReplaceSupport: true,
|
|
22
|
+
documentationFormat: [MarkupKind.PlainText, MarkupKind.Markdown],
|
|
23
|
+
commitCharactersSupport: false,
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
const defaultLogger = console.log.bind(console);
|
|
29
|
+
// There is one LanguageClient
|
|
30
|
+
// There is one LanguageServer
|
|
31
|
+
// There are many CodeMirror instances
|
|
32
|
+
export class CodeMirrorLanguageClient {
|
|
33
|
+
constructor(worker, { log = defaultLogger, initializationOptions } = {}, { infoRenderer, autocompleteOptions, diagnosticRenderer, linterOptions, hoverRenderer, hoverOptions, } = {}) {
|
|
34
|
+
this.worker = worker;
|
|
35
|
+
this.client = new LanguageClient(worker, {
|
|
36
|
+
clientCapabilities,
|
|
37
|
+
initializationOptions,
|
|
38
|
+
log,
|
|
39
|
+
});
|
|
40
|
+
this.worker = worker;
|
|
41
|
+
this.infoRenderer = infoRenderer;
|
|
42
|
+
this.autocompleteExtension = lspComplete(autocompleteOptions);
|
|
43
|
+
this.diagnosticRenderer = diagnosticRenderer;
|
|
44
|
+
this.linterExtension = lspLinter(linterOptions);
|
|
45
|
+
this.hoverRenderer = hoverRenderer;
|
|
46
|
+
this.hoverExtension = lspHover(hoverOptions);
|
|
47
|
+
this.documentHighlightsExtension = lspDocumentHighlights();
|
|
48
|
+
}
|
|
49
|
+
async start() {
|
|
50
|
+
await this.client.start();
|
|
51
|
+
}
|
|
52
|
+
async stop() {
|
|
53
|
+
try {
|
|
54
|
+
await this.client.stop();
|
|
55
|
+
}
|
|
56
|
+
finally {
|
|
57
|
+
this.worker.terminate();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
extension(fileUri, { shouldLint, shouldComplete, shouldHover } = {
|
|
61
|
+
shouldLint: true,
|
|
62
|
+
shouldComplete: true,
|
|
63
|
+
shouldHover: true,
|
|
64
|
+
}) {
|
|
65
|
+
return [
|
|
66
|
+
clientFacet.of(this.client),
|
|
67
|
+
serverCapabilitiesFacet.of(this.client.serverCapabilities),
|
|
68
|
+
fileUriFacet.of(fileUri),
|
|
69
|
+
textDocumentSync,
|
|
70
|
+
infoRendererFacet.of(this.infoRenderer),
|
|
71
|
+
diagnosticRendererFacet.of(this.diagnosticRenderer),
|
|
72
|
+
hoverRendererFacet.of(this.hoverRenderer),
|
|
73
|
+
this.documentHighlightsExtension,
|
|
74
|
+
]
|
|
75
|
+
.concat(shouldLint ? this.linterExtension : [])
|
|
76
|
+
.concat(shouldComplete ? this.autocompleteExtension : [])
|
|
77
|
+
.concat(shouldHover ? this.hoverExtension : []);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=CodeMirrorLanguageClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeMirrorLanguageClient.js","sourceRoot":"","sources":["../../src/CodeMirrorLanguageClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { Disposable, NotificationHandler, ProtocolNotificationType, ProtocolRequestType, ProtocolRequestType0, RequestHandler, ProtocolNotificationType0, ServerCapabilities, ClientCapabilities } from 'vscode-languageserver-protocol';
|
|
2
|
+
export interface PromiseCompletion {
|
|
3
|
+
resolve(value: unknown): void;
|
|
4
|
+
reject(error: unknown): void;
|
|
5
|
+
}
|
|
6
|
+
export interface Dependencies {
|
|
7
|
+
clientCapabilities: ClientCapabilities;
|
|
8
|
+
initializationOptions?: any;
|
|
9
|
+
log(...args: any[]): void;
|
|
10
|
+
}
|
|
11
|
+
export interface AbstractLanguageClient {
|
|
12
|
+
clientCapabilities: ClientCapabilities;
|
|
13
|
+
serverCapabilities: ServerCapabilities | null;
|
|
14
|
+
serverInfo: any;
|
|
15
|
+
onRequest: LanguageClient['onRequest'];
|
|
16
|
+
onNotification: LanguageClient['onNotification'];
|
|
17
|
+
sendRequest: LanguageClient['sendRequest'];
|
|
18
|
+
sendNotification: LanguageClient['sendNotification'];
|
|
19
|
+
}
|
|
20
|
+
export declare class LanguageClient extends EventTarget implements AbstractLanguageClient {
|
|
21
|
+
readonly worker: Worker;
|
|
22
|
+
readonly clientCapabilities: ClientCapabilities;
|
|
23
|
+
readonly initializationOptions: any;
|
|
24
|
+
serverCapabilities: ServerCapabilities | null;
|
|
25
|
+
serverInfo: any;
|
|
26
|
+
private requestId;
|
|
27
|
+
private requests;
|
|
28
|
+
private dispose;
|
|
29
|
+
private disposables;
|
|
30
|
+
private log;
|
|
31
|
+
constructor(worker: Worker, dependencies: Dependencies);
|
|
32
|
+
/**
|
|
33
|
+
* Lifecycle method to start the server
|
|
34
|
+
*/
|
|
35
|
+
start(): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Lifecycle method to stop the server
|
|
38
|
+
*/
|
|
39
|
+
stop(): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* For when you want to handle requests sent from the language server.
|
|
42
|
+
*
|
|
43
|
+
* @param {MessageSignature} type this is an export from vscode-languageserver-protocol
|
|
44
|
+
* @param {RequestHandler} handler a type-inferred event handler whose return value matches the MessageSignature
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* import {ApplyWorkspaceEditRequest, ApplyWorkspaceEditResponse} from 'vscode-languageserver-protocol';
|
|
48
|
+
* client.onRequest(ApplyWorkspaceEditRequest.type, (params, cancellationToken) => {
|
|
49
|
+
* // `params` and `cancellationToken` are typed inferred
|
|
50
|
+
* // The return value must match the MessageSignature (ApplyWorkspaceEditResponse)
|
|
51
|
+
* return result as ApplyWorkspaceEditResponse;
|
|
52
|
+
* })
|
|
53
|
+
*/
|
|
54
|
+
onRequest<P, R, PR, E, RO>(type: ProtocolRequestType<P, R, PR, E, RO>, handler: RequestHandler<P, R, E>): Disposable;
|
|
55
|
+
/**
|
|
56
|
+
* For when you want to handle notifications sent from the language server.
|
|
57
|
+
*
|
|
58
|
+
* @param {MessageSignature} type this is an export from vscode-languageserver-protocol
|
|
59
|
+
* @param {NotificationHandler} handler this is a type-inferred event handler
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* import {PublishDiagnosticsNotification} from 'vscode-languageserver-protocol';
|
|
63
|
+
* client.onNotification(PublishDiagnosticsNotification.type, (params) => {
|
|
64
|
+
* // the type of `params` is inferred from the first argument
|
|
65
|
+
* });
|
|
66
|
+
*/
|
|
67
|
+
onNotification<P, RO>(type: ProtocolNotificationType<P, RO>, handler: NotificationHandler<P>): Disposable;
|
|
68
|
+
/**
|
|
69
|
+
* Send a request to the language server and await a response.
|
|
70
|
+
*
|
|
71
|
+
* @param {MessageSignature} type this is an export from vscode-languageserver-protocol
|
|
72
|
+
* @param [params] its type is inferred from the first argument
|
|
73
|
+
* @returns {any} response, its type is inferred from the first argument
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
*
|
|
77
|
+
* import {CompletionRequest} from 'vscode-languageserver-protocol';
|
|
78
|
+
* const completions = await client.sendRequest(
|
|
79
|
+
* CompletionRequest.type,
|
|
80
|
+
* params
|
|
81
|
+
* );
|
|
82
|
+
*/
|
|
83
|
+
sendRequest<R, PR, E, RO>(type: ProtocolRequestType0<R, PR, E, RO>): Promise<R>;
|
|
84
|
+
sendRequest<P, R, PR, E, RO>(type: ProtocolRequestType<P, R, PR, E, RO>, params?: P): Promise<R>;
|
|
85
|
+
/**
|
|
86
|
+
* Send a notification to the language server. Notifications are fire and forget.
|
|
87
|
+
*
|
|
88
|
+
* @param {MessageSignature} type this is an export from vscode-languageserver-protocol
|
|
89
|
+
* @param [params] its type is inferred from the first argument
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
*
|
|
93
|
+
* import {DidChangeTextDocumentNotification} from 'vscode-languageserver-protocol';
|
|
94
|
+
* client.sendNotification(
|
|
95
|
+
* DidChangeTextDocumentNotification.type,
|
|
96
|
+
* params
|
|
97
|
+
* );
|
|
98
|
+
*/
|
|
99
|
+
sendNotification<RO>(type: ProtocolNotificationType0<RO>): void;
|
|
100
|
+
sendNotification<P, RO>(type: ProtocolNotificationType<P, RO>, params?: P): void;
|
|
101
|
+
private sendResponse;
|
|
102
|
+
private sendMessage;
|
|
103
|
+
/**
|
|
104
|
+
* Map messages to their correct destition.
|
|
105
|
+
* - Responses -> resolve or reject the corresponding Request
|
|
106
|
+
* - Notification -> emit(message.method, message)
|
|
107
|
+
* - Request -> emit(message.method, message)
|
|
108
|
+
*/
|
|
109
|
+
private handleMessage;
|
|
110
|
+
private disposable;
|
|
111
|
+
}
|
|
112
|
+
export declare function disposable(dispose: () => void): Disposable;
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/* eslint-disable lines-between-class-members */
|
|
2
|
+
import { CancellationTokenSource, ExitNotification, InitializeRequest, InitializedNotification, ResponseError, ShutdownRequest, } from 'vscode-languageserver-protocol';
|
|
3
|
+
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
4
|
+
export class LanguageClient extends EventTarget {
|
|
5
|
+
constructor(worker, dependencies) {
|
|
6
|
+
super();
|
|
7
|
+
this.worker = worker;
|
|
8
|
+
this.requests = new Map();
|
|
9
|
+
this.requestId = 0;
|
|
10
|
+
this.dispose = () => { };
|
|
11
|
+
this.disposables = [];
|
|
12
|
+
this.clientCapabilities = dependencies.clientCapabilities;
|
|
13
|
+
this.initializationOptions = dependencies.initializationOptions;
|
|
14
|
+
this.log = dependencies.log;
|
|
15
|
+
this.serverCapabilities = null;
|
|
16
|
+
this.serverInfo = null;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Lifecycle method to start the server
|
|
20
|
+
*/
|
|
21
|
+
async start() {
|
|
22
|
+
/**
|
|
23
|
+
* Here we setup the web worker event handler.
|
|
24
|
+
* We route the message sent via the worker's postMessage to our event handler.
|
|
25
|
+
*/
|
|
26
|
+
const handler = (ev) => this.handleMessage(ev.data);
|
|
27
|
+
this.worker.addEventListener('message', handler);
|
|
28
|
+
this.dispose = () => {
|
|
29
|
+
this.worker.removeEventListener('message', handler);
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* We send the `initialize` request and obtain the capabilities supported by
|
|
33
|
+
* the language server.
|
|
34
|
+
*
|
|
35
|
+
* https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#initialize
|
|
36
|
+
*/
|
|
37
|
+
const response = await this.sendRequest(InitializeRequest.type, {
|
|
38
|
+
capabilities: this.clientCapabilities,
|
|
39
|
+
initializationOptions: this.initializationOptions,
|
|
40
|
+
processId: 0,
|
|
41
|
+
rootUri: 'browser:///',
|
|
42
|
+
});
|
|
43
|
+
/**
|
|
44
|
+
* We unpack the response from the server and remember the capabilities.
|
|
45
|
+
* Those will be useful.
|
|
46
|
+
*/
|
|
47
|
+
this.serverCapabilities = response.capabilities;
|
|
48
|
+
this.serverInfo = response.serverInfo;
|
|
49
|
+
/**
|
|
50
|
+
* Once we're ready, we send the `initialized` notification to tell the
|
|
51
|
+
* server that we're ready to roll!
|
|
52
|
+
*
|
|
53
|
+
* https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#initialized
|
|
54
|
+
*/
|
|
55
|
+
this.sendNotification(InitializedNotification.type, {});
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Lifecycle method to stop the server
|
|
59
|
+
*/
|
|
60
|
+
async stop() {
|
|
61
|
+
await Promise.race([this.sendRequest(ShutdownRequest.type), sleep(1000)]);
|
|
62
|
+
this.disposables.forEach((disposable) => disposable.dispose());
|
|
63
|
+
this.disposables = [];
|
|
64
|
+
this.dispose();
|
|
65
|
+
this.sendNotification(ExitNotification.type);
|
|
66
|
+
}
|
|
67
|
+
onRequest(type, handler) {
|
|
68
|
+
const method = typeof type === 'string' ? type : type.method;
|
|
69
|
+
const callback = async (event) => {
|
|
70
|
+
const { params, id } = event.detail;
|
|
71
|
+
const cancellationToken = new CancellationTokenSource().token;
|
|
72
|
+
try {
|
|
73
|
+
const response = await handler(params, cancellationToken);
|
|
74
|
+
if (response && typeof response === 'object' && 'code' in response) {
|
|
75
|
+
this.sendResponse(id, undefined, response);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
this.sendResponse(id, response, undefined);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
this.sendResponse(id, undefined, new ResponseError(1, error instanceof Error ? error.message : error));
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
this.addEventListener(method, callback);
|
|
86
|
+
return this.disposable(() => this.removeEventListener(method, callback));
|
|
87
|
+
}
|
|
88
|
+
onNotification(type, handler) {
|
|
89
|
+
const method = typeof type === 'string' ? type : type.method;
|
|
90
|
+
const callback = (event) => {
|
|
91
|
+
const { params } = event.detail;
|
|
92
|
+
handler(params);
|
|
93
|
+
};
|
|
94
|
+
this.addEventListener(method, callback);
|
|
95
|
+
return this.disposable(() => this.removeEventListener(method, callback));
|
|
96
|
+
}
|
|
97
|
+
async sendRequest(type, params) {
|
|
98
|
+
this.requestId += 1;
|
|
99
|
+
const requestId = this.requestId;
|
|
100
|
+
const method = typeof type === 'string' ? type : type.method;
|
|
101
|
+
const request = {
|
|
102
|
+
jsonrpc: '2.0',
|
|
103
|
+
id: requestId,
|
|
104
|
+
method,
|
|
105
|
+
};
|
|
106
|
+
if (params)
|
|
107
|
+
request.params = params;
|
|
108
|
+
this.log(`Client->Server ${request.method} request [${request.id}]`, request);
|
|
109
|
+
this.sendMessage(request);
|
|
110
|
+
return new Promise((resolve, reject) => {
|
|
111
|
+
this.requests.set(requestId.toString(), { resolve, reject });
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
sendNotification(type, params) {
|
|
115
|
+
const method = typeof type === 'string' ? type : type.method;
|
|
116
|
+
const notification = {
|
|
117
|
+
jsonrpc: '2.0',
|
|
118
|
+
method,
|
|
119
|
+
};
|
|
120
|
+
if (params)
|
|
121
|
+
notification.params = params;
|
|
122
|
+
this.log(`Client->Server ${method} notification`, notification);
|
|
123
|
+
this.sendMessage(notification);
|
|
124
|
+
}
|
|
125
|
+
sendResponse(id, result, error) {
|
|
126
|
+
const response = { jsonrpc: '2.0', id };
|
|
127
|
+
if (result !== undefined)
|
|
128
|
+
response.result = result;
|
|
129
|
+
if (error !== undefined)
|
|
130
|
+
response.error = error.toJson();
|
|
131
|
+
this.log(`Client->Server response [${id}]`, response);
|
|
132
|
+
this.sendMessage(response);
|
|
133
|
+
}
|
|
134
|
+
sendMessage(message) {
|
|
135
|
+
this.worker.postMessage(message);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Map messages to their correct destition.
|
|
139
|
+
* - Responses -> resolve or reject the corresponding Request
|
|
140
|
+
* - Notification -> emit(message.method, message)
|
|
141
|
+
* - Request -> emit(message.method, message)
|
|
142
|
+
*/
|
|
143
|
+
handleMessage(message) {
|
|
144
|
+
if (isResponse(message)) {
|
|
145
|
+
this.log(`Server->Client response [${message.id}]`, message);
|
|
146
|
+
const id = message.id.toString();
|
|
147
|
+
if ('result' in message) {
|
|
148
|
+
this.requests.get(id).resolve(message.result);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
this.requests.get(id).reject(message.error);
|
|
152
|
+
}
|
|
153
|
+
this.requests.delete(id);
|
|
154
|
+
}
|
|
155
|
+
else if (isRequest(message)) {
|
|
156
|
+
this.log(`Server->Client ${message.method} request [${message.id}]`, message);
|
|
157
|
+
this.dispatchEvent(new CustomEvent(message.method, { detail: message }));
|
|
158
|
+
}
|
|
159
|
+
else if (isNotification(message)) {
|
|
160
|
+
this.log(`Server->Client ${message.method} notification`, message);
|
|
161
|
+
this.dispatchEvent(new CustomEvent(message.method, {
|
|
162
|
+
detail: message,
|
|
163
|
+
}));
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
this.log('what?', message);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
disposable(dispose) {
|
|
170
|
+
const disp = disposable(dispose);
|
|
171
|
+
this.disposables.push(disp);
|
|
172
|
+
return disp;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
export function disposable(dispose) {
|
|
176
|
+
return { dispose };
|
|
177
|
+
}
|
|
178
|
+
function isResponse(message) {
|
|
179
|
+
return 'id' in message && ('error' in message || 'result' in message);
|
|
180
|
+
}
|
|
181
|
+
function isRequest(message) {
|
|
182
|
+
return 'id' in message && 'method' in message;
|
|
183
|
+
}
|
|
184
|
+
function isNotification(message) {
|
|
185
|
+
return !('id' in message) && 'method' in message;
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=LanguageClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LanguageClient.js","sourceRoot":"","sources":["../../src/LanguageClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Facet } from '@codemirror/state';
|
|
2
|
+
import { AbstractLanguageClient } from '../LanguageClient';
|
|
3
|
+
import { ServerCapabilities } from 'vscode-languageserver-protocol';
|
|
4
|
+
export declare const clientFacet: Facet<AbstractLanguageClient, AbstractLanguageClient>;
|
|
5
|
+
export declare const fileUriFacet: Facet<string, string>;
|
|
6
|
+
export declare const serverCapabilitiesFacet: Facet<ServerCapabilities<any> | null, ServerCapabilities<any>>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Facet } from '@codemirror/state';
|
|
2
|
+
export const clientFacet = Facet.define({
|
|
3
|
+
combine: (values) => values[0],
|
|
4
|
+
static: true,
|
|
5
|
+
});
|
|
6
|
+
export const fileUriFacet = Facet.define({
|
|
7
|
+
combine: (values) => values[0],
|
|
8
|
+
});
|
|
9
|
+
export const serverCapabilitiesFacet = Facet.define({
|
|
10
|
+
combine: (values) => values[0] ?? {},
|
|
11
|
+
});
|
|
12
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/extensions/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAK1C,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAiD;IACtF,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9B,MAAM,EAAE,IAAI;CACb,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAiB;IACvD,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;CAC/B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC,MAAM,CAAgD;IACjG,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE;CACrC,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { autocompletion, CompletionContext, CompletionResult, CompletionInfo } from '@codemirror/autocomplete';
|
|
2
|
+
import { CompletionItem } from 'vscode-languageserver-protocol';
|
|
3
|
+
import { Facet } from '@codemirror/state';
|
|
4
|
+
type FirstArgType<F> = F extends (arg: infer A) => any ? A : never;
|
|
5
|
+
export type AutocompleteOptions = Partial<FirstArgType<typeof autocompletion>>;
|
|
6
|
+
export declare const lspComplete: (overrides?: AutocompleteOptions) => import("@codemirror/state").Extension;
|
|
7
|
+
/**
|
|
8
|
+
* An InfoRenderer would be equivalent to the Quick Info window in VS Code. It's the part of the completion
|
|
9
|
+
* window that shows you the docs about the thing that is currently selected.
|
|
10
|
+
*
|
|
11
|
+
* Takes a LSP CompletionItem as argument and returns a DOM node, optional and injected so that we can control
|
|
12
|
+
* how we render the info window from the rendering context.
|
|
13
|
+
*/
|
|
14
|
+
export type InfoRenderer = (completion: CompletionItem) => CompletionInfo;
|
|
15
|
+
export declare const infoRendererFacet: Facet<InfoRenderer | undefined, InfoRenderer | undefined>;
|
|
16
|
+
export declare function complete(context: CompletionContext): Promise<CompletionResult | null>;
|
|
17
|
+
export {};
|