diff --git a/qrenderdoc/Code/pyrenderdoc/parse_reflection.py b/qrenderdoc/Code/pyrenderdoc/parse_reflection.py
index 3a31dce96..20bb104aa 100644
--- a/qrenderdoc/Code/pyrenderdoc/parse_reflection.py
+++ b/qrenderdoc/Code/pyrenderdoc/parse_reflection.py
@@ -1866,7 +1866,8 @@ class PyReflector:
if retType == type(None):
retType = None
- ret = "Callable("
+ ret = "Callable(\n"
+ indent = " " * 4
for idx, arg in enumerate(args[0:-1]):
argtext = f"arg{idx+1}"
@@ -1875,9 +1876,9 @@ class PyReflector:
if idx == arg_highlight:
argtext = f"{argtext}"
- if idx != 0:
- ret += ", "
- ret += argtext
+ if idx < len(args[0:-1]) - 1:
+ argtext += ", "
+ ret += indent + argtext + "\n"
ret += ")"
if retType is not None:
ret += f" -> {self.get_name(retType)}"
@@ -1890,7 +1891,8 @@ class PyReflector:
return ret
if isinstance(functype, ast.FunctionDef):
- ret = functype.name + "("
+ ret = functype.name + "(\n"
+ indent = " " * 4
for idx, arg in enumerate(functype.args.args):
argtext = arg.arg
@@ -1900,25 +1902,37 @@ class PyReflector:
if idx == arg_highlight:
argtext = f"{argtext}"
- if idx != 0:
- ret += ", "
- ret += argtext
+ if (
+ idx < len(functype.args.args) - 1
+ or len(functype.args.posonlyargs) > 0
+ or len(functype.args.kwonlyargs) > 0
+ ):
+ argtext += ","
+ ret += indent + argtext + "\n"
if len(functype.args.posonlyargs) > 0:
- ret += ", /"
- for arg in functype.args.posonlyargs:
- ret += ", "
- ret = arg.arg
+ ret += indent + "/,\n"
+ for idx, arg in enumerate(functype.args.posonlyargs):
+ ret += indent + arg.arg
if arg.type_comment is not None:
ret += f": {arg.type_comment}"
+
+ if (
+ idx < len(functype.args.posonlyargs) - 1
+ or len(functype.args.kwonlyargs) > 0
+ ):
+ ret += ","
+ ret += "\n"
if len(functype.args.kwonlyargs) > 0:
- ret += ", *"
- for arg in functype.args.kwonlyargs:
- ret += ", "
- ret = arg.arg
+ ret += indent + "*,\n"
+ for idx, arg in enumerate(functype.args.kwonlyargs):
+ ret += indent + arg.arg
if arg.type_comment is not None:
ret += f": {arg.type_comment}"
+
+ if idx < len(functype.args.kwonlyargs) - 1:
+ ret += ","
ret += ")"
if functype.returns is not None:
ret += f" -> {self.get_name(self._get_type(self.scopes[functype.lineno], functype.returns))}"
@@ -1936,12 +1950,12 @@ class PyReflector:
try:
sig = inspect.signature(functype)
ret = self.get_name(functype) + "("
+ indent = " " * 4
+ ret += "\n"
first = True
for idx, arg in enumerate(sig.parameters):
if first and arg == "self":
continue
- if not first:
- ret += ", "
first = False
argtext = arg
annot = sig.parameters[arg].annotation
@@ -1951,7 +1965,10 @@ class PyReflector:
if idx == arg_highlight:
argtext = f"{argtext}"
- ret += argtext
+ ret += indent + argtext
+ if idx < len(sig.parameters) - 1:
+ ret += ","
+ ret += "\n"
ret += ")"
if sig.return_annotation is not inspect.Signature.empty:
ret += f" -> {self.get_name(sig.return_annotation)}"
@@ -1963,6 +1980,7 @@ class PyReflector:
ret += _remove_space_prefix(getattr(functype, "__doc__", ""), 20)
if arg_highlight >= 0:
ret = ret.replace("\n", "
\n")
+ ret = ret.replace(" ", " ")
return ret.strip()
def get_autocompletion(self, line: int, expr: str) -> Tuple[List[str], int]:
@@ -2221,6 +2239,9 @@ class PyReflector:
if PyReflector.alias_modules[k] == obj:
return k
+ if name == "" and hasattr(obj, "__forward_arg__"):
+ name = getattr(obj, "__forward_arg__")
+
if name == "":
name = str(obj)