zenstack
Version:
FullStack enhancement for Prisma ORM: seamless integration from database to UI
104 lines • 5.66 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.ZModelModule = void 0;
exports.createSharedModule = createSharedModule;
exports.createZModelServices = createZModelServices;
const module_1 = require("@zenstackhq/language/module");
const langium_1 = require("langium");
const vscode_languageserver_1 = require("vscode-languageserver");
const vscode_languageserver_textdocument_1 = require("vscode-languageserver-textdocument");
const zmodel_validator_1 = require("./validator/zmodel-validator");
const zmodel_code_action_1 = require("./zmodel-code-action");
const zmodel_completion_provider_1 = require("./zmodel-completion-provider");
const zmodel_definition_1 = require("./zmodel-definition");
const zmodel_documentation_provider_1 = require("./zmodel-documentation-provider");
const zmodel_formatter_1 = require("./zmodel-formatter");
const zmodel_highlight_1 = require("./zmodel-highlight");
const zmodel_hover_1 = require("./zmodel-hover");
const zmodel_linker_1 = require("./zmodel-linker");
const zmodel_scope_1 = require("./zmodel-scope");
const zmodel_semantic_1 = require("./zmodel-semantic");
const zmodel_workspace_manager_1 = require("./zmodel-workspace-manager");
/**
* 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.
*/
exports.ZModelModule = {
references: {
ScopeComputation: (services) => new zmodel_scope_1.ZModelScopeComputation(services),
Linker: (services) => new zmodel_linker_1.ZModelLinker(services),
ScopeProvider: (services) => new zmodel_scope_1.ZModelScopeProvider(services),
},
validation: {
ValidationRegistry: (services) => new zmodel_validator_1.ZModelValidationRegistry(services),
ZModelValidator: (services) => new zmodel_validator_1.ZModelValidator(services),
},
lsp: {
Formatter: (services) => new zmodel_formatter_1.ZModelFormatter(services),
CodeActionProvider: (services) => new zmodel_code_action_1.ZModelCodeActionProvider(services),
DefinitionProvider: (services) => new zmodel_definition_1.ZModelDefinitionProvider(services),
SemanticTokenProvider: (services) => new zmodel_semantic_1.ZModelSemanticTokenProvider(services),
CompletionProvider: (services) => new zmodel_completion_provider_1.ZModelCompletionProvider(services),
HoverProvider: (services) => new zmodel_hover_1.ZModelHoverProvider(services),
DocumentHighlightProvider: (services) => new zmodel_highlight_1.ZModelHighlightProvider(services),
},
parser: {
GrammarConfig: (services) => createGrammarConfig(services),
},
documentation: {
DocumentationProvider: (services) => new zmodel_documentation_provider_1.ZModelDocumentationProvider(services),
},
};
// this duplicates createDefaultSharedModule except that a custom WorkspaceManager is used
// TODO: avoid this duplication
function createSharedModule(context) {
return {
ServiceRegistry: () => new langium_1.DefaultServiceRegistry(),
lsp: {
Connection: () => context.connection,
LanguageServer: (services) => new langium_1.DefaultLanguageServer(services),
WorkspaceSymbolProvider: (services) => new langium_1.DefaultWorkspaceSymbolProvider(services),
NodeKindProvider: () => new langium_1.DefaultNodeKindProvider(),
FuzzyMatcher: () => new langium_1.DefaultFuzzyMatcher(),
},
workspace: {
LangiumDocuments: (services) => new langium_1.DefaultLangiumDocuments(services),
LangiumDocumentFactory: (services) => new langium_1.DefaultLangiumDocumentFactory(services),
DocumentBuilder: (services) => new langium_1.DefaultDocumentBuilder(services),
TextDocuments: () => new vscode_languageserver_1.TextDocuments(vscode_languageserver_textdocument_1.TextDocument),
IndexManager: (services) => new langium_1.DefaultIndexManager(services),
WorkspaceManager: (services) => new zmodel_workspace_manager_1.ZModelWorkspaceManager(services),
FileSystemProvider: (services) => context.fileSystemProvider(services),
MutexLock: () => new langium_1.MutexLock(),
ConfigurationProvider: (services) => new langium_1.DefaultConfigurationProvider(services),
},
};
}
/**
* Create the full set of services required by Langium.
*
* First inject the shared services by merging two modules:
* - Langium default shared services
* - Services generated by langium-cli
*
* Then inject the language-specific services by merging three modules:
* - Langium default language-specific services
* - Services generated by langium-cli
* - Services specified in this file
*
* @param context Optional module context with the LSP connection
* @returns An object wrapping the shared services and the language-specific services
*/
function createZModelServices(context) {
const shared = (0, langium_1.inject)(createSharedModule(context), module_1.ZModelGeneratedSharedModule);
const ZModel = (0, langium_1.inject)((0, langium_1.createDefaultModule)({ shared }), module_1.ZModelGeneratedModule, exports.ZModelModule);
shared.ServiceRegistry.register(ZModel);
return { shared, ZModel };
}
function createGrammarConfig(services) {
const config = (0, langium_1.createGrammarConfig)(services);
config.nameRegexp = /^[@\w\p{L}]$/u;
return config;
}
//# sourceMappingURL=zmodel-module.js.map
;