Skip to content

Commit

Permalink
Fix issue #916, some LSP server's range format depend on documentRang…
Browse files Browse the repository at this point in the history
…eFormattingProvider/rangesSupport, some LSP server's range format depend on documentRangeFormattingProvider.
  • Loading branch information
manateelazycat committed Apr 27, 2024
1 parent 386ac48 commit dd70010
Showing 1 changed file with 6 additions and 1 deletion.
7 changes: 6 additions & 1 deletion core/lspserver.py
Original file line number Diff line number Diff line change
Expand Up @@ -656,14 +656,15 @@ def get_nested_value(dct, keys):
setattr(self, attribute_name, value)

def save_attribute_from_message(self, message):
# Fetch LSP server's capability provider.
attributes_to_set = [
("completion_trigger_characters", ["result", "capabilities", "completionProvider", "triggerCharacters"]),
("completion_resolve_provider", ["result", "capabilities", "completionProvider", "resolveProvider"]),
("rename_prepare_provider", ["result", "capabilities", "renameProvider", "prepareProvider"]),
("code_action_provider", ["result", "capabilities", "codeActionProvider"]),
("code_action_kinds", ["result", "capabilities", "codeActionProvider", "codeActionKinds"]),
("code_format_provider", ["result", "capabilities", "documentFormattingProvider"]),
("range_format_provider", ["result", "capabilities", "documentRangeFormattingProvider", "rangesSupport"]),
("range_format_provider", ["result", "capabilities", "documentRangeFormattingProvider"]),
("signature_help_provider", ["result", "capabilities", "signatureHelpProvider"]),
("workspace_symbol_provider", ["result", "capabilities", "workspaceSymbolProvider"]),
("inlay_hint_provider", ["result", "capabilities", "inlayHintProvider", "resolveProvider"]),
Expand All @@ -674,9 +675,13 @@ def save_attribute_from_message(self, message):
for attr, path in attributes_to_set:
self.set_attribute_from_message(message, attr, path)

# If the returned result is a dict, dig the deeper attributes.
if isinstance(self.text_document_sync, dict):
self.text_document_sync = self.text_document_sync.get("change", self.text_document_sync)

if isinstance(self.range_format_provider, dict):
self.range_format_provider = self.range_format_provider.get("rangesSupport", self.range_format_provider)

# Some LSP server has inlayHint capability, but won't response inlayHintProvider in capability message.
# So we set `inlay_hint_provider` to True if found `forceInlayHint` option in config file.
if "forceInlayHint" in self.server_info and self.server_info["forceInlayHint"] is True:
Expand Down

0 comments on commit dd70010

Please sign in to comment.