Skip to content
Merged
Show file tree
Hide file tree
Changes from 13 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions docs/usage.rst
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ Current usage of ``pydocstringformatter``:
[--exit-code]
[--max-summary-lines MAX_SUMMARY_LINES]
[--summary-quotes-same-line]
[--split-summary-body --no-split-summary-body]
[--strip-whitespaces --no-strip-whitespaces]
[--split-summary-body --no-split-summary-body]
[--linewrap-full-docstring --no-linewrap-full-docstring]
[--beginning-quotes --no-beginning-quotes]
[--closing-quotes --no-closing-quotes]
Expand Down Expand Up @@ -50,6 +50,14 @@ Current usage of ``pydocstringformatter``:
Activate or deactivate strip-whitespaces: Strip 1)
docstring start, 2) docstring end and 3) end of line.
(default: True)
--split-summary-body, --no-split-summary-body
Activate or deactivate split-summary-body: Split the
summary and body of a docstring based on a period and
max length. The maximum length of a summary can be set
with the --max-summary-lines option. This formatter is
currently optional as its considered somwehat
opinionated and might require major refactoring for
existing projects. (default: True)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
with the --max-summary-lines option. This formatter is
currently optional as its considered somwehat
opinionated and might require major refactoring for
existing projects. (default: True)
with the --max-summary-lines option. (default: True)

--beginning-quotes, --no-beginning-quotes
Activate or deactivate beginning-quotes: Fix the
position of the opening quotes. (default: True)
Expand All @@ -72,14 +80,6 @@ Current usage of ``pydocstringformatter``:
optional formatters:
these formatters are turned off by default

--split-summary-body, --no-split-summary-body
Activate or deactivate split-summary-body: Split the
summary and body of a docstring based on a period and
max length. The maximum length of a summary can be set
with the --max-summary-lines option. This formatter is
currently optional as its considered somwehat
opinionated and might require major refactoring for
existing projects. (default: False)
--linewrap-full-docstring, --no-linewrap-full-docstring
Activate or deactivate linewrap-full-docstring:
Linewrap the docstring by the pre-defined line length.
Expand Down
2 changes: 1 addition & 1 deletion pydocstringformatter/formatting/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@
# Determine if multi-line or single line and position quotes accordingly
# String manipulation in which being multi-line or single line matters
FORMATTERS: list[Formatter] = [
SplitSummaryAndDocstringFormatter(),
StripWhitespacesFormatter(),
SplitSummaryAndDocstringFormatter(),
LineWrapperFormatter(),
BeginningQuotesFormatter(),
ClosingQuotesFormatter(),
Expand Down
5 changes: 5 additions & 0 deletions pydocstringformatter/formatting/_utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
def is_rst_title(summary: str) -> bool:
"""Check if the second line of a summary is one recurring character."""
# If second line is one recurring character we're dealing with a rst title
last_line = summary.splitlines()[-1].lstrip()
return last_line.count(last_line[0]) == len(last_line)
12 changes: 6 additions & 6 deletions pydocstringformatter/formatting/formatter.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import tokenize
from typing import Literal

from pydocstringformatter.formatting import _utils
from pydocstringformatter.formatting.base import (
StringAndQuotesFormatter,
StringFormatter,
Expand Down Expand Up @@ -139,9 +140,7 @@ def _treat_summary(
if summary[-1] in self.END_OF_SENTENCE_PUNCTUATION:
return summary

# If second line is one recurring character we're dealing with a rst title
last_line = summary.splitlines()[-1].lstrip()
if last_line.count(last_line[0]) == len(last_line):
if _utils.is_rst_title(summary):
return summary

return summary + "."
Expand All @@ -157,8 +156,6 @@ class SplitSummaryAndDocstringFormatter(SummaryFormatter):
"""

name = "split-summary-body"
# TODO(#68): Make this non-optional
optional = True

end_of_sentence_period = re.compile(
r"""
Expand All @@ -181,11 +178,14 @@ def _treat_summary(
"""Split a summary and body if there is a period after the summary."""
new_summary = None

if _utils.is_rst_title(summary):
return summary

# Try to split on period
if match := re.search(self.end_of_sentence_period, summary):
index = match.start()

if summary[: index - 1].count("\n") < self.config.max_summary_lines:
if summary[:index].count("\n") < self.config.max_summary_lines:
if len(summary) == index + 1:
new_summary = summary

Expand Down
20 changes: 12 additions & 8 deletions tests/data/format/beginning_quote/class_docstring.py.out
Original file line number Diff line number Diff line change
@@ -1,23 +1,27 @@
class MyClass:
"""A multi-line
docstring.
"""A multi-line.

docstring
"""

class InnerClass:
"""
A multi-line
docstring.
A multi-line.

docstring
"""


class MyClass:
"""A multi-line
docstring.
"""A multi-line.

docstring
"""

class InnerClass:
"""A multi-line
docstring.
"""A multi-line.

docstring
"""


Expand Down
10 changes: 6 additions & 4 deletions tests/data/format/beginning_quote/function_docstrings.py.out
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@ def func():

def func():
"""
A multi-line
docstring.
A multi-line.

docstring
"""

def inner_func():
"""A multi-line
docstring.
"""A multi-line.

docstring
"""
Original file line number Diff line number Diff line change
@@ -1,22 +1,26 @@
class MyClass:
"""
A multi-line
docstring.
A multi-line.

docstring
"""

class InnerClass:
"""
A multi-line
docstring.
A multi-line.

docstring
"""


class MyClass:
"""A multi-line
docstring.
"""A multi-line.

docstring
"""

class InnerClass:
"""A multi-line
docstring.
"""A multi-line.

docstring
"""
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
def func():
"""
A multi-line
docstring.
A multi-line.

docstring
"""

def inner_func():
"""
A multi-line
docstring.
A multi-line.

docstring
"""
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
MYVAR = 1
"""
A multi-line
docstring.
A multi-line.

docstring
"""
Original file line number Diff line number Diff line change
@@ -1,20 +1,24 @@
class MyClass:
"""A multi-line
docstring.
"""A multi-line.

docstring
"""

class InnerClass:
"""A multi-line
docstring.
"""A multi-line.

docstring
"""


class MyClass:
"""A multi-line
docstring.
"""A multi-line.

docstring
"""

class InnerClass:
"""A multi-line
docstring.
"""A multi-line.

docstring
"""
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
def func():
"""A multi-line
docstring.
"""A multi-line.

docstring
"""

def inner_func():
"""A multi-line
docstring.
"""A multi-line.

docstring
"""
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
MYVAR = 1
"""A multi-line
docstring.
"""A multi-line.

docstring
"""
5 changes: 3 additions & 2 deletions tests/data/format/beginning_quote/variable_docstring.py.out
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
MYVAR = 1
"""A multi-line
docstring.
"""A multi-line.

docstring
"""
Original file line number Diff line number Diff line change
@@ -1,23 +1,27 @@
class MyClass:
"""A multi-line
docstring.
"""A multi-line.

docstring
"""

class InnerClass:
"""
A multi-line
docstring.
A multi-line.

docstring
"""


class MyClass:
"""A multi-line
docstring.
"""A multi-line.

docstring
"""

class InnerClass:
"""A multi-line
docstring.
"""A multi-line.

docstring
"""


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,13 @@ def func(named_parameter: str) -> None:

def func():
"""
A multi-line
docstring.
A multi-line.

docstring
"""

def inner_func():
"""A multi-line
docstring.
"""A multi-line.

docstring
"""
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
MYVAR = 1
"""
A multi-line
docstring.
A multi-line.

docstring
"""

MYVAR = 1
"""A multi-line
docstring.
"""A multi-line.

docstring
"""
10 changes: 6 additions & 4 deletions tests/data/format/final_period/class_docstring.py.out
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@ class MyClass:


class MyClass:
"""A multi-line
docstring.
"""A multi-line.

docstring
"""

class InnerClass:
"""A multi-line
docstring.
"""A multi-line.

docstring
"""


Expand Down
1 change: 0 additions & 1 deletion tests/data/format/final_period/exotic_line_ending.py.out
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,4 @@ def function():
"""This has peculiar line ending;

but it should not matter.

"""
10 changes: 6 additions & 4 deletions tests/data/format/final_period/function_docstrings.py.out
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@ def func()


def func()
"""A multi-line
docstring.
"""A multi-line.

docstring
"""

def inner_func()
"""A multi-line
docstring.
"""A multi-line.

docstring
"""


Expand Down
Loading