Skip to content

Commit 26114c5

Browse files
committed
feat(vscode): add info to hover
1 parent c5d3bdb commit 26114c5

4 files changed

Lines changed: 30 additions & 5 deletions

File tree

sqlmesh/lsp/description.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from sqlmesh.core.model.definition import ExternalModel, PythonModel, SeedModel, SqlModel
2+
import typing as t
3+
4+
5+
def generate_markdown_description(
6+
model: t.Union[SqlModel, ExternalModel, PythonModel, SeedModel],
7+
) -> t.Optional[str]:
8+
columns = model.columns_to_types
9+
columns_table = (
10+
"\n".join([f"| {column} | {type} |" for column, type in columns.items()]) if columns else ""
11+
)
12+
return f"""{model.description}{columns_table and f"\n\n| Column | Type |\n|--------|------|\n{columns_table}" or ""}"""

sqlmesh/lsp/main.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -239,11 +239,12 @@ def hover(ls: LanguageServer, params: types.HoverParams) -> t.Optional[types.Hov
239239
if not references:
240240
return None
241241
reference = references[0]
242-
if not reference.description:
242+
if not reference.markdown_description:
243243
return None
244244
return types.Hover(
245245
contents=types.MarkupContent(
246-
kind=types.MarkupKind.Markdown, value=reference.description
246+
kind=types.MarkupKind.Markdown,
247+
value=reference.markdown_description,
247248
),
248249
range=reference.range,
249250
)

sqlmesh/lsp/reference.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from sqlmesh.core.model.definition import SqlModel
66
from sqlmesh.lsp.context import LSPContext, ModelTarget, AuditTarget
77
from sqlglot import exp
8+
from sqlmesh.lsp.description import generate_markdown_description
89
from sqlmesh.lsp.uri import URI
910
from sqlmesh.utils.pydantic import PydanticModel
1011

@@ -21,7 +22,7 @@ class Reference(PydanticModel):
2122

2223
range: Range
2324
uri: str
24-
description: t.Optional[str] = None
25+
markdown_description: t.Optional[str] = None
2526

2627

2728
def by_position(position: Position) -> t.Callable[[Reference], bool]:
@@ -176,11 +177,13 @@ def get_model_definitions_for_a_path(
176177
catalog_or_db_range = _range_from_token_position_details(catalog_or_db_meta, read_file)
177178
start_pos = catalog_or_db_range.start
178179

180+
description = generate_markdown_description(referenced_model)
181+
179182
references.append(
180183
Reference(
181184
uri=referenced_model_uri.value,
182185
range=Range(start=start_pos, end=end_pos),
183-
description=referenced_model.description,
186+
markdown_description=description,
184187
)
185188
)
186189

tests/lsp/test_reference.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,16 @@ def test_reference_with_alias() -> None:
6060

6161
assert references[0].uri.endswith("orders.py")
6262
assert get_string_from_range(read_file, references[0].range) == "sushi.orders"
63-
assert references[0].description == "Table of sushi orders."
63+
assert references[0].markdown_description == """Table of sushi orders.
64+
65+
| Column | Type |
66+
|--------|------|
67+
| id | INT |
68+
| customer_id | INT |
69+
| waiter_id | INT |
70+
| start_ts | INT |
71+
| end_ts | INT |
72+
| event_date | DATE |"""
6473
assert references[1].uri.endswith("order_items.py")
6574
assert get_string_from_range(read_file, references[1].range) == "sushi.order_items"
6675
assert references[2].uri.endswith("items.py")

0 commit comments

Comments
 (0)