From 5950b8e2ca05f38c78d40e11b2209733dc81354b Mon Sep 17 00:00:00 2001 From: Benjamin Friedman Wilson Date: Fri, 24 Nov 2023 12:34:54 +0100 Subject: [PATCH] rename DefaultServiceRegistry -> CoreServiceRegistry --- packages/langium/src/default-module.ts | 4 ++-- packages/langium/src/lsp/langium-lsp-module.ts | 6 +++--- packages/langium/src/lsp/lsp-services.ts | 10 +++++----- .../langium/src/lsp/workspace/default-configuration.ts | 4 ++-- packages/langium/src/lsp/workspace/documents.ts | 4 ++-- .../langium/src/lsp/workspace/workspace-manager.ts | 4 ++-- packages/langium/src/service-registry.ts | 9 ++++++--- packages/langium/src/services.ts | 4 ++-- packages/langium/src/workspace/configuration.ts | 4 ++-- packages/langium/src/workspace/document-builder.ts | 4 ++-- packages/langium/src/workspace/documents.ts | 4 ++-- packages/langium/src/workspace/index-manager.ts | 4 ++-- packages/langium/src/workspace/workspace-manager.ts | 4 ++-- packages/langium/test/service-registry.test.ts | 6 +++--- 14 files changed, 37 insertions(+), 34 deletions(-) diff --git a/packages/langium/src/default-module.ts b/packages/langium/src/default-module.ts index 77334c3f0..832db0df3 100644 --- a/packages/langium/src/default-module.ts +++ b/packages/langium/src/default-module.ts @@ -19,7 +19,7 @@ import { DefaultReferences } from './references/references.js'; import { DefaultScopeComputation } from './references/scope-computation.js'; import { DefaultScopeProvider } from './references/scope-provider.js'; import { DefaultJsonSerializer } from './serializer/json-serializer.js'; -import { DefaultServiceRegistry } from './service-registry.js'; +import { CoreServiceRegistry } from './service-registry.js'; import { MutexLock } from './utils/promise-util.js'; import { DefaultDocumentValidator } from './validation/document-validator.js'; import { ValidationRegistry } from './validation/validation-registry.js'; @@ -108,7 +108,7 @@ export interface DefaultSharedModuleContext { */ export function createDefaultSharedModule(context: DefaultSharedModuleContext): Module { return { - ServiceRegistry: () => new DefaultServiceRegistry(), + ServiceRegistry: () => new CoreServiceRegistry(), workspace: { LangiumDocuments: (services) => new DefaultLangiumDocuments(services), LangiumDocumentFactory: (services) => new DefaultLangiumDocumentFactory(services), diff --git a/packages/langium/src/lsp/langium-lsp-module.ts b/packages/langium/src/lsp/langium-lsp-module.ts index d785377cd..035bfa639 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, LangiumServices, LangiumLSPServices, LangiumSharedLSPServices, PartialLangiumSharedLSPServices, LangiumSharedServices } from './lsp-services.js'; +import type { ServiceRegistryI, 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'; @@ -29,7 +29,7 @@ import { registerTypeValidationChecks } from '../grammar/validation/types-valida import { LSPConfigurationProvider } from './workspace/default-configuration.js'; import { LSPLangiumDocumentFactory } from './workspace/documents.js'; import { LSPWorkspaceManager } from './workspace/workspace-manager.js'; -import { DefaultServiceRegistry } from '../service-registry.js'; +import { CoreServiceRegistry } from '../service-registry.js'; /** * Context required for creating the default language-specific dependency injection module. @@ -65,7 +65,7 @@ export function createLSPModule(context: LSPModuleContext): Module { return { // use the regular registry as an LSP registry, assuming the registry itself is opaque - ServiceRegistry: () => (new DefaultServiceRegistry()) as LSPServiceRegistry, + ServiceRegistry: () => (new CoreServiceRegistry()) as ServiceRegistryI, lsp: { Connection: () => context.connection, LanguageServer: (services) => new DefaultLanguageServer(services), diff --git a/packages/langium/src/lsp/lsp-services.ts b/packages/langium/src/lsp/lsp-services.ts index 72290cda0..eb5a3605c 100644 --- a/packages/langium/src/lsp/lsp-services.ts +++ b/packages/langium/src/lsp/lsp-services.ts @@ -39,12 +39,12 @@ import type { LangiumDocumentFactory } from './../workspace/documents.js'; import type { WorkspaceManager } from './../workspace/workspace-manager.js'; /** - * Combined Default + LSP services of Langium + * Combined Core + LSP services of Langium (total services) */ export type LangiumServices = LangiumCoreServices & LangiumLSPServices; /** - * Combined Default + LSP shared services of Langium + * Combined Core + LSP shared services of Langium (total services) */ export type LangiumSharedServices = LangiumSharedCoreServices & LangiumSharedLSPServices; @@ -81,11 +81,11 @@ export type LangiumLSPServices = { } & LSPServices; /** - * An LSP-specific service registry provides access to the language-specific services. These are resolved + * A core + lsp service registry provides access to the language-specific services. These are resolved * via the URI of a text document. * This LSP interface simply extends upon the regular service registry's interface */ -export interface LSPServiceRegistry { +export interface ServiceRegistryI { /** * Register a language via its injected services. @@ -108,7 +108,7 @@ export interface LSPServiceRegistry { * LSP Services shared between multiple languages where Langium provides default implementations. */ export type LangiumSharedLSPServices = { - ServiceRegistry: LSPServiceRegistry + ServiceRegistry: ServiceRegistryI lsp: { Connection?: Connection ExecuteCommandHandler?: ExecuteCommandHandler diff --git a/packages/langium/src/lsp/workspace/default-configuration.ts b/packages/langium/src/lsp/workspace/default-configuration.ts index e66eb2ffd..65e614074 100644 --- a/packages/langium/src/lsp/workspace/default-configuration.ts +++ b/packages/langium/src/lsp/workspace/default-configuration.ts @@ -6,7 +6,7 @@ import type { Connection, DidChangeConfigurationParams } from 'vscode-languageserver'; import type { ConfigurationItem } from 'vscode-languageserver-protocol'; -import type { ServiceRegistry } from '../../service-registry.js'; +import type { CoreServiceRegistryI } from '../../service-registry.js'; import { DidChangeConfigurationNotification } from 'vscode-languageserver-protocol'; import type { ConfigurationProvider } from '../../workspace/configuration.js'; import type { LangiumSharedServices } from '../lsp-services.js'; @@ -21,7 +21,7 @@ export class LSPConfigurationProvider implements ConfigurationProvider { protected settings: Record> = {}; protected workspaceConfig = false; protected initialized = false; - protected readonly serviceRegistry: ServiceRegistry; + protected readonly serviceRegistry: CoreServiceRegistryI; protected readonly connection: Connection | undefined; constructor(services: LangiumSharedServices) { diff --git a/packages/langium/src/lsp/workspace/documents.ts b/packages/langium/src/lsp/workspace/documents.ts index d2f2442bb..6c58588a5 100644 --- a/packages/langium/src/lsp/workspace/documents.ts +++ b/packages/langium/src/lsp/workspace/documents.ts @@ -6,7 +6,7 @@ import type { TextDocuments } from 'vscode-languageserver'; import type { ParseResult } from '../../parser/langium-parser.js'; -import type { ServiceRegistry } from '../../service-registry.js'; +import type { CoreServiceRegistryI } from '../../service-registry.js'; import type { AstNode } from '../../syntax-tree.js'; import type { Mutable } from '../../utils/ast-util.js'; import type { FileSystemProvider } from './../../workspace/file-system-provider.js'; @@ -20,7 +20,7 @@ import type { LangiumSharedServices } from '../lsp-services.js'; */ export class LSPLangiumDocumentFactory implements LangiumDocumentFactory { - protected readonly serviceRegistry: ServiceRegistry; + protected readonly serviceRegistry: CoreServiceRegistryI; protected readonly textDocuments: TextDocuments; protected readonly fileSystemProvider: FileSystemProvider; diff --git a/packages/langium/src/lsp/workspace/workspace-manager.ts b/packages/langium/src/lsp/workspace/workspace-manager.ts index 6623925a9..40a066367 100644 --- a/packages/langium/src/lsp/workspace/workspace-manager.ts +++ b/packages/langium/src/lsp/workspace/workspace-manager.ts @@ -9,7 +9,7 @@ import { interruptAndCheck } from '../../utils/promise-util.js'; import { URI, UriUtils } from '../../utils/uri-util.js'; import type { WorkspaceManager } from './../../workspace/workspace-manager.js'; import type { WorkspaceFolder } from 'vscode-languageserver'; -import type { ServiceRegistry } from '../../service-registry.js'; +import type { CoreServiceRegistryI } from '../../service-registry.js'; 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'; @@ -23,7 +23,7 @@ export class LSPWorkspaceManager implements WorkspaceManager { initialBuildOptions: BuildOptions = {}; - protected readonly serviceRegistry: ServiceRegistry; + protected readonly serviceRegistry: CoreServiceRegistryI; protected readonly langiumDocuments: LangiumDocuments; protected readonly documentBuilder: DocumentBuilder; protected readonly fileSystemProvider: FileSystemProvider; diff --git a/packages/langium/src/service-registry.ts b/packages/langium/src/service-registry.ts index cc81501ff..37f576d29 100644 --- a/packages/langium/src/service-registry.ts +++ b/packages/langium/src/service-registry.ts @@ -8,10 +8,10 @@ import type { LangiumCoreServices } from './services.js'; import { UriUtils, type URI } from './utils/uri-util.js'; /** - * The service registry provides access to the language-specific services. These are resolved + * The core service registry provides access to the core language-specific services. These are resolved * via the URI of a text document. */ -export interface ServiceRegistry { +export interface CoreServiceRegistryI { /** * Register a language via its injected services. @@ -30,7 +30,10 @@ export interface ServiceRegistry { readonly all: readonly LangiumCoreServices[]; } -export class DefaultServiceRegistry implements ServiceRegistry { +/** + * Registry for Langium's core services + */ +export class CoreServiceRegistry implements CoreServiceRegistryI { protected singleton?: LangiumCoreServices; protected map?: Record; diff --git a/packages/langium/src/services.ts b/packages/langium/src/services.ts index 05f5610e7..16c79012c 100644 --- a/packages/langium/src/services.ts +++ b/packages/langium/src/services.ts @@ -21,7 +21,7 @@ import type { References } from './references/references.js'; import type { ScopeComputation } from './references/scope-computation.js'; import type { ScopeProvider } from './references/scope-provider.js'; import type { JsonSerializer } from './serializer/json-serializer.js'; -import type { ServiceRegistry } from './service-registry.js'; +import type { CoreServiceRegistryI } from './service-registry.js'; import type { AstReflection } from './syntax-tree.js'; import type { MutexLock } from './utils/promise-util.js'; import type { DocumentValidator } from './validation/document-validator.js'; @@ -107,7 +107,7 @@ export type LangiumGeneratedSharedServices = { * Services shared between multiple languages where Langium provides default implementations. */ export type LangiumDefaultSharedServices = { - ServiceRegistry: ServiceRegistry + ServiceRegistry: CoreServiceRegistryI workspace: { DocumentBuilder: DocumentBuilder IndexManager: IndexManager diff --git a/packages/langium/src/workspace/configuration.ts b/packages/langium/src/workspace/configuration.ts index 921c70344..430a2d756 100644 --- a/packages/langium/src/workspace/configuration.ts +++ b/packages/langium/src/workspace/configuration.ts @@ -5,7 +5,7 @@ ******************************************************************************/ import type { DidChangeConfigurationParams } from 'vscode-languageserver'; -import type { ServiceRegistry } from '../service-registry.js'; +import type { CoreServiceRegistryI } from '../service-registry.js'; import type { LangiumSharedCoreServices } from '../services.js'; /* eslint-disable @typescript-eslint/no-explicit-any */ @@ -37,7 +37,7 @@ export class EmptyConfigurationProvider implements ConfigurationProvider { protected settings: Record> = {}; protected workspaceConfig = false; protected initialized = false; - protected readonly serviceRegistry: ServiceRegistry; + protected readonly serviceRegistry: CoreServiceRegistryI; 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 d2dddae37..27f4021ac 100644 --- a/packages/langium/src/workspace/document-builder.ts +++ b/packages/langium/src/workspace/document-builder.ts @@ -5,7 +5,7 @@ ******************************************************************************/ import type { URI } from '../utils/uri-util.js'; -import type { ServiceRegistry } from '../service-registry.js'; +import type { CoreServiceRegistryI } from '../service-registry.js'; import type { LangiumSharedCoreServices } from '../services.js'; import type { AstNode } from '../syntax-tree.js'; import type { MaybePromise } from '../utils/promise-util.js'; @@ -95,7 +95,7 @@ export class DefaultDocumentBuilder implements DocumentBuilder { protected readonly langiumDocuments: LangiumDocuments; protected readonly langiumDocumentFactory: LangiumDocumentFactory; protected readonly indexManager: IndexManager; - protected readonly serviceRegistry: ServiceRegistry; + protected readonly serviceRegistry: CoreServiceRegistryI; protected readonly updateListeners: DocumentUpdateListener[] = []; protected readonly buildPhaseListeners: MultiMap = new MultiMap(); protected readonly buildState: Map = new Map(); diff --git a/packages/langium/src/workspace/documents.ts b/packages/langium/src/workspace/documents.ts index c88a730c1..4fee7af67 100644 --- a/packages/langium/src/workspace/documents.ts +++ b/packages/langium/src/workspace/documents.ts @@ -7,7 +7,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 { CoreServiceRegistryI } from '../service-registry.js'; import type { LangiumSharedCoreServices } from '../services.js'; import type { AstNode, AstNodeDescription, Reference } from '../syntax-tree.js'; import type { Mutable } from '../utils/ast-util.js'; @@ -140,7 +140,7 @@ export interface LangiumDocumentFactory { export class DefaultLangiumDocumentFactory implements LangiumDocumentFactory { - protected readonly serviceRegistry: ServiceRegistry; + protected readonly serviceRegistry: CoreServiceRegistryI; protected readonly fileSystemProvider: FileSystemProvider; constructor(services: LangiumSharedCoreServices) { diff --git a/packages/langium/src/workspace/index-manager.ts b/packages/langium/src/workspace/index-manager.ts index 4ac6cd1a6..069cc7ebf 100644 --- a/packages/langium/src/workspace/index-manager.ts +++ b/packages/langium/src/workspace/index-manager.ts @@ -5,7 +5,7 @@ ******************************************************************************/ import type { URI } from '../utils/uri-util.js'; -import type { ServiceRegistry } from '../service-registry.js'; +import type { CoreServiceRegistryI } from '../service-registry.js'; import type { LangiumSharedCoreServices } from '../services.js'; import type { AstNode, AstNodeDescription, AstReflection } from '../syntax-tree.js'; import type { Stream } from '../utils/stream.js'; @@ -83,7 +83,7 @@ export interface IndexManager { export class DefaultIndexManager implements IndexManager { - protected readonly serviceRegistry: ServiceRegistry; + protected readonly serviceRegistry: CoreServiceRegistryI; protected readonly documents: LangiumDocuments; protected readonly astReflection: AstReflection; diff --git a/packages/langium/src/workspace/workspace-manager.ts b/packages/langium/src/workspace/workspace-manager.ts index bd9540a5e..1f93a8377 100644 --- a/packages/langium/src/workspace/workspace-manager.ts +++ b/packages/langium/src/workspace/workspace-manager.ts @@ -6,7 +6,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 { CoreServiceRegistryI } from '../service-registry.js'; import type { LangiumSharedCoreServices } from '../services.js'; import type { MutexLock } from '../utils/promise-util.js'; import type { BuildOptions, DocumentBuilder } from './document-builder.js'; @@ -37,7 +37,7 @@ export class DefaultWorkspaceManager implements WorkspaceManager { initialBuildOptions: BuildOptions = {}; - protected readonly serviceRegistry: ServiceRegistry; + protected readonly serviceRegistry: CoreServiceRegistryI; protected readonly langiumDocuments: LangiumDocuments; protected readonly documentBuilder: DocumentBuilder; protected readonly fileSystemProvider: FileSystemProvider; diff --git a/packages/langium/test/service-registry.test.ts b/packages/langium/test/service-registry.test.ts index 00234cb9f..f339d509b 100644 --- a/packages/langium/test/service-registry.test.ts +++ b/packages/langium/test/service-registry.test.ts @@ -8,13 +8,13 @@ import type { LangiumCoreServices } from 'langium'; import { describe, expect, test } from 'vitest'; -import { DefaultServiceRegistry, URI } from 'langium'; +import { CoreServiceRegistry, URI } from 'langium'; describe('DefaultServiceRegistry', () => { test('should work with a single language', () => { const language: LangiumCoreServices = { foo: 'bar' } as any; - const registry = new DefaultServiceRegistry(); + const registry = new CoreServiceRegistry(); registry.register(language); expect(registry.getServices(URI.parse('file:/foo.bar'))).toBe(language); expect(registry.all).toHaveLength(1); @@ -23,7 +23,7 @@ describe('DefaultServiceRegistry', () => { test('should work with two languages', () => { const language1: LangiumCoreServices = { LanguageMetaData: { fileExtensions: ['.foo'] } } as any; const language2: LangiumCoreServices = { LanguageMetaData: { fileExtensions: ['.bar'] } } as any; - const registry = new DefaultServiceRegistry(); + const registry = new CoreServiceRegistry(); registry.register(language1); registry.register(language2); expect(registry.getServices(URI.parse('file:/test.foo'))).toBe(language1);