Improve python docstring checks

* We need to check for getsets having duplicate docstrings, and ignore
  docstrings being duplicated between members of different structs.
This commit is contained in:
baldurk
2022-05-17 13:43:57 +01:00
parent d6c7bbb90d
commit 3908082bd6
2 changed files with 26 additions and 5 deletions
+2 -2
View File
@@ -521,8 +521,8 @@ DECLARE_REFLECTION_STRUCT(BugReport);
rdcdatetime(2015, 01, 01)) \
\
DOCUMENT( \
"``True`` if when coloring marker regions in the :class:`EventBrowser`, the whole row " \
"should be colored instead of just a side-bar.\n" \
"``True`` if the UI should be allowed to make update checks remotely to see if a new " \
"version is available.\n" \
"\n" \
"Defaults to ``True``."); \
CONFIG_SETTING_VAL(public, bool, bool, CheckUpdate_AllowChecks, true) \
+24 -3
View File
@@ -125,7 +125,7 @@ inline bool check_interface(rdcstr &log, swig_type_info **swig_types, size_t num
// the end of the world.
bool errors_found = false;
std::set<rdcstr> docstrings;
std::set<rdcstr> struct_docstrings;
for(size_t i = 0; i < numTypes; i++)
{
SwigPyClientData *typeinfo = (SwigPyClientData *)swig_types[i]->clientdata;
@@ -138,7 +138,7 @@ inline bool check_interface(rdcstr &log, swig_type_info **swig_types, size_t num
rdcstr typedoc = typeobj->tp_doc;
auto result = docstrings.insert(typedoc);
auto result = struct_docstrings.insert(typedoc);
if(!result.second)
{
@@ -278,6 +278,7 @@ inline bool check_interface(rdcstr &log, swig_type_info **swig_types, size_t num
PyMethodDef *method = typeobj->tp_methods;
std::set<rdcstr> method_docstrings;
while(method->ml_doc)
{
rdcstr method_doc = method->ml_doc;
@@ -297,7 +298,7 @@ inline bool check_interface(rdcstr &log, swig_type_info **swig_types, size_t num
method_doc.erase(0, i);
result = docstrings.insert(method_doc);
result = method_docstrings.insert(method_doc);
if(!result.second)
{
@@ -312,6 +313,26 @@ inline bool check_interface(rdcstr &log, swig_type_info **swig_types, size_t num
method++;
}
PyGetSetDef *getset = typeobj->tp_getset;
while(getset && getset->doc)
{
rdcstr getset_doc = getset->doc;
result = method_docstrings.insert(getset_doc);
if(!result.second)
{
snprintf(
convert_error, sizeof(convert_error) - 1,
"Duplicate docstring '%s' found on getset '%s.%s' - are you missing a DOCUMENT()?\n",
getset_doc.c_str(), typeobj->tp_name, getset->name);
log += convert_error;
errors_found = true;
}
getset++;
}
}
return errors_found;