Author: Andy Yankovsky Date: 2021-11-09T17:50:46+01:00 New Revision: dc8f0035ca990fc5587bd508fed609f995e7c842
URL: https://github.com/llvm/llvm-project/commit/dc8f0035ca990fc5587bd508fed609f995e7c842 DIFF: https://github.com/llvm/llvm-project/commit/dc8f0035ca990fc5587bd508fed609f995e7c842.diff LOG: [lldb-vscode] Add presentation hints for scopes Scopes can have an optional hint for how to present this scope in the UI: https://microsoft.github.io/debug-adapter-protocol/specification#Types_Scope The IDEs can use the hint to present the data accordingly. For example, Visual Studio has a separate Registers window, which is populated with the data from the scope with `presentationHint: "registers"`. Reviewed By: wallace Differential Revision: https://reviews.llvm.org/D113400 Added: Modified: lldb/test/API/tools/lldb-vscode/variables/TestVSCode_variables.py lldb/tools/lldb-vscode/JSONUtils.cpp Removed: ################################################################################ diff --git a/lldb/test/API/tools/lldb-vscode/variables/TestVSCode_variables.py b/lldb/test/API/tools/lldb-vscode/variables/TestVSCode_variables.py index 30a85ec5eb28e..9a4a5de40e718 100644 --- a/lldb/test/API/tools/lldb-vscode/variables/TestVSCode_variables.py +++ b/lldb/test/API/tools/lldb-vscode/variables/TestVSCode_variables.py @@ -394,3 +394,17 @@ def test_scopes_and_evaluate_expansion(self): self.verify_variables( expandable_expression["children"], response["body"]["variables"] ) + + # Test that frame scopes have corresponding presentation hints. + frame_id = self.vscode.get_stackFrame()["id"] + scopes = self.vscode.request_scopes(frame_id)["body"]["scopes"] + + scope_names = [scope["name"] for scope in scopes] + self.assertIn("Locals", scope_names) + self.assertIn("Registers", scope_names) + + for scope in scopes: + if scope["name"] == "Locals": + self.assertEquals(scope.get("presentationHint"), "locals") + if scope["name"] == "Registers": + self.assertEquals(scope.get("presentationHint"), "registers") diff --git a/lldb/tools/lldb-vscode/JSONUtils.cpp b/lldb/tools/lldb-vscode/JSONUtils.cpp index 0e6227f3b15d4..58a08796e738d 100644 --- a/lldb/tools/lldb-vscode/JSONUtils.cpp +++ b/lldb/tools/lldb-vscode/JSONUtils.cpp @@ -175,6 +175,13 @@ void FillResponse(const llvm::json::Object &request, // "type": "string", // "description": "Name of the scope such as 'Arguments', 'Locals'." // }, +// "presentationHint": { +// "type": "string", +// "description": "An optional hint for how to present this scope in the +// UI. If this attribute is missing, the scope is shown +// with a generic UI.", +// "_enum": [ "arguments", "locals", "registers" ], +// }, // "variablesReference": { // "type": "integer", // "description": "The variables of this scope can be retrieved by @@ -229,6 +236,15 @@ llvm::json::Value CreateScope(const llvm::StringRef name, int64_t namedVariables, bool expensive) { llvm::json::Object object; EmplaceSafeString(object, "name", name.str()); + + // TODO: Support "arguments" scope. At the moment lldb-vscode includes the + // arguments into the "locals" scope. + if (variablesReference == VARREF_LOCALS) { + object.try_emplace("presentationHint", "locals"); + } else if (variablesReference == VARREF_REGS) { + object.try_emplace("presentationHint", "registers"); + } + object.try_emplace("variablesReference", variablesReference); object.try_emplace("expensive", expensive); object.try_emplace("namedVariables", namedVariables); _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits