summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakeshi KOMIYA <i.tkomiya@gmail.com>2016-09-10 17:38:10 +0900
committerTakeshi KOMIYA <i.tkomiya@gmail.com>2016-09-15 02:29:50 +0900
commitd281a32b3bdbc4a2d0c609f4f2e8e48df76f2951 (patch)
treebacf287199e0849a3a284e44162aff699234f2d1
parentcd515d568de2a397c9ffbf771f377cf5583e1d69 (diff)
downloadsphinx-git-d281a32b3bdbc4a2d0c609f4f2e8e48df76f2951.tar.gz
Refactor sphinx.environment: Reimplement filter_messages() as a transform
-rw-r--r--sphinx/environment.py9
-rw-r--r--sphinx/io.py8
-rw-r--r--sphinx/transforms.py13
-rw-r--r--tests/roots/test-keep_warnings/conf.py4
-rw-r--r--tests/roots/test-keep_warnings/index.rst2
-rw-r--r--tests/test_markup.py18
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