def _parse_line(line): line_re = r""" ((?P<multi> ([0-9]+)) : )? # the optional multi-index (?P<funcname> \w+(\.\w+)*) # the function name \( (?P<arglist> .*?) \) # the argument list ( -> (?P<returntype> .*) )? # the optional return type $ """ ret = SimpleNamespace(**re.match(line_re, line, re.VERBOSE).groupdict()) argstr = ret.arglist arglist = _parse_arglist(argstr) args = [] for arg in arglist: name, ann = arg.split(":") if name in keyword.kwlist: if LIST_KEYWORDS: print("KEYWORD", ret) name = name + "_" if "=" in ann: ann, default = ann.split("=", 1) tup = name, ann, default else: tup = name, ann args.append(tup) ret.arglist = args multi = ret.multi if multi is not None: ret.multi = int(multi) funcname = ret.funcname parts = funcname.split(".") if parts[-1] in keyword.kwlist: ret.funcname = funcname + "_" return vars(ret)
def _parse_line(line): line_re = r""" ((?P<multi> ([0-9]+)) : )? # the optional multi-index (?P<funcname> \w+(\.\w+)*) # the function name \( (?P<arglist> .*?) \) # the argument list ( -> (?P<returntype> .*) )? # the optional return type $ """ ret = SimpleNamespace(**re.match(line_re, line, re.VERBOSE).groupdict()) # PYSIDE-1095: Handle arbitrary default expressions argstr = ret.arglist.replace("->", ".deref.") arglist = _parse_arglist(argstr) args = [] for idx, arg in enumerate(arglist): tokens = arg.split(":") if len(tokens) < 2: if idx == 0 and tokens[0] == "self": tokens = 2 * tokens # "self: self" else: warnings.warn('Invalid argument "{}" in "{}".'.format( arg, line)) continue name, ann = tokens if name in keyword.kwlist: if LIST_KEYWORDS: print("KEYWORD", ret) name = name + "_" if "=" in ann: ann, default = ann.split("=", 1) tup = name, ann, default else: tup = name, ann args.append(tup) ret.arglist = args multi = ret.multi if multi is not None: ret.multi = int(multi) funcname = ret.funcname parts = funcname.split(".") if parts[-1] in keyword.kwlist: ret.funcname = funcname + "_" return vars(ret)