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 <[email protected]> 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): _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
