def lint_params()

in tools/tensorflow_docs/api_generator/report/linter.py [0:0]


def lint_params(page_info: base_page.PageInfo) -> api_report_pb2.ParameterLint:
  """Lints the parameters of a docstring.

  Args:
    page_info: A `PageInfo` object containing the information of a page
      generated via the api generation.

  Returns:
    A filled `DescriptionLint` proto object.
  """
  param_lint = api_report_pb2.ParameterLint()

  reserved_keywords = frozenset(['self', 'cls', '_cls'])

  if page_info.py_object is not None:
    try:
      sig = inspect.signature(page_info.py_object)
      args_in_code = sig.parameters.keys()
      num_args_in_code = len(args_in_code)
      for arg in args_in_code:
        if arg in reserved_keywords:
          num_args_in_code -= 1
          break
      param_lint.num_args_in_code = num_args_in_code
    except (ValueError, TypeError):
      param_lint.num_args_in_code = 0
  else:
    param_lint.num_args_in_code = 0

  for part in page_info.doc.docstring_parts:
    if isinstance(part, parser.TitleBlock):
      if part.title.lower().startswith('arg'):
        param_lint.num_args_in_doc = len(part.items)
        param_lint.num_empty_param_desc_args = _count_empty_param(part.items)

      if part.title.lower().startswith('attr'):
        param_lint.total_attr_param = len(part.items)
        param_lint.num_empty_param_desc_attr = _count_empty_param(part.items)

  return param_lint