def assess_source(content: str, app_env: SphinxAppEnv, doc_uri: str = "input.rst") -> SourceAssessResult: """Assess the content of an file. Parameters ---------- content : str the content of the file filename : str the file path Returns ------- SourceAssessResult """ with sphinx_env(app_env): # TODO look at sphinx.io.read_doc function, that is used for sphinx parsing # (see also sphinx.testing.restructuredtext.parse, for a basic implementation) settings = OptionParser(components=(RSTParser, )).get_default_values() app_env.app.env.prepare_settings(doc_uri) settings.env = app_env.app.env doc_warning_stream = StringIO() settings.warning_stream = doc_warning_stream settings.report_level = 2 # warning settings.halt_level = 4 # severe # The level at or above which `SystemMessage` exceptions # will be raised, halting execution. document, reporter = new_document(doc_uri, settings=settings) parser = RSTParserCustom(inliner=InlinerLSP(doc_text=content)) try: parser.parse(content, document) except SystemMessage: pass transform = LSPTransform(document) transform.apply(content) return SourceAssessResult( doctree=document, positions=transform.db_positions, references=transform.db_references, pending_xrefs=transform.db_pending_xrefs, targets=transform.db_targets, doc_symbols=transform.db_doc_symbols, linting=reporter.log_capture, )
def find_autoasdf_directives(env, filename): parser = RSTParser() settings = OptionParser(components=(RSTParser, )).get_default_values() settings.env = env document = new_document(filename, settings) with open(filename) as ff: parser.parse(ff.read(), document) return [ x.children[0].astext() for x in document.traverse() if isinstance(x, schema_def) ]