diff --git a/.gitignore b/.gitignore index 04015870b..9ddc45ba5 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ dist .vercel .DS_Store .vscode/settings.json +.env.local diff --git a/packages/schema/build/env-plugin.js b/packages/schema/build/env-plugin.js index 78b17385d..bb4e2c173 100644 --- a/packages/schema/build/env-plugin.js +++ b/packages/schema/build/env-plugin.js @@ -12,19 +12,27 @@ module.exports = { function _findEnvFile(dir) { if (!fs.existsSync(dir)) return undefined; - if (fs.existsSync(`${dir}/.env.${ENV}`)) { - return `${dir}/.env.${ENV}`; - } else if (fs.existsSync(`${dir}/.env`)) { - return `${dir}/.env`; - } else { - const next = path.resolve(dir, '../'); - if (next === dir) { - // at root now, exit - return undefined; - } else { - return _findEnvFile(next); + const candidates = [ + `${dir}/.env.${ENV}.local`, + `${dir}/.env.${ENV}`, + `${dir}/.env.local`, + `${dir}/.env`, + ]; + + for (const candidate of candidates) { + if (fs.existsSync(candidate)) { + console.log('Using env from:', candidate); + return candidate; } } + + const next = path.resolve(dir, '../'); + if (next === dir) { + // at root now, exit + return undefined; + } else { + return _findEnvFile(next); + } } build.onResolve({ filter: /^env$/ }, async (args) => { diff --git a/packages/schema/src/language-server/lsp/zmodel-definition-provider.ts b/packages/schema/src/language-server/lsp/zmodel-definition-provider.ts deleted file mode 100644 index 786ffcfed..000000000 --- a/packages/schema/src/language-server/lsp/zmodel-definition-provider.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { - CstNode, - DefinitionProvider, - findDeclarationNodeAtOffset, - getDocument, - GoToLink, - LangiumDocument, - LangiumServices, - MaybePromise, - NameProvider, -} from 'langium'; -import { GrammarConfig } from 'langium/lib/grammar/grammar-config'; -import { References } from 'langium/lib/references/references'; -import { DefinitionParams, LocationLink } from 'vscode-languageserver'; - -/** - * Custom Langium DefinitionProvider implementation - */ -export default class ZModelDefinitionProvider implements DefinitionProvider { - protected readonly nameProvider: NameProvider; - protected readonly references: References; - protected readonly grammarConfig: GrammarConfig; - - constructor(services: LangiumServices) { - this.nameProvider = services.references.NameProvider; - this.references = services.references.References; - this.grammarConfig = services.parser.GrammarConfig; - } - - getDefinition( - document: LangiumDocument, - params: DefinitionParams - ): MaybePromise { - const rootNode = document.parseResult.value; - if (rootNode.$cstNode) { - const cst = rootNode.$cstNode; - const sourceCstNode = findDeclarationNodeAtOffset( - cst, - document.textDocument.offsetAt(params.position), - this.grammarConfig.nameRegexp - ); - if (sourceCstNode) { - return this.collectLocationLinks(sourceCstNode, params); - } - } - return undefined; - } - - protected collectLocationLinks( - sourceCstNode: CstNode, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - _params: DefinitionParams - ): MaybePromise { - const goToLink = this.findLink(sourceCstNode); - if (goToLink) { - if ( - // this condition is for working around a potential Langium bug - // https://github.com/langium/langium/discussions/732 - !goToLink.targetDocument.textDocument.uri.endsWith( - 'stdlib.zmodel' - ) - ) { - return [ - LocationLink.create( - goToLink.targetDocument.textDocument.uri, - (goToLink.target.element.$cstNode ?? goToLink.target) - .range, - goToLink.target.range, - goToLink.source.range - ), - ]; - } - } - return undefined; - } - - protected findLink(source: CstNode): GoToLink | undefined { - const target = this.references.findDeclarationNode(source); - if (target?.element) { - const targetDocument = getDocument(target.element); - if (target && targetDocument) { - return { source, target, targetDocument }; - } - } - return undefined; - } -} diff --git a/packages/schema/src/language-server/zmodel-linker.ts b/packages/schema/src/language-server/zmodel-linker.ts index 7730acf33..2dcaf6c81 100644 --- a/packages/schema/src/language-server/zmodel-linker.ts +++ b/packages/schema/src/language-server/zmodel-linker.ts @@ -129,10 +129,6 @@ export class ZModelLinker extends DefaultLinker { document: LangiumDocument, extraScopes: ScopeProvider[] = [] ) { - if (node.$resolvedType) { - return; - } - switch (node.$type) { case LiteralExpr: this.resolveLiteral(node as LiteralExpr); diff --git a/packages/schema/src/language-server/zmodel-module.ts b/packages/schema/src/language-server/zmodel-module.ts index f8a159263..0a4091750 100644 --- a/packages/schema/src/language-server/zmodel-module.ts +++ b/packages/schema/src/language-server/zmodel-module.ts @@ -30,7 +30,6 @@ import { import { TextDocuments } from 'vscode-languageserver'; import { TextDocument } from 'vscode-languageserver-textdocument'; import ZModelWorkspaceManager from './zmodel-workspace-manager'; -import ZModelDefinitionProvider from './lsp/zmodel-definition-provider'; /** * Declaration of custom services - add your own service classes here. @@ -65,10 +64,6 @@ export const ZModelModule: Module< new ZModelValidationRegistry(services), ZModelValidator: () => new ZModelValidator(), }, - lsp: { - DefinitionProvider: (services) => - new ZModelDefinitionProvider(services), - }, }; // this duplicates createDefaultSharedModule except that a custom WorkspaceManager is used