/
domain-model-module.ts
58 lines (53 loc) · 2.38 KB
/
domain-model-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
/******************************************************************************
* 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.
******************************************************************************/
import { type Module, inject } from 'langium';
import type { LangiumServices, LangiumSharedServices, PartialLangiumServices } from 'langium/lsp';
import { createDefaultModule, createDefaultSharedModule, type DefaultSharedModuleContext } from 'langium/lsp';
import { DomainModelFormatter } from './domain-model-formatter.js';
import { QualifiedNameProvider } from './domain-model-naming.js';
import { DomainModelRenameProvider } from './domain-model-rename-refactoring.js';
import { DomainModelScopeComputation } from './domain-model-scope.js';
import { DomainModelValidator, registerValidationChecks } from './domain-model-validator.js';
import { DomainModelGeneratedModule, DomainModelGeneratedSharedModule } from './generated/module.js';
export type DomainModelAddedServices = {
references: {
QualifiedNameProvider: QualifiedNameProvider
},
validation: {
DomainModelValidator: DomainModelValidator
}
}
export type DomainModelServices = LangiumServices & DomainModelAddedServices;
export const DomainModelModule: Module<DomainModelServices, PartialLangiumServices & DomainModelAddedServices> = {
references: {
ScopeComputation: (services) => new DomainModelScopeComputation(services),
QualifiedNameProvider: () => new QualifiedNameProvider()
},
validation: {
DomainModelValidator: () => new DomainModelValidator()
},
lsp: {
Formatter: () => new DomainModelFormatter(),
RenameProvider: (services) => new DomainModelRenameProvider(services)
}
};
export function createDomainModelServices(context: DefaultSharedModuleContext): {
shared: LangiumSharedServices,
domainmodel: DomainModelServices
} {
const shared = inject(
createDefaultSharedModule(context),
DomainModelGeneratedSharedModule
);
const domainmodel = inject(
createDefaultModule({ shared }),
DomainModelGeneratedModule,
DomainModelModule
);
shared.ServiceRegistry.register(domainmodel);
registerValidationChecks(domainmodel);
return { shared, domainmodel };
}