diff --git a/core/lspserver.py b/core/lspserver.py index b01973b02b..8055a7686a 100755 --- a/core/lspserver.py +++ b/core/lspserver.py @@ -690,7 +690,11 @@ def save_attribute_from_message(self, message): ("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"]), + # ("inlay_hint_provider", ["result", "capabilities", "inlayHintProvider", "resolveProvider"]), + ("inlay_hint_provider", [ + ["result", "capabilities", "inlayHintProvider", "resolveProvider"], + ["result", "capabilities", "clangdInlayHintsProvider"] # 兼容clangd + ]), ("save_include_text", ["result", "capabilities", "textDocumentSync", "save", "includeText"]), ("text_document_sync", ["result", "capabilities", "textDocumentSync"]), ("semantic_tokens_provider", ["result", "capabilities", "semanticTokensProvider"])] diff --git a/core/utils.py b/core/utils.py index bdc3256cc4..17c146059d 100755 --- a/core/utils.py +++ b/core/utils.py @@ -519,13 +519,33 @@ def remove_duplicate_references(data): result.append(item) return result +# def get_nested_value(dct, keys): +# for key in keys: +# try: +# dct = dct[key] +# except (KeyError, TypeError): +# return None +# return dct + def get_nested_value(dct, keys): + ''' + keys: ["k1", "k2", ...]匹配一组, [["k1", "k2", ...], [], ...]匹配多组情况 + ''' + value = None for key in keys: try: - dct = dct[key] + if isinstance(key, list): + value = get_nested_value(dct, key) + if value: + break + else: + dct = dct[key] except (KeyError, TypeError): - return None - return dct + dct = None + break + + return value if value else dct + class MessageSender(Thread):