code: def get_calltip(project, source_code, offset, resource=None,
                  maxfixes=1, ignore_unknown=False, remove_self=False):
      
      fixer = fixsyntax.FixSyntax(project, source_code, resource, maxfixes)
      pyname = fixer.pyname_at(offset)
      if pyname is None:
          return None
      pyobject = pyname.get_object()
      return PyDocExtractor().get_calltip(pyobject, ignore_unknown, remove_self)
docs: Get the calltip of a function
  
      The format of the returned string is
      ``module_name.holding_scope_names.function_name(arguments)``.  For
      classes `__init__()` and for normal objects `__call__()` function
      is used.
  
      Note that the offset is on the function itself *not* after the its
      open parenthesis.  (Actually it used to be the other way but it
      was easily confused when string literals were involved.  So I
      decided it is better for it not to try to be too clever when it
      cannot be clever enough).  You can use a simple search like::
  
          offset = source_code.rindex('(', 0, offset) - 1
  
      to handle simple situations.
  
      If `ignore_unknown` is `True`, `None` is returned for functions
      without source-code like builtins and extensions.
  
      If `remove_self` is `True`, the first parameter whose name is self
      will be removed for methods.