Skip to content

Commit 784e2b7

Browse files
authored
fix(vscode): render models without descriptions (#4593)
1 parent 7877b06 commit 784e2b7

5 files changed

Lines changed: 40 additions & 5 deletions

File tree

sqlmesh/lsp/custom.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class RenderModelEntry(PydanticModel):
3636

3737
name: str
3838
fqn: str
39-
description: str
39+
description: t.Optional[str] = None
4040
rendered_query: str
4141

4242

vscode/extension/src/commands/renderModel.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,10 @@ export function renderModel(lspClient?: LSPClient) {
4242
// If multiple models, let user choose
4343
let selectedModel: RenderModelEntry
4444
if (result.value.models.length > 1) {
45-
const items = result.value.models.map((model: RenderModelEntry) => ({
45+
const items = result.value.models.map(model => ({
4646
label: model.name,
4747
description: model.fqn,
48-
detail: model.description,
48+
detail: model.description ? model.description : undefined,
4949
model: model,
5050
}))
5151

vscode/extension/src/lsp/custom.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ interface RenderModelResponse {
2121
export interface RenderModelEntry {
2222
name: string
2323
fqn: string
24-
description: string
24+
description: string | null | undefined
2525
rendered_query: string
2626
}
2727

vscode/extension/tests/render.spec.ts

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,37 @@ test('Render works correctly', async () => {
3535
} finally {
3636
await fs.remove(tempDir);
3737
}
38-
});
38+
});
39+
40+
test('Render works correctly with model without a description', async () => {
41+
const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'vscode-test-sushi-'));
42+
await fs.copy(SUSHI_SOURCE_PATH, tempDir);
43+
44+
try {
45+
const { window, close } = await startVSCode(tempDir);
46+
47+
// Wait for the models folder to be visible
48+
await window.waitForSelector('text=models');
49+
50+
// Click on the models folder, excluding external_models
51+
await window.getByRole('treeitem', { name: 'models', exact: true }).locator('a').click();
52+
53+
// Open the latest_order model
54+
await window.getByRole('treeitem', { name: 'latest_order.sql', exact: true }).locator('a').click();
55+
56+
await window.waitForSelector('text=custom_full_with_custom_kind');
57+
await window.waitForSelector('text=Loaded SQLMesh Context')
58+
59+
// Render the model
60+
await window.keyboard.press(process.platform === 'darwin' ? 'Meta+Shift+P' : 'Control+Shift+P');
61+
await window.keyboard.type('Render Model');
62+
await window.keyboard.press('Enter');
63+
64+
// Check if the model is rendered correctly
65+
await expect(window.locator('text="orders"."id" AS "id",')).toBeVisible();
66+
67+
await close();
68+
} finally {
69+
await fs.remove(tempDir);
70+
}
71+
});

vscode/extension/tests/utils.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ export const startVSCode = async (workspaceDir: string): Promise<{
4040
args,
4141
});
4242
const window = await electronApp.firstWindow();
43+
await window.waitForLoadState('domcontentloaded');
44+
await window.waitForLoadState('networkidle');
4345
return { window, close: async () => {
4446
await electronApp.close();
4547
await fs.removeSync(userDataDir);

0 commit comments

Comments
 (0)