@@ -2,8 +2,12 @@ import * as vscode from 'vscode'
22import { LSPClient } from '../lsp/lsp'
33import { isErr } from '@bus/result'
44import { RenderModelEntry } from '../lsp/custom'
5+ import { RenderedModelProvider } from '../providers/renderedModelProvider'
56
6- export function renderModel ( lspClient ?: LSPClient ) {
7+ export function renderModel (
8+ lspClient ?: LSPClient ,
9+ renderedModelProvider ?: RenderedModelProvider ,
10+ ) {
711 return async ( ) => {
812 // Get the current active editor
913 const activeEditor = vscode . window . activeTextEditor
@@ -62,29 +66,43 @@ export function renderModel(lspClient?: LSPClient) {
6266 selectedModel = result . value . models [ 0 ]
6367 }
6468
65- // Create a new untitled document with the rendered SQL
66- const document = await vscode . workspace . openTextDocument ( {
67- language : 'sql' ,
68- content : selectedModel . rendered_query ,
69- } )
69+ if ( ! renderedModelProvider ) {
70+ vscode . window . showErrorMessage ( 'Rendered model provider not available' )
71+ return
72+ }
73+
74+ // Store the rendered content and get a virtual URI
75+ const uri = renderedModelProvider . storeRenderedModel (
76+ selectedModel . name ,
77+ selectedModel . rendered_query ,
78+ )
79+
80+ // Open the virtual document
81+ const document = await vscode . workspace . openTextDocument ( uri )
7082
7183 // Determine the view column for side-by-side display
72- let viewColumn : vscode . ViewColumn
73- if ( activeEditor ) {
74- // Open beside the current editor
75- viewColumn = activeEditor . viewColumn
76- ? activeEditor . viewColumn + 1
77- : vscode . ViewColumn . Two
78- } else {
79- // If no active editor, open in column two
80- viewColumn = vscode . ViewColumn . Two
84+ // Find the rightmost column with an editor
85+ let maxColumn = vscode . ViewColumn . One
86+ for ( const editor of vscode . window . visibleTextEditors ) {
87+ if ( editor . viewColumn && editor . viewColumn > maxColumn ) {
88+ maxColumn = editor . viewColumn
89+ }
8190 }
8291
92+ // Open in the next column after the rightmost editor
93+ const viewColumn = maxColumn + 1
94+
8395 // Open the document in the editor as a preview (preview: true is default)
8496 await vscode . window . showTextDocument ( document , {
8597 viewColumn : viewColumn ,
8698 preview : true ,
8799 preserveFocus : false ,
88100 } )
101+
102+ // Execute "Keep Open" command to convert preview tab to permanent tab
103+ await vscode . commands . executeCommand ( 'workbench.action.keepEditor' )
104+
105+ // Explicitly set the language mode to SQL for syntax highlighting
106+ await vscode . languages . setTextDocumentLanguage ( document , 'sql' )
89107 }
90108}
0 commit comments