format-docstring 0.1.2__tar.gz → 0.1.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. {format_docstring-0.1.2 → format_docstring-0.1.4}/.pre-commit-config.yaml +1 -1
  2. {format_docstring-0.1.2 → format_docstring-0.1.4}/CHANGELOG.md +14 -0
  3. {format_docstring-0.1.2 → format_docstring-0.1.4}/PKG-INFO +10 -4
  4. {format_docstring-0.1.2 → format_docstring-0.1.4}/README.md +9 -3
  5. {format_docstring-0.1.2 → format_docstring-0.1.4}/format_docstring/line_wrap_numpy.py +5 -2
  6. {format_docstring-0.1.2 → format_docstring-0.1.4}/format_docstring.egg-info/PKG-INFO +10 -4
  7. {format_docstring-0.1.2 → format_docstring-0.1.4}/format_docstring.egg-info/SOURCES.txt +2 -0
  8. {format_docstring-0.1.2 → format_docstring-0.1.4}/pyproject.toml +1 -1
  9. format_docstring-0.1.4/tests/test_data/end_to_end/numpy/examples_section.txt +67 -0
  10. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/end_to_end/numpy/single_line_docstring.txt +22 -0
  11. format_docstring-0.1.4/tests/test_data/line_wrap/numpy/examples_section.txt +33 -0
  12. {format_docstring-0.1.2 → format_docstring-0.1.4}/.github/workflows/python-package.yml +0 -0
  13. {format_docstring-0.1.2 → format_docstring-0.1.4}/.github/workflows/python-publish.yml +0 -0
  14. {format_docstring-0.1.2 → format_docstring-0.1.4}/.gitignore +0 -0
  15. {format_docstring-0.1.2 → format_docstring-0.1.4}/.pre-commit-hooks.yaml +0 -0
  16. {format_docstring-0.1.2 → format_docstring-0.1.4}/CLAUDE.md +0 -0
  17. {format_docstring-0.1.2 → format_docstring-0.1.4}/LICENSE +0 -0
  18. {format_docstring-0.1.2 → format_docstring-0.1.4}/format_docstring/__init__.py +0 -0
  19. {format_docstring-0.1.2 → format_docstring-0.1.4}/format_docstring/base_fixer.py +0 -0
  20. {format_docstring-0.1.2 → format_docstring-0.1.4}/format_docstring/config.py +0 -0
  21. {format_docstring-0.1.2 → format_docstring-0.1.4}/format_docstring/docstring_rewriter.py +0 -0
  22. {format_docstring-0.1.2 → format_docstring-0.1.4}/format_docstring/line_wrap_google.py +0 -0
  23. {format_docstring-0.1.2 → format_docstring-0.1.4}/format_docstring/line_wrap_utils.py +0 -0
  24. {format_docstring-0.1.2 → format_docstring-0.1.4}/format_docstring/main_jupyter.py +0 -0
  25. {format_docstring-0.1.2 → format_docstring-0.1.4}/format_docstring/main_py.py +0 -0
  26. {format_docstring-0.1.2 → format_docstring-0.1.4}/format_docstring.egg-info/dependency_links.txt +0 -0
  27. {format_docstring-0.1.2 → format_docstring-0.1.4}/format_docstring.egg-info/entry_points.txt +0 -0
  28. {format_docstring-0.1.2 → format_docstring-0.1.4}/format_docstring.egg-info/requires.txt +0 -0
  29. {format_docstring-0.1.2 → format_docstring-0.1.4}/format_docstring.egg-info/top_level.txt +0 -0
  30. {format_docstring-0.1.2 → format_docstring-0.1.4}/muff.toml +0 -0
  31. {format_docstring-0.1.2 → format_docstring-0.1.4}/requirements.dev +0 -0
  32. {format_docstring-0.1.2 → format_docstring-0.1.4}/setup.cfg +0 -0
  33. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/__init__.py +0 -0
  34. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/helpers.py +0 -0
  35. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_config.py +0 -0
  36. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/end_to_end/numpy/README.md +0 -0
  37. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/end_to_end/numpy/colon_spacing_fix.txt +0 -0
  38. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/end_to_end/numpy/contents_that_are_not_wrapped.txt +0 -0
  39. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/end_to_end/numpy/default_value_standardization.txt +0 -0
  40. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/end_to_end/numpy/empty_lines_are_respected.txt +0 -0
  41. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/end_to_end/numpy/existing_linebreaks_should_not_be_respected.txt +0 -0
  42. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/end_to_end/numpy/four_level_nested_classes.txt +0 -0
  43. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/end_to_end/numpy/indent_four_levels_16_spaces_width_10.txt +0 -0
  44. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/end_to_end/numpy/indent_misaligned_all.txt +0 -0
  45. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/end_to_end/numpy/indent_two_levels_8_spaces.txt +0 -0
  46. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/end_to_end/numpy/line_length_2.txt +0 -0
  47. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/end_to_end/numpy/mismatched_underlines.txt +0 -0
  48. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/end_to_end/numpy/mismatched_underlines_one_dash.txt +0 -0
  49. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/end_to_end/numpy/mismatched_underlines_two_dashes.txt +0 -0
  50. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/end_to_end/numpy/module_level_docstring.txt +0 -0
  51. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/end_to_end/numpy/new_lines_before_and_after.txt +0 -0
  52. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/end_to_end/numpy/param_signature_without_type.txt +0 -0
  53. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/end_to_end/numpy/parameters_returns_raises_wrapping.txt +0 -0
  54. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/end_to_end/numpy/returns_signature_and_description.txt +0 -0
  55. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/end_to_end/numpy/section_title_fixed.txt +0 -0
  56. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/end_to_end/numpy/sections_notes_examples.txt +0 -0
  57. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/end_to_end/numpy/signature_line_is_not_wrapped.txt +0 -0
  58. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/end_to_end/numpy/texts_are_rewrapped.txt +0 -0
  59. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/end_to_end/numpy/very_long_unbreakable_word.txt +0 -0
  60. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/integration_test/numpy/after.ipynb +0 -0
  61. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/integration_test/numpy/after.py +0 -0
  62. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/integration_test/numpy/after_50.ipynb +0 -0
  63. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/integration_test/numpy/after_50.py +0 -0
  64. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/integration_test/numpy/before.ipynb +0 -0
  65. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/integration_test/numpy/before.py +0 -0
  66. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/line_wrap/numpy/README.md +0 -0
  67. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/line_wrap/numpy/colon_spacing_fix.txt +0 -0
  68. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/line_wrap/numpy/contents_that_are_not_wrapped.txt +0 -0
  69. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/line_wrap/numpy/default_value_standardization.txt +0 -0
  70. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/line_wrap/numpy/empty_lines_are_respected.txt +0 -0
  71. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/line_wrap/numpy/existing_linebreaks_should_not_be_respected.txt +0 -0
  72. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/line_wrap/numpy/indent_four_levels_16_spaces_width_10.txt +0 -0
  73. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/line_wrap/numpy/indent_two_levels_8_spaces.txt +0 -0
  74. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/line_wrap/numpy/line_length_2.txt +0 -0
  75. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/line_wrap/numpy/mismatched_underlines.txt +0 -0
  76. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/line_wrap/numpy/mismatched_underlines_one_dash.txt +0 -0
  77. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/line_wrap/numpy/mismatched_underlines_two_dashes.txt +0 -0
  78. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/line_wrap/numpy/module_level_docstring.txt +0 -0
  79. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/line_wrap/numpy/param_signature_without_type.txt +0 -0
  80. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/line_wrap/numpy/parameters_returns_raises_wrapping.txt +0 -0
  81. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/line_wrap/numpy/returns_signature_and_description.txt +0 -0
  82. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/line_wrap/numpy/section_title_fixed.txt +0 -0
  83. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/line_wrap/numpy/sections_notes_examples.txt +0 -0
  84. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/line_wrap/numpy/signature_line_is_not_wrapped.txt +0 -0
  85. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/line_wrap/numpy/texts_are_rewrapped.txt +0 -0
  86. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/line_wrap/numpy/very_long_unbreakable_word.txt +0 -0
  87. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_data/playground.py +0 -0
  88. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_docstring_rewriter.py +0 -0
  89. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_line_wrap_google.py +0 -0
  90. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_line_wrap_numpy.py +0 -0
  91. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_line_wrap_utils.py +0 -0
  92. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_main_jupyter.py +0 -0
  93. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_main_py.py +0 -0
  94. {format_docstring-0.1.2 → format_docstring-0.1.4}/tests/test_playground.py +0 -0
  95. {format_docstring-0.1.2 → format_docstring-0.1.4}/tox.ini +0 -0
@@ -37,6 +37,6 @@ repos:
37
37
  args: [--wrap, '79', --number]
38
38
  additional_dependencies: [mdformat-tables]
39
39
  - repo: https://github.com/jsh9/markdown-toc-creator
40
- rev: 0.0.10
40
+ rev: 0.0.11
41
41
  hooks:
42
42
  - id: markdown-toc-creator
@@ -6,6 +6,20 @@ The format is based on
6
6
  [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project
7
7
  adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
8
8
 
9
+ ## [0.1.4] - 2025-10-12
10
+
11
+ - Added
12
+ - Support for detecting misspelled section title: "Example"
13
+ - Full diff
14
+ - https://github.com/jsh9/format-docstring/compare/0.1.3...0.1.4
15
+
16
+ ## [0.1.3] - 2025-10-12
17
+
18
+ - Fixed
19
+ - A bug in counting line length for single-line docstrings
20
+ - Full diff
21
+ - https://github.com/jsh9/format-docstring/compare/0.1.2...0.1.3
22
+
9
23
  ## [0.1.2] - 2025-10-08
10
24
 
11
25
  - Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: format-docstring
3
- Version: 0.1.2
3
+ Version: 0.1.4
4
4
  Summary: A Python formatter to wrap/adjust docstring lines
5
5
  Author-email: jsh9 <25124332+jsh9@users.noreply.github.com>
6
6
  Maintainer-email: jsh9 <25124332+jsh9@users.noreply.github.com>
@@ -109,7 +109,8 @@ def example_function(param1, param2, option='default'):
109
109
 
110
110
  Examples
111
111
  --------
112
- Code examples with >>> prompts are preserved without wrapping:
112
+ Within the "Examples" section, code with >>> prompts are preserved without
113
+ wrapping:
113
114
 
114
115
  >>> result = example_function('test', 42, option='custom_value_with_a_very_long_name_that_exceeds_line_length')
115
116
  >>> print(result)
@@ -124,12 +125,17 @@ def example_function(param1, param2, option='default'):
124
125
  Params Yes Signature lines preserved
125
126
  =========== ================== ===============================
126
127
 
127
- Content following double colons (::) is preserved::
128
+ Contents following double colons (`::`) are preserved::
128
129
 
129
130
  P(B|A) P(A)
130
- P(A|B) = ---------------
131
+ P(A|B) = -------------
131
132
  P(B)
132
133
 
134
+ Even if there isn't an extra blank line after `::`, the contents are still
135
+ preserved::
136
+ _______
137
+ σ = √ Var(X)
138
+
133
139
  Regular bullet lists are also preserved:
134
140
 
135
141
  - First bullet point that is intentionally long but not wrapped
@@ -76,7 +76,8 @@ def example_function(param1, param2, option='default'):
76
76
 
77
77
  Examples
78
78
  --------
79
- Code examples with >>> prompts are preserved without wrapping:
79
+ Within the "Examples" section, code with >>> prompts are preserved without
80
+ wrapping:
80
81
 
81
82
  >>> result = example_function('test', 42, option='custom_value_with_a_very_long_name_that_exceeds_line_length')
82
83
  >>> print(result)
@@ -91,12 +92,17 @@ def example_function(param1, param2, option='default'):
91
92
  Params Yes Signature lines preserved
92
93
  =========== ================== ===============================
93
94
 
94
- Content following double colons (::) is preserved::
95
+ Contents following double colons (`::`) are preserved::
95
96
 
96
97
  P(B|A) P(A)
97
- P(A|B) = ---------------
98
+ P(A|B) = -------------
98
99
  P(B)
99
100
 
101
+ Even if there isn't an extra blank line after `::`, the contents are still
102
+ preserved::
103
+ _______
104
+ σ = √ Var(X)
105
+
100
106
  Regular bullet lists are also preserved:
101
107
 
102
108
  - First bullet point that is intentionally long but not wrapped
@@ -57,7 +57,10 @@ def wrap_docstring_numpy(
57
57
  'raises',
58
58
  'raise', # tolerate typo
59
59
  }
60
- SECTION_EXAMPLES = {'examples'}
60
+ SECTION_EXAMPLES = {
61
+ 'examples',
62
+ 'example', # tolerate typo
63
+ }
61
64
 
62
65
  temp_out: list[str | list[str]] = []
63
66
  in_code_fence: bool = False
@@ -377,7 +380,7 @@ def handle_single_line_docstring(
377
380
  if '\n' in whole_docstring_literal: # multi-line: do not handle
378
381
  return whole_docstring_literal
379
382
 
380
- if docstring_ending_col >= line_length: # whole docstring exceeds limit
383
+ if docstring_ending_col > line_length: # whole docstring exceeds limit
381
384
  num_leading_indent: int = docstring_starting_col
382
385
  parts: list[str] = whole_docstring_literal.split(docstring_content)
383
386
  prefix: str = parts[0]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: format-docstring
3
- Version: 0.1.2
3
+ Version: 0.1.4
4
4
  Summary: A Python formatter to wrap/adjust docstring lines
5
5
  Author-email: jsh9 <25124332+jsh9@users.noreply.github.com>
6
6
  Maintainer-email: jsh9 <25124332+jsh9@users.noreply.github.com>
@@ -109,7 +109,8 @@ def example_function(param1, param2, option='default'):
109
109
 
110
110
  Examples
111
111
  --------
112
- Code examples with >>> prompts are preserved without wrapping:
112
+ Within the "Examples" section, code with >>> prompts are preserved without
113
+ wrapping:
113
114
 
114
115
  >>> result = example_function('test', 42, option='custom_value_with_a_very_long_name_that_exceeds_line_length')
115
116
  >>> print(result)
@@ -124,12 +125,17 @@ def example_function(param1, param2, option='default'):
124
125
  Params Yes Signature lines preserved
125
126
  =========== ================== ===============================
126
127
 
127
- Content following double colons (::) is preserved::
128
+ Contents following double colons (`::`) are preserved::
128
129
 
129
130
  P(B|A) P(A)
130
- P(A|B) = ---------------
131
+ P(A|B) = -------------
131
132
  P(B)
132
133
 
134
+ Even if there isn't an extra blank line after `::`, the contents are still
135
+ preserved::
136
+ _______
137
+ σ = √ Var(X)
138
+
133
139
  Regular bullet lists are also preserved:
134
140
 
135
141
  - First bullet point that is intentionally long but not wrapped
@@ -42,6 +42,7 @@ tests/test_data/end_to_end/numpy/colon_spacing_fix.txt
42
42
  tests/test_data/end_to_end/numpy/contents_that_are_not_wrapped.txt
43
43
  tests/test_data/end_to_end/numpy/default_value_standardization.txt
44
44
  tests/test_data/end_to_end/numpy/empty_lines_are_respected.txt
45
+ tests/test_data/end_to_end/numpy/examples_section.txt
45
46
  tests/test_data/end_to_end/numpy/existing_linebreaks_should_not_be_respected.txt
46
47
  tests/test_data/end_to_end/numpy/four_level_nested_classes.txt
47
48
  tests/test_data/end_to_end/numpy/indent_four_levels_16_spaces_width_10.txt
@@ -73,6 +74,7 @@ tests/test_data/line_wrap/numpy/colon_spacing_fix.txt
73
74
  tests/test_data/line_wrap/numpy/contents_that_are_not_wrapped.txt
74
75
  tests/test_data/line_wrap/numpy/default_value_standardization.txt
75
76
  tests/test_data/line_wrap/numpy/empty_lines_are_respected.txt
77
+ tests/test_data/line_wrap/numpy/examples_section.txt
76
78
  tests/test_data/line_wrap/numpy/existing_linebreaks_should_not_be_respected.txt
77
79
  tests/test_data/line_wrap/numpy/indent_four_levels_16_spaces_width_10.txt
78
80
  tests/test_data/line_wrap/numpy/indent_two_levels_8_spaces.txt
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "format-docstring"
7
- version = "0.1.2"
7
+ version = "0.1.4"
8
8
  description = "A Python formatter to wrap/adjust docstring lines"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -0,0 +1,67 @@
1
+ LINE_LENGTH: 79
2
+
3
+ **********
4
+ def func1():
5
+ """
6
+ Example
7
+ -----
8
+ >>> a = 2
9
+ >>> b = 3
10
+ """
11
+ pass
12
+
13
+ def func2():
14
+ """
15
+ Examples
16
+ ----
17
+ >>> a = 2
18
+ >>> b = 3
19
+ """
20
+ pass
21
+
22
+
23
+
24
+
25
+
26
+
27
+ def func3():
28
+ """
29
+ Examplesss
30
+ ----
31
+ >>> a = 2
32
+ >>> b = 3
33
+ """
34
+ pass
35
+
36
+ **********
37
+
38
+ def func1():
39
+ """
40
+ Examples
41
+ --------
42
+ >>> a = 2
43
+ >>> b = 3
44
+ """
45
+ pass
46
+
47
+ def func2():
48
+ """
49
+ Examples
50
+ --------
51
+ >>> a = 2
52
+ >>> b = 3
53
+ """
54
+ pass
55
+
56
+
57
+
58
+
59
+
60
+
61
+ def func3():
62
+ """
63
+ Examplesss
64
+ ----
65
+ >>> a = 2 >>> b = 3
66
+ """
67
+ pass
@@ -25,6 +25,16 @@ def func3():
25
25
  """
26
26
  pass
27
27
 
28
+
29
+ def func4():
30
+ """This line has the right number of chars that it does not exceed limit"""
31
+ pass
32
+
33
+
34
+ def func5():
35
+ r"""This line has the right number of chars that it exceeds limit by 1..."""
36
+ pass
37
+
28
38
  **********
29
39
  def func1():
30
40
  """
@@ -53,3 +63,15 @@ def func3():
53
63
  This line is already formatted so we should not re-wrap it.
54
64
  """
55
65
  pass
66
+
67
+
68
+ def func4():
69
+ """This line has the right number of chars that it does not exceed limit"""
70
+ pass
71
+
72
+
73
+ def func5():
74
+ r"""
75
+ This line has the right number of chars that it exceeds limit by 1...
76
+ """
77
+ pass
@@ -0,0 +1,33 @@
1
+ LINE_LENGTH: 79
2
+
3
+ **********
4
+ Example
5
+ -----
6
+ >>> a = 2
7
+ >>> b = 3
8
+
9
+ Examples
10
+ ----
11
+ >>> a = 2
12
+ >>> b = 3
13
+
14
+ Examplesss
15
+ ----
16
+ >>> a = 2
17
+ >>> b = 3
18
+
19
+ **********
20
+
21
+ Examples
22
+ --------
23
+ >>> a = 2
24
+ >>> b = 3
25
+
26
+ Examples
27
+ --------
28
+ >>> a = 2
29
+ >>> b = 3
30
+
31
+ Examplesss
32
+ ----
33
+ >>> a = 2 >>> b = 3