in utils/check_task_parameters.py [0:0]
def _update_docstring_content(self, docstring: str) -> str:
"""Update parameter descriptions in the docstring content."""
# Split parameters into new and updated ones based on their status
new_params = {name: info for name, info in self.param_updates.items() if info["status"] == "new"}
update_params = {
name: info for name, info in self.param_updates.items() if info["status"] in ("update_type", "update_doc")
}
# Split the docstring into lines for processing
docstring_lines = docstring.split("\n")
# Find or create the "Args:" section and compute indentation levels
args_index = next((i for i, line in enumerate(docstring_lines) if line.strip().lower() == "args:"), None)
if args_index is None:
# If 'Args:' section is not found, insert it before 'Returns:' or at the end
insertion_index = next(
(
i
for i, line in enumerate(docstring_lines)
if line.strip().lower() in ("returns:", "raises:", "examples:", "example:")
),
len(docstring_lines),
)
docstring_lines.insert(insertion_index, "Args:")
args_index = insertion_index # Update the args_index with the new section
base_indent = docstring_lines[args_index][: -len(docstring_lines[args_index].lstrip())]
param_indent = base_indent + " " # Indentation for parameter lines
desc_indent = param_indent + " " # Indentation for description lines
# Update existing parameters in the docstring
if update_params:
docstring_lines, params_updated = self._process_existing_params(
docstring_lines, update_params, args_index, param_indent, desc_indent
)
# When params_updated is still not empty, it means there are new parameters that are not in the docstring
# but are in the method signature
new_params = {**new_params, **params_updated}
# Add new parameters to the docstring
if new_params:
docstring_lines = self._add_new_params(docstring_lines, new_params, args_index, param_indent, desc_indent)
# Join the docstring lines back into a single string
return "\n".join(docstring_lines)