Fix blank-line docstring rules for module-level docstrings (#9878)

## Summary

Given:

```python
"""Make a summary line.

Note:
----
  Per the code comment the next two lines are blank. "// The first blank line is the line containing the closing
      triple quotes, so we need at least two."

"""
```

It turns out we excluded the line ending in `"""`, because it's empty
(unlike for functions, where it consists of the indent). This PR changes
the `following_lines` iterator to always include the trailing newline,
which gives us correct and consistent handling between function and
module-level docstrings.

Closes https://github.com/astral-sh/ruff/issues/9877.
This commit is contained in:
Charlie Marsh 2024-02-07 13:48:28 -08:00 committed by GitHub
parent 533dcfb114
commit 45937426c7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 32 additions and 22 deletions

View file

@ -184,11 +184,18 @@ impl<'a> Iterator for NewlineWithTrailingNewline<'a> {
type Item = Line<'a>;
#[inline]
fn next(&mut self) -> Option<Line<'a>> {
fn next(&mut self) -> Option<Self::Item> {
self.underlying.next().or_else(|| self.trailing.take())
}
}
impl DoubleEndedIterator for NewlineWithTrailingNewline<'_> {
#[inline]
fn next_back(&mut self) -> Option<Self::Item> {
self.trailing.take().or_else(|| self.underlying.next_back())
}
}
#[derive(Debug, Clone, Eq, PartialEq)]
pub struct Line<'a> {
text: &'a str,