@@ -434,6 +434,50 @@ def workspace_diagnostic(
434434 )
435435 return types .WorkspaceDiagnosticReport (items = [])
436436
437+ @self .server .feature (types .TEXT_DOCUMENT_COMPLETION )
438+ def completion (
439+ ls : LanguageServer , params : types .CompletionParams
440+ ) -> t .Optional [types .CompletionList ]:
441+ """Handle completion requests from the client."""
442+ try :
443+ uri = URI (params .text_document .uri )
444+ context = self ._context_get_or_load (uri )
445+
446+ # Get completions using the existing completions module
447+ completion_response = get_sql_completions (context , uri )
448+
449+ # Convert to LSP completion items
450+ completion_items = []
451+
452+ # Add model completions
453+ for model in completion_response .models :
454+ completion_items .append (
455+ types .CompletionItem (
456+ label = model ,
457+ kind = types .CompletionItemKind .Reference ,
458+ detail = "SQLMesh Model" ,
459+ )
460+ )
461+
462+ # Add keyword completions
463+ for keyword in completion_response .keywords :
464+ completion_items .append (
465+ types .CompletionItem (
466+ label = keyword ,
467+ kind = types .CompletionItemKind .Keyword ,
468+ detail = "SQL Keyword" ,
469+ )
470+ )
471+
472+ return types .CompletionList (
473+ is_incomplete = False ,
474+ items = completion_items ,
475+ )
476+
477+ except Exception as e :
478+ ls .show_message (f"Error getting completions: { e } " , types .MessageType .Error )
479+ return None
480+
437481 def _get_diagnostics_for_uri (self , uri : URI ) -> t .Tuple [t .List [types .Diagnostic ], int ]:
438482 """Get diagnostics for a specific URI, returning (diagnostics, result_id).
439483
0 commit comments