Skip to content

Commit e38456d

Browse files
committed
Fix issue with warnings without subtype being incorrectly suppressed
This fixes an issue with warnings that have been raised with no subtype being suppressed if a suppress warnings value with a subtype has been set. e.g. all `autodoc` warnings should not be suppressed if `autodoc.import_object` is only set to be suppressed.
1 parent 274ee48 commit e38456d

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

sphinx/util/logging.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,8 @@ def is_suppressed_warning(type: str, subtype: str, suppress_warnings: List[str])
364364
target, subtarget = warning_type, None
365365

366366
if target == type:
367-
if (subtype is None or subtarget is None or
367+
if (subtype is None and subtarget is None
368+
or subtarget is None or
368369
subtarget == subtype or subtarget == '*'):
369370
return True
370371

tests/test_util_logging.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ def test_is_suppressed_warning():
131131
assert is_suppressed_warning("ref", "option", suppress_warnings) is True
132132
assert is_suppressed_warning("files", "image", suppress_warnings) is True
133133
assert is_suppressed_warning("files", "stylesheet", suppress_warnings) is True
134+
assert is_suppressed_warning("rest", None, suppress_warnings) is False
134135
assert is_suppressed_warning("rest", "syntax", suppress_warnings) is False
135136
assert is_suppressed_warning("rest", "duplicated_labels", suppress_warnings) is True
136137

@@ -143,33 +144,39 @@ def test_suppress_warnings(app, status, warning):
143144

144145
app.config.suppress_warnings = []
145146
warning.truncate(0)
147+
logger.warning('message0', type='test')
146148
logger.warning('message1', type='test', subtype='logging')
147149
logger.warning('message2', type='test', subtype='crash')
148150
logger.warning('message3', type='actual', subtype='logging')
151+
assert 'message0' in warning.getvalue()
149152
assert 'message1' in warning.getvalue()
150153
assert 'message2' in warning.getvalue()
151154
assert 'message3' in warning.getvalue()
152-
assert app._warncount == 3
155+
assert app._warncount == 4
153156

154157
app.config.suppress_warnings = ['test']
155158
warning.truncate(0)
159+
logger.warning('message0', type='test')
156160
logger.warning('message1', type='test', subtype='logging')
157161
logger.warning('message2', type='test', subtype='crash')
158162
logger.warning('message3', type='actual', subtype='logging')
163+
assert 'message0' not in warning.getvalue()
159164
assert 'message1' not in warning.getvalue()
160165
assert 'message2' not in warning.getvalue()
161166
assert 'message3' in warning.getvalue()
162-
assert app._warncount == 4
167+
assert app._warncount == 5
163168

164169
app.config.suppress_warnings = ['test.logging']
165170
warning.truncate(0)
171+
logger.warning('message0', type='test')
166172
logger.warning('message1', type='test', subtype='logging')
167173
logger.warning('message2', type='test', subtype='crash')
168174
logger.warning('message3', type='actual', subtype='logging')
175+
assert 'message0' in warning.getvalue()
169176
assert 'message1' not in warning.getvalue()
170177
assert 'message2' in warning.getvalue()
171178
assert 'message3' in warning.getvalue()
172-
assert app._warncount == 6
179+
assert app._warncount == 8
173180

174181

175182
def test_warningiserror(app, status, warning):

0 commit comments

Comments
 (0)