From a0714514b63013b5f2ef1510ab026f52ab250287 Mon Sep 17 00:00:00 2001 From: ymc9 <104139426+ymc9@users.noreply.github.com> Date: Tue, 15 Oct 2024 11:33:35 -0700 Subject: [PATCH 1/2] fix: VSCode extension fails to resolve imports from npm packages in pnpm workspaces Fixes #1760 #1627 --- packages/schema/src/utils/ast-utils.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/schema/src/utils/ast-utils.ts b/packages/schema/src/utils/ast-utils.ts index e7f24b72a..4138a0e82 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, { isAbsolute } from 'node:path'; import { URI, Utils } from 'vscode-uri'; import { findNodeModulesFile } from './pkg-utils'; @@ -186,7 +186,14 @@ export function resolveImportUri(imp: ModelImport): URI | undefined { !imp.path.startsWith('.') && // Respect relative paths !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); From 8cab8c0cb036f4465c1446e73b78984a548eaddd Mon Sep 17 00:00:00 2001 From: ymc9 <104139426+ymc9@users.noreply.github.com> Date: Tue, 15 Oct 2024 11:37:10 -0700 Subject: [PATCH 2/2] update --- packages/schema/src/utils/ast-utils.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/schema/src/utils/ast-utils.ts b/packages/schema/src/utils/ast-utils.ts index 4138a0e82..2ab474801 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 path, { isAbsolute } from 'node:path'; +import path from 'node:path'; import { URI, Utils } from 'vscode-uri'; import { findNodeModulesFile } from './pkg-utils'; @@ -184,7 +184,7 @@ 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 ) { // use the current model's path as the search context const contextPath = imp.$container.$document