diff options
author | Takeshi KOMIYA <i.tkomiya@gmail.com> | 2016-09-10 17:38:10 +0900 |
---|---|---|
committer | Takeshi KOMIYA <i.tkomiya@gmail.com> | 2016-09-15 02:29:50 +0900 |
commit | d281a32b3bdbc4a2d0c609f4f2e8e48df76f2951 (patch) | |
tree | bacf287199e0849a3a284e44162aff699234f2d1 | |
parent | cd515d568de2a397c9ffbf771f377cf5583e1d69 (diff) | |
download | sphinx-git-d281a32b3bdbc4a2d0c609f4f2e8e48df76f2951.tar.gz |
Refactor sphinx.environment: Reimplement filter_messages() as a transform
-rw-r--r-- | sphinx/environment.py | 9 | ||||
-rw-r--r-- | sphinx/io.py | 8 | ||||
-rw-r--r-- | sphinx/transforms.py | 13 | ||||
-rw-r--r-- | tests/roots/test-keep_warnings/conf.py | 4 | ||||
-rw-r--r-- | tests/roots/test-keep_warnings/index.rst | 2 | ||||
-rw-r--r-- | tests/test_markup.py | 18 |
6 files changed, 42 insertions, 12 deletions
diff --git a/sphinx/environment.py b/sphinx/environment.py index 61df10237..5f3d5a2d8 100644 --- a/sphinx/environment.py +++ b/sphinx/environment.py @@ -728,7 +728,6 @@ class BuildEnvironment(object): doctree = pub.document # post-processing - self.filter_messages(doctree) self.process_dependencies(docname, doctree) self.process_images(docname, doctree) self.process_downloads(docname, doctree) @@ -851,14 +850,6 @@ class BuildEnvironment(object): # post-processing of read doctrees - def filter_messages(self, doctree): - """Filter system messages from a doctree.""" - filterlevel = self.config.keep_warnings and 2 or 5 - for node in doctree.traverse(nodes.system_message): - if node['level'] < filterlevel: - self.app.debug('%s [filtered system message]', node.astext()) - node.parent.remove(node) - def process_dependencies(self, docname, doctree): """Process docutils-generated dependency info.""" cwd = getcwd() diff --git a/sphinx/io.py b/sphinx/io.py index bc14d59aa..2b965b805 100644 --- a/sphinx/io.py +++ b/sphinx/io.py @@ -16,7 +16,8 @@ from six import string_types, text_type from sphinx.transforms import ( ApplySourceWorkaround, ExtraTranslatableNodes, PreserveTranslatableMessages, Locale, CitationReferences, DefaultSubstitutions, MoveModuleTargets, HandleCodeBlocks, - AutoNumbering, AutoIndexUpgrader, SortIds, RemoveTranslatableInline + AutoNumbering, AutoIndexUpgrader, SortIds, RemoveTranslatableInline, + FilterSystemMessages ) from sphinx.util import import_object, split_docinfo @@ -62,7 +63,7 @@ class SphinxStandaloneReader(SphinxBaseReader): transforms = [ApplySourceWorkaround, ExtraTranslatableNodes, PreserveTranslatableMessages, Locale, CitationReferences, DefaultSubstitutions, MoveModuleTargets, HandleCodeBlocks, AutoNumbering, AutoIndexUpgrader, SortIds, - RemoveTranslatableInline, PreserveTranslatableMessages] + RemoveTranslatableInline, PreserveTranslatableMessages, FilterSystemMessages] class SphinxI18nReader(SphinxBaseReader): @@ -75,7 +76,8 @@ class SphinxI18nReader(SphinxBaseReader): transforms = [ApplySourceWorkaround, ExtraTranslatableNodes, CitationReferences, DefaultSubstitutions, MoveModuleTargets, HandleCodeBlocks, - AutoNumbering, SortIds, RemoveTranslatableInline] + AutoNumbering, SortIds, RemoveTranslatableInline, + FilterSystemMessages] def __init__(self, *args, **kwargs): SphinxBaseReader.__init__(self, *args, **kwargs) diff --git a/sphinx/transforms.py b/sphinx/transforms.py index 9f2aeb8d1..516b22843 100644 --- a/sphinx/transforms.py +++ b/sphinx/transforms.py @@ -249,6 +249,19 @@ class PreserveTranslatableMessages(Transform): node.preserve_original_messages() +class FilterSystemMessages(Transform): + """Filter system messages from a doctree.""" + default_priority = 999 + + def apply(self): + env = self.document.settings.env + filterlevel = env.config.keep_warnings and 2 or 5 + for node in self.document.traverse(nodes.system_message): + if node['level'] < filterlevel: + env.app.debug('%s [filtered system message]', node.astext()) + node.parent.remove(node) + + class Locale(Transform): """ Replace translatable nodes with their translated doctree. diff --git a/tests/roots/test-keep_warnings/conf.py b/tests/roots/test-keep_warnings/conf.py new file mode 100644 index 000000000..d0db3db83 --- /dev/null +++ b/tests/roots/test-keep_warnings/conf.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- + +master_doc = 'index' +keep_warnings = True diff --git a/tests/roots/test-keep_warnings/index.rst b/tests/roots/test-keep_warnings/index.rst new file mode 100644 index 000000000..1e2d5977f --- /dev/null +++ b/tests/roots/test-keep_warnings/index.rst @@ -0,0 +1,2 @@ +keep_warnings +===== diff --git a/tests/test_markup.py b/tests/test_markup.py index 60390bc09..45b163ed2 100644 --- a/tests/test_markup.py +++ b/tests/test_markup.py @@ -170,3 +170,21 @@ def test_rst_prolog(app, status, warning): # rst_prolog & rst_epilog on exlucding reST parser assert not md.rawsource.startswith('*Hello world*.') assert not md.rawsource.endswith('*Good-bye world*.\n') + + +@with_app(buildername='dummy', testroot='keep_warnings') +def test_keep_warnings_is_True(app, status, warning): + app.builder.build_all() + doctree = pickle.loads((app.doctreedir / 'index.doctree').bytes()) + assert_node(doctree[0], nodes.section) + assert len(doctree[0]) == 2 + assert_node(doctree[0][1], nodes.system_message) + + +@with_app(buildername='dummy', testroot='keep_warnings', + confoverrides={'keep_warnings': False}) +def test_keep_warnings_is_False(app, status, warning): + app.builder.build_all() + doctree = pickle.loads((app.doctreedir / 'index.doctree').bytes()) + assert_node(doctree[0], nodes.section) + assert len(doctree[0]) == 1 |