diff --git a/examples/arithmetics/src/cli/cli-util.ts b/examples/arithmetics/src/cli/cli-util.ts index 3ea2803b1..9db7cac48 100644 --- a/examples/arithmetics/src/cli/cli-util.ts +++ b/examples/arithmetics/src/cli/cli-util.ts @@ -4,13 +4,13 @@ * terms of the MIT License, which is available in the project root. ******************************************************************************/ -import type { AstNode, LangiumDocument, LangiumServices } from 'langium'; +import type { AstNode, LangiumDocument, LangiumCoreServices } from 'langium'; import { URI } from 'langium'; import * as fs from 'node:fs'; import * as path from 'node:path'; import chalk from 'chalk'; -export async function extractDocument(fileName: string, extensions: readonly string[], services: LangiumServices): Promise> { +export async function extractDocument(fileName: string, extensions: readonly string[], services: LangiumCoreServices): Promise> { if (!extensions.includes(path.extname(fileName))) { console.error(chalk.yellow(`Please, choose a file with one of these extensions: ${extensions}.`)); process.exit(1); @@ -38,6 +38,6 @@ export async function extractDocument(fileName: string, exten return document as LangiumDocument; } -export async function extractAstNode(fileName: string, extensions: string[], services: LangiumServices): Promise { +export async function extractAstNode(fileName: string, extensions: string[], services: LangiumCoreServices): Promise { return (await extractDocument(fileName, extensions, services)).parseResult.value as T; } diff --git a/examples/arithmetics/src/language-server/arithmetics-module.ts b/examples/arithmetics/src/language-server/arithmetics-module.ts index 1cbf6e3f0..ee9119d38 100644 --- a/examples/arithmetics/src/language-server/arithmetics-module.ts +++ b/examples/arithmetics/src/language-server/arithmetics-module.ts @@ -4,9 +4,9 @@ * terms of the MIT License, which is available in the project root. ******************************************************************************/ -import type { DefaultSharedModuleContext, LangiumServices, Module, PartialLangiumServices } from 'langium'; +import type { DefaultSharedModuleContext, LangiumCoreServices, Module, PartialLangiumCoreServices } from 'langium'; import { createDefaultModule, createDefaultSharedModule, inject } from 'langium'; -import { type LangiumSharedServicesWithLSP, createSharedLSPModule } from 'langium/lsp'; +import { type LangiumSharedServices, createSharedLSPModule } from 'langium/lsp'; import { ArithmeticsGeneratedModule, ArithmeticsGeneratedSharedModule } from './generated/module.js'; import { ArithmeticsValidator, registerValidationChecks } from './arithmetics-validator.js'; import { ArithmeticsScopeProvider } from './arithmetics-scope-provider.js'; @@ -24,14 +24,14 @@ export type ArithmeticsAddedServices = { * Union of Langium default services and your custom services - use this as constructor parameter * of custom service classes. */ -export type ArithmeticsServices = LangiumServices & ArithmeticsAddedServices +export type ArithmeticsServices = LangiumCoreServices & ArithmeticsAddedServices /** * 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 ArithmeticsModule: Module = { +export const ArithmeticsModule: Module = { references: { ScopeProvider: (services) => new ArithmeticsScopeProvider(services) }, @@ -56,7 +56,7 @@ export const ArithmeticsModule: Module = { +export const ArithmeticsGeneratedSharedModule: Module = { AstReflection: () => new ArithmeticsAstReflection() }; -export const ArithmeticsGeneratedModule: Module = { +export const ArithmeticsGeneratedModule: Module = { Grammar: () => ArithmeticsGrammar(), LanguageMetaData: () => ArithmeticsLanguageMetaData, parser: {} diff --git a/examples/domainmodel/src/cli/cli-util.ts b/examples/domainmodel/src/cli/cli-util.ts index 79e8867eb..060a4b9f4 100644 --- a/examples/domainmodel/src/cli/cli-util.ts +++ b/examples/domainmodel/src/cli/cli-util.ts @@ -4,15 +4,15 @@ * terms of the MIT License, which is available in the project root. ******************************************************************************/ -import type { AstNode, LangiumDocument, LangiumServices } from 'langium'; +import type { AstNode, LangiumDocument, LangiumCoreServices } from 'langium'; import type { WorkspaceFolder } from 'vscode-languageserver'; import * as fs from 'node:fs'; import * as path from 'node:path'; import chalk from 'chalk'; import { URI } from 'langium'; -import type { LangiumServicesWithLSP } from 'langium/lsp'; +import type { LangiumServices } from 'langium/lsp'; -export async function extractDocument(fileName: string, extensions: readonly string[], services: LangiumServices): Promise> { +export async function extractDocument(fileName: string, extensions: readonly string[], services: LangiumCoreServices): Promise> { if (!extensions.includes(path.extname(fileName))) { console.error(chalk.yellow(`Please, choose a file with one of these extensions: ${extensions}.`)); process.exit(1); @@ -44,7 +44,7 @@ export async function extractAstNode(fileName: string, extens return (await extractDocument(fileName, extensions, services)).parseResult.value as T; } -export async function setRootFolder(fileName: string, services: LangiumServicesWithLSP, root?: string): Promise { +export async function setRootFolder(fileName: string, services: LangiumServices, root?: string): Promise { if (!root) { root = path.dirname(fileName); } diff --git a/examples/domainmodel/src/language-server/domain-model-module.ts b/examples/domainmodel/src/language-server/domain-model-module.ts index 0a7bf00dc..d542aa6fa 100644 --- a/examples/domainmodel/src/language-server/domain-model-module.ts +++ b/examples/domainmodel/src/language-server/domain-model-module.ts @@ -4,7 +4,7 @@ * terms of the MIT License, which is available in the project root. ******************************************************************************/ -import type { LangiumServices, Module, PartialLangiumServices, DefaultSharedModuleContext } from 'langium'; +import type { LangiumCoreServices, Module, PartialLangiumCoreServices, DefaultSharedModuleContext } from 'langium'; import { inject, createDefaultSharedModule, createDefaultModule } from 'langium'; import { DomainModelGeneratedModule, DomainModelGeneratedSharedModule } from './generated/module.js'; import { DomainModelValidator, registerValidationChecks } from './domain-model-validator.js'; @@ -12,7 +12,7 @@ import { DomainModelScopeComputation } from './domain-model-scope.js'; import { QualifiedNameProvider } from './domain-model-naming.js'; import { DomainModelFormatter } from './domain-model-formatter.js'; import { DomainModelRenameProvider } from './domain-model-rename-refactoring.js'; -import { createSharedLSPModule, createLSPModule, type LangiumLSPServices, type PartialLangiumLSPServices, type LangiumSharedServicesWithLSP } from 'langium/lsp'; +import { createSharedLSPModule, createLSPModule, type LangiumLSPServices, type PartialLangiumLSPServices, type LangiumSharedServices } from 'langium/lsp'; export type DomainModelAddedServices = { references: { @@ -23,9 +23,9 @@ export type DomainModelAddedServices = { } } -export type DomainModelServices = LangiumServices & DomainModelAddedServices & LangiumLSPServices; +export type DomainModelServices = LangiumCoreServices & DomainModelAddedServices & LangiumLSPServices; -export const DomainModelModule: Module = { +export const DomainModelModule: Module = { references: { ScopeComputation: (services) => new DomainModelScopeComputation(services), QualifiedNameProvider: () => new QualifiedNameProvider() @@ -40,7 +40,7 @@ export const DomainModelModule: Module = { +export const DomainModelGeneratedSharedModule: Module = { AstReflection: () => new DomainModelAstReflection() }; -export const DomainModelGeneratedModule: Module = { +export const DomainModelGeneratedModule: Module = { Grammar: () => DomainModelGrammar(), LanguageMetaData: () => DomainModelLanguageMetaData, parser: { diff --git a/examples/requirements/src/cli/cli-util.ts b/examples/requirements/src/cli/cli-util.ts index ef6c8fb28..5fc57f414 100644 --- a/examples/requirements/src/cli/cli-util.ts +++ b/examples/requirements/src/cli/cli-util.ts @@ -4,7 +4,7 @@ * terms of the MIT License, which is available in the project root. ******************************************************************************/ -import type { LangiumDocument, LangiumServices } from 'langium'; +import type { LangiumDocument, LangiumCoreServices } from 'langium'; import type { RequirementModel, TestModel } from '../language-server/generated/ast.js'; import type { WorkspaceFolder } from 'vscode-languageclient'; import chalk from 'chalk'; @@ -21,7 +21,7 @@ import { isTestModel } from '../language-server/generated/ast.js'; * @returns a tuple with the document indicated by the fileName and a list of * documents from the workspace. */ -export async function extractDocuments(fileName: string, services: LangiumServices): Promise<[LangiumDocument, LangiumDocument[]]> { +export async function extractDocuments(fileName: string, services: LangiumCoreServices): Promise<[LangiumDocument, LangiumDocument[]]> { const extensions = services.LanguageMetaData.fileExtensions; if (!extensions.includes(path.extname(fileName))) { console.error(chalk.yellow(`Please choose a file with one of these extensions: ${extensions}.`)); @@ -66,7 +66,7 @@ export async function extractDocuments(fileName: string, services: LangiumServic * @returns a tuple with the model indicated by the fileName and a list of * test models from the workspace. chr */ -export async function extractRequirementModelWithTestModels(fileName: string, services: LangiumServices): Promise<[RequirementModel, TestModel[]]> { +export async function extractRequirementModelWithTestModels(fileName: string, services: LangiumCoreServices): Promise<[RequirementModel, TestModel[]]> { const [mainDocument, allDocuments] = await extractDocuments(fileName, services); return [ mainDocument.parseResult?.value as RequirementModel, diff --git a/examples/requirements/src/language-server/generated/module.ts b/examples/requirements/src/language-server/generated/module.ts index 8d12c8ada..89ca941bd 100644 --- a/examples/requirements/src/language-server/generated/module.ts +++ b/examples/requirements/src/language-server/generated/module.ts @@ -3,7 +3,7 @@ * DO NOT EDIT MANUALLY! ******************************************************************************/ -import type { LangiumGeneratedServices, LangiumGeneratedSharedServices, LangiumSharedServices, LangiumServices, LanguageMetaData, Module } from 'langium'; +import type { LangiumGeneratedServices, LangiumGeneratedSharedServices, LangiumSharedCoreServices, LangiumCoreServices, LanguageMetaData, Module } from 'langium'; import { RequirementsAndTestsAstReflection } from './ast.js'; import { RequirementsGrammar, TestsGrammar } from './grammar.js'; @@ -19,17 +19,17 @@ export const TestsLanguageMetaData = { caseInsensitive: false } as const satisfies LanguageMetaData; -export const RequirementsAndTestsGeneratedSharedModule: Module = { +export const RequirementsAndTestsGeneratedSharedModule: Module = { AstReflection: () => new RequirementsAndTestsAstReflection() }; -export const RequirementsGeneratedModule: Module = { +export const RequirementsGeneratedModule: Module = { Grammar: () => RequirementsGrammar(), LanguageMetaData: () => RequirementsLanguageMetaData, parser: {} }; -export const TestsGeneratedModule: Module = { +export const TestsGeneratedModule: Module = { Grammar: () => TestsGrammar(), LanguageMetaData: () => TestsLanguageMetaData, parser: {} diff --git a/examples/requirements/src/language-server/requirements-and-tests-lang-module.ts b/examples/requirements/src/language-server/requirements-and-tests-lang-module.ts index c05937c7b..bee9e4c41 100644 --- a/examples/requirements/src/language-server/requirements-and-tests-lang-module.ts +++ b/examples/requirements/src/language-server/requirements-and-tests-lang-module.ts @@ -13,7 +13,7 @@ import { RequirementsLangModule } from './requirements-lang-module.js'; import { registerRequirementsValidationChecks } from './requirements-lang-validator.js'; import { TestsLangModule } from './tests-lang-module.js'; import { registerTestsValidationChecks } from './tests-lang-validator.js'; -import { createSharedLSPModule, type LangiumSharedServicesWithLSP } from 'langium/lsp'; +import { createSharedLSPModule, type LangiumSharedServices } from 'langium/lsp'; /** * Create the full set of services required by Langium. @@ -31,7 +31,7 @@ import { createSharedLSPModule, type LangiumSharedServicesWithLSP } from 'langiu * @returns An object wrapping the shared services and the language-specific services */ export function createRequirementsAndTestsLangServices(context: DefaultSharedModuleContext): { - shared: LangiumSharedServicesWithLSP, + shared: LangiumSharedServices, requirements: RequirementsLangServices, tests: TestsLangServices } { diff --git a/examples/requirements/src/language-server/requirements-lang-module.ts b/examples/requirements/src/language-server/requirements-lang-module.ts index 546fe82d8..035f40386 100644 --- a/examples/requirements/src/language-server/requirements-lang-module.ts +++ b/examples/requirements/src/language-server/requirements-lang-module.ts @@ -4,7 +4,7 @@ * terms of the MIT License, which is available in the project root. ******************************************************************************/ -import type { LangiumServices, Module, PartialLangiumServices } from 'langium'; +import type { LangiumCoreServices, Module, PartialLangiumCoreServices } from 'langium'; import { RequirementsLangValidator } from './requirements-lang-validator.js'; /** @@ -20,14 +20,14 @@ export type RequirementsLangAddedServices = { * Union of Langium default services and your custom services - use this as constructor parameter * of custom service classes. */ -export type RequirementsLangServices = LangiumServices & RequirementsLangAddedServices +export type RequirementsLangServices = LangiumCoreServices & RequirementsLangAddedServices /** * 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 RequirementsLangModule: Module = { +export const RequirementsLangModule: Module = { validation: { RequirementsLangValidator: (services) => new RequirementsLangValidator(services) } diff --git a/examples/requirements/src/language-server/tests-lang-module.ts b/examples/requirements/src/language-server/tests-lang-module.ts index 0cf22ea8c..8cf88e0ad 100644 --- a/examples/requirements/src/language-server/tests-lang-module.ts +++ b/examples/requirements/src/language-server/tests-lang-module.ts @@ -4,7 +4,7 @@ * terms of the MIT License, which is available in the project root. ******************************************************************************/ -import type { LangiumServices, Module, PartialLangiumServices } from 'langium'; +import type { LangiumCoreServices, Module, PartialLangiumCoreServices } from 'langium'; import { TestsLangValidator } from './tests-lang-validator.js'; /** @@ -20,14 +20,14 @@ export type TestsLangAddedServices = { * Union of Langium default services and your custom services - use this as constructor parameter * of custom service classes. */ -export type TestsLangServices = LangiumServices & TestsLangAddedServices +export type TestsLangServices = LangiumCoreServices & TestsLangAddedServices /** * 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 TestsLangModule: Module = { +export const TestsLangModule: Module = { validation: { TestsLangValidator: () => new TestsLangValidator() } diff --git a/examples/statemachine/src/cli/cli-util.ts b/examples/statemachine/src/cli/cli-util.ts index 3c169307f..3fb80321d 100644 --- a/examples/statemachine/src/cli/cli-util.ts +++ b/examples/statemachine/src/cli/cli-util.ts @@ -7,10 +7,10 @@ import * as fs from 'node:fs'; import * as path from 'node:path'; import chalk from 'chalk'; -import type { AstNode, LangiumDocument, LangiumServices } from 'langium'; +import type { AstNode, LangiumDocument, LangiumCoreServices } from 'langium'; import { URI } from 'langium'; -export async function extractDocument(fileName: string, extensions: readonly string[], services: LangiumServices): Promise { +export async function extractDocument(fileName: string, extensions: readonly string[], services: LangiumCoreServices): Promise { if (!extensions.includes(path.extname(fileName))) { console.error(chalk.yellow(`Please, choose a file with one of these extensions: ${extensions}.`)); process.exit(1); @@ -38,7 +38,7 @@ export async function extractDocument(fileName: string, extensions: readonly str return document; } -export async function extractAstNode(fileName: string, extensions: readonly string[], services: LangiumServices): Promise { +export async function extractAstNode(fileName: string, extensions: readonly string[], services: LangiumCoreServices): Promise { return (await extractDocument(fileName, extensions, services)).parseResult?.value as T; } diff --git a/examples/statemachine/src/language-server/generated/module.ts b/examples/statemachine/src/language-server/generated/module.ts index e96d38508..7112a6b1d 100644 --- a/examples/statemachine/src/language-server/generated/module.ts +++ b/examples/statemachine/src/language-server/generated/module.ts @@ -3,7 +3,7 @@ * DO NOT EDIT MANUALLY! ******************************************************************************/ -import type { LangiumGeneratedServices, LangiumGeneratedSharedServices, LangiumSharedServices, LangiumServices, LanguageMetaData, Module } from 'langium'; +import type { LangiumGeneratedServices, LangiumGeneratedSharedServices, LangiumSharedCoreServices, LangiumCoreServices, LanguageMetaData, Module } from 'langium'; import { StatemachineAstReflection } from './ast.js'; import { StatemachineGrammar } from './grammar.js'; @@ -13,11 +13,11 @@ export const StatemachineLanguageMetaData = { caseInsensitive: false } as const satisfies LanguageMetaData; -export const StatemachineGeneratedSharedModule: Module = { +export const StatemachineGeneratedSharedModule: Module = { AstReflection: () => new StatemachineAstReflection() }; -export const StatemachineGeneratedModule: Module = { +export const StatemachineGeneratedModule: Module = { Grammar: () => StatemachineGrammar(), LanguageMetaData: () => StatemachineLanguageMetaData, parser: {} diff --git a/examples/statemachine/src/language-server/statemachine-module.ts b/examples/statemachine/src/language-server/statemachine-module.ts index 77116c38a..3209d9779 100644 --- a/examples/statemachine/src/language-server/statemachine-module.ts +++ b/examples/statemachine/src/language-server/statemachine-module.ts @@ -4,11 +4,11 @@ * terms of the MIT License, which is available in the project root. ******************************************************************************/ -import type { DefaultSharedModuleContext, LangiumServices, Module, PartialLangiumServices } from 'langium'; +import type { DefaultSharedModuleContext, LangiumCoreServices, Module, PartialLangiumCoreServices } from 'langium'; import { createDefaultModule, createDefaultSharedModule, inject } from 'langium'; import { StatemachineGeneratedModule, StatemachineGeneratedSharedModule } from './generated/module.js'; import { registerValidationChecks, StatemachineValidator } from './statemachine-validator.js'; -import { createSharedLSPModule, type LangiumSharedServicesWithLSP } from 'langium/lsp'; +import { createSharedLSPModule, type LangiumSharedServices } from 'langium/lsp'; /** * Declaration of custom services - add your own service classes here. @@ -23,14 +23,14 @@ export type StatemachineAddedServices = { * Union of Langium default services and your custom services - use this as constructor parameter * of custom service classes. */ -export type StatemachineServices = LangiumServices & StatemachineAddedServices +export type StatemachineServices = LangiumCoreServices & StatemachineAddedServices /** * 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 StatemachineModule: Module = { +export const StatemachineModule: Module = { validation: { StatemachineValidator: () => new StatemachineValidator() } @@ -52,7 +52,7 @@ export const StatemachineModule: Module hasCrossReferences(grammar)); const importFrom = config.langiumInternal ? `../../syntax-tree${config.importExtension}` : 'langium'; diff --git a/packages/langium-cli/src/generator/grammar-serializer.ts b/packages/langium-cli/src/generator/grammar-serializer.ts index 5e59e5db9..ea1464c63 100644 --- a/packages/langium-cli/src/generator/grammar-serializer.ts +++ b/packages/langium-cli/src/generator/grammar-serializer.ts @@ -4,13 +4,13 @@ * terms of the MIT License, which is available in the project root. ******************************************************************************/ -import type { Grammar, LangiumServices, Reference } from 'langium'; +import type { Grammar, LangiumCoreServices, Reference } from 'langium'; import { expandToNode, joinToNode, normalizeEOL, toString } from 'langium/generate'; import type { URI } from 'vscode-uri'; import type { LangiumConfig } from '../package.js'; import { generatedHeader } from './util.js'; -export function serializeGrammar(services: LangiumServices, grammars: Grammar[], config: LangiumConfig): string { +export function serializeGrammar(services: LangiumCoreServices, grammars: Grammar[], config: LangiumConfig): string { const node = expandToNode` ${generatedHeader} `.appendNewLine( diff --git a/packages/langium-cli/src/generator/types-generator.ts b/packages/langium-cli/src/generator/types-generator.ts index 45a897b90..94ab28f14 100644 --- a/packages/langium-cli/src/generator/types-generator.ts +++ b/packages/langium-cli/src/generator/types-generator.ts @@ -3,13 +3,13 @@ * 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 { Grammar, LangiumServices } from 'langium'; +import type { Grammar, LangiumCoreServices } from 'langium'; import { joinToNode, toString } from 'langium/generate'; import { collectAst } from 'langium/types'; import { LangiumGrammarGrammar } from 'langium/internal'; import { collectKeywords } from './util.js'; -export function generateTypesFile(services: LangiumServices, grammars: Grammar[]): string { +export function generateTypesFile(services: LangiumCoreServices, grammars: Grammar[]): string { const { unions, interfaces } = collectAst(grammars, services.shared.workspace.LangiumDocuments); const reservedWords = new Set(collectKeywords(LangiumGrammarGrammar())); diff --git a/packages/langium-vscode/src/language-server/grammar-workspace-manager.ts b/packages/langium-vscode/src/language-server/grammar-workspace-manager.ts index b7fdf7c57..ef7261b43 100644 --- a/packages/langium-vscode/src/language-server/grammar-workspace-manager.ts +++ b/packages/langium-vscode/src/language-server/grammar-workspace-manager.ts @@ -5,7 +5,7 @@ ******************************************************************************/ import type { Ignore } from 'ignore'; -import type { LangiumSharedServices, ConfigurationProvider, FileSystemNode } from 'langium'; +import type { LangiumSharedCoreServices, ConfigurationProvider, FileSystemNode } from 'langium'; import type { WorkspaceFolder } from 'vscode-languageserver-protocol'; import ignore from 'ignore'; import { DefaultWorkspaceManager, URI, UriUtils } from 'langium'; @@ -26,7 +26,7 @@ export class LangiumGrammarWorkspaceManager extends DefaultWorkspaceManager { protected readonly configurationProvider: ConfigurationProvider; protected matcher: Ignore | undefined; - constructor(services: LangiumSharedServices) { + constructor(services: LangiumSharedCoreServices) { super(services); this.configurationProvider = services.workspace.ConfigurationProvider; } diff --git a/packages/langium-vscode/src/language-server/main.ts b/packages/langium-vscode/src/language-server/main.ts index 5350b0098..3e6bba6d9 100644 --- a/packages/langium-vscode/src/language-server/main.ts +++ b/packages/langium-vscode/src/language-server/main.ts @@ -4,7 +4,7 @@ * terms of the MIT License, which is available in the project root. ******************************************************************************/ -import type { LangiumSharedServices, Module, PartialLangiumSharedServices } from 'langium'; +import type { LangiumSharedCoreServices, Module, PartialLangiumSharedCoreServices } from 'langium'; import { createLangiumGrammarServices } from 'langium'; import { startLanguageServer } from 'langium/lsp'; import { NodeFileSystem } from 'langium/node'; @@ -14,7 +14,7 @@ import { registerRailroadConnectionHandler } from './railroad-handler.js'; const connection = createConnection(ProposedFeatures.all); -export const LangiumGrammarSharedModule: Module = { +export const LangiumGrammarSharedModule: Module = { workspace: { WorkspaceManager: (services) => new LangiumGrammarWorkspaceManager(services) } diff --git a/packages/langium-vscode/src/language-server/railroad-handler.ts b/packages/langium-vscode/src/language-server/railroad-handler.ts index 9aad24d7d..9e826033e 100644 --- a/packages/langium-vscode/src/language-server/railroad-handler.ts +++ b/packages/langium-vscode/src/language-server/railroad-handler.ts @@ -4,7 +4,7 @@ * terms of the MIT License, which is available in the project root. ******************************************************************************/ -import type { Grammar, LangiumServices } from 'langium'; +import type { Grammar, LangiumCoreServices } from 'langium'; import { DocumentState, GrammarAST, URI } from 'langium'; import { createGrammarDiagramHtml } from 'langium-railroad'; import { expandToString } from 'langium/generate'; @@ -13,7 +13,7 @@ import type { Connection } from 'vscode-languageserver'; import { DiagnosticSeverity } from 'vscode-languageserver'; import { DOCUMENTS_VALIDATED_NOTIFICATION, RAILROAD_DIAGRAM_REQUEST } from './messages.js'; -export function registerRailroadConnectionHandler(connection: Connection, services: LangiumServices): void { +export function registerRailroadConnectionHandler(connection: Connection, services: LangiumCoreServices): void { const documentBuilder = services.shared.workspace.DocumentBuilder; const documents = services.shared.workspace.LangiumDocuments; documentBuilder.onBuildPhase(DocumentState.Validated, documents => { diff --git a/packages/langium/src/default-module.ts b/packages/langium/src/default-module.ts index f126d6060..77334c3f0 100644 --- a/packages/langium/src/default-module.ts +++ b/packages/langium/src/default-module.ts @@ -6,7 +6,7 @@ import type { Connection } from 'vscode-languageserver'; import type { Module } from './dependency-injection.js'; -import type { LangiumDefaultServices, LangiumDefaultSharedServices, LangiumServices, LangiumSharedServices } from './services.js'; +import type { LangiumDefaultServices, LangiumDefaultSharedServices, LangiumCoreServices, LangiumSharedCoreServices } from './services.js'; import type { FileSystemProvider } from './workspace/file-system-provider.js'; import { createGrammarConfig } from './grammar/grammar-config.js'; import { createCompletionParser } from './parser/completion-parser-builder.js'; @@ -39,14 +39,14 @@ import { EmptyConfigurationProvider } from './index.js'; * Context required for creating the default language-specific dependency injection module. */ export interface DefaultModuleContext { - shared: LangiumSharedServices; + shared: LangiumSharedCoreServices; } /** * Create a dependency injection module for the default language-specific services. This is a * set of services that are used by exactly one language. */ -export function createDefaultModule(context: DefaultModuleContext): Module { +export function createDefaultModule(context: DefaultModuleContext): Module { return { documentation: { CommentProvider: (services) => new DefaultCommentProvider(services), @@ -99,14 +99,14 @@ export interface DefaultSharedModuleContext { * When running Langium as part of a vscode language server or a Node.js app, using the `NodeFileSystem` is recommended, * the `EmptyFileSystem` in every other use case. */ - fileSystemProvider: (services: LangiumSharedServices) => FileSystemProvider; + fileSystemProvider: (services: LangiumSharedCoreServices) => FileSystemProvider; } /** * Create a dependency injection module for the default shared services. This is the set of * services that are shared between multiple languages. */ -export function createDefaultSharedModule(context: DefaultSharedModuleContext): Module { +export function createDefaultSharedModule(context: DefaultSharedModuleContext): Module { return { ServiceRegistry: () => new DefaultServiceRegistry(), workspace: { diff --git a/packages/langium/src/documentation/comment-provider.ts b/packages/langium/src/documentation/comment-provider.ts index 63677558f..9fa6d16c0 100644 --- a/packages/langium/src/documentation/comment-provider.ts +++ b/packages/langium/src/documentation/comment-provider.ts @@ -6,7 +6,7 @@ import type { GrammarConfig } from '../grammar/grammar-config.js'; import { isAstNodeWithComment } from '../serializer/json-serializer.js'; -import type { LangiumServices } from '../services.js'; +import type { LangiumCoreServices } from '../services.js'; import type { AstNode } from '../syntax-tree.js'; import { findCommentNode } from '../utils/cst-util.js'; @@ -24,7 +24,7 @@ export interface CommentProvider { export class DefaultCommentProvider implements CommentProvider { protected readonly grammarConfig: () => GrammarConfig; - constructor(services: LangiumServices) { + constructor(services: LangiumCoreServices) { this.grammarConfig = () => services.parser.GrammarConfig; } getComment(node: AstNode): string | undefined { diff --git a/packages/langium/src/documentation/documentation-provider.ts b/packages/langium/src/documentation/documentation-provider.ts index 3c68c3f03..5cb1191e7 100644 --- a/packages/langium/src/documentation/documentation-provider.ts +++ b/packages/langium/src/documentation/documentation-provider.ts @@ -4,7 +4,7 @@ * terms of the MIT License, which is available in the project root. ******************************************************************************/ -import type { LangiumServices } from '../services.js'; +import type { LangiumCoreServices } from '../services.js'; import type { AstNode, AstNodeDescription } from '../syntax-tree.js'; import type { IndexManager } from '../workspace/index-manager.js'; import type { CommentProvider } from './comment-provider.js'; @@ -29,7 +29,7 @@ export class JSDocDocumentationProvider implements DocumentationProvider { protected readonly indexManager: IndexManager; protected readonly commentProvider: CommentProvider; - constructor(services: LangiumServices) { + constructor(services: LangiumCoreServices) { this.indexManager = services.shared.workspace.IndexManager; this.commentProvider = services.documentation.CommentProvider; } diff --git a/packages/langium/src/grammar/generated/module.ts b/packages/langium/src/grammar/generated/module.ts index eb50c4075..0c61fddf5 100644 --- a/packages/langium/src/grammar/generated/module.ts +++ b/packages/langium/src/grammar/generated/module.ts @@ -5,7 +5,7 @@ import type { LanguageMetaData } from '../language-meta-data.js'; import type { Module } from '../../dependency-injection.js'; -import type { LangiumGeneratedServices, LangiumGeneratedSharedServices, LangiumSharedServices, LangiumServices } from '../../services.js'; +import type { LangiumGeneratedServices, LangiumGeneratedSharedServices, LangiumSharedCoreServices, LangiumCoreServices } from '../../services.js'; import type { IParserConfig } from '../../parser/parser-config.js'; import { LangiumGrammarAstReflection } from './ast.js'; import { LangiumGrammarGrammar } from './grammar.js'; @@ -20,11 +20,11 @@ export const LangiumGrammarParserConfig: IParserConfig = { maxLookahead: 3, }; -export const LangiumGrammarGeneratedSharedModule: Module = { +export const LangiumGrammarGeneratedSharedModule: Module = { AstReflection: () => new LangiumGrammarAstReflection() }; -export const LangiumGrammarGeneratedModule: Module = { +export const LangiumGrammarGeneratedModule: Module = { Grammar: () => LangiumGrammarGrammar(), LanguageMetaData: () => LangiumGrammarLanguageMetaData, parser: { diff --git a/packages/langium/src/grammar/grammar-config.ts b/packages/langium/src/grammar/grammar-config.ts index 592c66225..24ceb684e 100644 --- a/packages/langium/src/grammar/grammar-config.ts +++ b/packages/langium/src/grammar/grammar-config.ts @@ -4,7 +4,7 @@ * terms of the MIT License, which is available in the project root. ******************************************************************************/ -import type { LangiumServices } from '../services.js'; +import type { LangiumCoreServices } from '../services.js'; import { DefaultNameRegexp } from '../utils/cst-util.js'; import { isCommentTerminal } from '../utils/grammar-util.js'; import { isMultilineComment } from '../utils/regex-util.js'; @@ -22,7 +22,7 @@ export interface GrammarConfig { nameRegexp: RegExp } -export function createGrammarConfig(services: LangiumServices): GrammarConfig { +export function createGrammarConfig(services: LangiumCoreServices): GrammarConfig { const rules: string[] = []; const grammar = services.Grammar; for (const rule of grammar.rules) { diff --git a/packages/langium/src/grammar/langium-grammar-module.ts b/packages/langium/src/grammar/langium-grammar-module.ts index 14b221c3d..216b4c15e 100644 --- a/packages/langium/src/grammar/langium-grammar-module.ts +++ b/packages/langium/src/grammar/langium-grammar-module.ts @@ -6,7 +6,7 @@ import type { DefaultSharedModuleContext } from '../default-module.js'; import type { Module } from '../dependency-injection.js'; -import type { LangiumSharedServices, PartialLangiumServices, PartialLangiumSharedServices } from '../services.js'; +import type { LangiumSharedCoreServices, PartialLangiumCoreServices, PartialLangiumSharedCoreServices } from '../services.js'; import { LangiumGrammarTypeHierarchyProvider } from './lsp/grammar-type-hierarchy.js'; import type { LangiumGrammarDocument } from './workspace/documents.js'; import type { Grammar } from './generated/ast.js'; @@ -28,7 +28,7 @@ import { LangiumGrammarValidationResourcesCollector } from './validation/validat import { LangiumGrammarTypesValidator, registerTypeValidationChecks } from './validation/types-validator.js'; import { interruptAndCheck } from '../utils/promise-util.js'; import { DocumentState } from '../workspace/documents.js'; -import type { LSPServices, LangiumServicesWithLSP, LangiumSharedServicesWithLSP } from '../lsp/lsp-services.js'; +import type { LSPServices, LangiumServices, LangiumSharedServices } from '../lsp/lsp-services.js'; import { createLSPModule, createSharedLSPModule } from '../lsp/langium-lsp-module.js'; export type LangiumGrammarAddedServices = { @@ -40,9 +40,9 @@ export type LangiumGrammarAddedServices = { } // Grammar services also include LSP services as well -export type LangiumGrammarServices = LangiumServicesWithLSP & LangiumGrammarAddedServices; +export type LangiumGrammarServices = LangiumServices & LangiumGrammarAddedServices; -export const LangiumGrammarModule: Module = { +export const LangiumGrammarModule: Module = { validation: { LangiumGrammarValidator: (services) => new LangiumGrammarValidator(services), ValidationResourcesCollector: (services) => new LangiumGrammarValidationResourcesCollector(services), @@ -67,8 +67,8 @@ export const LangiumGrammarModule: Module): { - shared: LangiumSharedServicesWithLSP, + sharedModule?: Module): { + shared: LangiumSharedServices, grammar: LangiumGrammarServices } { const shared = inject( @@ -92,7 +92,7 @@ export function createLangiumGrammarServices(context: DefaultSharedModuleContext return { shared, grammar }; } -function addTypeCollectionPhase(sharedServices: LangiumSharedServices, grammarServices: LangiumGrammarServices) { +function addTypeCollectionPhase(sharedServices: LangiumSharedCoreServices, grammarServices: LangiumGrammarServices) { const documentBuilder = sharedServices.workspace.DocumentBuilder; documentBuilder.onBuildPhase(DocumentState.IndexedReferences, async (documents, cancelToken) => { for (const document of documents) { diff --git a/packages/langium/src/grammar/lsp/grammar-code-actions.ts b/packages/langium/src/grammar/lsp/grammar-code-actions.ts index 37fcd4c8e..158e54cf1 100644 --- a/packages/langium/src/grammar/lsp/grammar-code-actions.ts +++ b/packages/langium/src/grammar/lsp/grammar-code-actions.ts @@ -9,7 +9,7 @@ import type { CodeActionParams } from 'vscode-languageserver-protocol'; import type { CodeAction, Command, Position, TextEdit } from 'vscode-languageserver-types'; import type { URI } from '../../utils/uri-util.js'; import type { CodeActionProvider } from '../../lsp/code-action.js'; -import type { LangiumServices } from '../../services.js'; +import type { LangiumCoreServices } from '../../services.js'; import type { AstReflection, Reference, ReferenceInfo } from '../../syntax-tree.js'; import type { MaybePromise } from '../../utils/promise-util.js'; import type { LinkingErrorData } from '../../validation/document-validator.js'; @@ -31,7 +31,7 @@ export class LangiumGrammarCodeActionProvider implements CodeActionProvider { protected readonly reflection: AstReflection; protected readonly indexManager: IndexManager; - constructor(services: LangiumServices) { + constructor(services: LangiumCoreServices) { this.reflection = services.shared.AstReflection; this.indexManager = services.shared.workspace.IndexManager; } diff --git a/packages/langium/src/grammar/lsp/grammar-completion-provider.ts b/packages/langium/src/grammar/lsp/grammar-completion-provider.ts index 2158115b4..169130a04 100644 --- a/packages/langium/src/grammar/lsp/grammar-completion-provider.ts +++ b/packages/langium/src/grammar/lsp/grammar-completion-provider.ts @@ -14,13 +14,13 @@ import type { LangiumDocument, LangiumDocuments } from '../../workspace/document import type { AbstractElement } from '../generated/ast.js'; import { isAssignment } from '../generated/ast.js'; import { UriUtils } from '../../utils/uri-util.js'; -import type { LangiumServicesWithLSP } from '../../lsp/lsp-services.js'; +import type { LangiumServices } from '../../lsp/lsp-services.js'; export class LangiumGrammarCompletionProvider extends DefaultCompletionProvider { private readonly documents: () => LangiumDocuments; - constructor(services: LangiumServicesWithLSP) { + constructor(services: LangiumServices) { super(services); this.documents = () => services.shared.workspace.LangiumDocuments; } diff --git a/packages/langium/src/grammar/lsp/grammar-definition.ts b/packages/langium/src/grammar/lsp/grammar-definition.ts index 448f64d47..016ee1c5d 100644 --- a/packages/langium/src/grammar/lsp/grammar-definition.ts +++ b/packages/langium/src/grammar/lsp/grammar-definition.ts @@ -5,7 +5,7 @@ ******************************************************************************/ import type { DefinitionParams } from 'vscode-languageserver'; -import type { LangiumServices } from '../../services.js'; +import type { LangiumCoreServices } from '../../services.js'; import type { AstNode, LeafCstNode, Properties } from '../../syntax-tree.js'; import type { MaybePromise } from '../../utils/promise-util.js'; import type { LangiumDocuments } from '../../workspace/documents.js'; @@ -21,7 +21,7 @@ export class LangiumGrammarDefinitionProvider extends DefaultDefinitionProvider protected documents: LangiumDocuments; - constructor(services: LangiumServices) { + constructor(services: LangiumCoreServices) { super(services); this.documents = services.shared.workspace.LangiumDocuments; } diff --git a/packages/langium/src/grammar/references/grammar-references.ts b/packages/langium/src/grammar/references/grammar-references.ts index e6daeebbf..9c01e6881 100644 --- a/packages/langium/src/grammar/references/grammar-references.ts +++ b/packages/langium/src/grammar/references/grammar-references.ts @@ -4,7 +4,7 @@ * terms of the MIT License, which is available in the project root. ******************************************************************************/ -import type { LangiumServices } from '../../services.js'; +import type { LangiumCoreServices } from '../../services.js'; import type { AstNode, CstNode } from '../../syntax-tree.js'; import type { Stream } from '../../utils/stream.js'; import type { ReferenceDescription } from '../../workspace/ast-descriptions.js'; @@ -24,7 +24,7 @@ import { collectChildrenTypes, collectSuperTypes } from '../type-system/types-ut export class LangiumGrammarReferences extends DefaultReferences { protected readonly documents: LangiumDocuments; - constructor(services: LangiumServices) { + constructor(services: LangiumCoreServices) { super(services); this.documents = services.shared.workspace.LangiumDocuments; } diff --git a/packages/langium/src/grammar/references/grammar-scope.ts b/packages/langium/src/grammar/references/grammar-scope.ts index fd7250788..e82d6b077 100644 --- a/packages/langium/src/grammar/references/grammar-scope.ts +++ b/packages/langium/src/grammar/references/grammar-scope.ts @@ -5,7 +5,7 @@ ******************************************************************************/ import type { Scope } from '../../references/scope.js'; -import type { LangiumServices } from '../../services.js'; +import type { LangiumCoreServices } from '../../services.js'; import type { AstNode, AstNodeDescription, ReferenceInfo } from '../../syntax-tree.js'; import type { Stream } from '../../utils/stream.js'; import type { AstNodeLocator } from '../../workspace/ast-node-locator.js'; @@ -24,7 +24,7 @@ export class LangiumGrammarScopeProvider extends DefaultScopeProvider { protected readonly langiumDocuments: LangiumDocuments; - constructor(services: LangiumServices) { + constructor(services: LangiumCoreServices) { super(services); this.langiumDocuments = services.shared.workspace.LangiumDocuments; } @@ -92,7 +92,7 @@ export class LangiumGrammarScopeProvider extends DefaultScopeProvider { export class LangiumGrammarScopeComputation extends DefaultScopeComputation { protected readonly astNodeLocator: AstNodeLocator; - constructor(services: LangiumServices) { + constructor(services: LangiumCoreServices) { super(services); this.astNodeLocator = services.workspace.AstNodeLocator; } diff --git a/packages/langium/src/lsp/call-hierarchy-provider.ts b/packages/langium/src/lsp/call-hierarchy-provider.ts index fa2664408..b856bb3f9 100644 --- a/packages/langium/src/lsp/call-hierarchy-provider.ts +++ b/packages/langium/src/lsp/call-hierarchy-provider.ts @@ -8,7 +8,7 @@ import type { CallHierarchyIncomingCall, CallHierarchyIncomingCallsParams, CallH import type { GrammarConfig } from '../grammar/grammar-config.js'; import type { NameProvider } from '../references/name-provider.js'; import type { References } from '../references/references.js'; -import type { LangiumServices } from '../services.js'; +import type { LangiumCoreServices } from '../services.js'; import type { AstNode } from '../syntax-tree.js'; import type { Stream } from '../utils/stream.js'; import type { ReferenceDescription } from '../workspace/ast-descriptions.js'; @@ -34,7 +34,7 @@ export abstract class AbstractCallHierarchyProvider implements CallHierarchyProv protected readonly documents: LangiumDocuments; protected readonly references: References; - constructor(services: LangiumServices) { + constructor(services: LangiumCoreServices) { this.grammarConfig = services.parser.GrammarConfig; this.nameProvider = services.references.NameProvider; this.documents = services.shared.workspace.LangiumDocuments; diff --git a/packages/langium/src/lsp/completion/completion-provider.ts b/packages/langium/src/lsp/completion/completion-provider.ts index a486c33ff..da867d33e 100644 --- a/packages/langium/src/lsp/completion/completion-provider.ts +++ b/packages/langium/src/lsp/completion/completion-provider.ts @@ -26,7 +26,7 @@ import { findDeclarationNodeAtOffset, findLeafNodeBeforeOffset } from '../../uti import { getEntryRule } from '../../utils/grammar-util.js'; import { stream } from '../../utils/stream.js'; import { findFirstFeatures, findNextFeatures } from './follow-element-computation.js'; -import type { LangiumServicesWithLSP } from '../lsp-services.js'; +import type { LangiumServices } from '../lsp-services.js'; export type CompletionAcceptor = (context: CompletionContext, value: CompletionValueItem) => void @@ -130,7 +130,7 @@ export class DefaultCompletionProvider implements CompletionProvider { protected readonly grammarConfig: GrammarConfig; protected readonly astReflection: AstReflection; - constructor(services: LangiumServicesWithLSP) { + constructor(services: LangiumServices) { this.scopeProvider = services.references.ScopeProvider; this.grammar = services.Grammar; this.completionParser = services.parser.CompletionParser; diff --git a/packages/langium/src/lsp/definition-provider.ts b/packages/langium/src/lsp/definition-provider.ts index d91bf6d51..09d5b1235 100644 --- a/packages/langium/src/lsp/definition-provider.ts +++ b/packages/langium/src/lsp/definition-provider.ts @@ -8,7 +8,7 @@ import type { CancellationToken, DefinitionParams } from 'vscode-languageserver' import type { GrammarConfig } from '../grammar/grammar-config.js'; import type { NameProvider } from '../references/name-provider.js'; import type { References } from '../references/references.js'; -import type { LangiumServices } from '../services.js'; +import type { LangiumCoreServices } from '../services.js'; import type { CstNode } from '../syntax-tree.js'; import type { MaybePromise } from '../utils/promise-util.js'; import type { LangiumDocument } from '../workspace/documents.js'; @@ -41,7 +41,7 @@ export class DefaultDefinitionProvider implements DefinitionProvider { protected readonly references: References; protected readonly grammarConfig: GrammarConfig; - constructor(services: LangiumServices) { + constructor(services: LangiumCoreServices) { this.nameProvider = services.references.NameProvider; this.references = services.references.References; this.grammarConfig = services.parser.GrammarConfig; diff --git a/packages/langium/src/lsp/document-highlight-provider.ts b/packages/langium/src/lsp/document-highlight-provider.ts index 62129e652..14c41dc97 100644 --- a/packages/langium/src/lsp/document-highlight-provider.ts +++ b/packages/langium/src/lsp/document-highlight-provider.ts @@ -8,7 +8,7 @@ import type { CancellationToken, DocumentHighlightParams } from 'vscode-language import type { GrammarConfig } from '../grammar/grammar-config.js'; import type { NameProvider } from '../references/name-provider.js'; import type { FindReferencesOptions, References } from '../references/references.js'; -import type { LangiumServices } from '../services.js'; +import type { LangiumCoreServices } from '../services.js'; import type { MaybePromise } from '../utils/promise-util.js'; import type { ReferenceDescription } from '../workspace/ast-descriptions.js'; import type { LangiumDocument } from '../workspace/documents.js'; @@ -35,7 +35,7 @@ export class DefaultDocumentHighlightProvider implements DocumentHighlightProvid protected readonly nameProvider: NameProvider; protected readonly grammarConfig: GrammarConfig; - constructor(services: LangiumServices) { + constructor(services: LangiumCoreServices) { this.references = services.references.References; this.nameProvider = services.references.NameProvider; this.grammarConfig = services.parser.GrammarConfig; diff --git a/packages/langium/src/lsp/document-symbol-provider.ts b/packages/langium/src/lsp/document-symbol-provider.ts index 658ec5c92..5f3222f6d 100644 --- a/packages/langium/src/lsp/document-symbol-provider.ts +++ b/packages/langium/src/lsp/document-symbol-provider.ts @@ -11,7 +11,7 @@ import { streamContents } from '../utils/ast-util.js'; import type { MaybePromise } from '../utils/promise-util.js'; import type { LangiumDocument } from '../workspace/documents.js'; import type { NodeKindProvider } from './node-kind-provider.js'; -import type { LangiumServicesWithLSP } from './lsp-services.js'; +import type { LangiumServices } from './lsp-services.js'; /** * Language-specific service for handling document symbols requests. @@ -31,7 +31,7 @@ export class DefaultDocumentSymbolProvider implements DocumentSymbolProvider { protected readonly nameProvider: NameProvider; protected readonly nodeKindProvider: NodeKindProvider; - constructor(services: LangiumServicesWithLSP) { + constructor(services: LangiumServices) { this.nameProvider = services.references.NameProvider; this.nodeKindProvider = services.shared.lsp.NodeKindProvider; } diff --git a/packages/langium/src/lsp/folding-range-provider.ts b/packages/langium/src/lsp/folding-range-provider.ts index 726805522..32adaeca0 100644 --- a/packages/langium/src/lsp/folding-range-provider.ts +++ b/packages/langium/src/lsp/folding-range-provider.ts @@ -5,7 +5,7 @@ ******************************************************************************/ import type { CancellationToken, FoldingRangeParams } from 'vscode-languageserver'; -import type { LangiumServices } from '../services.js'; +import type { LangiumCoreServices } from '../services.js'; import type { AstNode, CstNode } from '../syntax-tree.js'; import type { MaybePromise } from '../utils/promise-util.js'; import type { LangiumDocument } from '../workspace/documents.js'; @@ -32,7 +32,7 @@ export class DefaultFoldingRangeProvider implements FoldingRangeProvider { protected readonly commentNames: string[]; - constructor(services: LangiumServices) { + constructor(services: LangiumCoreServices) { this.commentNames = services.parser.GrammarConfig.multilineCommentRules; } diff --git a/packages/langium/src/lsp/grammar-util.ts b/packages/langium/src/lsp/grammar-util.ts index f4775e6fd..b311fbea4 100644 --- a/packages/langium/src/lsp/grammar-util.ts +++ b/packages/langium/src/lsp/grammar-util.ts @@ -8,7 +8,7 @@ import type { Module } from '../dependency-injection.js'; import type { LangiumGrammarServices } from '../grammar/langium-grammar-module.js'; import type { LanguageMetaData } from '../grammar/language-meta-data.js'; import type { IParserConfig } from '../parser/parser-config.js'; -import type { LangiumGeneratedServices, LangiumGeneratedSharedServices, LangiumServices, LangiumSharedServices, PartialLangiumServices, PartialLangiumSharedServices } from '../services.js'; +import type { LangiumGeneratedServices, LangiumGeneratedSharedServices, LangiumCoreServices, LangiumSharedCoreServices, PartialLangiumCoreServices, PartialLangiumSharedCoreServices } from '../services.js'; import { createDefaultModule, createDefaultSharedModule } from '../default-module.js'; import { inject } from '../dependency-injection.js'; import { interpretAstReflection } from '../grammar/ast-reflection-interpreter.js'; @@ -18,7 +18,7 @@ import { getDocument } from '../utils/ast-util.js'; import { EmptyFileSystem } from '../workspace/file-system-provider.js'; import { URI } from '../utils/uri-util.js'; import { createLSPModule, createSharedLSPModule } from './langium-lsp-module.js'; -import type { LangiumServicesWithLSP, PartialLangiumLSPServices, PartialLangiumSharedLSPServices } from './lsp-services.js'; +import type { LangiumServices, PartialLangiumLSPServices, PartialLangiumSharedLSPServices } from './lsp-services.js'; /** * Create an instance of the language services for the given grammar (with LSP support). This function is very @@ -29,9 +29,9 @@ export async function createServicesForGrammarWithLSP(config: { grammarServices?: LangiumGrammarServices, parserConfig?: IParserConfig, languageMetaData?: LanguageMetaData, - module?: Module - sharedModule?: Module -}): Promise { + module?: Module + sharedModule?: Module +}): Promise { // TODO @montymxb: For the reviewer. This is a duplicate of 'createServicesForGrammar' // It would be nice to generalize this function to support both LSP and non-LSP services, but the solution here, so far, is a dupe. // Feel free to suggest a better solution (we should remove this pre-merge) @@ -53,10 +53,10 @@ export async function createServicesForGrammarWithLSP(config: { fileExtensions: [`.${grammarNode.name?.toLowerCase() ?? 'unknown'}`], languageId: grammarNode.name ?? 'UNKNOWN' }; - const generatedSharedModule: Module = { + const generatedSharedModule: Module = { AstReflection: () => interpretAstReflection(grammarNode), }; - const generatedModule: Module = { + const generatedModule: Module = { Grammar: () => grammarNode, LanguageMetaData: () => languageMetaData, parser: { diff --git a/packages/langium/src/lsp/hover-provider.ts b/packages/langium/src/lsp/hover-provider.ts index 8a4bfb38e..d49c9545f 100644 --- a/packages/langium/src/lsp/hover-provider.ts +++ b/packages/langium/src/lsp/hover-provider.ts @@ -7,7 +7,7 @@ import type { CancellationToken, Hover, HoverParams } from 'vscode-languageserver'; import type { GrammarConfig } from '../grammar/grammar-config.js'; import type { References } from '../references/references.js'; -import type { LangiumServices } from '../services.js'; +import type { LangiumCoreServices } from '../services.js'; import type { AstNode } from '../syntax-tree.js'; import type { MaybePromise } from '../utils/promise-util.js'; import type { LangiumDocument } from '../workspace/documents.js'; @@ -32,7 +32,7 @@ export abstract class AstNodeHoverProvider implements HoverProvider { protected readonly references: References; protected readonly grammarConfig: GrammarConfig; - constructor(services: LangiumServices) { + constructor(services: LangiumCoreServices) { this.references = services.references.References; this.grammarConfig = services.parser.GrammarConfig; } @@ -60,7 +60,7 @@ export class MultilineCommentHoverProvider extends AstNodeHoverProvider { protected readonly documentationProvider: DocumentationProvider; - constructor(services: LangiumServices) { + constructor(services: LangiumCoreServices) { super(services); this.documentationProvider = services.documentation.DocumentationProvider; } diff --git a/packages/langium/src/lsp/implementation-provider.ts b/packages/langium/src/lsp/implementation-provider.ts index ec085fa18..9beec1580 100644 --- a/packages/langium/src/lsp/implementation-provider.ts +++ b/packages/langium/src/lsp/implementation-provider.ts @@ -7,7 +7,7 @@ import type { ImplementationParams, LocationLink } from 'vscode-languageserver'; import type { GrammarConfig } from '../grammar/grammar-config.js'; import type { References } from '../references/references.js'; -import type { LangiumServices } from '../services.js'; +import type { LangiumCoreServices } from '../services.js'; import type { AstNode } from '../syntax-tree.js'; import type { MaybePromise } from '../utils/promise-util.js'; import type { LangiumDocument } from '../workspace/documents.js'; @@ -28,7 +28,7 @@ export abstract class AbstractGoToImplementationProvider implements Implementati protected readonly references: References; protected readonly grammarConfig: GrammarConfig; - constructor(services: LangiumServices) { + constructor(services: LangiumCoreServices) { this.references = services.references.References; this.grammarConfig = services.parser.GrammarConfig; } diff --git a/packages/langium/src/lsp/langium-lsp-module.ts b/packages/langium/src/lsp/langium-lsp-module.ts index 596733e7b..d785377cd 100644 --- a/packages/langium/src/lsp/langium-lsp-module.ts +++ b/packages/langium/src/lsp/langium-lsp-module.ts @@ -12,7 +12,7 @@ import { DefaultDefinitionProvider } from './definition-provider.js'; import { MultilineCommentHoverProvider } from './hover-provider.js'; import { DefaultReferencesProvider } from './references-provider.js'; import { DefaultRenameProvider } from './rename-provider.js'; -import type { LSPServiceRegistry, LangiumServicesWithLSP, LangiumLSPServices, LangiumSharedLSPServices, PartialLangiumSharedLSPServices, LangiumSharedServicesWithLSP } from './lsp-services.js'; +import type { LSPServiceRegistry, LangiumServices, LangiumLSPServices, LangiumSharedLSPServices, PartialLangiumSharedLSPServices, LangiumSharedServices } from './lsp-services.js'; import { inject, type Module } from '../dependency-injection.js'; import { TextDocuments } from 'vscode-languageserver'; import { createDefaultModule, createDefaultSharedModule, type DefaultSharedModuleContext } from '../default-module.js'; @@ -21,7 +21,7 @@ import { DefaultWorkspaceSymbolProvider } from './workspace-symbol-provider.js'; import { DefaultNodeKindProvider } from './node-kind-provider.js'; import { DefaultFuzzyMatcher } from './fuzzy-matcher.js'; import { TextDocument } from 'vscode-languageserver-textdocument'; -import type { LangiumSharedServices, PartialLangiumSharedServices } from '../services.js'; +import type { LangiumSharedCoreServices, PartialLangiumSharedCoreServices } from '../services.js'; import { LangiumGrammarModule, type LangiumGrammarServices } from '../grammar/langium-grammar-module.js'; import { LangiumGrammarGeneratedModule, LangiumGrammarGeneratedSharedModule } from '../grammar/generated/module.js'; import { registerValidationChecks } from '../grammar/internal-grammar-util.js'; @@ -42,7 +42,7 @@ export interface LSPModuleContext { * Create a dependency injection module for the default LSP services. This is a * set of services that are used by exactly one language. */ -export function createLSPModule(context: LSPModuleContext): Module { +export function createLSPModule(context: LSPModuleContext): Module { return { lsp: { CompletionProvider: (services) => new DefaultCompletionProvider(services), @@ -62,7 +62,7 @@ export function createLSPModule(context: LSPModuleContext): Module { +export function createSharedLSPModule(context: DefaultSharedModuleContext): Module { return { // use the regular registry as an LSP registry, assuming the registry itself is opaque ServiceRegistry: () => (new DefaultServiceRegistry()) as LSPServiceRegistry, @@ -90,8 +90,8 @@ export function createSharedLSPModule(context: DefaultSharedModuleContext): Modu * @returns Shared services enriched with LSP services + Grammar services, per usual */ export function createLangiumGrammarServicesWithLSP(context: DefaultSharedModuleContext, - sharedModule?: Module): { - shared: LangiumSharedServicesWithLSP, + sharedModule?: Module): { + shared: LangiumSharedServices, grammar: LangiumGrammarServices } { const shared = inject( diff --git a/packages/langium/src/lsp/language-server.ts b/packages/langium/src/lsp/language-server.ts index 5d1059a0f..9f635857e 100644 --- a/packages/langium/src/lsp/language-server.ts +++ b/packages/langium/src/lsp/language-server.ts @@ -37,7 +37,7 @@ import { mergeCompletionProviderOptions } from './completion/completion-provider import { DefaultSemanticTokenOptions } from './semantic-token-provider.js'; import { mergeSignatureHelpOptions } from './signature-help-provider.js'; import { URI } from '../utils/uri-util.js'; -import type { LangiumServicesWithLSP, LangiumSharedServicesWithLSP } from './lsp-services.js'; +import type { LangiumServices, LangiumSharedServices } from './lsp-services.js'; export interface LanguageServer { initialize(params: InitializeParams): Promise @@ -51,9 +51,9 @@ export class DefaultLanguageServer implements LanguageServer { protected onInitializeEmitter = new Emitter(); protected onInitializedEmitter = new Emitter(); - protected readonly services: LangiumSharedServicesWithLSP; + protected readonly services: LangiumSharedServices; - constructor(services: LangiumSharedServicesWithLSP) { + constructor(services: LangiumSharedServices) { this.services = services; } @@ -81,13 +81,13 @@ export class DefaultLanguageServer implements LanguageServer { this.services.ServiceRegistry.all.forEach(language => eagerLoad(language)); } - protected hasService(callback: (language: LangiumServicesWithLSP) => object | undefined): boolean { - const allServices: readonly LangiumServicesWithLSP[] = this.services.ServiceRegistry.all; + protected hasService(callback: (language: LangiumServices) => object | undefined): boolean { + const allServices: readonly LangiumServices[] = this.services.ServiceRegistry.all; return allServices.some(services => callback(services) !== undefined); } protected buildInitializeResult(_params: InitializeParams): InitializeResult { - const allServices: readonly LangiumServicesWithLSP[] = this.services.ServiceRegistry.all; + const allServices: readonly LangiumServices[] = this.services.ServiceRegistry.all; const hasFormattingService = this.hasService(e => e.lsp.Formatter); const formattingOnTypeOptions = allServices.map(e => e.lsp.Formatter?.formatOnTypeOptions).find(e => Boolean(e)); const hasCodeActionProvider = this.hasService(e => e.lsp.CodeActionProvider); @@ -175,7 +175,7 @@ export class DefaultLanguageServer implements LanguageServer { } } -export function startLanguageServer(services: LangiumSharedServicesWithLSP): void { +export function startLanguageServer(services: LangiumSharedServices): void { const connection = services.lsp.Connection; if (!connection) { throw new Error('Starting a language server requires the languageServer.Connection service to be set.'); @@ -222,7 +222,7 @@ export function startLanguageServer(services: LangiumSharedServicesWithLSP): voi connection.listen(); } -export function addDocumentsHandler(connection: Connection, services: LangiumSharedServicesWithLSP): void { +export function addDocumentsHandler(connection: Connection, services: LangiumSharedServices): void { const documentBuilder = services.workspace.DocumentBuilder; const mutex = services.workspace.MutexLock; @@ -249,7 +249,7 @@ export function addDocumentsHandler(connection: Connection, services: LangiumSha }); } -export function addDiagnosticsHandler(connection: Connection, services: LangiumSharedServicesWithLSP): void { +export function addDiagnosticsHandler(connection: Connection, services: LangiumSharedServices): void { const documentBuilder = services.workspace.DocumentBuilder; documentBuilder.onBuildPhase(DocumentState.Validated, async (documents, cancelToken) => { for (const document of documents) { @@ -266,7 +266,7 @@ export function addDiagnosticsHandler(connection: Connection, services: LangiumS }); } -export function addCompletionHandler(connection: Connection, services: LangiumSharedServicesWithLSP): void { +export function addCompletionHandler(connection: Connection, services: LangiumSharedServices): void { connection.onCompletion(createRequestHandler( (services, document, params, cancelToken) => { return services.lsp.CompletionProvider?.getCompletion(document, params, cancelToken); @@ -275,77 +275,77 @@ export function addCompletionHandler(connection: Connection, services: LangiumSh )); } -export function addFindReferencesHandler(connection: Connection, services: LangiumSharedServicesWithLSP): void { +export function addFindReferencesHandler(connection: Connection, services: LangiumSharedServices): void { connection.onReferences(createRequestHandler( (services, document, params, cancelToken) => services.lsp.ReferencesProvider?.findReferences(document, params, cancelToken), services )); } -export function addCodeActionHandler(connection: Connection, services: LangiumSharedServicesWithLSP): void { +export function addCodeActionHandler(connection: Connection, services: LangiumSharedServices): void { connection.onCodeAction(createRequestHandler( (services, document, params, cancelToken) => services.lsp.CodeActionProvider?.getCodeActions(document, params, cancelToken), services )); } -export function addDocumentSymbolHandler(connection: Connection, services: LangiumSharedServicesWithLSP): void { +export function addDocumentSymbolHandler(connection: Connection, services: LangiumSharedServices): void { connection.onDocumentSymbol(createRequestHandler( (services, document, params, cancelToken) => services.lsp.DocumentSymbolProvider?.getSymbols(document, params, cancelToken), services )); } -export function addGotoDefinitionHandler(connection: Connection, services: LangiumSharedServicesWithLSP): void { +export function addGotoDefinitionHandler(connection: Connection, services: LangiumSharedServices): void { connection.onDefinition(createRequestHandler( (services, document, params, cancelToken) => services.lsp.DefinitionProvider?.getDefinition(document, params, cancelToken), services )); } -export function addGoToTypeDefinitionHandler(connection: Connection, services: LangiumSharedServicesWithLSP): void { +export function addGoToTypeDefinitionHandler(connection: Connection, services: LangiumSharedServices): void { connection.onTypeDefinition(createRequestHandler( (services, document, params, cancelToken) => services.lsp.TypeProvider?.getTypeDefinition(document, params, cancelToken), services )); } -export function addGoToImplementationHandler(connection: Connection, services: LangiumSharedServicesWithLSP) { +export function addGoToImplementationHandler(connection: Connection, services: LangiumSharedServices) { connection.onImplementation(createRequestHandler( (services, document, params, cancelToken) => services.lsp.ImplementationProvider?.getImplementation(document, params, cancelToken), services )); } -export function addGoToDeclarationHandler(connection: Connection, services: LangiumSharedServicesWithLSP) { +export function addGoToDeclarationHandler(connection: Connection, services: LangiumSharedServices) { connection.onDeclaration(createRequestHandler( (services, document, params, cancelToken) => services.lsp.DeclarationProvider?.getDeclaration(document, params, cancelToken), services )); } -export function addDocumentHighlightsHandler(connection: Connection, services: LangiumSharedServicesWithLSP): void { +export function addDocumentHighlightsHandler(connection: Connection, services: LangiumSharedServices): void { connection.onDocumentHighlight(createRequestHandler( (services, document, params, cancelToken) => services.lsp.DocumentHighlightProvider?.getDocumentHighlight(document, params, cancelToken), services )); } -export function addHoverHandler(connection: Connection, services: LangiumSharedServicesWithLSP): void { +export function addHoverHandler(connection: Connection, services: LangiumSharedServices): void { connection.onHover(createRequestHandler( (services, document, params, cancelToken) => services.lsp.HoverProvider?.getHoverContent(document, params, cancelToken), services )); } -export function addFoldingRangeHandler(connection: Connection, services: LangiumSharedServicesWithLSP): void { +export function addFoldingRangeHandler(connection: Connection, services: LangiumSharedServices): void { connection.onFoldingRanges(createRequestHandler( (services, document, params, cancelToken) => services.lsp.FoldingRangeProvider?.getFoldingRanges(document, params, cancelToken), services )); } -export function addFormattingHandler(connection: Connection, services: LangiumSharedServicesWithLSP): void { +export function addFormattingHandler(connection: Connection, services: LangiumSharedServices): void { connection.onDocumentFormatting(createRequestHandler( (services, document, params, cancelToken) => services.lsp.Formatter?.formatDocument(document, params, cancelToken), services @@ -360,7 +360,7 @@ export function addFormattingHandler(connection: Connection, services: LangiumSh )); } -export function addRenameHandler(connection: Connection, services: LangiumSharedServicesWithLSP): void { +export function addRenameHandler(connection: Connection, services: LangiumSharedServices): void { connection.onRenameRequest(createRequestHandler( (services, document, params, cancelToken) => services.lsp.RenameProvider?.rename(document, params, cancelToken), services @@ -371,14 +371,14 @@ export function addRenameHandler(connection: Connection, services: LangiumShared )); } -export function addInlayHintHandler(connection: Connection, services: LangiumSharedServicesWithLSP): void { +export function addInlayHintHandler(connection: Connection, services: LangiumSharedServices): void { connection.languages.inlayHint.on(createServerRequestHandler( (services, document, params, cancelToken) => services.lsp.InlayHintProvider?.getInlayHints(document, params, cancelToken), services )); } -export function addSemanticTokenHandler(connection: Connection, services: LangiumSharedServicesWithLSP): void { +export function addSemanticTokenHandler(connection: Connection, services: LangiumSharedServices): void { // If no semantic token provider is registered that's fine. Just return an empty result const emptyResult: SemanticTokens = { data: [] }; connection.languages.semanticTokens.on(createServerRequestHandler( @@ -409,7 +409,7 @@ export function addSemanticTokenHandler(connection: Connection, services: Langiu services )); } -export function addConfigurationChangeHandler(connection: Connection, services: LangiumSharedServicesWithLSP): void { +export function addConfigurationChangeHandler(connection: Connection, services: LangiumSharedServices): void { connection.onDidChangeConfiguration(change => { if (change.settings) { services.workspace.ConfigurationProvider.updateConfiguration(change); @@ -417,7 +417,7 @@ export function addConfigurationChangeHandler(connection: Connection, services: }); } -export function addExecuteCommandHandler(connection: Connection, services: LangiumSharedServicesWithLSP): void { +export function addExecuteCommandHandler(connection: Connection, services: LangiumSharedServices): void { const commandHandler = services.lsp.ExecuteCommandHandler; if (commandHandler) { connection.onExecuteCommand(async (params, token) => { @@ -430,28 +430,28 @@ export function addExecuteCommandHandler(connection: Connection, services: Langi } } -export function addDocumentLinkHandler(connection: Connection, services: LangiumSharedServicesWithLSP): void { +export function addDocumentLinkHandler(connection: Connection, services: LangiumSharedServices): void { connection.onDocumentLinks(createServerRequestHandler( (services, document, params, cancelToken) => services.lsp.DocumentLinkProvider?.getDocumentLinks(document, params, cancelToken), services )); } -export function addSignatureHelpHandler(connection: Connection, services: LangiumSharedServicesWithLSP): void { +export function addSignatureHelpHandler(connection: Connection, services: LangiumSharedServices): void { connection.onSignatureHelp(createServerRequestHandler( (services, document, params, cancelToken) => services.lsp.SignatureHelp?.provideSignatureHelp(document, params, cancelToken), services )); } -export function addCodeLensHandler(connection: Connection, services: LangiumSharedServicesWithLSP): void { +export function addCodeLensHandler(connection: Connection, services: LangiumSharedServices): void { connection.onCodeLens(createServerRequestHandler( (services, document, params, cancelToken) => services.lsp.CodeLensProvider?.provideCodeLens(document, params, cancelToken), services )); } -export function addWorkspaceSymbolHandler(connection: Connection, services: LangiumSharedServicesWithLSP): void { +export function addWorkspaceSymbolHandler(connection: Connection, services: LangiumSharedServices): void { const workspaceSymbolProvider = services.lsp.WorkspaceSymbolProvider; if (workspaceSymbolProvider) { connection.onWorkspaceSymbol(async (params, token) => { @@ -474,7 +474,7 @@ export function addWorkspaceSymbolHandler(connection: Connection, services: Lang } } -export function addCallHierarchyHandler(connection: Connection, services: LangiumSharedServicesWithLSP): void { +export function addCallHierarchyHandler(connection: Connection, services: LangiumSharedServices): void { connection.languages.callHierarchy.onPrepare(createServerRequestHandler( (services, document, params, cancelToken) => { if (services.lsp.CallHierarchyProvider) { @@ -507,8 +507,8 @@ export function addCallHierarchyHandler(connection: Connection, services: Langiu } export function createCallHierarchyRequestHandler

( - serviceCall: (services: LangiumServicesWithLSP, params: P, cancelToken: CancellationToken) => HandlerResult, - sharedServices: LangiumSharedServicesWithLSP + serviceCall: (services: LangiumServices, params: P, cancelToken: CancellationToken) => HandlerResult, + sharedServices: LangiumSharedServices ): ServerRequestHandler { const serviceRegistry = sharedServices.ServiceRegistry; return async (params: P, cancelToken: CancellationToken) => { @@ -520,16 +520,16 @@ export function createCallHierarchyRequestHandler

(err); } }; } -export function addTypeHierarchyHandler(connection: Connection, sharedServices: LangiumSharedServicesWithLSP): void { +export function addTypeHierarchyHandler(connection: Connection, sharedServices: LangiumSharedServices): void { // Don't register type hierarchy handlers if no type hierarchy provider is registered - const allServices: readonly LangiumServicesWithLSP[] = sharedServices.ServiceRegistry.all; + const allServices: readonly LangiumServices[] = sharedServices.ServiceRegistry.all; if (!allServices.some(services => services.lsp.TypeHierarchyProvider)) { return; } @@ -554,13 +554,13 @@ export function addTypeHierarchyHandler(connection: Connection, sharedServices: } export function createTypeHierarchyRequestHandler

( - serviceCall: (services: LangiumServicesWithLSP, params: P, cancelToken: CancellationToken) => HandlerResult, - sharedServices: LangiumSharedServicesWithLSP, + serviceCall: (services: LangiumServices, params: P, cancelToken: CancellationToken) => HandlerResult, + sharedServices: LangiumSharedServices, ): ServerRequestHandler { const serviceRegistry = sharedServices.ServiceRegistry; return async (params: P, cancelToken: CancellationToken) => { const uri = URI.parse(params.item.uri); - const language = serviceRegistry.getServices(uri) as LangiumServicesWithLSP; + const language = serviceRegistry.getServices(uri) as LangiumServices; if (!language) { const message = `Could not find service instance for uri: '${uri.toString()}'`; console.error(message); @@ -575,8 +575,8 @@ export function createTypeHierarchyRequestHandler

( - serviceCall: (services: LangiumServicesWithLSP, document: LangiumDocument, params: P, cancelToken: CancellationToken) => HandlerResult, - sharedServices: LangiumSharedServicesWithLSP + serviceCall: (services: LangiumServices, document: LangiumDocument, params: P, cancelToken: CancellationToken) => HandlerResult, + sharedServices: LangiumSharedServices ): ServerRequestHandler { const documents = sharedServices.workspace.LangiumDocuments; const serviceRegistry = sharedServices.ServiceRegistry; @@ -592,7 +592,7 @@ export function createServerRequestHandler

(err); } @@ -600,8 +600,8 @@ export function createServerRequestHandler

( - serviceCall: (services: LangiumServicesWithLSP, document: LangiumDocument, params: P, cancelToken: CancellationToken) => HandlerResult, - sharedServices: LangiumSharedServicesWithLSP + serviceCall: (services: LangiumServices, document: LangiumDocument, params: P, cancelToken: CancellationToken) => HandlerResult, + sharedServices: LangiumSharedServices ): RequestHandler { const documents = sharedServices.workspace.LangiumDocuments; const serviceRegistry = sharedServices.ServiceRegistry; @@ -617,7 +617,7 @@ export function createRequestHandler

(err); } diff --git a/packages/langium/src/lsp/lsp-services.ts b/packages/langium/src/lsp/lsp-services.ts index d1cbc645e..72290cda0 100644 --- a/packages/langium/src/lsp/lsp-services.ts +++ b/packages/langium/src/lsp/lsp-services.ts @@ -32,7 +32,7 @@ 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, LangiumServices, LangiumSharedServices } from '../services.js'; +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'; @@ -41,12 +41,12 @@ import type { WorkspaceManager } from './../workspace/workspace-manager.js'; /** * Combined Default + LSP services of Langium */ -export type LangiumServicesWithLSP = LangiumServices & LangiumLSPServices; +export type LangiumServices = LangiumCoreServices & LangiumLSPServices; /** * Combined Default + LSP shared services of Langium */ -export type LangiumSharedServicesWithLSP = LangiumSharedServices & LangiumSharedLSPServices; +export type LangiumSharedServices = LangiumSharedCoreServices & LangiumSharedLSPServices; export type LSPServices = { lsp: { @@ -90,18 +90,18 @@ export interface LSPServiceRegistry { /** * Register a language via its injected services. */ - register(language: LangiumServicesWithLSP): void; + 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): (LangiumServicesWithLSP); + getServices(uri: URI): (LangiumServices); /** * The full set of registered language services. */ - readonly all: readonly LangiumServicesWithLSP[]; + readonly all: readonly LangiumServices[]; } /** diff --git a/packages/langium/src/lsp/references-provider.ts b/packages/langium/src/lsp/references-provider.ts index e91d405bb..a2de7b236 100644 --- a/packages/langium/src/lsp/references-provider.ts +++ b/packages/langium/src/lsp/references-provider.ts @@ -8,7 +8,7 @@ import type { CancellationToken, ReferenceParams } from 'vscode-languageserver'; import type { NameProvider } from '../references/name-provider.js'; import type { References } from '../references/references.js'; import type { LeafCstNode } from '../syntax-tree.js'; -import type { LangiumServices } from '../services.js'; +import type { LangiumCoreServices } from '../services.js'; import type { MaybePromise } from '../utils/promise-util.js'; import type { LangiumDocument } from '../workspace/documents.js'; import type { GrammarConfig } from '../grammar/grammar-config.js'; @@ -33,7 +33,7 @@ export class DefaultReferencesProvider implements ReferencesProvider { protected readonly references: References; protected readonly grammarConfig: GrammarConfig; - constructor(services: LangiumServices) { + constructor(services: LangiumCoreServices) { this.nameProvider = services.references.NameProvider; this.references = services.references.References; this.grammarConfig = services.parser.GrammarConfig; diff --git a/packages/langium/src/lsp/rename-provider.ts b/packages/langium/src/lsp/rename-provider.ts index 255aa87ba..04de948e3 100644 --- a/packages/langium/src/lsp/rename-provider.ts +++ b/packages/langium/src/lsp/rename-provider.ts @@ -8,7 +8,7 @@ import type { CancellationToken, Position, Range, RenameParams, TextDocumentPosi import type { GrammarConfig } from '../grammar/grammar-config.js'; import type { NameProvider } from '../references/name-provider.js'; import type { References } from '../references/references.js'; -import type { LangiumServices } from '../services.js'; +import type { LangiumCoreServices } from '../services.js'; import type { CstNode } from '../syntax-tree.js'; import type { MaybePromise } from '../utils/promise-util.js'; import type { LangiumDocument } from '../workspace/documents.js'; @@ -43,7 +43,7 @@ export class DefaultRenameProvider implements RenameProvider { protected readonly nameProvider: NameProvider; protected readonly grammarConfig: GrammarConfig; - constructor(services: LangiumServices) { + constructor(services: LangiumCoreServices) { this.references = services.references.References; this.nameProvider = services.references.NameProvider; this.grammarConfig = services.parser.GrammarConfig; diff --git a/packages/langium/src/lsp/semantic-token-provider.ts b/packages/langium/src/lsp/semantic-token-provider.ts index 81655f533..d5189bde2 100644 --- a/packages/langium/src/lsp/semantic-token-provider.ts +++ b/packages/langium/src/lsp/semantic-token-provider.ts @@ -15,7 +15,7 @@ import { findNodesForKeyword, findNodeForProperty, findNodesForProperty, findNod import { streamAst } from '../utils/ast-util.js'; import { interruptAndCheck } from '../utils/promise-util.js'; import { inRange } from '../utils/cst-util.js'; -import type { LangiumServicesWithLSP } from './lsp-services.js'; +import type { LangiumServices } from './lsp-services.js'; export const AllSemanticTokenTypes: Record = { [SemanticTokenTypes.class]: 0, @@ -194,7 +194,7 @@ export abstract class AbstractSemanticTokenProvider implements SemanticTokenProv protected currentRange?: Range; protected clientCapabilities?: SemanticTokensClientCapabilities; - constructor(services: LangiumServicesWithLSP) { + constructor(services: LangiumServices) { // Delete the token builder once the text document has been closed services.shared.workspace.TextDocuments.onDidClose(e => { this.tokensBuilders.delete(e.document.uri); diff --git a/packages/langium/src/lsp/type-hierarchy-provider.ts b/packages/langium/src/lsp/type-hierarchy-provider.ts index 0b84a0aa3..01c6b9943 100644 --- a/packages/langium/src/lsp/type-hierarchy-provider.ts +++ b/packages/langium/src/lsp/type-hierarchy-provider.ts @@ -15,7 +15,7 @@ import { SymbolKind } from 'vscode-languageserver'; import type { GrammarConfig } from '../grammar/grammar-config.js'; import type { NameProvider } from '../references/name-provider.js'; import type { References } from '../references/references.js'; -import type { LangiumServices } from '../services.js'; +import type { LangiumCoreServices } from '../services.js'; import type { AstNode } from '../syntax-tree.js'; import { findDeclarationNodeAtOffset } from '../utils/cst-util.js'; import { URI } from '../utils/uri-util.js'; @@ -39,7 +39,7 @@ export abstract class AbstractTypeHierarchyProvider implements TypeHierarchyProv protected readonly documents: LangiumDocuments; protected readonly references: References; - constructor(services: LangiumServices) { + constructor(services: LangiumCoreServices) { this.grammarConfig = services.parser.GrammarConfig; this.nameProvider = services.references.NameProvider; this.documents = services.shared.workspace.LangiumDocuments; diff --git a/packages/langium/src/lsp/type-provider.ts b/packages/langium/src/lsp/type-provider.ts index 2a0b9976d..0f3e119ca 100644 --- a/packages/langium/src/lsp/type-provider.ts +++ b/packages/langium/src/lsp/type-provider.ts @@ -6,7 +6,7 @@ import type { LocationLink, TypeDefinitionParams } from 'vscode-languageserver'; import type { References } from '../references/references.js'; -import type { LangiumServices } from '../services.js'; +import type { LangiumCoreServices } from '../services.js'; import type { AstNode } from '../syntax-tree.js'; import type { MaybePromise } from '../utils/promise-util.js'; import type { LangiumDocument } from '../workspace/documents.js'; @@ -27,7 +27,7 @@ export abstract class AbstractTypeDefinitionProvider implements TypeDefinitionPr protected readonly references: References; - constructor(services: LangiumServices) { + constructor(services: LangiumCoreServices) { this.references = services.references.References; } diff --git a/packages/langium/src/lsp/workspace-symbol-provider.ts b/packages/langium/src/lsp/workspace-symbol-provider.ts index 038e77186..7f2cf3b2c 100644 --- a/packages/langium/src/lsp/workspace-symbol-provider.ts +++ b/packages/langium/src/lsp/workspace-symbol-provider.ts @@ -12,7 +12,7 @@ import type { NodeKindProvider } from './node-kind-provider.js'; import type { FuzzyMatcher } from './fuzzy-matcher.js'; import { CancellationToken } from 'vscode-languageserver'; import { interruptAndCheck } from '../utils/promise-util.js'; -import type { LangiumSharedServicesWithLSP } from './lsp-services.js'; +import type { LangiumSharedServices } from './lsp-services.js'; /** * Shared service for handling workspace symbols requests. @@ -40,7 +40,7 @@ export class DefaultWorkspaceSymbolProvider implements WorkspaceSymbolProvider { protected readonly nodeKindProvider: NodeKindProvider; protected readonly fuzzyMatcher: FuzzyMatcher; - constructor(services: LangiumSharedServicesWithLSP) { + constructor(services: LangiumSharedServices) { this.indexManager = services.workspace.IndexManager; this.nodeKindProvider = services.lsp.NodeKindProvider; this.fuzzyMatcher = services.lsp.FuzzyMatcher; diff --git a/packages/langium/src/lsp/workspace/default-configuration.ts b/packages/langium/src/lsp/workspace/default-configuration.ts index dcabd140a..e66eb2ffd 100644 --- a/packages/langium/src/lsp/workspace/default-configuration.ts +++ b/packages/langium/src/lsp/workspace/default-configuration.ts @@ -9,7 +9,7 @@ import type { ConfigurationItem } from 'vscode-languageserver-protocol'; import type { ServiceRegistry } from '../../service-registry.js'; import { DidChangeConfigurationNotification } from 'vscode-languageserver-protocol'; import type { ConfigurationProvider } from '../../workspace/configuration.js'; -import type { LangiumSharedServicesWithLSP } from '../lsp-services.js'; +import type { LangiumSharedServices } from '../lsp-services.js'; /* eslint-disable @typescript-eslint/no-explicit-any */ @@ -24,7 +24,7 @@ export class LSPConfigurationProvider implements ConfigurationProvider { protected readonly serviceRegistry: ServiceRegistry; protected readonly connection: Connection | undefined; - constructor(services: LangiumSharedServicesWithLSP) { + constructor(services: LangiumSharedServices) { this.serviceRegistry = services.ServiceRegistry; this.connection = services.lsp.Connection; services.lsp.LanguageServer.onInitialize(params => { diff --git a/packages/langium/src/lsp/workspace/documents.ts b/packages/langium/src/lsp/workspace/documents.ts index 98350f85a..d2f2442bb 100644 --- a/packages/langium/src/lsp/workspace/documents.ts +++ b/packages/langium/src/lsp/workspace/documents.ts @@ -13,7 +13,7 @@ import type { FileSystemProvider } from './../../workspace/file-system-provider. import { DocumentState, type LangiumDocument, type LangiumDocumentFactory } from '../../workspace/documents.js'; import { URI } from '../../utils/uri-util.js'; import { TextDocument } from 'vscode-languageserver-textdocument'; -import type { LangiumSharedServicesWithLSP } from '../lsp-services.js'; +import type { LangiumSharedServices } from '../lsp-services.js'; /** * Document Factory that utilizes lsp TextDocuments (or the file system) to create/update LangiumDocuments @@ -24,7 +24,7 @@ export class LSPLangiumDocumentFactory implements LangiumDocumentFactory { protected readonly textDocuments: TextDocuments; protected readonly fileSystemProvider: FileSystemProvider; - constructor(services: LangiumSharedServicesWithLSP) { + constructor(services: LangiumSharedServices) { this.serviceRegistry = services.ServiceRegistry; this.textDocuments = services.workspace.TextDocuments; this.fileSystemProvider = services.workspace.FileSystemProvider; diff --git a/packages/langium/src/lsp/workspace/workspace-manager.ts b/packages/langium/src/lsp/workspace/workspace-manager.ts index 09bf00b50..6623925a9 100644 --- a/packages/langium/src/lsp/workspace/workspace-manager.ts +++ b/packages/langium/src/lsp/workspace/workspace-manager.ts @@ -14,7 +14,7 @@ import type { MutexLock } from '../../utils/promise-util.js'; import type { BuildOptions, DocumentBuilder } from './../../workspace/document-builder.js'; import type { LangiumDocument, LangiumDocuments } from './../../workspace/documents.js'; import type { FileSystemNode, FileSystemProvider } from './../../workspace/file-system-provider.js'; -import type { LangiumSharedServicesWithLSP } from '../lsp-services.js'; +import type { LangiumSharedServices } from '../lsp-services.js'; /** * Langium Workspace manager that uses LSP workspace folders @@ -30,7 +30,7 @@ export class LSPWorkspaceManager implements WorkspaceManager { protected readonly mutex: MutexLock; protected folders?: WorkspaceFolder[]; - constructor(services: LangiumSharedServicesWithLSP) { + constructor(services: LangiumSharedServices) { this.serviceRegistry = services.ServiceRegistry; this.langiumDocuments = services.workspace.LangiumDocuments; this.documentBuilder = services.workspace.DocumentBuilder; diff --git a/packages/langium/src/parser/completion-parser-builder.ts b/packages/langium/src/parser/completion-parser-builder.ts index 50de29d69..9c9230ec5 100644 --- a/packages/langium/src/parser/completion-parser-builder.ts +++ b/packages/langium/src/parser/completion-parser-builder.ts @@ -4,11 +4,11 @@ * terms of the MIT License, which is available in the project root. ******************************************************************************/ -import type { LangiumServices } from '../services.js'; +import type { LangiumCoreServices } from '../services.js'; import { LangiumCompletionParser } from './langium-parser.js'; import { createParser } from './parser-builder-base.js'; -export function createCompletionParser(services: LangiumServices): LangiumCompletionParser { +export function createCompletionParser(services: LangiumCoreServices): LangiumCompletionParser { const grammar = services.Grammar; const lexer = services.parser.Lexer; const parser = new LangiumCompletionParser(services); diff --git a/packages/langium/src/parser/langium-parser-builder.ts b/packages/langium/src/parser/langium-parser-builder.ts index 60ed2ec7d..b370acd67 100644 --- a/packages/langium/src/parser/langium-parser-builder.ts +++ b/packages/langium/src/parser/langium-parser-builder.ts @@ -4,7 +4,7 @@ * terms of the MIT License, which is available in the project root. ******************************************************************************/ -import type { LangiumServices } from '../services.js'; +import type { LangiumCoreServices } from '../services.js'; import { LangiumParser } from './langium-parser.js'; import { createParser } from './parser-builder-base.js'; @@ -12,7 +12,7 @@ import { createParser } from './parser-builder-base.js'; * Create and finalize a Langium parser. The parser rules are derived from the grammar, which is * available at `services.Grammar`. */ -export function createLangiumParser(services: LangiumServices): LangiumParser { +export function createLangiumParser(services: LangiumCoreServices): LangiumParser { const parser = prepareLangiumParser(services); parser.finalize(); return parser; @@ -22,7 +22,7 @@ export function createLangiumParser(services: LangiumServices): LangiumParser { * Create a Langium parser without finalizing it. This is used to extract more detailed error * information when the parser is initially validated. */ -export function prepareLangiumParser(services: LangiumServices): LangiumParser { +export function prepareLangiumParser(services: LangiumCoreServices): LangiumParser { const grammar = services.Grammar; const lexer = services.parser.Lexer; const parser = new LangiumParser(services); diff --git a/packages/langium/src/parser/langium-parser.ts b/packages/langium/src/parser/langium-parser.ts index eabc738af..7a68bc846 100644 --- a/packages/langium/src/parser/langium-parser.ts +++ b/packages/langium/src/parser/langium-parser.ts @@ -8,7 +8,7 @@ import type { DSLMethodOpts, ILexingError, IOrAlt, IParserErrorMessageProvider, IRecognitionException, IToken, TokenType, TokenVocabulary } from 'chevrotain'; import type { AbstractElement, Action, Assignment, ParserRule } from '../grammar/generated/ast.js'; import type { Linker } from '../references/linker.js'; -import type { LangiumServices } from '../services.js'; +import type { LangiumCoreServices } from '../services.js'; import type { AstNode, AstReflection, CompositeCstNode, CstNode } from '../syntax-tree.js'; import type { Lexer } from './lexer.js'; import type { IParserConfig } from './parser-config.js'; @@ -75,7 +75,7 @@ export abstract class AbstractLangiumParser implements BaseParser { protected readonly wrapper: ChevrotainWrapper; protected _unorderedGroups: Map = new Map(); - constructor(services: LangiumServices) { + constructor(services: LangiumCoreServices) { this.lexer = services.parser.Lexer; const tokens = this.lexer.definition; this.wrapper = new ChevrotainWrapper(tokens, { @@ -136,7 +136,7 @@ export class LangiumParser extends AbstractLangiumParser { return this.stack[this.stack.length - 1]; } - constructor(services: LangiumServices) { + constructor(services: LangiumCoreServices) { super(services); this.linker = services.references.Linker; this.converter = services.parser.ValueConverter; diff --git a/packages/langium/src/parser/lexer.ts b/packages/langium/src/parser/lexer.ts index 538511278..eec23ea12 100644 --- a/packages/langium/src/parser/lexer.ts +++ b/packages/langium/src/parser/lexer.ts @@ -5,7 +5,7 @@ ******************************************************************************/ import type { ILexingError, IMultiModeLexerDefinition, IToken, TokenType, TokenTypeDictionary, TokenVocabulary } from 'chevrotain'; -import type { LangiumServices } from '../services.js'; +import type { LangiumCoreServices } from '../services.js'; import { Lexer as ChevrotainLexer } from 'chevrotain'; export interface LexerResult { @@ -33,7 +33,7 @@ export class DefaultLexer implements Lexer { protected chevrotainLexer: ChevrotainLexer; protected tokenTypes: TokenTypeDictionary; - constructor(services: LangiumServices) { + constructor(services: LangiumCoreServices) { const tokens = services.parser.TokenBuilder.buildTokens(services.Grammar, { caseInsensitive: services.LanguageMetaData.caseInsensitive }); diff --git a/packages/langium/src/references/linker.ts b/packages/langium/src/references/linker.ts index 56c608076..75f8051d5 100644 --- a/packages/langium/src/references/linker.ts +++ b/packages/langium/src/references/linker.ts @@ -4,7 +4,7 @@ * terms of the MIT License, which is available in the project root. ******************************************************************************/ -import type { LangiumServices } from '../services.js'; +import type { LangiumCoreServices } from '../services.js'; import type { AstNode, AstNodeDescription, AstReflection, CstNode, LinkingError, Reference, ReferenceInfo } from '../syntax-tree.js'; import type { AstNodeLocator } from '../workspace/ast-node-locator.js'; import type { LangiumDocument, LangiumDocuments } from '../workspace/documents.js'; @@ -78,7 +78,7 @@ export class DefaultLinker implements Linker { protected readonly astNodeLocator: AstNodeLocator; protected readonly langiumDocuments: () => LangiumDocuments; - constructor(services: LangiumServices) { + constructor(services: LangiumCoreServices) { this.reflection = services.shared.AstReflection; this.langiumDocuments = () => services.shared.workspace.LangiumDocuments; this.scopeProvider = services.references.ScopeProvider; diff --git a/packages/langium/src/references/references.ts b/packages/langium/src/references/references.ts index c22701fe3..83fe5b674 100644 --- a/packages/langium/src/references/references.ts +++ b/packages/langium/src/references/references.ts @@ -4,7 +4,7 @@ * terms of the MIT License, which is available in the project root. ******************************************************************************/ -import type { LangiumServices } from '../services.js'; +import type { LangiumCoreServices } from '../services.js'; import type { AstNode, CstNode, GenericAstNode } from '../syntax-tree.js'; import type { Stream } from '../utils/stream.js'; import type { ReferenceDescription } from '../workspace/ast-descriptions.js'; @@ -68,7 +68,7 @@ export class DefaultReferences implements References { protected readonly index: IndexManager; protected readonly nodeLocator: AstNodeLocator; - constructor(services: LangiumServices) { + constructor(services: LangiumCoreServices) { this.nameProvider = services.references.NameProvider; this.index = services.shared.workspace.IndexManager; this.nodeLocator = services.workspace.AstNodeLocator; diff --git a/packages/langium/src/references/scope-computation.ts b/packages/langium/src/references/scope-computation.ts index 779ec2a4f..243dad4d9 100644 --- a/packages/langium/src/references/scope-computation.ts +++ b/packages/langium/src/references/scope-computation.ts @@ -4,7 +4,7 @@ * terms of the MIT License, which is available in the project root. ******************************************************************************/ -import type { LangiumServices } from '../services.js'; +import type { LangiumCoreServices } from '../services.js'; import type { AstNode, AstNodeDescription } from '../syntax-tree.js'; import type { AstNodeDescriptionProvider } from '../workspace/ast-descriptions.js'; import type { LangiumDocument, PrecomputedScopes } from '../workspace/documents.js'; @@ -68,7 +68,7 @@ export class DefaultScopeComputation implements ScopeComputation { protected readonly nameProvider: NameProvider; protected readonly descriptions: AstNodeDescriptionProvider; - constructor(services: LangiumServices) { + constructor(services: LangiumCoreServices) { this.nameProvider = services.references.NameProvider; this.descriptions = services.workspace.AstNodeDescriptionProvider; } diff --git a/packages/langium/src/references/scope-provider.ts b/packages/langium/src/references/scope-provider.ts index 1349e48a0..2efd708e9 100644 --- a/packages/langium/src/references/scope-provider.ts +++ b/packages/langium/src/references/scope-provider.ts @@ -4,7 +4,7 @@ * terms of the MIT License, which is available in the project root. ******************************************************************************/ -import type { LangiumServices } from '../services.js'; +import type { LangiumCoreServices } from '../services.js'; import type { AstNode, AstNodeDescription, AstReflection, ReferenceInfo } from '../syntax-tree.js'; import type { Stream } from '../utils/stream.js'; import type { AstNodeDescriptionProvider } from '../workspace/ast-descriptions.js'; @@ -40,7 +40,7 @@ export class DefaultScopeProvider implements ScopeProvider { protected readonly globalScopeCache: WorkspaceCache; - constructor(services: LangiumServices) { + constructor(services: LangiumCoreServices) { this.reflection = services.shared.AstReflection; this.nameProvider = services.references.NameProvider; this.descriptions = services.workspace.AstNodeDescriptionProvider; diff --git a/packages/langium/src/serializer/json-serializer.ts b/packages/langium/src/serializer/json-serializer.ts index 834ff5a4b..2af543fb4 100644 --- a/packages/langium/src/serializer/json-serializer.ts +++ b/packages/langium/src/serializer/json-serializer.ts @@ -5,7 +5,7 @@ ******************************************************************************/ import type { NameProvider } from '../references/name-provider.js'; -import type { LangiumServices } from '../services.js'; +import type { LangiumCoreServices } from '../services.js'; import type { AstNode, CstNode, GenericAstNode, Reference } from '../syntax-tree.js'; import type { Mutable } from '../utils/ast-util.js'; import type { AstNodeLocator } from '../workspace/ast-node-locator.js'; @@ -120,7 +120,7 @@ export class DefaultJsonSerializer implements JsonSerializer { protected readonly nameProvider: NameProvider; protected readonly commentProvider: CommentProvider; - constructor(services: LangiumServices) { + constructor(services: LangiumCoreServices) { this.langiumDocuments = services.shared.workspace.LangiumDocuments; this.astNodeLocator = services.workspace.AstNodeLocator; this.nameProvider = services.references.NameProvider; diff --git a/packages/langium/src/service-registry.ts b/packages/langium/src/service-registry.ts index 8b79a895a..cc81501ff 100644 --- a/packages/langium/src/service-registry.ts +++ b/packages/langium/src/service-registry.ts @@ -4,7 +4,7 @@ * terms of the MIT License, which is available in the project root. ******************************************************************************/ -import type { LangiumServices } from './services.js'; +import type { LangiumCoreServices } from './services.js'; import { UriUtils, type URI } from './utils/uri-util.js'; /** @@ -16,26 +16,26 @@ export interface ServiceRegistry { /** * Register a language via its injected services. */ - register(language: LangiumServices): void; + register(language: LangiumCoreServices): 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; + getServices(uri: URI): LangiumCoreServices; /** * The full set of registered language services. */ - readonly all: readonly LangiumServices[]; + readonly all: readonly LangiumCoreServices[]; } export class DefaultServiceRegistry implements ServiceRegistry { - protected singleton?: LangiumServices; - protected map?: Record; + protected singleton?: LangiumCoreServices; + protected map?: Record; - register(language: LangiumServices): void { + register(language: LangiumCoreServices): void { if (!this.singleton && !this.map) { // This is the first language to be registered; store it as singleton. this.singleton = language; @@ -60,7 +60,7 @@ export class DefaultServiceRegistry implements ServiceRegistry { } } - getServices(uri: URI): LangiumServices { + getServices(uri: URI): LangiumCoreServices { if (this.singleton !== undefined) { return this.singleton; } @@ -75,7 +75,7 @@ export class DefaultServiceRegistry implements ServiceRegistry { return services; } - get all(): readonly LangiumServices[] { + get all(): readonly LangiumCoreServices[] { if (this.singleton !== undefined) { return [this.singleton]; } diff --git a/packages/langium/src/services.ts b/packages/langium/src/services.ts index a41cdb0bf..05f5610e7 100644 --- a/packages/langium/src/services.ts +++ b/packages/langium/src/services.ts @@ -86,14 +86,14 @@ export type LangiumDefaultServices = { AstNodeDescriptionProvider: AstNodeDescriptionProvider ReferenceDescriptionProvider: ReferenceDescriptionProvider } - shared: LangiumSharedServices + shared: LangiumSharedCoreServices } /** - * The full set of services available for a language. These are either generated by `langium-cli` + * The core set of services available for a language. These are either generated by `langium-cli` * or provided as default implementations. */ -export type LangiumServices = LangiumGeneratedServices & LangiumDefaultServices +export type LangiumCoreServices = LangiumGeneratedServices & LangiumDefaultServices /** * The services generated by `langium-cli` that are shared between multiple languages. These are @@ -121,10 +121,10 @@ export type LangiumDefaultSharedServices = { } /** - * The shared services are a set of services that are used by every language within a Langium project. + * 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 LangiumSharedServices = LangiumDefaultSharedServices & LangiumGeneratedSharedServices +export type LangiumSharedCoreServices = LangiumDefaultSharedServices & LangiumGeneratedSharedServices /** * A deep partial type definition for services. We look into T to see whether its type definition contains @@ -136,11 +136,11 @@ export type DeepPartial = T[keyof T] extends Function ? T : { } /** - * Language-specific services to be partially overridden via dependency injection. + * Language-specific core services to be partially overridden via dependency injection. */ -export type PartialLangiumServices = DeepPartial +export type PartialLangiumCoreServices = DeepPartial /** - * Shared services to be partially overridden via dependency injection. + * Shared core services to be partially overridden via dependency injection. */ -export type PartialLangiumSharedServices = DeepPartial +export type PartialLangiumSharedCoreServices = DeepPartial diff --git a/packages/langium/src/test/langium-test.ts b/packages/langium/src/test/langium-test.ts index 6c5dc2ed2..25dfbb16d 100644 --- a/packages/langium/src/test/langium-test.ts +++ b/packages/langium/src/test/langium-test.ts @@ -5,7 +5,7 @@ ******************************************************************************/ import type { CompletionItem, CompletionList, Diagnostic, DocumentSymbol, FoldingRange, FormattingOptions, Range, ReferenceParams, SemanticTokensParams, SemanticTokenTypes, TextDocumentIdentifier, TextDocumentPositionParams, WorkspaceSymbol } from 'vscode-languageserver'; -import type { LangiumServices, LangiumSharedServices } from '../services.js'; +import type { LangiumCoreServices, LangiumSharedCoreServices } from '../services.js'; import type { AstNode, CstNode, Properties } from '../syntax-tree.js'; import type { LangiumDocument } from '../workspace/documents.js'; import type { BuildOptions } from '../workspace/document-builder.js'; @@ -20,7 +20,7 @@ import { stream } from '../utils/stream.js'; import type { AsyncDisposable } from '../utils/disposable.js'; import { Disposable } from '../utils/disposable.js'; import { normalizeEOL } from '../generate/template-string.js'; -import type { LangiumServicesWithLSP, LangiumSharedLSPServices } from '../lsp/lsp-services.js'; +import type { LangiumServices, LangiumSharedLSPServices } from '../lsp/lsp-services.js'; export interface ParseHelperOptions extends BuildOptions { /** @@ -31,7 +31,7 @@ export interface ParseHelperOptions extends BuildOptions { let nextDocumentId = 1; -export function parseHelper(services: LangiumServices): (input: string, options?: ParseHelperOptions) => Promise> { +export function parseHelper(services: LangiumCoreServices): (input: string, options?: ParseHelperOptions) => Promise> { const metaData = services.LanguageMetaData; const documentBuilder = services.shared.workspace.DocumentBuilder; return async (input, options) => { @@ -98,7 +98,7 @@ export interface ExpectedHighlight extends ExpectedBase { * * @returns A function that performs the assertion */ -export function expectHighlight(services: LangiumServicesWithLSP): (input: ExpectedHighlight) => Promise { +export function expectHighlight(services: LangiumServices): (input: ExpectedHighlight) => Promise { return async input => { const { output, indices, ranges } = replaceIndices(input); const document = await parseDocument(services, output); @@ -153,7 +153,7 @@ export interface ExpectedSymbolsCallback extends ExpectedBase { } export type ExpectedSymbols = ExpectedSymbolsList | ExpectedSymbolsCallback; -export function expectSymbols(services: LangiumServicesWithLSP): (input: ExpectedSymbols) => Promise { +export function expectSymbols(services: LangiumServices): (input: ExpectedSymbols) => Promise { return async input => { const document = await parseDocument(services, input.text, input.parseOptions); const symbolProvider = services.lsp.DocumentSymbolProvider; @@ -239,7 +239,7 @@ export interface ExpectedFoldings extends ExpectedBase { assert?: (foldings: FoldingRange[], expected: Array<[number, number]>) => void; } -export function expectFoldings(services: LangiumServicesWithLSP): (input: ExpectedFoldings) => Promise { +export function expectFoldings(services: LangiumServices): (input: ExpectedFoldings) => Promise { return async input => { const { output, ranges } = replaceIndices(input); const document = await parseDocument(services, output, input.parseOptions); @@ -283,7 +283,7 @@ export interface ExpectedCompletionCallback extends ExpectedBase { } export type ExpectedCompletion = ExpectedCompletionItems | ExpectedCompletionCallback; -export function expectCompletion(services: LangiumServicesWithLSP): (expectedCompletion: ExpectedCompletion) => Promise { +export function expectCompletion(services: LangiumServices): (expectedCompletion: ExpectedCompletion) => Promise { return async expectedCompletion => { const { output, indices } = replaceIndices(expectedCompletion); const document = await parseDocument(services, output, expectedCompletion.parseOptions); @@ -327,7 +327,7 @@ export interface ExpectedGoToDefinition extends ExpectedBase { rangeIndex: number | number[] } -export function expectGoToDefinition(services: LangiumServicesWithLSP): (expectedGoToDefinition: ExpectedGoToDefinition) => Promise { +export function expectGoToDefinition(services: LangiumServices): (expectedGoToDefinition: ExpectedGoToDefinition) => Promise { return async expectedGoToDefinition => { const { output, indices, ranges } = replaceIndices(expectedGoToDefinition); const document = await parseDocument(services, output, expectedGoToDefinition.parseOptions); @@ -365,7 +365,7 @@ export interface ExpectedFindReferences extends ExpectedBase { includeDeclaration: boolean } -export function expectFindReferences(services: LangiumServicesWithLSP): (expectedFindReferences: ExpectedFindReferences) => Promise { +export function expectFindReferences(services: LangiumServices): (expectedFindReferences: ExpectedFindReferences) => Promise { return async expectedFindReferences => { const { output, indices, ranges } = replaceIndices(expectedFindReferences); const document = await parseDocument(services, output, expectedFindReferences.parseOptions); @@ -403,7 +403,7 @@ export interface ExpectedHover extends ExpectedBase { hover?: string | RegExp } -export function expectHover(services: LangiumServicesWithLSP): (expectedHover: ExpectedHover) => Promise { +export function expectHover(services: LangiumServices): (expectedHover: ExpectedHover) => Promise { return async expectedHover => { const { output, indices } = replaceIndices(expectedHover); const document = await parseDocument(services, output, expectedHover.parseOptions); @@ -464,7 +464,7 @@ export interface ExpectFormatting { disposeAfterCheck?: boolean; } -export function expectFormatting(services: LangiumServicesWithLSP): (expectedFormatting: ExpectFormatting) => Promise { +export function expectFormatting(services: LangiumServices): (expectedFormatting: ExpectFormatting) => Promise { const formatter = services.lsp.Formatter; if (!formatter) { throw new Error(`No formatter registered for language ${services.LanguageMetaData.languageId}`); @@ -495,7 +495,7 @@ export function textDocumentPositionParams(document: LangiumDocument, offset: nu return { textDocument: { uri: document.textDocument.uri }, position: document.textDocument.positionAt(offset) }; } -export async function parseDocument(services: LangiumServices, input: string, options?: ParseHelperOptions): Promise> { +export async function parseDocument(services: LangiumCoreServices, input: string, options?: ParseHelperOptions): Promise> { const document = await parseHelper(services)(input, options); if (!document.parseResult) { throw new Error('Could not parse document'); @@ -546,7 +546,7 @@ export interface ValidationResult extends AsyncDisp document: LangiumDocument; } -export function validationHelper(services: LangiumServices): (input: string, options?: ParseHelperOptions) => Promise> { +export function validationHelper(services: LangiumCoreServices): (input: string, options?: ParseHelperOptions) => Promise> { const parse = parseHelper(services); return async (input, options) => { const document = await parse(input, { @@ -695,7 +695,7 @@ export function expectWarning { +export function clearDocuments(services: LangiumCoreServices | LangiumSharedCoreServices, documents?: LangiumDocument[]): Promise { const shared = 'shared' in services ? services.shared : services; const allDocs = (documents ? stream(documents) : shared.workspace.LangiumDocuments.all).map(x => x.uri).toArray(); return shared.workspace.DocumentBuilder.update([], allDocs); @@ -706,7 +706,7 @@ export interface DecodedSemanticTokensWithRanges { ranges: Array<[number, number]>; } -export function highlightHelper(services: LangiumServicesWithLSP): (input: string, options?: ParseHelperOptions) => Promise { +export function highlightHelper(services: LangiumServices): (input: string, options?: ParseHelperOptions) => Promise { const parse = parseHelper(services); const tokenProvider = services.lsp.SemanticTokenProvider; if (!tokenProvider) { diff --git a/packages/langium/src/utils/caching.ts b/packages/langium/src/utils/caching.ts index 2c9c69ebf..6853ca7f1 100644 --- a/packages/langium/src/utils/caching.ts +++ b/packages/langium/src/utils/caching.ts @@ -6,7 +6,7 @@ import type { Disposable } from './disposable.js'; import type { URI } from './uri-util.js'; -import type { LangiumSharedServices } from '../services.js'; +import type { LangiumSharedCoreServices } from '../services.js'; export abstract class DisposableCache implements Disposable { @@ -141,7 +141,7 @@ export class ContextCache extends Dis * If this document is changed or deleted, all associated key/value pairs are deleted. */ export class DocumentCache extends ContextCache { - constructor(sharedServices: LangiumSharedServices) { + constructor(sharedServices: LangiumSharedCoreServices) { super(uri => uri.toString()); this.onDispose(sharedServices.workspace.DocumentBuilder.onUpdate((changed, deleted) => { const allUris = changed.concat(deleted); @@ -157,7 +157,7 @@ export class DocumentCache extends ContextCache extends SimpleCache { - constructor(sharedServices: LangiumSharedServices) { + constructor(sharedServices: LangiumSharedCoreServices) { super(); this.onDispose(sharedServices.workspace.DocumentBuilder.onUpdate(() => { this.clear(); diff --git a/packages/langium/src/utils/grammar-util.ts b/packages/langium/src/utils/grammar-util.ts index 9d39b2e91..5752d712d 100644 --- a/packages/langium/src/utils/grammar-util.ts +++ b/packages/langium/src/utils/grammar-util.ts @@ -8,7 +8,7 @@ import type { Module } from '../dependency-injection.js'; import type { LangiumGrammarServices } from '../grammar/langium-grammar-module.js'; import type { LanguageMetaData } from '../grammar/language-meta-data.js'; import type { IParserConfig } from '../parser/parser-config.js'; -import type { LangiumGeneratedServices, LangiumGeneratedSharedServices, LangiumServices, LangiumSharedServices, PartialLangiumServices, PartialLangiumSharedServices } from '../services.js'; +import type { LangiumGeneratedServices, LangiumGeneratedSharedServices, LangiumCoreServices, LangiumSharedCoreServices, PartialLangiumCoreServices, PartialLangiumSharedCoreServices } from '../services.js'; import type { AstNode, CstNode } from '../syntax-tree.js'; import type { Mutable } from '../utils/ast-util.js'; import { createDefaultModule, createDefaultSharedModule } from '../default-module.js'; @@ -301,9 +301,9 @@ export async function createServicesForGrammar(config: { grammarServices?: LangiumGrammarServices, parserConfig?: IParserConfig, languageMetaData?: LanguageMetaData, - module?: Module - sharedModule?: Module -}): Promise { + module?: Module + sharedModule?: Module +}): Promise { const grammarServices = config.grammarServices ?? createLangiumGrammarServices(EmptyFileSystem).grammar; const uri = URI.parse('memory:///grammar.langium'); const factory = grammarServices.shared.workspace.LangiumDocumentFactory; @@ -322,10 +322,10 @@ export async function createServicesForGrammar(config: { fileExtensions: [`.${grammarNode.name?.toLowerCase() ?? 'unknown'}`], languageId: grammarNode.name ?? 'UNKNOWN' }; - const generatedSharedModule: Module = { + const generatedSharedModule: Module = { AstReflection: () => interpretAstReflection(grammarNode), }; - const generatedModule: Module = { + const generatedModule: Module = { Grammar: () => grammarNode, LanguageMetaData: () => languageMetaData, parser: { diff --git a/packages/langium/src/validation/document-validator.ts b/packages/langium/src/validation/document-validator.ts index baaff567c..52a17e808 100644 --- a/packages/langium/src/validation/document-validator.ts +++ b/packages/langium/src/validation/document-validator.ts @@ -8,7 +8,7 @@ import type { MismatchedTokenException } from 'chevrotain'; import type { Diagnostic } from 'vscode-languageserver'; import type { LanguageMetaData } from '../grammar/language-meta-data.js'; import type { ParseResult } from '../parser/langium-parser.js'; -import type { LangiumServices } from '../services.js'; +import type { LangiumCoreServices } from '../services.js'; import type { AstNode, CstNode } from '../syntax-tree.js'; import type { LangiumDocument } from '../workspace/documents.js'; import type { DiagnosticData, DiagnosticInfo, ValidationAcceptor, ValidationCategory, ValidationRegistry } from './validation-registry.js'; @@ -53,7 +53,7 @@ export class DefaultDocumentValidator implements DocumentValidator { protected readonly validationRegistry: ValidationRegistry; protected readonly metadata: LanguageMetaData; - constructor(services: LangiumServices) { + constructor(services: LangiumCoreServices) { this.validationRegistry = services.validation.ValidationRegistry; this.metadata = services.LanguageMetaData; } diff --git a/packages/langium/src/validation/validation-registry.ts b/packages/langium/src/validation/validation-registry.ts index 97c3b9dc5..5f47d134d 100644 --- a/packages/langium/src/validation/validation-registry.ts +++ b/packages/langium/src/validation/validation-registry.ts @@ -5,7 +5,7 @@ ******************************************************************************/ import type { CancellationToken, CodeDescription, DiagnosticRelatedInformation, DiagnosticTag, integer, Range } from 'vscode-languageserver'; -import type { LangiumServices } from '../services.js'; +import type { LangiumCoreServices } from '../services.js'; import type { AstNode, AstReflection, Properties } from '../syntax-tree.js'; import type { MaybePromise } from '../utils/promise-util.js'; import type { Stream } from '../utils/stream.js'; @@ -104,7 +104,7 @@ export class ValidationRegistry { private readonly entries = new MultiMap(); private readonly reflection: AstReflection; - constructor(services: LangiumServices) { + constructor(services: LangiumCoreServices) { this.reflection = services.shared.AstReflection; } diff --git a/packages/langium/src/workspace/ast-descriptions.ts b/packages/langium/src/workspace/ast-descriptions.ts index 8aace3200..7be7210b6 100644 --- a/packages/langium/src/workspace/ast-descriptions.ts +++ b/packages/langium/src/workspace/ast-descriptions.ts @@ -6,7 +6,7 @@ import type { URI } from '../utils/uri-util.js'; import type { NameProvider } from '../references/name-provider.js'; -import type { LangiumServices } from '../services.js'; +import type { LangiumCoreServices } from '../services.js'; import type { AstNode, AstNodeDescription, ReferenceInfo } from '../syntax-tree.js'; import type { AstNodeLocator } from './ast-node-locator.js'; import type { DocumentSegment, LangiumDocument } from './documents.js'; @@ -41,7 +41,7 @@ export class DefaultAstNodeDescriptionProvider implements AstNodeDescriptionProv protected readonly astNodeLocator: AstNodeLocator; protected readonly nameProvider: NameProvider; - constructor(services: LangiumServices) { + constructor(services: LangiumCoreServices) { this.astNodeLocator = services.workspace.AstNodeLocator; this.nameProvider = services.references.NameProvider; } @@ -108,7 +108,7 @@ export class DefaultReferenceDescriptionProvider implements ReferenceDescription protected readonly nodeLocator: AstNodeLocator; - constructor(services: LangiumServices) { + constructor(services: LangiumCoreServices) { this.nodeLocator = services.workspace.AstNodeLocator; } diff --git a/packages/langium/src/workspace/configuration.ts b/packages/langium/src/workspace/configuration.ts index 564d24f3b..921c70344 100644 --- a/packages/langium/src/workspace/configuration.ts +++ b/packages/langium/src/workspace/configuration.ts @@ -6,7 +6,7 @@ import type { DidChangeConfigurationParams } from 'vscode-languageserver'; import type { ServiceRegistry } from '../service-registry.js'; -import type { LangiumSharedServices } from '../services.js'; +import type { LangiumSharedCoreServices } from '../services.js'; /* eslint-disable @typescript-eslint/no-explicit-any */ @@ -39,7 +39,7 @@ export class EmptyConfigurationProvider implements ConfigurationProvider { protected initialized = false; protected readonly serviceRegistry: ServiceRegistry; - constructor(services: LangiumSharedServices) { + constructor(services: LangiumSharedCoreServices) { this.serviceRegistry = services.ServiceRegistry; } diff --git a/packages/langium/src/workspace/document-builder.ts b/packages/langium/src/workspace/document-builder.ts index 6823b99ae..d2dddae37 100644 --- a/packages/langium/src/workspace/document-builder.ts +++ b/packages/langium/src/workspace/document-builder.ts @@ -6,7 +6,7 @@ import type { URI } from '../utils/uri-util.js'; import type { ServiceRegistry } from '../service-registry.js'; -import type { LangiumSharedServices } from '../services.js'; +import type { LangiumSharedCoreServices } from '../services.js'; import type { AstNode } from '../syntax-tree.js'; import type { MaybePromise } from '../utils/promise-util.js'; import type { ValidationOptions } from '../validation/document-validator.js'; @@ -100,7 +100,7 @@ export class DefaultDocumentBuilder implements DocumentBuilder { protected readonly buildPhaseListeners: MultiMap = new MultiMap(); protected readonly buildState: Map = new Map(); - constructor(services: LangiumSharedServices) { + constructor(services: LangiumSharedCoreServices) { this.langiumDocuments = services.workspace.LangiumDocuments; this.langiumDocumentFactory = services.workspace.LangiumDocumentFactory; this.indexManager = services.workspace.IndexManager; diff --git a/packages/langium/src/workspace/documents.ts b/packages/langium/src/workspace/documents.ts index 01b46b4e9..c88a730c1 100644 --- a/packages/langium/src/workspace/documents.ts +++ b/packages/langium/src/workspace/documents.ts @@ -8,7 +8,7 @@ import type { Range } from 'vscode-languageserver-textdocument'; import type { Diagnostic } from 'vscode-languageserver'; import type { ParseResult } from '../parser/langium-parser.js'; import type { ServiceRegistry } from '../service-registry.js'; -import type { LangiumSharedServices } from '../services.js'; +import type { LangiumSharedCoreServices } from '../services.js'; import type { AstNode, AstNodeDescription, Reference } from '../syntax-tree.js'; import type { Mutable } from '../utils/ast-util.js'; import type { MultiMap } from '../utils/collections.js'; @@ -143,7 +143,7 @@ export class DefaultLangiumDocumentFactory implements LangiumDocumentFactory { protected readonly serviceRegistry: ServiceRegistry; protected readonly fileSystemProvider: FileSystemProvider; - constructor(services: LangiumSharedServices) { + constructor(services: LangiumSharedCoreServices) { this.serviceRegistry = services.ServiceRegistry; this.fileSystemProvider = services.workspace.FileSystemProvider; } @@ -304,7 +304,7 @@ export class DefaultLangiumDocuments implements LangiumDocuments { protected readonly documentMap: Map = new Map(); - constructor(services: LangiumSharedServices) { + constructor(services: LangiumSharedCoreServices) { this.langiumDocumentFactory = services.workspace.LangiumDocumentFactory; } diff --git a/packages/langium/src/workspace/index-manager.ts b/packages/langium/src/workspace/index-manager.ts index bba3604a3..4ac6cd1a6 100644 --- a/packages/langium/src/workspace/index-manager.ts +++ b/packages/langium/src/workspace/index-manager.ts @@ -6,7 +6,7 @@ import type { URI } from '../utils/uri-util.js'; import type { ServiceRegistry } from '../service-registry.js'; -import type { LangiumSharedServices } from '../services.js'; +import type { LangiumSharedCoreServices } from '../services.js'; import type { AstNode, AstNodeDescription, AstReflection } from '../syntax-tree.js'; import type { Stream } from '../utils/stream.js'; import type { ReferenceDescription } from './ast-descriptions.js'; @@ -104,7 +104,7 @@ export class DefaultIndexManager implements IndexManager { */ protected readonly referenceIndex = new Map(); - constructor(services: LangiumSharedServices) { + constructor(services: LangiumSharedCoreServices) { this.documents = services.workspace.LangiumDocuments; this.serviceRegistry = services.ServiceRegistry; this.astReflection = services.AstReflection; diff --git a/packages/langium/src/workspace/workspace-manager.ts b/packages/langium/src/workspace/workspace-manager.ts index 6f97e833c..bd9540a5e 100644 --- a/packages/langium/src/workspace/workspace-manager.ts +++ b/packages/langium/src/workspace/workspace-manager.ts @@ -7,7 +7,7 @@ import { URI, UriUtils } from '../utils/uri-util.js'; import type { CancellationToken, WorkspaceFolder } from 'vscode-languageserver'; import type { ServiceRegistry } from '../service-registry.js'; -import type { LangiumSharedServices } from '../services.js'; +import type { LangiumSharedCoreServices } from '../services.js'; import type { MutexLock } from '../utils/promise-util.js'; import type { BuildOptions, DocumentBuilder } from './document-builder.js'; import type { LangiumDocument, LangiumDocuments } from './documents.js'; @@ -44,7 +44,7 @@ export class DefaultWorkspaceManager implements WorkspaceManager { protected readonly mutex: MutexLock; // protected folders?: WorkspaceFolder[]; - constructor(services: LangiumSharedServices) { + constructor(services: LangiumSharedCoreServices) { this.serviceRegistry = services.ServiceRegistry; this.langiumDocuments = services.workspace.LangiumDocuments; this.documentBuilder = services.workspace.DocumentBuilder; diff --git a/packages/langium/test/service-registry.test.ts b/packages/langium/test/service-registry.test.ts index 92fe8eba0..00234cb9f 100644 --- a/packages/langium/test/service-registry.test.ts +++ b/packages/langium/test/service-registry.test.ts @@ -6,14 +6,14 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import type { LangiumServices } from 'langium'; +import type { LangiumCoreServices } from 'langium'; import { describe, expect, test } from 'vitest'; import { DefaultServiceRegistry, URI } from 'langium'; describe('DefaultServiceRegistry', () => { test('should work with a single language', () => { - const language: LangiumServices = { foo: 'bar' } as any; + const language: LangiumCoreServices = { foo: 'bar' } as any; const registry = new DefaultServiceRegistry(); registry.register(language); expect(registry.getServices(URI.parse('file:/foo.bar'))).toBe(language); @@ -21,8 +21,8 @@ describe('DefaultServiceRegistry', () => { }); test('should work with two languages', () => { - const language1: LangiumServices = { LanguageMetaData: { fileExtensions: ['.foo'] } } as any; - const language2: LangiumServices = { LanguageMetaData: { fileExtensions: ['.bar'] } } as any; + const language1: LangiumCoreServices = { LanguageMetaData: { fileExtensions: ['.foo'] } } as any; + const language2: LangiumCoreServices = { LanguageMetaData: { fileExtensions: ['.bar'] } } as any; const registry = new DefaultServiceRegistry(); registry.register(language1); registry.register(language2); diff --git a/packages/langium/test/workspace/document-builder.test.ts b/packages/langium/test/workspace/document-builder.test.ts index 74e41b4ae..791c80148 100644 --- a/packages/langium/test/workspace/document-builder.test.ts +++ b/packages/langium/test/workspace/document-builder.test.ts @@ -9,7 +9,7 @@ import { describe, expect, test } from 'vitest'; import { CancellationTokenSource } from 'vscode-languageserver'; import { TextDocument } from 'vscode-languageserver-textdocument'; import { isOperationCancelled, DocumentState, URI } from 'langium'; -import { createServicesForGrammarWithLSP, type LangiumServicesWithLSP } from 'langium/lsp'; +import { createServicesForGrammarWithLSP, type LangiumServices } from 'langium/lsp'; describe('DefaultDocumentBuilder', () => { async function createServices() { @@ -241,7 +241,7 @@ describe('DefaultDocumentBuilder', () => { /** * Add the given document to the TextDocuments service, simulating it being opened in an editor. */ -function addTextDocument(doc: LangiumDocument, services: LangiumServicesWithLSP) { +function addTextDocument(doc: LangiumDocument, services: LangiumServices) { // eslint-disable-next-line @typescript-eslint/no-explicit-any const textDocuments = services.shared.workspace.TextDocuments as any; textDocuments._syncedDocuments.set(doc.uri.toString(), doc.textDocument); diff --git a/packages/langium/test/workspace/validation-registry.test.ts b/packages/langium/test/workspace/validation-registry.test.ts index 95cdd4390..a7c935639 100644 --- a/packages/langium/test/workspace/validation-registry.test.ts +++ b/packages/langium/test/workspace/validation-registry.test.ts @@ -4,7 +4,7 @@ * terms of the MIT License, which is available in the project root. ******************************************************************************/ -import type { GrammarAST as GrammarTypes, LangiumServices, ValidationChecks } from 'langium'; +import type { GrammarAST as GrammarTypes, LangiumCoreServices, ValidationChecks } from 'langium'; import { describe, expect, test } from 'vitest'; import { GrammarAST, ValidationRegistry } from 'langium'; @@ -15,7 +15,7 @@ describe('ValidationRegistry', () => { shared: { AstReflection: new GrammarAST.LangiumGrammarAstReflection() } - } as unknown as LangiumServices; + } as unknown as LangiumCoreServices; return new ValidationRegistry(services); }