Skip to content

Commit

Permalink
Fix code action params
Browse files Browse the repository at this point in the history
  • Loading branch information
rwols committed Jun 23, 2021
1 parent 8856f73 commit 6aa3ad7
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 29 deletions.
45 changes: 21 additions & 24 deletions plugin/code_actions.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,31 +122,28 @@ def _request_async(

collector = CodeActionsCollector(actions_handler)
with collector:
file_name = view.file_name()
if file_name:
listener = windows.listener_for_view(view)
if listener:
for session in listener.sessions_async('codeActionProvider'):
if on_save_actions:
supported_kinds = session.get_capability('codeActionProvider.codeActionKinds')
matching_kinds = get_matching_kinds(on_save_actions, supported_kinds or [])
if matching_kinds:
params = text_document_code_action_params(
view, file_name, region, [], matching_kinds)
request = Request.codeAction(params, view)
session.send_request_async(
request, *filtering_collector(session.config.name, matching_kinds, collector))
else:
diagnostics = [] # type: Sequence[Diagnostic]
for sb, diags in session_buffer_diagnostics:
if sb.session == session:
diagnostics = diags
break
if only_with_diagnostics and not diagnostics:
continue
params = text_document_code_action_params(view, file_name, region, diagnostics)
listener = windows.listener_for_view(view)
if listener:
for session in listener.sessions_async('codeActionProvider'):
if on_save_actions:
supported_kinds = session.get_capability('codeActionProvider.codeActionKinds')
matching_kinds = get_matching_kinds(on_save_actions, supported_kinds or [])
if matching_kinds:
params = text_document_code_action_params(view, region, [], matching_kinds)
request = Request.codeAction(params, view)
session.send_request_async(request, collector.create_collector(session.config.name))
session.send_request_async(
request, *filtering_collector(session.config.name, matching_kinds, collector))
else:
diagnostics = [] # type: Sequence[Diagnostic]
for sb, diags in session_buffer_diagnostics:
if sb.session == session:
diagnostics = diags
break
if only_with_diagnostics and not diagnostics:
continue
params = text_document_code_action_params(view, region, diagnostics)
request = Request.codeAction(params, view)
session.send_request_async(request, collector.create_collector(session.config.name))
if use_cache:
self._response_cache = (location_cache_key, collector)

Expand Down
5 changes: 1 addition & 4 deletions plugin/core/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -370,15 +370,12 @@ def selection_range_params(view: sublime.View) -> Dict[str, Any]:

def text_document_code_action_params(
view: sublime.View,
file_name: str,
region: sublime.Region,
diagnostics: Sequence[Diagnostic],
on_save_actions: Optional[Sequence[str]] = None
) -> Dict[str, Any]:
params = {
"textDocument": {
"uri": filename_to_uri(file_name)
},
"textDocument": text_document_identifier(view),
"range": region_to_range(view, region).to_lsp(),
"context": {
"diagnostics": diagnostics
Expand Down
28 changes: 27 additions & 1 deletion tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
from LSP.plugin.core.views import range_to_region
from LSP.plugin.core.views import selection_range_params
from LSP.plugin.core.views import text2html
from LSP.plugin.core.views import text_document_code_action_params
from LSP.plugin.core.views import text_document_formatting
from LSP.plugin.core.views import text_document_position_params
from LSP.plugin.core.views import text_document_range_formatting
Expand Down Expand Up @@ -336,7 +337,32 @@ def test_document_color_params(self) -> None:
self.view.settings().set("lsp_uri", filename_to_uri(self.mock_file_name))
self.assertEqual(
document_color_params(self.view),
{"textDocument": {"uri": filename_to_uri(self.view.file_name() or '')}})
{"textDocument": {"uri": filename_to_uri(self.mock_file_name)}})

def test_text_document_code_action_params(self) -> None:
self.view.settings().set("lsp_uri", filename_to_uri(self.mock_file_name))
diagnostic = {
"message": "oops",
"severity": 1,
"range": {
"start": {
"character": 0,
"line": 0
},
"end": {
"character": 1,
"line": 0
}
}
} # type: Diagnostic
self.view.run_command("append", {"characters": "a b c\n"})
params = text_document_code_action_params(
view=self.view,
region=sublime.Region(0, 1),
diagnostics=[diagnostic],
on_save_actions=["refactor"]
)
self.assertEqual(params["textDocument"], {"uri": filename_to_uri(self.mock_file_name)})

def test_format_diagnostic_for_html(self) -> None:
diagnostic1 = {
Expand Down

0 comments on commit 6aa3ad7

Please sign in to comment.