Skip to content

Commit 0bbbf9a

Browse files
authored
refactor(lsp): move autocomplete functions about (#4603)
1 parent 9e2a5f9 commit 0bbbf9a

4 files changed

Lines changed: 23 additions & 6 deletions

File tree

sqlmesh/lsp/completions.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
from sqlmesh.lsp.uri import URI
77

88

9-
def get_sql_completions(context: t.Optional[LSPContext], file_uri: URI) -> AllModelsResponse:
9+
def get_sql_completions(
10+
context: t.Optional[LSPContext], file_uri: t.Optional[URI]
11+
) -> AllModelsResponse:
1012
"""
1113
Return a list of completions for a given file.
1214
"""

sqlmesh/lsp/context.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from sqlmesh.core.model.definition import SqlModel
77
from sqlmesh.core.linter.definition import AnnotatedRuleViolation
88
from sqlmesh.lsp.custom import RenderModelEntry, ModelForRendering
9+
from sqlmesh.lsp.custom import AllModelsResponse, RenderModelEntry
910
from sqlmesh.lsp.uri import URI
1011

1112

@@ -174,3 +175,16 @@ def list_of_models_for_rendering(self) -> t.List[ModelForRendering]:
174175
for audit in self.context.standalone_audits.values()
175176
if audit._path is not None
176177
]
178+
179+
def get_autocomplete(self, uri: t.Optional[URI]) -> AllModelsResponse:
180+
"""Get autocomplete suggestions for a file.
181+
182+
Args:
183+
uri: The URI of the file to get autocomplete suggestions for.
184+
185+
Returns:
186+
AllModelsResponse containing models and keywords.
187+
"""
188+
from sqlmesh.lsp.completions import get_sql_completions
189+
190+
return get_sql_completions(self, uri)

sqlmesh/lsp/main.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
ApiResponseGetLineage,
2121
ApiResponseGetModels,
2222
)
23-
from sqlmesh.lsp.completions import get_sql_completions
2423
from sqlmesh.lsp.context import (
2524
LSPContext,
2625
ModelTarget,
@@ -115,9 +114,11 @@ def all_models(ls: LanguageServer, params: AllModelsRequest) -> AllModelsRespons
115114
uri = URI(params.textDocument.uri)
116115
try:
117116
context = self._context_get_or_load(uri)
118-
return get_sql_completions(context, uri)
117+
return context.get_autocomplete(uri)
119118
except Exception as e:
120-
return get_sql_completions(None, uri)
119+
from sqlmesh.lsp.completions import get_sql_completions
120+
121+
return get_sql_completions(None, URI(params.textDocument.uri))
121122

122123
@self.server.feature(RENDER_MODEL_FEATURE)
123124
def render_model(ls: LanguageServer, params: RenderModelRequest) -> RenderModelResponse:

tests/lsp/test_completions.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def test_get_sql_completions_with_context_no_file_uri():
2626
context = Context(paths=["examples/sushi"])
2727
lsp_context = LSPContext(context)
2828

29-
completions = get_sql_completions(lsp_context, None)
29+
completions = lsp_context.get_autocomplete(None)
3030
assert len(completions.keywords) > len(TOKENIZER_KEYWORDS)
3131
assert "sushi.active_customers" in completions.models
3232
assert "sushi.customers" in completions.models
@@ -38,6 +38,6 @@ def test_get_sql_completions_with_context_and_file_uri():
3838
lsp_context = LSPContext(context)
3939

4040
file_uri = next(key for key in lsp_context.map.keys() if key.name == "active_customers.sql")
41-
completions = get_sql_completions(lsp_context, URI.from_path(file_uri))
41+
completions = lsp_context.get_autocomplete(URI.from_path(file_uri))
4242
assert len(completions.keywords) > len(TOKENIZER_KEYWORDS)
4343
assert "sushi.active_customers" not in completions.models

0 commit comments

Comments
 (0)