/
lsp-services.ts
136 lines (123 loc) · 5.71 KB
/
lsp-services.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/******************************************************************************
* Copyright 2023 TypeFox GmbH
* This program and the accompanying materials are made available under the
* terms of the MIT License, which is available in the project root.
******************************************************************************/
import type { ExecuteCommandHandler } from './execute-command-handler.js';
import type { CodeActionProvider } from './code-action.js';
import type { CompletionProvider } from './completion/completion-provider.js';
import type { DocumentHighlightProvider } from './document-highlight-provider.js';
import type { DocumentSymbolProvider } from './document-symbol-provider.js';
import type { FoldingRangeProvider } from './folding-range-provider.js';
import type { Formatter } from './formatter.js';
import type { DefinitionProvider } from './definition-provider.js';
import type { HoverProvider } from './hover-provider.js';
import type { ReferencesProvider } from './references-provider.js';
import type { RenameProvider } from './rename-provider.js';
import type { SemanticTokenProvider } from './semantic-token-provider.js';
import type { URI } from '../utils/uri-util.js';
import type { LanguageServer } from './language-server.js';
import type { SignatureHelpProvider } from './signature-help-provider.js';
import type { TypeDefinitionProvider } from './type-provider.js';
import type { ImplementationProvider } from './implementation-provider.js';
import type { CallHierarchyProvider } from './call-hierarchy-provider.js';
import type { DocumentLinkProvider } from './document-link-provider.js';
import type { CodeLensProvider } from './code-lens-provider.js';
import type { DeclarationProvider } from './declaration-provider.js';
import type { InlayHintProvider } from './inlay-hint-provider.js';
import type { WorkspaceSymbolProvider } from './workspace-symbol-provider.js';
import type { NodeKindProvider } from './node-kind-provider.js';
import type { FuzzyMatcher } from './fuzzy-matcher.js';
import type { Connection, TextDocuments } from 'vscode-languageserver';
import type { TextDocument } from 'vscode-languageserver-textdocument';
import type { DeepPartial, LangiumCoreServices, LangiumSharedCoreServices } from '../services.js';
import type { TypeHierarchyProvider } from './type-hierarchy-provider.js';
import type { ConfigurationProvider } from './../workspace/configuration.js';
import type { LangiumDocumentFactory } from './../workspace/documents.js';
import type { WorkspaceManager } from './../workspace/workspace-manager.js';
/**
* Combined Core + LSP services of Langium (total services)
*/
export type LangiumServices = LangiumCoreServices & LangiumLSPServices;
/**
* Combined Core + LSP shared services of Langium (total services)
*/
export type LangiumSharedServices = LangiumSharedCoreServices & LangiumSharedLSPServices;
export type LSPServices = {
lsp: {
CompletionProvider?: CompletionProvider
DocumentHighlightProvider?: DocumentHighlightProvider
DocumentSymbolProvider?: DocumentSymbolProvider
HoverProvider?: HoverProvider
FoldingRangeProvider?: FoldingRangeProvider
DefinitionProvider?: DefinitionProvider
TypeProvider?: TypeDefinitionProvider
ImplementationProvider?: ImplementationProvider
ReferencesProvider?: ReferencesProvider
CodeActionProvider?: CodeActionProvider
SemanticTokenProvider?: SemanticTokenProvider
RenameProvider?: RenameProvider
Formatter?: Formatter
SignatureHelp?: SignatureHelpProvider
CallHierarchyProvider?: CallHierarchyProvider
TypeHierarchyProvider?: TypeHierarchyProvider
DeclarationProvider?: DeclarationProvider
InlayHintProvider?: InlayHintProvider
CodeLensProvider?: CodeLensProvider
DocumentLinkProvider?: DocumentLinkProvider
}
};
/**
* LSP Services for a single language where Langium provides default implementations.
*/
export type LangiumLSPServices = {
shared: LangiumSharedLSPServices
} & LSPServices;
/**
* A core + lsp service registry provides access to the language-specific services. These are resolved
* via the URI of a text document.
* This LSP interface simply extends upon the regular service registry's interface
*/
export interface ServiceRegistryI {
/**
* Register a language via its injected services.
*/
register(language: LangiumServices): void;
/**
* Retrieve the language-specific services for the given URI. In case only one language is
* registered, it may be used regardless of the URI format.
*/
getServices(uri: URI): (LangiumServices);
/**
* The full set of registered language services.
*/
readonly all: readonly LangiumServices[];
}
/**
* LSP Services shared between multiple languages where Langium provides default implementations.
*/
export type LangiumSharedLSPServices = {
ServiceRegistry: ServiceRegistryI
lsp: {
Connection?: Connection
ExecuteCommandHandler?: ExecuteCommandHandler
WorkspaceSymbolProvider?: WorkspaceSymbolProvider
NodeKindProvider: NodeKindProvider
FuzzyMatcher: FuzzyMatcher
LanguageServer: LanguageServer
}
workspace: {
ConfigurationProvider: ConfigurationProvider
LangiumDocumentFactory: LangiumDocumentFactory
TextDocuments: TextDocuments<TextDocument>
WorkspaceManager: WorkspaceManager
}
};
/**
* Language-specific services to be partially overridden via dependency injection.
*/
export type PartialLangiumLSPServices = DeepPartial<LangiumLSPServices>
/**
* Shared services to be partially overridden via dependency injection.
*/
export type PartialLangiumSharedLSPServices = DeepPartial<LangiumSharedLSPServices>