-
Notifications
You must be signed in to change notification settings - Fork 61
/
services.ts
149 lines (139 loc) · 6.25 KB
/
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
137
138
139
140
141
142
143
144
145
146
147
148
149
/******************************************************************************
* Copyright 2021 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.
******************************************************************************/
// Ensure that all imports are erased at runtime to avoid circular dependencies.
import type { IParserErrorMessageProvider } from 'chevrotain';
import type { CommentProvider } from './documentation/comment-provider.js';
import type { DocumentationProvider } from './documentation/documentation-provider.js';
import type { Grammar } from './languages/generated/ast.js';
import type { GrammarConfig } from './languages/grammar-config.js';
import type { LanguageMetaData } from './languages/language-meta-data.js';
import type { AsyncParser } from './parser/async-parser.js';
import type { LangiumCompletionParser, LangiumParser } from './parser/langium-parser.js';
import type { Lexer } from './parser/lexer.js';
import type { IParserConfig } from './parser/parser-config.js';
import type { TokenBuilder } from './parser/token-builder.js';
import type { ValueConverter } from './parser/value-converter.js';
import type { Linker } from './references/linker.js';
import type { NameProvider } from './references/name-provider.js';
import type { References } from './references/references.js';
import type { ScopeComputation } from './references/scope-computation.js';
import type { ScopeProvider } from './references/scope-provider.js';
import type { JsonSerializer } from './serializer/json-serializer.js';
import type { ServiceRegistry } from './service-registry.js';
import type { AstReflection } from './syntax-tree.js';
import type { DocumentValidator } from './validation/document-validator.js';
import type { ValidationRegistry } from './validation/validation-registry.js';
import type { AstNodeDescriptionProvider, ReferenceDescriptionProvider } from './workspace/ast-descriptions.js';
import type { AstNodeLocator } from './workspace/ast-node-locator.js';
import type { ConfigurationProvider } from './workspace/configuration.js';
import type { DocumentBuilder } from './workspace/document-builder.js';
import type { LangiumDocumentFactory, LangiumDocuments, TextDocumentProvider } from './workspace/documents.js';
import type { FileSystemProvider } from './workspace/file-system-provider.js';
import type { IndexManager } from './workspace/index-manager.js';
import type { WorkspaceLock } from './workspace/workspace-lock.js';
import type { Hydrator } from './serializer/hydrator.js';
import type { WorkspaceManager } from './workspace/workspace-manager.js';
/**
* The services generated by `langium-cli` for a specific language. These are derived from the
* grammar definition and the language configuration.
*/
export type LangiumGeneratedCoreServices = {
Grammar: Grammar
LanguageMetaData: LanguageMetaData
parser: {
ParserConfig?: IParserConfig
}
}
/**
* Core services for a specific language of which Langium provides default implementations.
*/
export type LangiumDefaultCoreServices = {
parser: {
AsyncParser: AsyncParser
GrammarConfig: GrammarConfig
ValueConverter: ValueConverter
LangiumParser: LangiumParser
ParserErrorMessageProvider: IParserErrorMessageProvider
CompletionParser: LangiumCompletionParser
TokenBuilder: TokenBuilder
Lexer: Lexer
}
documentation: {
CommentProvider: CommentProvider
DocumentationProvider: DocumentationProvider
}
references: {
Linker: Linker
NameProvider: NameProvider
References: References
ScopeProvider: ScopeProvider
ScopeComputation: ScopeComputation
}
serializer: {
Hydrator: Hydrator
JsonSerializer: JsonSerializer
}
validation: {
DocumentValidator: DocumentValidator
ValidationRegistry: ValidationRegistry
}
workspace: {
AstNodeLocator: AstNodeLocator
AstNodeDescriptionProvider: AstNodeDescriptionProvider
ReferenceDescriptionProvider: ReferenceDescriptionProvider
}
shared: LangiumSharedCoreServices
}
/**
* The core set of services available for a language. These are either generated by `langium-cli`
* or provided as default implementations.
*/
export type LangiumCoreServices = LangiumGeneratedCoreServices & LangiumDefaultCoreServices
/**
* The services generated by `langium-cli` that are shared between multiple languages. These are
* derived from the grammar definition.
*/
export type LangiumGeneratedSharedCoreServices = {
AstReflection: AstReflection
}
/**
* Core services shared between multiple languages where Langium provides default implementations.
*/
export type LangiumDefaultSharedCoreServices = {
ServiceRegistry: ServiceRegistry
workspace: {
ConfigurationProvider: ConfigurationProvider
DocumentBuilder: DocumentBuilder
FileSystemProvider: FileSystemProvider
IndexManager: IndexManager
LangiumDocuments: LangiumDocuments
LangiumDocumentFactory: LangiumDocumentFactory
TextDocuments?: TextDocumentProvider
WorkspaceLock: WorkspaceLock
WorkspaceManager: WorkspaceManager
}
}
/**
* The shared core services are a set of services that are used by every language within a Langium project (excluding LSP services)
* This is necessary to enable features like cross references across different languages.
*/
export type LangiumSharedCoreServices = LangiumDefaultSharedCoreServices & LangiumGeneratedSharedCoreServices
/**
* A deep partial type definition for services. We look into T to see whether its type definition contains
* any methods. If it does, it's one of our services and therefore should not be partialized.
*/
//eslint-disable-next-line @typescript-eslint/ban-types
export type DeepPartial<T> = T[keyof T] extends Function ? T : {
[P in keyof T]?: DeepPartial<T[P]>;
}
/**
* Language-specific core services to be partially overridden via dependency injection.
*/
export type PartialLangiumCoreServices = DeepPartial<LangiumCoreServices>
/**
* Shared core services to be partially overridden via dependency injection.
*/
export type PartialLangiumSharedCoreServices = DeepPartial<LangiumSharedCoreServices>