in packages/python-packages/apiview-stub-generator/apistub/nodes/_function_node.py [0:0]
def _generate_signature_token(self, review_lines, review_line, use_multi_line):
review_line.add_punctuation("(", has_suffix_space=False)
# if multi-line, then def tokens are parent tokens
# to be used later when adding children
def_line = review_line
# If multi-line, then each param line will be a child.
if use_multi_line:
# render errors directly below definition line
for err in self.pylint_errors:
err.generate_tokens(self.apiview, self.namespace_id)
param_lines = self.children
review_line = review_lines.create_review_line(line_id=self.namespace_id)
else:
param_lines = review_lines
# If length of positional args is less than total args, then all items should end with commas
# as end of args list hasn't been reached. Else, last item reached, so no comma.
current_count = len(self.posargs)
final_item = current_count >= self.arg_count
review_line = self._generate_args_for_collection(
self.posargs,
review_lines=param_lines,
review_line=review_line,
use_multi_line=use_multi_line,
final_item=final_item,
)
# add postional-only marker if any posargs
if self.posargs:
# add extra indent manually for multi-line args
indent = ""
if use_multi_line:
indent = " " * 4
review_line.add_text(f"{indent}/", has_suffix_space=False)
review_line.add_punctuation(",")
current_count += 1 # account for /
review_line = self._reviewline_if_needed(
param_lines, review_line, use_multi_line
)
current_count += len(self.args)
final_item = current_count >= self.arg_count
review_line = self._generate_args_for_collection(
self.args,
review_lines=param_lines,
review_line=review_line,
use_multi_line=use_multi_line,
final_item=final_item,
)
current_count += 1
final_item = current_count >= self.arg_count
if self.special_vararg:
self.special_vararg.generate_tokens(
self.namespace_id,
namespace=self.namespace,
review_line=review_line,
add_line_marker=use_multi_line,
prefix="*",
)
if not final_item:
review_line.add_punctuation(",")
review_line = self._reviewline_if_needed(
param_lines, review_line, use_multi_line
)
# add keyword argument marker
if self.kwargs:
# TODO: https://github.com/Azure/azure-sdk-tools/issues/8574
indent = ""
if use_multi_line:
indent = " " * 4
review_line.add_text(f"{indent}*", has_suffix_space=False)
review_line.add_punctuation(",")
review_line = self._reviewline_if_needed(
param_lines, review_line, use_multi_line
)
current_count += len(self.kwargs)
final_item = current_count >= self.arg_count
review_line = self._generate_args_for_collection(
self.kwargs,
review_lines=param_lines,
review_line=review_line,
use_multi_line=use_multi_line,
final_item=final_item,
)
if self.special_kwarg:
# if **kwargs is present, then no comma needed
self.special_kwarg.generate_tokens(
self.namespace_id,
self.namespace,
review_line,
add_line_marker=use_multi_line,
prefix="**",
)
review_line = self._reviewline_if_needed(
param_lines, review_line, use_multi_line
)
review_line.add_punctuation(")", has_suffix_space=False)
if self.return_type:
review_line.add_punctuation("->", has_prefix_space=True)
# Add line marker id if signature is displayed in multi lines
if use_multi_line:
line_id = f"{self.namespace_id}.returntype"
review_line.add_line_marker(line_id)
review_line.add_type(
self.return_type, apiview=self.apiview, has_suffix_space=False
)
review_line = self._reviewline_if_needed(
param_lines, review_line, use_multi_line
)
# after children are added, add the review line
def_line.add_children(self.children)
def_line.line_id = self.namespace_id
review_lines.append(def_line)