docstring-generator-ext 2.0.4__tar.gz → 2.0.6__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 (27) hide show
  1. {docstring_generator_ext-2.0.4 → docstring_generator_ext-2.0.6}/PKG-INFO +1 -1
  2. {docstring_generator_ext-2.0.4 → docstring_generator_ext-2.0.6}/docstring_generator_ext.egg-info/PKG-INFO +1 -1
  3. {docstring_generator_ext-2.0.4 → docstring_generator_ext-2.0.6}/pyproject.toml +1 -1
  4. {docstring_generator_ext-2.0.4 → docstring_generator_ext-2.0.6}/src/FunctionFormat.cpp +43 -6
  5. {docstring_generator_ext-2.0.4 → docstring_generator_ext-2.0.6}/src/FunctionFormat.hpp +6 -0
  6. {docstring_generator_ext-2.0.4 → docstring_generator_ext-2.0.6}/src/GoogleDocstring.cpp +2 -0
  7. {docstring_generator_ext-2.0.4 → docstring_generator_ext-2.0.6}/src/NumpyDocstring.cpp +3 -0
  8. {docstring_generator_ext-2.0.4 → docstring_generator_ext-2.0.6}/src/docComparator.cpp +18 -14
  9. {docstring_generator_ext-2.0.4 → docstring_generator_ext-2.0.6}/src/docstringFormat.cpp +1 -2
  10. {docstring_generator_ext-2.0.4 → docstring_generator_ext-2.0.6}/MANIFEST.in +0 -0
  11. {docstring_generator_ext-2.0.4 → docstring_generator_ext-2.0.6}/README.md +0 -0
  12. {docstring_generator_ext-2.0.4 → docstring_generator_ext-2.0.6}/docstring_generator_ext.egg-info/SOURCES.txt +0 -0
  13. {docstring_generator_ext-2.0.4 → docstring_generator_ext-2.0.6}/docstring_generator_ext.egg-info/dependency_links.txt +0 -0
  14. {docstring_generator_ext-2.0.4 → docstring_generator_ext-2.0.6}/docstring_generator_ext.egg-info/requires.txt +0 -0
  15. {docstring_generator_ext-2.0.4 → docstring_generator_ext-2.0.6}/docstring_generator_ext.egg-info/top_level.txt +0 -0
  16. {docstring_generator_ext-2.0.4 → docstring_generator_ext-2.0.6}/setup.cfg +0 -0
  17. {docstring_generator_ext-2.0.4 → docstring_generator_ext-2.0.6}/setup.py +0 -0
  18. {docstring_generator_ext-2.0.4 → docstring_generator_ext-2.0.6}/src/GoogleDocstring.hpp +0 -0
  19. {docstring_generator_ext-2.0.4 → docstring_generator_ext-2.0.6}/src/IDocstringFormat.cpp +0 -0
  20. {docstring_generator_ext-2.0.4 → docstring_generator_ext-2.0.6}/src/IDocstringFormat.hpp +0 -0
  21. {docstring_generator_ext-2.0.4 → docstring_generator_ext-2.0.6}/src/NumpyDocstring.hpp +0 -0
  22. {docstring_generator_ext-2.0.4 → docstring_generator_ext-2.0.6}/src/ReStructuredDocstring.cpp +0 -0
  23. {docstring_generator_ext-2.0.4 → docstring_generator_ext-2.0.6}/src/ReStructuredDocstring.hpp +0 -0
  24. {docstring_generator_ext-2.0.4 → docstring_generator_ext-2.0.6}/src/docComparator.hpp +0 -0
  25. {docstring_generator_ext-2.0.4 → docstring_generator_ext-2.0.6}/src/docstringFormat.hpp +0 -0
  26. {docstring_generator_ext-2.0.4 → docstring_generator_ext-2.0.6}/src/parser.cpp +0 -0
  27. {docstring_generator_ext-2.0.4 → docstring_generator_ext-2.0.6}/src/parser.hpp +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: docstring_generator_ext
3
- Version: 2.0.4
3
+ Version: 2.0.6
4
4
  Summary: Generate Docstrings with type-hint information.
5
5
  Author-email: FelixTheC <fberndt87@gmail.com>
6
6
  Classifier: Environment :: Console
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: docstring_generator_ext
3
- Version: 2.0.4
3
+ Version: 2.0.6
4
4
  Summary: Generate Docstrings with type-hint information.
5
5
  Author-email: FelixTheC <fberndt87@gmail.com>
6
6
  Classifier: Environment :: Console
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "docstring_generator_ext"
3
- version = "2.0.4"
3
+ version = "2.0.6"
4
4
  description = "Generate Docstrings with type-hint information."
5
5
  authors = [
6
6
  { name = "FelixTheC", email = "fberndt87@gmail.com" },
@@ -1,6 +1,8 @@
1
1
  #include "FunctionFormat.hpp"
2
2
 
3
3
  #include <map>
4
+ #include <ranges>
5
+
4
6
  #include "parser.hpp"
5
7
 
6
8
  const std::map<std::string, ParameterKind> ParameterKinds = {
@@ -221,27 +223,62 @@ void FunctionDocstring::detect_format_style() noexcept {
221
223
  if (!detected_format_style.has_value())
222
224
  return -1;
223
225
 
224
- const auto get_end_pos = [](std::string &_docstring, StyleSections sections) {
225
- std::vector<size_t> res;
226
+ std::vector<std::string> lines;
227
+ lines.reserve(256);
228
+
229
+ for (const auto&line : std::views::split(docstring, '\n') | std::views::transform([](const auto &obj){ return std::string(obj.begin(), obj.end()); })) {
230
+ lines.emplace_back(remove_whitespace(line));
231
+ }
232
+
233
+ const auto get_end_pos = [](std::vector<std::string> &_lines, StyleSections sections) {
234
+ std::vector<int> res;
226
235
  std::ranges::for_each(
227
236
  sections,
228
237
  [&](const auto &line) {
229
- res.emplace_back(_docstring.find(line));
238
+ int idx = 0;
239
+ for (const auto &obj: _lines) {
240
+ if (obj.find(line) != std::string::npos) {
241
+ res.emplace_back(idx);
242
+ }
243
+ idx++;
244
+ }
230
245
  }
231
246
  );
232
247
  std::ranges::sort(res, std::less<>());
248
+ if (res.empty())
249
+ return -1;
233
250
  return res[0];
234
251
  };
235
252
 
253
+ int end_pos{};
236
254
  switch (*detected_format_style) {
237
255
  case DocstringFormatStyle::NUMPY:
238
- return get_end_pos(docstring, TypicalFormatStyle[0].second);
256
+ end_pos = get_end_pos(lines, TypicalSectionStyle[0].second);
257
+ break;
239
258
  case DocstringFormatStyle::GOOGLE:
240
- return get_end_pos(docstring, TypicalFormatStyle[1].second);
259
+ end_pos = get_end_pos(lines, TypicalSectionStyle[1].second);
260
+ break;
241
261
  case DocstringFormatStyle::reST:
242
- return get_end_pos(docstring, TypicalFormatStyle[2].second);
262
+ end_pos = get_end_pos(lines, TypicalSectionStyle[2].second);
263
+ break;
243
264
  }
244
265
 
266
+ if (end_pos == -1 || static_cast<size_t>(end_pos) > lines.size())
267
+ return -1;
268
+
269
+ std::string tmp = "";
270
+ lines.clear();
271
+ for (const auto&line : std::views::split(docstring, '\n') | std::views::transform([](const auto &obj){ return std::string(obj.begin(), obj.end()); })) {
272
+ lines.emplace_back(line);
273
+ }
274
+ for (int idx = 0; idx < end_pos; idx++) {
275
+ tmp += lines[idx];
276
+ if (idx + 1 < end_pos)
277
+ tmp += "\n";
278
+ }
279
+
280
+ docstring = tmp;
281
+
245
282
  return -1;
246
283
  }
247
284
 
@@ -31,6 +31,12 @@ constexpr std::array<std::pair<std::string_view, StyleSections>, 3> TypicalForma
31
31
  {"rest", {":param", ":returns:", ":raises"}}
32
32
  }};
33
33
 
34
+ constexpr std::array<std::pair<std::string_view, StyleSections>, 3> TypicalSectionStyle = {{
35
+ {"numpy", {"Parameters", "Returns", "Raises"}},
36
+ {"google", {"Args:", "Returns:", "Raises:"}},
37
+ {"rest", {":param", ":returns:", ":raises"}}
38
+ }};
39
+
34
40
  ParameterKind from_str(const std::string &kind);
35
41
  std::ostream &operator<<(std::ostream &out, ParameterKind const &obj) noexcept;
36
42
 
@@ -26,6 +26,8 @@ std::string GoogleDocstring::cleanArgsDescription(const std::string &arg, const
26
26
 
27
27
  if (const auto startPos = res.find(arg); startPos < std::string::npos) {
28
28
  const auto pos = startPos + arg.size() + 1;
29
+ if (pos > res.size())
30
+ return res;
29
31
  res = res.substr(pos, res.size() - pos);
30
32
  }
31
33
 
@@ -24,6 +24,9 @@ std::string NumpyDocstring::docstringArgs() noexcept {
24
24
  docstream << "\n";
25
25
  }
26
26
 
27
+ if (functionInfo.args.empty())
28
+ return "";
29
+
27
30
  docstream << current_py_tab << "Parameters\n";
28
31
  docstream << current_py_tab << "----------\n";
29
32
  std::ranges::for_each(
@@ -13,7 +13,10 @@ DocstringComparisonResult compare_docstrings(
13
13
  bool return_information_visible = false;
14
14
  bool exception_information_visible = false;
15
15
 
16
- size_t last_pos = 0;
16
+ if (function_info.returns.type == "None" || function_info.returns.line_no == 0)
17
+ return_information_visible = true;
18
+
19
+ size_t last_pos = current_docstring.end_line - current_docstring.start_line;
17
20
 
18
21
  // check function arguments from FunctionInfo
19
22
  function_arguments_visible = std::ranges::all_of(
@@ -29,11 +32,17 @@ DocstringComparisonResult compare_docstrings(
29
32
  last_pos = pos + arg.name.size();
30
33
  }
31
34
 
32
- if (!arg.type.empty())
33
- match &= current_docstring.docstring.find(arg.type, last_pos) != std::string::npos;
35
+ if (!arg.type.empty()) {
36
+ const auto pos = current_docstring.docstring.find(arg.type, last_pos);
37
+ match &= pos != std::string::npos;
38
+ if (pos != std::string::npos)
39
+ last_pos = pos + arg.type.size();
40
+ }
34
41
 
35
- if (!arg.default_value.empty())
42
+ if (!arg.default_value.empty()) {
36
43
  match &= current_docstring.docstring.find(arg.default_value, last_pos) != std::string::npos;
44
+ last_pos += arg.default_value.size();
45
+ }
37
46
 
38
47
  if (!arg.description.empty()) {
39
48
  const auto pos = current_docstring.docstring.find(arg.description, last_pos);
@@ -51,14 +60,9 @@ DocstringComparisonResult compare_docstrings(
51
60
  bool match = false;
52
61
  if (!function_info.returns.type.empty()) {
53
62
  const auto pos = current_docstring.docstring.find(function_info.returns.type, last_pos);
63
+ match = pos != std::string::npos;
54
64
  if (pos != std::string::npos) {
55
- auto end_pos = current_docstring.docstring.find('\n', pos);
56
- if (end_pos == std::string::npos)
57
- end_pos = current_docstring.docstring.size();
58
- const auto tmp = current_docstring.docstring.substr(pos, end_pos);
59
- last_pos = end_pos;
60
- if (tmp.size() == function_info.returns.type.size())
61
- match = true;
65
+ last_pos = pos + function_info.returns.type.size() + function_info.returns.description.size();
62
66
  }
63
67
  }
64
68
 
@@ -70,12 +74,12 @@ DocstringComparisonResult compare_docstrings(
70
74
  // check exception information from FunctionInfo
71
75
  exception_information_visible = std::ranges::all_of(
72
76
  function_info.exceptions,
73
- [&current_docstring](const auto &exception) {
77
+ [&last_pos, &current_docstring](const auto &exception) {
74
78
  bool match = false;
75
79
  if (!exception.name.empty())
76
- match = current_docstring.docstring.find(exception.name) != std::string::npos;
80
+ match = current_docstring.docstring.find(exception.name, last_pos) != std::string::npos;
77
81
  if (!exception.description.empty())
78
- match &= current_docstring.docstring.find(exception.description) != std::string::npos;
82
+ match &= current_docstring.docstring.find(exception.description, last_pos) != std::string::npos;
79
83
  return match;
80
84
  }
81
85
  );
@@ -170,8 +170,7 @@ std::map<std::string, int> check_docstrings(std::string &file_path) {
170
170
  }
171
171
  if (allow_overwrite && *val.docstring.detected_format_style != formatStyle) {
172
172
  const auto pos = val.docstring.remove_old_format_style();
173
- if (pos >= 0)
174
- start_pos = pos;
173
+ if (pos >= 0) {}
175
174
  }
176
175
  }
177
176