From fe2cd2a60651dd96d085690864d42cae5c65938c Mon Sep 17 00:00:00 2001 From: Ben King <9087625+benfdking@users.noreply.github.com> Date: Thu, 24 Jul 2025 13:32:12 +0100 Subject: [PATCH 1/5] feat(vscode): startup extension on external models files --- vscode/extension/package.json | 3 +- vscode/extension/src/lsp/lsp.ts | 12 +++- .../extension/tests/external_models.spec.ts | 68 +++++++++++++++++++ 3 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 vscode/extension/tests/external_models.spec.ts diff --git a/vscode/extension/package.json b/vscode/extension/package.json index c7285ad7c7..1db45abcf4 100644 --- a/vscode/extension/package.json +++ b/vscode/extension/package.json @@ -18,7 +18,8 @@ ], "activationEvents": [ "onLanguage:sql", - "onLanguage:python" + "onLanguage:python", + "onLanguage:yaml" ], "extensionKind": [ "workspace" diff --git a/vscode/extension/src/lsp/lsp.ts b/vscode/extension/src/lsp/lsp.ts index ccf3981eb2..8195876f48 100644 --- a/vscode/extension/src/lsp/lsp.ts +++ b/vscode/extension/src/lsp/lsp.ts @@ -96,7 +96,17 @@ export class LSPClient implements Disposable { }, } const clientOptions: LanguageClientOptions = { - documentSelector: [{ scheme: 'file', pattern: `**/*.sql` }], + documentSelector: [ + { scheme: 'file', pattern: `**/*.sql` }, + { + scheme: 'file', + pattern: '**/external_models.yaml', + }, + { + scheme: 'file', + pattern: '**/external_models.yml', + }, + ], diagnosticCollectionName: 'sqlmesh', outputChannel: outputChannel, } diff --git a/vscode/extension/tests/external_models.spec.ts b/vscode/extension/tests/external_models.spec.ts new file mode 100644 index 0000000000..6e16428c4d --- /dev/null +++ b/vscode/extension/tests/external_models.spec.ts @@ -0,0 +1,68 @@ +import os from 'os' +import { openServerPage, SUSHI_SOURCE_PATH } from './utils' +import { createPythonInterpreterSettingsSpecifier } from './utils_code_server' +import { test, expect } from './fixtures' +import fs from 'fs-extra' +import path from 'path' + +test.describe('External model files trigger lsp', () => { + test('external_models.yaml', async ({ page, sharedCodeServer }) => { + const file = 'external_models.yaml' + + const tempDir = await fs.mkdtemp( + path.join(os.tmpdir(), 'vscode-test-sushi-'), + ) + await fs.copy(SUSHI_SOURCE_PATH, tempDir) + + // Assert external_models.yaml exists + const externalModelsYamlPath = path.join(tempDir, file) + expect(await fs.pathExists(externalModelsYamlPath)).toBe(true) + + await createPythonInterpreterSettingsSpecifier(tempDir) + await openServerPage(page, tempDir, sharedCodeServer) + + // Wait for the models folder to be visible + await page.waitForSelector('text=models') + + // Click on the models folder, excluding external_models + await page + .getByRole('treeitem', { name: file, exact: true }) + .locator('a') + .click() + + await page.waitForSelector('text=raw.demographics') + await page.waitForSelector('text=Loaded SQLMesh Context') + }) + + test('external_models.yml', async ({ page, sharedCodeServer }) => { + const file = 'external_models.yml' + + const tempDir = await fs.mkdtemp( + path.join(os.tmpdir(), 'vscode-test-sushi-'), + ) + await fs.copy(SUSHI_SOURCE_PATH, tempDir) + + // Move external_models.yaml to external_models.yml + const externalModelsYamlPath = path.join(tempDir, 'external_models.yaml') + const externalModelsYmlPath = path.join(tempDir, file) + await fs.rename(externalModelsYamlPath, externalModelsYmlPath) + + // Assert external_models.yml exists + expect(await fs.pathExists(externalModelsYmlPath)).toBe(true) + + await createPythonInterpreterSettingsSpecifier(tempDir) + await openServerPage(page, tempDir, sharedCodeServer) + + // Wait for the models folder to be visible + await page.waitForSelector('text=models') + + // Click on the models folder, excluding external_models + await page + .getByRole('treeitem', { name: file, exact: true }) + .locator('a') + .click() + + await page.waitForSelector('text=raw.demographics') + await page.waitForSelector('text=Loaded SQLMesh Context') + }) +}) From 0dd99eb3a193b02b8faa0e806886b516a6b69184 Mon Sep 17 00:00:00 2001 From: Ben <9087625+benfdking@users.noreply.github.com> Date: Thu, 24 Jul 2025 13:36:56 +0100 Subject: [PATCH 2/5] Update vscode/extension/tests/external_models.spec.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- vscode/extension/tests/external_models.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vscode/extension/tests/external_models.spec.ts b/vscode/extension/tests/external_models.spec.ts index 6e16428c4d..6366d6939e 100644 --- a/vscode/extension/tests/external_models.spec.ts +++ b/vscode/extension/tests/external_models.spec.ts @@ -21,7 +21,7 @@ test.describe('External model files trigger lsp', () => { await createPythonInterpreterSettingsSpecifier(tempDir) await openServerPage(page, tempDir, sharedCodeServer) - // Wait for the models folder to be visible + // Wait for the models folder to be visible await page.waitForSelector('text=models') // Click on the models folder, excluding external_models From 50d9f29eba474c37e80e2cd900c5451c19421727 Mon Sep 17 00:00:00 2001 From: Ben <9087625+benfdking@users.noreply.github.com> Date: Thu, 24 Jul 2025 13:37:01 +0100 Subject: [PATCH 3/5] Update vscode/extension/tests/external_models.spec.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- vscode/extension/tests/external_models.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vscode/extension/tests/external_models.spec.ts b/vscode/extension/tests/external_models.spec.ts index 6366d6939e..26b67c8845 100644 --- a/vscode/extension/tests/external_models.spec.ts +++ b/vscode/extension/tests/external_models.spec.ts @@ -24,7 +24,7 @@ test.describe('External model files trigger lsp', () => { // Wait for the models folder to be visible await page.waitForSelector('text=models') - // Click on the models folder, excluding external_models + // Click on the external_models file (e.g., external_models.yaml or external_models.yml) await page .getByRole('treeitem', { name: file, exact: true }) .locator('a') From e99cb55ff9d63eebd1d6ba02ca4fd69d5be7f0b8 Mon Sep 17 00:00:00 2001 From: Ben <9087625+benfdking@users.noreply.github.com> Date: Thu, 24 Jul 2025 13:37:09 +0100 Subject: [PATCH 4/5] Update vscode/extension/tests/external_models.spec.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- vscode/extension/tests/external_models.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vscode/extension/tests/external_models.spec.ts b/vscode/extension/tests/external_models.spec.ts index 26b67c8845..6b7d274ad7 100644 --- a/vscode/extension/tests/external_models.spec.ts +++ b/vscode/extension/tests/external_models.spec.ts @@ -53,7 +53,7 @@ test.describe('External model files trigger lsp', () => { await createPythonInterpreterSettingsSpecifier(tempDir) await openServerPage(page, tempDir, sharedCodeServer) - // Wait for the models folder to be visible + // Wait for the models folder to be visible await page.waitForSelector('text=models') // Click on the models folder, excluding external_models From 287d118543cbd2c46c139dbd48fbb902b221b553 Mon Sep 17 00:00:00 2001 From: Ben <9087625+benfdking@users.noreply.github.com> Date: Thu, 24 Jul 2025 13:37:16 +0100 Subject: [PATCH 5/5] Update vscode/extension/tests/external_models.spec.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- vscode/extension/tests/external_models.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vscode/extension/tests/external_models.spec.ts b/vscode/extension/tests/external_models.spec.ts index 6b7d274ad7..dc087e836a 100644 --- a/vscode/extension/tests/external_models.spec.ts +++ b/vscode/extension/tests/external_models.spec.ts @@ -56,7 +56,7 @@ test.describe('External model files trigger lsp', () => { // Wait for the models folder to be visible await page.waitForSelector('text=models') - // Click on the models folder, excluding external_models + // Click on the external_models.yml file await page .getByRole('treeitem', { name: file, exact: true }) .locator('a')