From d83b7eeed07a8c4b1c07c2bc274cabdf8e5ff7f5 Mon Sep 17 00:00:00 2001 From: Yiming Date: Tue, 15 Oct 2024 12:42:36 -0700 Subject: [PATCH] fix: VSCode extension fails to resolve imports from npm packages in pnpm workspaces (#1779) --- packages/schema/src/utils/ast-utils.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/schema/src/utils/ast-utils.ts b/packages/schema/src/utils/ast-utils.ts index e7f24b72..2ab47480 100644 --- a/packages/schema/src/utils/ast-utils.ts +++ b/packages/schema/src/utils/ast-utils.ts @@ -30,7 +30,7 @@ import { Mutable, Reference, } from 'langium'; -import { isAbsolute } from 'node:path'; +import path from 'node:path'; import { URI, Utils } from 'vscode-uri'; import { findNodeModulesFile } from './pkg-utils'; @@ -184,9 +184,16 @@ export function resolveImportUri(imp: ModelImport): URI | undefined { if ( !imp.path.startsWith('.') && // Respect relative paths - !isAbsolute(imp.path) // Respect Absolute paths + !path.isAbsolute(imp.path) // Respect Absolute paths ) { - imp.path = findNodeModulesFile(imp.path) ?? imp.path; + // use the current model's path as the search context + const contextPath = imp.$container.$document + ? path.dirname(imp.$container.$document.uri.fsPath) + : process.cwd(); + imp.path = findNodeModulesFile(imp.path, contextPath) ?? imp.path; + if (imp.path) { + console.log('Loaded import from:', imp.path); + } } const dirUri = Utils.dirname(getDocument(imp).uri);