/
services.ts
146 lines (134 loc) · 5.96 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
/******************************************************************************
* 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 { Grammar } from './grammar/generated/ast.js';
import type { GrammarConfig } from './grammar/grammar-config.js';
import type { LanguageMetaData } from './grammar/language-meta-data.js';
import type { LangiumCompletionParser, LangiumParser } from './parser/langium-parser.js';
import type { IParserConfig } from './parser/parser-config.js';
import type { TokenBuilder } from './parser/token-builder.js';
import type { Lexer } from './parser/lexer.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 { CoreServiceRegistryI } from './service-registry.js';
import type { AstReflection } from './syntax-tree.js';
import type { MutexLock } from './utils/promise-util.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 } from './workspace/documents.js';
import type { FileSystemProvider } from './workspace/file-system-provider.js';
import type { IndexManager } from './workspace/index-manager.js';
import type { WorkspaceManager } from './workspace/workspace-manager.js';
import type { DocumentationProvider } from './documentation/documentation-provider.js';
import type { CommentProvider } from './documentation/comment-provider.js';
import type { IParserErrorMessageProvider } from 'chevrotain';
/**
* The services generated by `langium-cli` for a single language. These are derived from the
* grammar definition and the language configuration.
*/
export type LangiumGeneratedServices = {
Grammar: Grammar
LanguageMetaData: LanguageMetaData
parser: {
ParserConfig?: IParserConfig
}
}
/**
* Services for a single language where Langium provides default implementations.
*/
export type LangiumDefaultServices = {
parser: {
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: {
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 = LangiumGeneratedServices & LangiumDefaultServices
/**
* The services generated by `langium-cli` that are shared between multiple languages. These are
* derived from the grammar definition.
*/
export type LangiumGeneratedSharedServices = {
AstReflection: AstReflection
}
/**
* Services shared between multiple languages where Langium provides default implementations.
*/
export type LangiumDefaultSharedServices = {
ServiceRegistry: CoreServiceRegistryI
workspace: {
DocumentBuilder: DocumentBuilder
IndexManager: IndexManager
LangiumDocuments: LangiumDocuments
LangiumDocumentFactory: LangiumDocumentFactory
WorkspaceManager: WorkspaceManager
FileSystemProvider: FileSystemProvider
MutexLock: MutexLock
ConfigurationProvider: ConfigurationProvider
}
}
/**
* 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 = LangiumDefaultSharedServices & LangiumGeneratedSharedServices
/**
* 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>