[Lldb-commits] [lldb] [lldb] Add type hints for gdbclientutils.py when base class returns Literal[T] (PR #170182)
Daniel Sanders via lldb-commits
lldb-commits at lists.llvm.org
Mon Dec 1 10:55:10 PST 2025
https://github.com/dsandersllvm created https://github.com/llvm/llvm-project/pull/170182
Pyright automatically deduces these functions to return `Literal["foo"]` since the implementation returns "foo". This causes any overload that returns a different literal or a string to report that they're overloaded in an incompatible way. By correctly annotating them as returning str, the overloads can return different strings without this error
I was encountering these a lot while writing tests for my downstream target
>From 8d88d8492cc59308c4889f897d932afcd8daef1a Mon Sep 17 00:00:00 2001
From: Daniel Sanders <daniel_l_sanders at apple.com>
Date: Mon, 1 Dec 2025 10:17:26 -0800
Subject: [PATCH] [lldb] Add type hints for gdbclientutils.py when base class
returns Literal[T]
Pyright automatically deduces these functions to return `Literal["foo"]` since
the implementation returns "foo". This causes any overload that returns
a different literal or a string to report that they're overloaded in an
incompatible way. By correctly annotating them as returning str, the
overloads can return different strings without this error
---
.../Python/lldbsuite/test/gdbclientutils.py | 74 +++++++++----------
1 file changed, 37 insertions(+), 37 deletions(-)
diff --git a/lldb/packages/Python/lldbsuite/test/gdbclientutils.py b/lldb/packages/Python/lldbsuite/test/gdbclientutils.py
index bd2fdc0a60cb4..4c40299f3256d 100644
--- a/lldb/packages/Python/lldbsuite/test/gdbclientutils.py
+++ b/lldb/packages/Python/lldbsuite/test/gdbclientutils.py
@@ -264,31 +264,31 @@ def _respond_impl(self, packet) -> Union[Response, List[Response]]:
return self.other(packet)
- def qsProcessInfo(self):
+ def qsProcessInfo(self) -> str:
return "E04"
- def qfProcessInfo(self, packet):
+ def qfProcessInfo(self, packet) -> str:
return "E04"
- def jGetLoadedDynamicLibrariesInfos(self, packet):
+ def jGetLoadedDynamicLibrariesInfos(self, packet) -> str:
return ""
- def qGetWorkingDir(self):
+ def qGetWorkingDir(self) -> str:
return "2f"
- def qOffsets(self):
+ def qOffsets(self) -> str:
return ""
- def qProcessInfo(self):
+ def qProcessInfo(self) -> str:
return ""
- def qHostInfo(self):
+ def qHostInfo(self) -> str:
return "ptrsize:8;endian:little;"
- def qEcho(self, num: int):
+ def qEcho(self, num: int) -> str:
return "E04"
- def qQueryGDBServer(self):
+ def qQueryGDBServer(self) -> str:
return "E04"
def interrupt(self):
@@ -300,10 +300,10 @@ def cont(self):
def vCont(self, packet):
raise self.UnexpectedPacketException()
- def A(self, packet):
+ def A(self, packet) -> str:
return ""
- def D(self, packet):
+ def D(self, packet) -> str:
return "OK"
def readRegisters(self) -> str:
@@ -312,40 +312,40 @@ def readRegisters(self) -> str:
def readRegister(self, register: int) -> str:
return "00000000"
- def writeRegisters(self, registers_hex):
+ def writeRegisters(self, registers_hex) -> str:
return "OK"
- def writeRegister(self, register, value_hex):
+ def writeRegister(self, register, value_hex) -> str:
return "OK"
- def readMemory(self, addr, length):
+ def readMemory(self, addr, length) -> str:
return "00" * length
- def x(self, addr, length):
+ def x(self, addr, length) -> str:
return ""
- def writeMemory(self, addr, data_hex):
+ def writeMemory(self, addr, data_hex) -> str:
return "OK"
- def qSymbol(self, symbol_args):
+ def qSymbol(self, symbol_args) -> str:
return "OK"
- def qSupported(self, client_supported):
+ def qSupported(self, client_supported) -> str:
return "qXfer:features:read+;PacketSize=3fff;QStartNoAckMode+"
- def qfThreadInfo(self):
+ def qfThreadInfo(self) -> str:
return "l"
- def qsThreadInfo(self):
+ def qsThreadInfo(self) -> str:
return "l"
- def qC(self):
+ def qC(self) -> str:
return "QC0"
- def QEnableErrorStrings(self):
+ def QEnableErrorStrings(self) -> str:
return "OK"
- def haltReason(self):
+ def haltReason(self) -> str:
# SIGINT is 2, return type is 2 digit hex string
return "S02"
@@ -360,50 +360,50 @@ def _qXferResponse(self, data, has_more):
def vAttach(self, pid):
raise self.UnexpectedPacketException()
- def selectThread(self, op, thread_id):
+ def selectThread(self, op, thread_id) -> str:
return "OK"
- def setBreakpoint(self, packet):
+ def setBreakpoint(self, packet) -> str:
raise self.UnexpectedPacketException()
- def threadStopInfo(self, threadnum):
+ def threadStopInfo(self, threadnum) -> str:
return ""
- def other(self, packet):
+ def other(self, packet) -> str:
# empty string means unsupported
return ""
- def QThreadSuffixSupported(self):
+ def QThreadSuffixSupported(self) -> str:
return ""
- def QListThreadsInStopReply(self):
+ def QListThreadsInStopReply(self) -> str:
return ""
- def qMemoryRegionInfo(self, addr):
+ def qMemoryRegionInfo(self, addr) -> str:
return ""
- def qPathComplete(self):
+ def qPathComplete(self) -> str:
return ""
- def vFile(self, packet):
+ def vFile(self, packet) -> str:
return ""
- def vRun(self, packet):
+ def vRun(self, packet) -> str:
return ""
def qLaunchGDBServer(self, host):
raise self.UnexpectedPacketException()
- def qLaunchSuccess(self):
+ def qLaunchSuccess(self) -> str:
return ""
- def QEnvironment(self, packet):
+ def QEnvironment(self, packet) -> str:
return "OK"
- def QEnvironmentHexEncoded(self, packet):
+ def QEnvironmentHexEncoded(self, packet) -> str:
return "OK"
- def qRegisterInfo(self, num):
+ def qRegisterInfo(self, num) -> str:
return ""
def k(self):
More information about the lldb-commits
mailing list