-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
bytescript-module.ts
68 lines (64 loc) · 2.34 KB
/
bytescript-module.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
import {
createDefaultModule,
createDefaultSharedModule,
DefaultSharedModuleContext,
inject,
LangiumServices,
LangiumSharedServices,
Module,
PartialLangiumServices,
} from 'langium'
import {ByteScriptGeneratedModule, ByteScriptGeneratedSharedModule} from './generated/module.js'
import {ByteScriptValidator, registerValidationChecks} from './bytescript-validator.js'
import {ByteScriptScopeProvider} from './bytescript-scope.js'
/**
* Declaration of custom services - add your own service classes here.
*/
export type ByteScriptAddedServices = {
validation: {
ByteScriptValidator: ByteScriptValidator
}
}
/**
* Union of Langium default services and your custom services - use this as constructor parameter
* of custom service classes.
*/
export type ByteScriptServices = LangiumServices & ByteScriptAddedServices
/**
* Dependency injection module that overrides Langium default services and contributes the
* declared custom services. The Langium defaults can be partially specified to override only
* selected services, while the custom services must be fully specified.
*/
export const ByteScriptModule: Module<ByteScriptServices, PartialLangiumServices & ByteScriptAddedServices> = {
validation: {
ByteScriptValidator: () => new ByteScriptValidator(),
},
references: {
ScopeProvider: services => new ByteScriptScopeProvider(services),
},
}
/**
* Create the full set of services required by Langium.
*
* First inject the shared services by merging two modules:
* - Langium default shared services
* - Services generated by langium-cli
*
* Then inject the language-specific services by merging three modules:
* - Langium default language-specific services
* - Services generated by langium-cli
* - Services specified in this file
*
* @param context Optional module context with the LSP connection
* @returns An object wrapping the shared services and the language-specific services
*/
export function createByteScriptServices(context: DefaultSharedModuleContext): {
shared: LangiumSharedServices
ByteScript: ByteScriptServices
} {
const shared = inject(createDefaultSharedModule(context), ByteScriptGeneratedSharedModule)
const ByteScript = inject(createDefaultModule({shared}), ByteScriptGeneratedModule, ByteScriptModule)
shared.ServiceRegistry.register(ByteScript)
registerValidationChecks(ByteScript)
return {shared, ByteScript}
}