def parse_parameter(lines: List[str], style: str) -> Item: """Returns a Item instance that represents a parameter. Args: lines: Splitted parameter docstring lines. style: Docstring style. `google` or `numpy`. """ if style == "google": name, _, line = lines[0].partition(":") name = name.strip() parsed = [line.strip()] pattern = r"(.*?)\s*?\((.*?)\)" else: name = lines[0].strip() parsed = [] pattern = r"([^ ]*?)\s*:\s*(.*)" if len(lines) > 1: indent = get_indent(lines[1]) for line in lines[1:]: parsed.append(line[indent:]) m = re.match(pattern, name) if m: name, type = m.group(1), m.group(2) else: type = "" return Item(name, Type(type), Inline("\n".join(parsed)))
def parse_parameter(lines: List[str], style: str) -> Tuple[str, str, str]: """Returns a tuple of (name, markdown, type). Args: lines: Splitted parameter docstring lines. style: Docstring style. `google` or `numpy`. """ if style == "google": name, _, line = lines[0].partition(":") name = name.strip() parsed = [line.strip()] pattern = r"(.*?)\s*?\((.*?)\)" else: name = lines[0].strip() parsed = [] pattern = r"([^ ]*?)\s*:\s*(.*)" if len(lines) > 1: indent = get_indent(lines[1]) for line in lines[1:]: parsed.append(line[indent:]) m = re.match(pattern, name) if m: name, type = m.group(1), m.group(2) else: type = "" return name, "\n".join(parsed), type
def split_parameter(doc: str) -> Iterator[List[str]]: """Yields a list of parameter string. Args: doc: Docstring """ lines = [x.rstrip() for x in doc.split("\n")] start = stop = 0 for stop, line in enumerate(lines, 1): if stop == len(lines): next_indent = 0 else: next_indent = get_indent(lines[stop]) if next_indent == 0: yield lines[start:stop] start = stop
def split_section(doc: str) -> Iterator[Tuple[str, str, str]]: """Yields a tuple of (section name, contents, style). Args: doc: Docstring Examples: >>> doc = "abc\\n\\nArgs:\\n x: X\\n" >>> it = split_section(doc) >>> next(it) ('', 'abc', '') >>> next(it) ('Parameters', 'x: X', 'google') """ lines = [x.rstrip() for x in doc.split("\n")] name = "" style = "" start = indent = 0 for stop, line in enumerate(lines, 1): if stop == len(lines): next_indent = -1 else: next_indent = get_indent(lines[stop]) if not line and next_indent < indent and name: if start < stop - 1: yield name, join(lines[start:stop - 1]), style start = stop name = "" else: section, style_ = section_heading(line) if section: if start < stop - 1: yield name, join(lines[start:stop - 1]), style style = style_ name = rename_section(section) start = stop if style == "numpy": # skip underline without counting the length. start += 1 indent = next_indent if start < len(lines): yield name, join(lines[start:]), style