[pushed] Report supportsBreakpointLocationsRequest

Message ID 20230727163559.2459578-1-tromey@adacore.com
State New
Headers
Series [pushed] Report supportsBreakpointLocationsRequest |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_gdb_build--master-arm warning Patch failed to apply
linaro-tcwg-bot/tcwg_gdb_build--master-aarch64 warning Patch failed to apply
linaro-tcwg-bot/tcwg_gdb_check--master-aarch64 warning Patch failed to apply
linaro-tcwg-bot/tcwg_gdb_check--master-arm warning Patch failed to apply

Commit Message

Tom Tromey July 27, 2023, 4:35 p.m. UTC
  While looking at the DAP spec, I noticed that the breakpointLocations
request is gated behind a capability.  This patch changes gdb to
report this capability.

I've also added a comment to explain the fact that arguments to
breakpointLocations are not optional, even though the spec says they
are.
---
 gdb/python/lib/gdb/dap/locations.py | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)
  

Patch

diff --git a/gdb/python/lib/gdb/dap/locations.py b/gdb/python/lib/gdb/dap/locations.py
index 6c591579920..594f1bad45b 100644
--- a/gdb/python/lib/gdb/dap/locations.py
+++ b/gdb/python/lib/gdb/dap/locations.py
@@ -18,7 +18,7 @@  import gdb
 # This is deprecated in 3.9, but required in older versions.
 from typing import Optional
 
-from .server import request
+from .server import capability, request
 from .startup import in_gdb_thread, send_gdb_with_response
 
 
@@ -32,7 +32,15 @@  def _find_lines(filename, start_line, end_line):
     return {"breakpoints": [{"line": x} for x in sorted(lines)]}
 
 
+# Note that the spec says that the arguments to this are optional.
+# However, calling this without arguments is nonsensical.  This is
+# discussed in:
+#   https://github.com/microsoft/debug-adapter-protocol/issues/266
+# This points out that fixing this would be an incompatibility but
+# goes on to propose "if arguments property is missing, debug adapters
+# should return an error".
 @request("breakpointLocations")
+@capability("supportsBreakpointLocationsRequest")
 def breakpoint_locations(*, source, line: int, endLine: Optional[int] = None, **extra):
     if endLine is None:
         endLine = line