def extract_fields(obj: model.Documentable) -> None: """Populate Attributes for module/class variables using fields from that module/class's docstring. Must only be called for objects that have a docstring. """ doc = obj.docstring assert doc is not None, obj pdoc = parse_docstring(obj, doc, obj) obj.parsed_docstring = pdoc for field in pdoc.fields: tag = field.tag() if tag in ['ivar', 'cvar', 'var', 'type']: arg = field.arg() if arg is None: obj.report("Missing field name in @%s" % (tag, ), 'docstring', field.lineno) continue attrobj: Optional[model.Documentable] = obj.contents.get(arg) if attrobj is None: attrobj = obj.system.Attribute(obj.system, arg, obj) attrobj.kind = None attrobj.parentMod = obj.parentMod obj.system.addObject(attrobj) attrobj.setLineNumber(obj.docstring_lineno + field.lineno) if tag == 'type': attrobj.parsed_type = field.body() else: attrobj.parsed_docstring = field.body() attrobj.kind = field_name_to_human_name[tag]
def reportErrors(obj: model.Documentable, errs: Sequence[ParseError]) -> None: if errs and obj.fullName() not in obj.system.docstring_syntax_errors: obj.system.docstring_syntax_errors.add(obj.fullName()) for err in errs: obj.report('bad docstring: ' + err.descr(), lineno_offset=(err.linenum() or 1) - 1, section='docstring')