mirror of
https://github.com/sphinx-contrib/sphinx-lint.git
synced 2025-10-29 00:19:34 +08:00
Print multiple errors at once (#121)
This commit is contained in:
@ -56,8 +56,7 @@ def check_missing_backtick_after_role(file, lines, options=None):
|
||||
for paragraph_lno, paragraph in paragraphs(lines):
|
||||
if paragraph.count("|") > 4:
|
||||
return # we don't handle tables yet.
|
||||
error = rst.ROLE_MISSING_CLOSING_BACKTICK_RE.search(paragraph)
|
||||
if error:
|
||||
for error in rst.ROLE_MISSING_CLOSING_BACKTICK_RE.finditer(paragraph):
|
||||
error_offset = paragraph[: error.start()].count("\n")
|
||||
yield (
|
||||
paragraph_lno + error_offset,
|
||||
@ -126,8 +125,7 @@ def check_default_role(file, lines, options=None):
|
||||
for lno, line in enumerate(lines, start=1):
|
||||
line = clean_paragraph(line)
|
||||
line = escape2null(line)
|
||||
match = rst.INTERPRETED_TEXT_RE.search(line)
|
||||
if match:
|
||||
for match in rst.INTERPRETED_TEXT_RE.finditer(line):
|
||||
before_match = line[: match.start()]
|
||||
after_match = line[match.end() :]
|
||||
stripped_line = line.strip()
|
||||
@ -201,8 +199,7 @@ def check_missing_space_after_role(file, lines, options=None):
|
||||
"""
|
||||
for lno, line in enumerate(lines, start=1):
|
||||
line = clean_paragraph(line)
|
||||
role = _SUSPICIOUS_ROLE.search(line)
|
||||
if role:
|
||||
for role in _SUSPICIOUS_ROLE.finditer(line):
|
||||
yield lno, f"role missing (escaped) space after role: {role.group(0)!r}"
|
||||
|
||||
|
||||
@ -214,8 +211,7 @@ def check_role_without_backticks(file, lines, options=None):
|
||||
Good: :func:`pdb.main`
|
||||
"""
|
||||
for lno, line in enumerate(lines, start=1):
|
||||
no_backticks = rst.ROLE_WITH_NO_BACKTICKS_RE.search(line)
|
||||
if no_backticks:
|
||||
for no_backticks in rst.ROLE_WITH_NO_BACKTICKS_RE.finditer(line):
|
||||
yield lno, f"role with no backticks: {no_backticks.group(0)!r}"
|
||||
|
||||
|
||||
@ -316,8 +312,7 @@ def check_missing_space_before_role(file, lines, options=None):
|
||||
if paragraph.count("|") > 4:
|
||||
return # we don't handle tables yet.
|
||||
paragraph = clean_paragraph(paragraph)
|
||||
match = rst.ROLE_GLUED_WITH_WORD_RE.search(paragraph)
|
||||
if match:
|
||||
for match in rst.ROLE_GLUED_WITH_WORD_RE.finditer(paragraph):
|
||||
error_offset = paragraph[: match.start()].count("\n")
|
||||
if looks_like_glued(match):
|
||||
yield (
|
||||
@ -386,8 +381,7 @@ def check_missing_colon_in_role(file, lines, options=None):
|
||||
Good: :issue:`123`
|
||||
"""
|
||||
for lno, line in enumerate(lines, start=1):
|
||||
match = rst.ROLE_MISSING_RIGHT_COLON_RE.search(line)
|
||||
if match:
|
||||
for match in rst.ROLE_MISSING_RIGHT_COLON_RE.finditer(line):
|
||||
yield lno, f"role missing colon before first backtick ({match.group(0)})."
|
||||
|
||||
|
||||
@ -471,8 +465,7 @@ def check_triple_backticks(file, lines, options=None):
|
||||
syntax, but it's really uncommon.
|
||||
"""
|
||||
for lno, line in enumerate(lines):
|
||||
match = rst.TRIPLE_BACKTICKS_RE.search(line)
|
||||
if match:
|
||||
for match in rst.TRIPLE_BACKTICKS_RE.finditer(line):
|
||||
yield lno + 1, "There's no rst syntax using triple backticks"
|
||||
|
||||
|
||||
@ -523,5 +516,5 @@ def check_unnecessary_parentheses(filename, lines, options):
|
||||
Good: :func:`test`
|
||||
"""
|
||||
for lno, line in enumerate(lines, start=1):
|
||||
if match := rst.ROLE_WITH_UNNECESSARY_PARENTHESES_RE.search(line):
|
||||
for match in rst.ROLE_WITH_UNNECESSARY_PARENTHESES_RE.finditer(line):
|
||||
yield lno, f"Unnecessary parentheses in {match.group(0).strip()!r}"
|
||||
|
||||
7
tests/fixtures/paragraphs.rst
vendored
7
tests/fixtures/paragraphs.rst
vendored
@ -72,9 +72,10 @@ i.e. at :line:``70``!
|
||||
|
||||
Note that the errors report the exact
|
||||
line, not the first line of the paragraph
|
||||
so for example an error like
|
||||
:foo`missing colon` will be reported
|
||||
at line 76 and not at line 73!
|
||||
so for example two errors like
|
||||
:foo`missing colon` and :blah`other`
|
||||
will both be reported at line 76
|
||||
and not at line 73!
|
||||
|
||||
|
||||
.. note:
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
.. expect: default role used (hint: for inline literals, use double backticks) (default-role)
|
||||
.. expect: default role used (hint: for inline literals, use double backticks) (default-role)
|
||||
|
||||
In the following table there are a couple of default roles that should fail:
|
||||
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
.. expect: default role used (hint: for inline literals, use double backticks) (default-role)
|
||||
.. expect: default role used (hint: for inline literals, use double backticks) (default-role)
|
||||
|
||||
This is not detected: `foo`, `bar`.
|
||||
|
||||
@ -86,7 +86,7 @@ def test_line_no_in_error_msg(file, capsys):
|
||||
has_errors = main(["sphinxlint.py", file])
|
||||
out, err = capsys.readouterr()
|
||||
assert out == ""
|
||||
assert "paragraphs.rst:76: role missing colon before" in err
|
||||
assert err.count("paragraphs.rst:76: role missing colon before") == 2
|
||||
assert "paragraphs.rst:70: role use a single backtick" in err
|
||||
assert "paragraphs.rst:65: inline literal missing (escaped) space" in err
|
||||
assert has_errors
|
||||
|
||||
Reference in New Issue
Block a user