Skip to content

Commit a2c123d

Browse files
committed
Migrate LSP inlay hints to API server
1 parent dc6a6ef commit a2c123d

2 files changed

Lines changed: 42 additions & 36 deletions

File tree

src/finecode/lsp_server/endpoints/inlay_hints.py

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
from loguru import logger
66
from lsprotocol import types
77

8-
from finecode.api_server import find_project
9-
from finecode.api_server.services import run_service
108
from finecode.lsp_server import global_state, pygls_types_utils
119

1210
if TYPE_CHECKING:
@@ -47,31 +45,39 @@ async def document_inlay_hint(
4745
ls: LanguageServer, params: types.InlayHintParams
4846
) -> types.InlayHintResult:
4947
logger.trace(f"Document inlay hints requested: {params}")
48+
await global_state.server_initialized.wait()
49+
5050
file_path = pygls_types_utils.uri_str_to_path(params.text_document.uri)
51+
52+
if global_state.api_client is None:
53+
logger.error("Inlay hints requested but API client not connected")
54+
return None
55+
56+
project_name = await global_state.api_client.find_project_for_file(str(file_path))
57+
if project_name is None:
58+
# Not all files belong to a project with this action — not an error.
59+
return []
60+
5161
try:
52-
response = await run_service.find_action_project_and_run(
53-
file_path=file_path,
54-
action_name="text_document_inlay_hint",
62+
response = await global_state.api_client.run_action(
63+
action="text_document_inlay_hint",
64+
project=project_name,
5565
params=inlay_hint_params_to_dict(params),
56-
run_trigger=run_service.RunActionTrigger.SYSTEM,
57-
dev_env=run_service.DevEnv.IDE,
58-
ws_context=global_state.ws_context,
59-
initialize_all_handlers=True,
66+
options={"trigger": "system", "dev_env": "ide"},
6067
)
61-
except find_project.FileHasNotActionException:
62-
# ignore this exception because client requests inlay hints for all workspace
63-
# files and not neccessary all projects in ws have this action. So this is not
64-
# an real error.
65-
return []
66-
except Exception as error: # TODO
68+
except Exception as error:
6769
logger.error(f"Error getting document inlay hints {file_path}: {error}")
6870
return None
6971

7072
if response is None:
7173
return []
7274

73-
hints = response.json().get("hints", None)
74-
return [dict_to_inlay_hint(hint) for hint in hints] if hints is not None else None
75+
json_result = (response.get("resultByFormat") or {}).get("json")
76+
if json_result is None:
77+
return []
78+
79+
hints = json_result.get("hints")
80+
return [dict_to_inlay_hint(hint) for hint in hints] if hints is not None else []
7581

7682

7783
async def inlay_hint_resolve(

src/finecode/lsp_server/lsp_server.py

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@
1212
from finecode.api_client import ApiClient
1313
from finecode.lsp_server import global_state, schemas
1414
from finecode.lsp_server.endpoints import action_tree as action_tree_endpoints
15-
# from finecode.lsp_server.endpoints import code_actions as code_actions_endpoints
16-
# from finecode.lsp_server.endpoints import code_lens as code_lens_endpoints
15+
from finecode.lsp_server.endpoints import code_actions as code_actions_endpoints
16+
from finecode.lsp_server.endpoints import code_lens as code_lens_endpoints
1717
from finecode.lsp_server.endpoints import diagnostics as diagnostics_endpoints
1818
from finecode.lsp_server.endpoints import document_sync as document_sync_endpoints
1919
from finecode.lsp_server.endpoints import formatting as formatting_endpoints
20-
# from finecode.lsp_server.endpoints import inlay_hints as inlay_hints_endpoints
20+
from finecode.lsp_server.endpoints import inlay_hints as inlay_hints_endpoints
2121

2222

2323
def position_from_client_units(
@@ -77,20 +77,20 @@ def create_lsp_server() -> CustomLanguageServer:
7777
register_document_did_close_feature(document_sync_endpoints.document_did_close)
7878

7979
# code actions
80-
# register_document_code_action_feature = server.feature(
81-
# types.TEXT_DOCUMENT_CODE_ACTION
82-
# )
83-
# register_document_code_action_feature(code_actions_endpoints.document_code_action)
80+
register_document_code_action_feature = server.feature(
81+
types.TEXT_DOCUMENT_CODE_ACTION
82+
)
83+
register_document_code_action_feature(code_actions_endpoints.document_code_action)
8484

85-
# register_code_action_resolve_feature = server.feature(types.CODE_ACTION_RESOLVE)
86-
# register_code_action_resolve_feature(code_actions_endpoints.code_action_resolve)
85+
register_code_action_resolve_feature = server.feature(types.CODE_ACTION_RESOLVE)
86+
register_code_action_resolve_feature(code_actions_endpoints.code_action_resolve)
8787

8888
# code lens
89-
# register_document_code_lens_feature = server.feature(types.TEXT_DOCUMENT_CODE_LENS)
90-
# register_document_code_lens_feature(code_lens_endpoints.document_code_lens)
89+
register_document_code_lens_feature = server.feature(types.TEXT_DOCUMENT_CODE_LENS)
90+
register_document_code_lens_feature(code_lens_endpoints.document_code_lens)
9191

92-
# register_code_lens_resolve_feature = server.feature(types.CODE_LENS_RESOLVE)
93-
# register_code_lens_resolve_feature(code_lens_endpoints.code_lens_resolve)
92+
register_code_lens_resolve_feature = server.feature(types.CODE_LENS_RESOLVE)
93+
register_code_lens_resolve_feature(code_lens_endpoints.code_lens_resolve)
9494

9595
# diagnostics
9696
register_text_document_diagnostic_feature = server.feature(
@@ -102,13 +102,13 @@ def create_lsp_server() -> CustomLanguageServer:
102102
register_workspace_diagnostic_feature(diagnostics_endpoints.workspace_diagnostic)
103103

104104
# inline hints
105-
# register_document_inlay_hint_feature = server.feature(
106-
# types.TEXT_DOCUMENT_INLAY_HINT
107-
# )
108-
# register_document_inlay_hint_feature(inlay_hints_endpoints.document_inlay_hint)
105+
register_document_inlay_hint_feature = server.feature(
106+
types.TEXT_DOCUMENT_INLAY_HINT
107+
)
108+
register_document_inlay_hint_feature(inlay_hints_endpoints.document_inlay_hint)
109109

110-
# register_inlay_hint_feature = server.feature(types.INLAY_HINT_RESOLVE)
111-
# register_inlay_hint_feature(inlay_hints_endpoints.inlay_hint_resolve)
110+
register_inlay_hint_feature = server.feature(types.INLAY_HINT_RESOLVE)
111+
register_inlay_hint_feature(inlay_hints_endpoints.inlay_hint_resolve)
112112

113113
# Finecode commands exposed to the IDE
114114
register_list_actions_cmd = server.command("finecode.getActions")

0 commit comments

Comments
 (0)