Skip to content

Commit 7277753

Browse files
committed
Migrate last LSP commands to API server
1 parent a2c123d commit 7277753

2 files changed

Lines changed: 127 additions & 32 deletions

File tree

src/finecode/lsp_server/endpoints/action_tree.py

Lines changed: 81 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,94 @@ async def list_actions(ls: LanguageServer, params):
1414
# if the list contains only one element. Test after migration from pygls
1515
parent_node_id = params # params[0]
1616

17-
# Prefer API server if connected.
1817
if global_state.api_client is None:
1918
raise Exception()
2019

2120
response = await global_state.api_client.get_tree(parent_node_id)
2221
return response
2322

2423

24+
async def list_actions_for_position(ls: LanguageServer, params):
25+
logger.info(f"list_actions_for_position {params}")
26+
await global_state.server_initialized.wait()
27+
28+
if global_state.api_client is None:
29+
raise Exception()
30+
31+
response = await global_state.api_client.get_tree(None)
32+
return response
33+
34+
35+
async def run_action_on_file(ls: LanguageServer, params):
36+
logger.info(f"run action on file {params}")
37+
await global_state.server_initialized.wait()
38+
39+
if global_state.api_client is None:
40+
raise Exception()
41+
42+
params_dict = params[0]
43+
action_node_id = params_dict["projectPath"]
44+
action_node_id_parts = action_node_id.split("::")
45+
project_path_str = action_node_id_parts[0]
46+
action_name = action_node_id_parts[1]
47+
48+
document_meta = await ls.protocol.send_request_async(
49+
method="editor/documentMeta", params={}
50+
)
51+
if document_meta is None:
52+
return None
53+
54+
run_params: dict = {"file_paths": [document_meta.uri.path], "target": "files"}
55+
if action_name == "format":
56+
run_params["save"] = False
57+
58+
response = await global_state.api_client.run_action(
59+
action=action_name,
60+
project=project_path_str,
61+
params=run_params,
62+
options={"trigger": "user", "dev_env": "ide"},
63+
)
64+
return response
65+
66+
67+
async def run_action_on_project(ls: LanguageServer, params):
68+
logger.info(f"run action on project {params}")
69+
await global_state.server_initialized.wait()
70+
71+
if global_state.api_client is None:
72+
raise Exception()
73+
74+
params_dict = params[0]
75+
action_node_id = params_dict["projectPath"]
76+
action_node_id_parts = action_node_id.split("::")
77+
project_path_str = action_node_id_parts[0]
78+
action_name = action_node_id_parts[1]
79+
80+
response = await global_state.api_client.run_action(
81+
action=action_name,
82+
project=project_path_str,
83+
params={"target": "project"},
84+
options={"trigger": "user", "dev_env": "ide"},
85+
)
86+
return response
87+
88+
89+
async def reload_action(ls: LanguageServer, params):
90+
logger.info(f"reload action {params}")
91+
await global_state.server_initialized.wait()
92+
93+
if global_state.api_client is None:
94+
raise Exception()
95+
96+
params_dict = params[0]
97+
action_node_id = params_dict["projectPath"]
98+
99+
await global_state.api_client.request(
100+
"actions/reload", {"action_node_id": action_node_id}
101+
)
102+
return {}
103+
104+
25105
# async def list_actions_for_position(ls: LanguageServer, params):
26106
# logger.info(f"list_actions for position {params}")
27107
# await global_state.server_initialized.wait()

src/finecode/lsp_server/lsp_server.py

Lines changed: 46 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
from finecode.api_server import api_server
1212
from finecode.api_client import ApiClient
13-
from finecode.lsp_server import global_state, schemas
13+
from finecode.lsp_server import global_state
1414
from finecode.lsp_server.endpoints import action_tree as action_tree_endpoints
1515
from finecode.lsp_server.endpoints import code_actions as code_actions_endpoints
1616
from finecode.lsp_server.endpoints import code_lens as code_lens_endpoints
@@ -114,34 +114,34 @@ def create_lsp_server() -> CustomLanguageServer:
114114
register_list_actions_cmd = server.command("finecode.getActions")
115115
register_list_actions_cmd(action_tree_endpoints.list_actions)
116116

117-
# register_list_actions_for_position_cmd = server.command(
118-
# "finecode.getActionsForPosition"
119-
# )
120-
# register_list_actions_for_position_cmd(
121-
# action_tree_endpoints.list_actions_for_position
122-
# )
117+
register_list_actions_for_position_cmd = server.command(
118+
"finecode.getActionsForPosition"
119+
)
120+
register_list_actions_for_position_cmd(
121+
action_tree_endpoints.list_actions_for_position
122+
)
123123

124-
# register_run_action_on_file_cmd = server.command("finecode.runActionOnFile")
125-
# register_run_action_on_file_cmd(action_tree_endpoints.run_action_on_file)
124+
register_run_action_on_file_cmd = server.command("finecode.runActionOnFile")
125+
register_run_action_on_file_cmd(action_tree_endpoints.run_action_on_file)
126126

127-
# register_run_action_on_project_cmd = server.command("finecode.runActionOnProject")
128-
# register_run_action_on_project_cmd(action_tree_endpoints.run_action_on_project)
127+
register_run_action_on_project_cmd = server.command("finecode.runActionOnProject")
128+
register_run_action_on_project_cmd(action_tree_endpoints.run_action_on_project)
129129

130-
# register_reload_action_cmd = server.command("finecode.reloadAction")
131-
# register_reload_action_cmd(action_tree_endpoints.reload_action)
130+
register_reload_action_cmd = server.command("finecode.reloadAction")
131+
register_reload_action_cmd(action_tree_endpoints.reload_action)
132132

133-
# register_reset_cmd = server.command("finecode.reset")
134-
# register_reset_cmd(reset)
133+
register_reset_cmd = server.command("finecode.reset")
134+
register_reset_cmd(reset)
135135

136-
# register_restart_extension_runner_cmd = server.command(
137-
# "finecode.restartExtensionRunner"
138-
# )
139-
# register_restart_extension_runner_cmd(restart_extension_runner)
140-
141-
# register_restart_and_debug_extension_runner_cmd = server.command(
142-
# "finecode.restartAndDebugExtensionRunner"
143-
# )
144-
# register_restart_and_debug_extension_runner_cmd(restart_and_debug_extension_runner)
136+
register_restart_extension_runner_cmd = server.command(
137+
"finecode.restartExtensionRunner"
138+
)
139+
register_restart_extension_runner_cmd(restart_extension_runner)
140+
141+
register_restart_and_debug_extension_runner_cmd = server.command(
142+
"finecode.restartAndDebugExtensionRunner"
143+
)
144+
register_restart_and_debug_extension_runner_cmd(restart_and_debug_extension_runner)
145145

146146
register_shutdown_feature = server.feature(types.SHUTDOWN)
147147
register_shutdown_feature(_on_shutdown)
@@ -345,34 +345,49 @@ async def reset(ls: LanguageServer, params):
345345
logger.info("Reset WM")
346346
await global_state.server_initialized.wait()
347347

348+
if global_state.api_client is None:
349+
logger.error("Reset requested but API client not connected")
350+
return
351+
352+
await global_state.api_client.request("server/reset", {})
353+
348354

349355
async def restart_extension_runner(ls: LanguageServer, tree_node, param2):
350356
logger.info(f"restart extension runner {tree_node}")
351357
await global_state.server_initialized.wait()
352358

359+
if global_state.api_client is None:
360+
logger.error("Restart runner requested but API client not connected")
361+
return
362+
353363
runner_id = tree_node['projectPath']
354364
splitted_runner_id = runner_id.split('::')
355365
runner_working_dir_str = splitted_runner_id[0]
356-
runner_working_dir_path = Path(runner_working_dir_str)
357366
env_name = splitted_runner_id[-1]
358367

359-
# TODO
360-
# await runner_manager.restart_extension_runner(runner_working_dir_path=runner_working_dir_path, env_name=env_name, ws_context=global_state.ws_context)
368+
await global_state.api_client.request(
369+
"runners/restart",
370+
{"runner_working_dir": runner_working_dir_str, "env_name": env_name},
371+
)
361372

362373

363374
async def restart_and_debug_extension_runner(ls: LanguageServer, tree_node, params2):
364375
logger.info(f"restart and debug extension runner {tree_node} {params2}")
365376
await global_state.server_initialized.wait()
366377

378+
if global_state.api_client is None:
379+
logger.error("Restart+debug runner requested but API client not connected")
380+
return
381+
367382
runner_id = tree_node['projectPath']
368383
splitted_runner_id = runner_id.split('::')
369384
runner_working_dir_str = splitted_runner_id[0]
370-
runner_working_dir_path = Path(runner_working_dir_str)
371385
env_name = splitted_runner_id[-1]
372386

373-
logger.info(f'start debugging {runner_working_dir_path} {runner_id} {env_name}')
374-
# TODO
375-
# await runner_manager.restart_extension_runner(runner_working_dir_path=runner_working_dir_path, env_name=env_name, ws_context=global_state.ws_context, debug=True)
387+
await global_state.api_client.request(
388+
"runners/restart",
389+
{"runner_working_dir": runner_working_dir_str, "env_name": env_name, "debug": True},
390+
)
376391

377392

378393
async def send_user_message_notification(

0 commit comments

Comments
 (0)