[Lldb-commits] [PATCH] D113400: [lldb-vscode] Add presentation hints for scopes
Andy Yankovsky via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Mon Nov 8 06:45:01 PST 2021
werat created this revision.
werat requested review of this revision.
Herald added a project: LLDB.
Herald added a subscriber: lldb-commits.
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"`.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D113400
Files:
lldb/test/API/tools/lldb-vscode/variables/TestVSCode_variables.py
lldb/tools/lldb-vscode/JSONUtils.cpp
Index: lldb/tools/lldb-vscode/JSONUtils.cpp
===================================================================
--- lldb/tools/lldb-vscode/JSONUtils.cpp
+++ lldb/tools/lldb-vscode/JSONUtils.cpp
@@ -175,6 +175,13 @@
// "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 @@
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);
Index: lldb/test/API/tools/lldb-vscode/variables/TestVSCode_variables.py
===================================================================
--- lldb/test/API/tools/lldb-vscode/variables/TestVSCode_variables.py
+++ lldb/test/API/tools/lldb-vscode/variables/TestVSCode_variables.py
@@ -394,3 +394,17 @@
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")
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D113400.385480.patch
Type: text/x-patch
Size: 2538 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20211108/be7be275/attachment.bin>
More information about the lldb-commits
mailing list