|
20 | 20 | ApiResponseGetLineage, |
21 | 21 | ApiResponseGetModels, |
22 | 22 | ) |
| 23 | +from sqlmesh.lsp.completions import get_sql_completions |
23 | 24 | from sqlmesh.lsp.context import ( |
24 | 25 | LSPContext, |
25 | 26 | ModelTarget, |
@@ -456,6 +457,47 @@ def workspace_diagnostic( |
456 | 457 | ) |
457 | 458 | return types.WorkspaceDiagnosticReport(items=[]) |
458 | 459 |
|
| 460 | + @self.server.feature(types.TEXT_DOCUMENT_COMPLETION) |
| 461 | + def completion( |
| 462 | + ls: LanguageServer, params: types.CompletionParams |
| 463 | + ) -> t.Optional[types.CompletionList]: |
| 464 | + """Handle completion requests from the client.""" |
| 465 | + try: |
| 466 | + uri = URI(params.text_document.uri) |
| 467 | + context = self._context_get_or_load(uri) |
| 468 | + |
| 469 | + # Get completions using the existing completions module |
| 470 | + completion_response = context.get_autocomplete(uri) |
| 471 | + |
| 472 | + completion_items = [] |
| 473 | + # Add model completions |
| 474 | + for model in completion_response.models: |
| 475 | + completion_items.append( |
| 476 | + types.CompletionItem( |
| 477 | + label=model, |
| 478 | + kind=types.CompletionItemKind.Reference, |
| 479 | + detail="SQLMesh Model", |
| 480 | + ) |
| 481 | + ) |
| 482 | + # Add keyword completions |
| 483 | + for keyword in completion_response.keywords: |
| 484 | + completion_items.append( |
| 485 | + types.CompletionItem( |
| 486 | + label=keyword, |
| 487 | + kind=types.CompletionItemKind.Keyword, |
| 488 | + detail="SQL Keyword", |
| 489 | + ) |
| 490 | + ) |
| 491 | + |
| 492 | + return types.CompletionList( |
| 493 | + is_incomplete=False, |
| 494 | + items=completion_items, |
| 495 | + ) |
| 496 | + |
| 497 | + except Exception as e: |
| 498 | + get_sql_completions(None, URI(params.text_document.uri)) |
| 499 | + return None |
| 500 | + |
459 | 501 | def _get_diagnostics_for_uri(self, uri: URI) -> t.Tuple[t.List[types.Diagnostic], int]: |
460 | 502 | """Get diagnostics for a specific URI, returning (diagnostics, result_id). |
461 | 503 |
|
|
0 commit comments