Format: text/x-python
⬇ Download File (28.9 KB)
   1  """
   2  There are a couple of classes documented in here:
   3  
   4  - :class:`.BaseName` as an abstact base class for almost everything.
   5  - :class:`.Name` used in a lot of places
   6  - :class:`.Completion` for completions
   7  - :class:`.BaseSignature` as a base class for signatures
   8  - :class:`.Signature` for :meth:`.Script.get_signatures` only
   9  - :class:`.ParamName` used for parameters of signatures
  10  - :class:`.Refactoring` for refactorings
  11  - :class:`.SyntaxError` for :meth:`.Script.get_syntax_errors` only
  12  
  13  These classes are the much biggest part of the API, because they contain
  14  the interesting information about all operations.
  15  """
  16  import re
  17  from pathlib import Path
  18  from typing import Optional
  19  
  20  from parso.tree import search_ancestor
  21  
  22  from jedi import settings
  23  from jedi import debug
  24  from jedi.inference.utils import unite
  25  from jedi.cache import memoize_method
  26  from jedi.inference.compiled.mixed import MixedName
  27  from jedi.inference.names import ImportName, SubModuleName
  28  from jedi.inference.gradual.stub_value import StubModuleValue
  29  from jedi.inference.gradual.conversion import convert_names, convert_values
  30  from jedi.inference.base_value import ValueSet, HasNoContext
  31  from jedi.api.keywords import KeywordName
  32  from jedi.api import completion_cache
  33  from jedi.api.helpers import filter_follow_imports
  34  
  35  
  36  def _sort_names_by_start_pos(names):
  37      return sorted(names, key=lambda s: s.start_pos or (0, 0))
  38  
  39  
  40  def defined_names(inference_state, value):
  41      """
  42      List sub-definitions (e.g., methods in class).
  43  
  44      :type scope: Scope
  45      :rtype: list of Name
  46      """
  47      try:
  48          context = value.as_context()
  49      except HasNoContext:
  50          return []
  51      filter = next(context.get_filters())
  52      names = [name for name in filter.values()]
  53      return [Name(inference_state, n) for n in _sort_names_by_start_pos(names)]
  54  
  55  
  56  def _values_to_definitions(values):
  57      return [Name(c.inference_state, c.name) for c in values]
  58  
  59  
  60  class BaseName:
  61      """
  62      The base class for all definitions, completions and signatures.
  63      """
  64      _mapping = {
  65          'posixpath': 'os.path',
  66          'riscospath': 'os.path',
  67          'ntpath': 'os.path',
  68          'os2emxpath': 'os.path',
  69          'macpath': 'os.path',
  70          'genericpath': 'os.path',
  71          'posix': 'os',
  72          '_io': 'io',
  73          '_functools': 'functools',
  74          '_collections': 'collections',
  75          '_socket': 'socket',
  76          '_sqlite3': 'sqlite3',
  77      }
  78  
  79      _tuple_mapping = dict((tuple(k.split('.')), v) for (k, v) in {
  80          'argparse._ActionsContainer': 'argparse.ArgumentParser',
  81      }.items())
  82  
  83      def __init__(self, inference_state, name):
  84          self._inference_state = inference_state
  85          self._name = name
  86          """
  87          An instance of :class:`parso.python.tree.Name` subclass.
  88          """
  89          self.is_keyword = isinstance(self._name, KeywordName)
  90  
  91      @memoize_method
  92      def _get_module_context(self):
  93          # This can take a while to complete, because in the worst case of
  94          # imports (consider `import a` completions), we need to load all
  95          # modules starting with a first.
  96          return self._name.get_root_context()
  97  
  98      @property
  99      def module_path(self) -> Optional[Path]:
 100          """
 101          Shows the file path of a module. e.g. ``/usr/lib/python3.9/os.py``
 102          """
 103          module = self._get_module_context()
 104          if module.is_stub() or not module.is_compiled():
 105              # Compiled modules should not return a module path even if they
 106              # have one.
 107              path: Optional[Path] = self._get_module_context().py__file__()
 108              return path
 109  
 110          return None
 111  
 112      @property
 113      def name(self):
 114          """
 115          Name of variable/function/class/module.
 116  
 117          For example, for ``x = None`` it returns ``'x'``.
 118  
 119          :rtype: str or None
 120          """
 121          return self._name.get_public_name()
 122  
 123      @property
 124      def type(self):
 125          """
 126          The type of the definition.
 127  
 128          Here is an example of the value of this attribute.  Let's consider
 129          the following source.  As what is in ``variable`` is unambiguous
 130          to Jedi, :meth:`jedi.Script.infer` should return a list of
 131          definition for ``sys``, ``f``, ``C`` and ``x``.
 132  
 133          >>> from jedi import Script
 134          >>> source = '''
 135          ... import keyword
 136          ...
 137          ... class C:
 138          ...     pass
 139          ...
 140          ... class D:
 141          ...     pass
 142          ...
 143          ... x = D()
 144          ...
 145          ... def f():
 146          ...     pass
 147          ...
 148          ... for variable in [keyword, f, C, x]:
 149          ...     variable'''
 150  
 151          >>> script = Script(source)
 152          >>> defs = script.infer()
 153  
 154          Before showing what is in ``defs``, let's sort it by :attr:`line`
 155          so that it is easy to relate the result to the source code.
 156  
 157          >>> defs = sorted(defs, key=lambda d: d.line)
 158          >>> print(defs)  # doctest: +NORMALIZE_WHITESPACE
 159          [<Name full_name='keyword', description='module keyword'>,
 160           <Name full_name='__main__.C', description='class C'>,
 161           <Name full_name='__main__.D', description='instance D'>,
 162           <Name full_name='__main__.f', description='def f'>]
 163  
 164          Finally, here is what you can get from :attr:`type`:
 165  
 166          >>> defs = [d.type for d in defs]
 167          >>> defs[0]
 168          'module'
 169          >>> defs[1]
 170          'class'
 171          >>> defs[2]
 172          'instance'
 173          >>> defs[3]
 174          'function'
 175  
 176          Valid values for type are ``module``, ``class``, ``instance``, ``function``,
 177          ``param``, ``path``, ``keyword``, ``property`` and ``statement``.
 178  
 179          """
 180          tree_name = self._name.tree_name
 181          resolve = False
 182          if tree_name is not None:
 183              # TODO move this to their respective names.
 184              definition = tree_name.get_definition()
 185              if definition is not None and definition.type == 'import_from' and \
 186                      tree_name.is_definition():
 187                  resolve = True
 188  
 189          if isinstance(self._name, SubModuleName) or resolve:
 190              for value in self._name.infer():
 191                  return value.api_type
 192          return self._name.api_type
 193  
 194      @property
 195      def module_name(self):
 196          """
 197          The module name, a bit similar to what ``__name__`` is in a random
 198          Python module.
 199  
 200          >>> from jedi import Script
 201          >>> source = 'import json'
 202          >>> script = Script(source, path='example.py')
 203          >>> d = script.infer()[0]
 204          >>> print(d.module_name)  # doctest: +ELLIPSIS
 205          json
 206          """
 207          return self._get_module_context().py__name__()
 208  
 209      def in_builtin_module(self):
 210          """
 211          Returns True, if this is a builtin module.
 212          """
 213          value = self._get_module_context().get_value()
 214          if isinstance(value, StubModuleValue):
 215              return any(v.is_compiled() for v in value.non_stub_value_set)
 216          return value.is_compiled()
 217  
 218      @property
 219      def line(self):
 220          """The line where the definition occurs (starting with 1)."""
 221          start_pos = self._name.start_pos
 222          if start_pos is None:
 223              return None
 224          return start_pos[0]
 225  
 226      @property
 227      def column(self):
 228          """The column where the definition occurs (starting with 0)."""
 229          start_pos = self._name.start_pos
 230          if start_pos is None:
 231              return None
 232          return start_pos[1]
 233  
 234      def get_definition_start_position(self):
 235          """
 236          The (row, column) of the start of the definition range. Rows start with
 237          1, columns start with 0.
 238  
 239          :rtype: Optional[Tuple[int, int]]
 240          """
 241          if self._name.tree_name is None:
 242              return None
 243          definition = self._name.tree_name.get_definition()
 244          if definition is None:
 245              return self._name.start_pos
 246          return definition.start_pos
 247  
 248      def get_definition_end_position(self):
 249          """
 250          The (row, column) of the end of the definition range. Rows start with
 251          1, columns start with 0.
 252  
 253          :rtype: Optional[Tuple[int, int]]
 254          """
 255          if self._name.tree_name is None:
 256              return None
 257          definition = self._name.tree_name.get_definition()
 258          if definition is None:
 259              return self._name.tree_name.end_pos
 260          if self.type in ("function", "class"):
 261              last_leaf = definition.get_last_leaf()
 262              if last_leaf.type == "newline":
 263                  return last_leaf.get_previous_leaf().end_pos
 264              return last_leaf.end_pos
 265          return definition.end_pos
 266  
 267      def docstring(self, raw=False, fast=True):
 268          r"""
 269          Return a document string for this completion object.
 270  
 271          Example:
 272  
 273          >>> from jedi import Script
 274          >>> source = '''\
 275          ... def f(a, b=1):
 276          ...     "Document for function f."
 277          ... '''
 278          >>> script = Script(source, path='example.py')
 279          >>> doc = script.infer(1, len('def f'))[0].docstring()
 280          >>> print(doc)
 281          f(a, b=1)
 282          <BLANKLINE>
 283          Document for function f.
 284  
 285          Notice that useful extra information is added to the actual
 286          docstring, e.g. function signatures are prepended to their docstrings.
 287          If you need the actual docstring, use ``raw=True`` instead.
 288  
 289          >>> print(script.infer(1, len('def f'))[0].docstring(raw=True))
 290          Document for function f.
 291  
 292          :param fast: Don't follow imports that are only one level deep like
 293              ``import foo``, but follow ``from foo import bar``. This makes
 294              sense for speed reasons. Completing `import a` is slow if you use
 295              the ``foo.docstring(fast=False)`` on every object, because it
 296              parses all libraries starting with ``a``.
 297          """
 298          if isinstance(self._name, ImportName) and fast:
 299              return ''
 300          doc = self._get_docstring()
 301          if raw:
 302              return doc
 303  
 304          signature_text = self._get_docstring_signature()
 305          if signature_text and doc:
 306              return signature_text + '\n\n' + doc
 307          else:
 308              return signature_text + doc
 309  
 310      def _get_docstring(self):
 311          return self._name.py__doc__()
 312  
 313      def _get_docstring_signature(self):
 314          return '\n'.join(
 315              signature.to_string()
 316              for signature in self._get_signatures(for_docstring=True)
 317          )
 318  
 319      @property
 320      def description(self):
 321          """
 322          A description of the :class:`.Name` object, which is heavily used
 323          in testing. e.g. for ``isinstance`` it returns ``def isinstance``.
 324  
 325          Example:
 326  
 327          >>> from jedi import Script
 328          >>> source = '''
 329          ... def f():
 330          ...     pass
 331          ...
 332          ... class C:
 333          ...     pass
 334          ...
 335          ... variable = f if random.choice([0,1]) else C'''
 336          >>> script = Script(source)  # line is maximum by default
 337          >>> defs = script.infer(column=3)
 338          >>> defs = sorted(defs, key=lambda d: d.line)
 339          >>> print(defs)  # doctest: +NORMALIZE_WHITESPACE
 340          [<Name full_name='__main__.f', description='def f'>,
 341           <Name full_name='__main__.C', description='class C'>]
 342          >>> str(defs[0].description)
 343          'def f'
 344          >>> str(defs[1].description)
 345          'class C'
 346  
 347          """
 348          typ = self.type
 349          tree_name = self._name.tree_name
 350          if typ == 'param':
 351              return typ + ' ' + self._name.to_string()
 352          if typ in ('function', 'class', 'module', 'instance') or tree_name is None:
 353              if typ == 'function':
 354                  # For the description we want a short and a pythonic way.
 355                  typ = 'def'
 356              return typ + ' ' + self._name.get_public_name()
 357  
 358          definition = tree_name.get_definition(include_setitem=True) or tree_name
 359          # Remove the prefix, because that's not what we want for get_code
 360          # here.
 361          txt = definition.get_code(include_prefix=False)
 362          # Delete comments:
 363          txt = re.sub(r'#[^\n]+\n', ' ', txt)
 364          # Delete multi spaces/newlines
 365          txt = re.sub(r'\s+', ' ', txt).strip()
 366          return txt
 367  
 368      @property
 369      def full_name(self):
 370          """
 371          Dot-separated path of this object.
 372  
 373          It is in the form of ``<module>[.<submodule>[...]][.<object>]``.
 374          It is useful when you want to look up Python manual of the
 375          object at hand.
 376  
 377          Example:
 378  
 379          >>> from jedi import Script
 380          >>> source = '''
 381          ... import os
 382          ... os.path.join'''
 383          >>> script = Script(source, path='example.py')
 384          >>> print(script.infer(3, len('os.path.join'))[0].full_name)
 385          os.path.join
 386  
 387          Notice that it returns ``'os.path.join'`` instead of (for example)
 388          ``'posixpath.join'``. This is not correct, since the modules name would
 389          be ``<module 'posixpath' ...>```. However most users find the latter
 390          more practical.
 391          """
 392          if not self._name.is_value_name:
 393              return None
 394  
 395          names = self._name.get_qualified_names(include_module_names=True)
 396          if names is None:
 397              return None
 398  
 399          names = list(names)
 400          try:
 401              names[0] = self._mapping[names[0]]
 402          except KeyError:
 403              pass
 404  
 405          return '.'.join(names)
 406  
 407      def is_stub(self):
 408          """
 409          Returns True if the current name is defined in a stub file.
 410          """
 411          if not self._name.is_value_name:
 412              return False
 413  
 414          return self._name.get_root_context().is_stub()
 415  
 416      def is_side_effect(self):
 417          """
 418          Checks if a name is defined as ``self.foo = 3``. In case of self, this
 419          function would return False, for foo it would return True.
 420          """
 421          tree_name = self._name.tree_name
 422          if tree_name is None:
 423              return False
 424          return tree_name.is_definition() and tree_name.parent.type == 'trailer'
 425  
 426      @debug.increase_indent_cm('goto on name')
 427      def goto(self, *, follow_imports=False, follow_builtin_imports=False,
 428               only_stubs=False, prefer_stubs=False):
 429  
 430          """
 431          Like :meth:`.Script.goto` (also supports the same params), but does it
 432          for the current name. This is typically useful if you are using
 433          something like :meth:`.Script.get_names()`.
 434  
 435          :param follow_imports: The goto call will follow imports.
 436          :param follow_builtin_imports: If follow_imports is True will try to
 437              look up names in builtins (i.e. compiled or extension modules).
 438          :param only_stubs: Only return stubs for this goto call.
 439          :param prefer_stubs: Prefer stubs to Python objects for this goto call.
 440          :rtype: list of :class:`Name`
 441          """
 442          if not self._name.is_value_name:
 443              return []
 444  
 445          names = self._name.goto()
 446          if follow_imports:
 447              names = filter_follow_imports(names, follow_builtin_imports)
 448          names = convert_names(
 449              names,
 450              only_stubs=only_stubs,
 451              prefer_stubs=prefer_stubs,
 452          )
 453          return [self if n == self._name else Name(self._inference_state, n)
 454                  for n in names]
 455  
 456      @debug.increase_indent_cm('infer on name')
 457      def infer(self, *, only_stubs=False, prefer_stubs=False):
 458          """
 459          Like :meth:`.Script.infer`, it can be useful to understand which type
 460          the current name has.
 461  
 462          Return the actual definitions. I strongly recommend not using it for
 463          your completions, because it might slow down |jedi|. If you want to
 464          read only a few objects (<=20), it might be useful, especially to get
 465          the original docstrings. The basic problem of this function is that it
 466          follows all results. This means with 1000 completions (e.g.  numpy),
 467          it's just very, very slow.
 468  
 469          :param only_stubs: Only return stubs for this goto call.
 470          :param prefer_stubs: Prefer stubs to Python objects for this type
 471              inference call.
 472          :rtype: list of :class:`Name`
 473          """
 474          assert not (only_stubs and prefer_stubs)
 475  
 476          if not self._name.is_value_name:
 477              return []
 478  
 479          # First we need to make sure that we have stub names (if possible) that
 480          # we can follow. If we don't do that, we can end up with the inferred
 481          # results of Python objects instead of stubs.
 482          names = convert_names([self._name], prefer_stubs=True)
 483          values = convert_values(
 484              ValueSet.from_sets(n.infer() for n in names),
 485              only_stubs=only_stubs,
 486              prefer_stubs=prefer_stubs,
 487          )
 488          resulting_names = [c.name for c in values]
 489          return [self if n == self._name else Name(self._inference_state, n)
 490                  for n in resulting_names]
 491  
 492      def parent(self):
 493          """
 494          Returns the parent scope of this identifier.
 495  
 496          :rtype: Name
 497          """
 498          if not self._name.is_value_name:
 499              return None
 500  
 501          if self.type in ('function', 'class', 'param') and self._name.tree_name is not None:
 502              # Since the parent_context doesn't really match what the user
 503              # thinks of that the parent is here, we do these cases separately.
 504              # The reason for this is the following:
 505              # - class: Nested classes parent_context is always the
 506              #   parent_context of the most outer one.
 507              # - function: Functions in classes have the module as
 508              #   parent_context.
 509              # - param: The parent_context of a param is not its function but
 510              #   e.g. the outer class or module.
 511              cls_or_func_node = self._name.tree_name.get_definition()
 512              parent = search_ancestor(cls_or_func_node, 'funcdef', 'classdef', 'file_input')
 513              context = self._get_module_context().create_value(parent).as_context()
 514          else:
 515              context = self._name.parent_context
 516  
 517          if context is None:
 518              return None
 519          while context.name is None:
 520              # Happens for comprehension contexts
 521              context = context.parent_context
 522  
 523          return Name(self._inference_state, context.name)
 524  
 525      def __repr__(self):
 526          return "<%s %sname=%r, description=%r>" % (
 527              self.__class__.__name__,
 528              'full_' if self.full_name else '',
 529              self.full_name or self.name,
 530              self.description,
 531          )
 532  
 533      def get_line_code(self, before=0, after=0):
 534          """
 535          Returns the line of code where this object was defined.
 536  
 537          :param before: Add n lines before the current line to the output.
 538          :param after: Add n lines after the current line to the output.
 539  
 540          :return str: Returns the line(s) of code or an empty string if it's a
 541                       builtin.
 542          """
 543          if not self._name.is_value_name:
 544              return ''
 545  
 546          lines = self._name.get_root_context().code_lines
 547          if lines is None:
 548              # Probably a builtin module, just ignore in that case.
 549              return ''
 550  
 551          index = self._name.start_pos[0] - 1
 552          start_index = max(index - before, 0)
 553          return ''.join(lines[start_index:index + after + 1])
 554  
 555      def _get_signatures(self, for_docstring=False):
 556          if self._name.api_type == 'property':
 557              return []
 558          if for_docstring and self._name.api_type == 'statement' and not self.is_stub():
 559              # For docstrings we don't resolve signatures if they are simple
 560              # statements and not stubs. This is a speed optimization.
 561              return []
 562  
 563          if isinstance(self._name, MixedName):
 564              # While this would eventually happen anyway, it's basically just a
 565              # shortcut to not infer anything tree related, because it's really
 566              # not necessary.
 567              return self._name.infer_compiled_value().get_signatures()
 568  
 569          names = convert_names([self._name], prefer_stubs=True)
 570          return [sig for name in names for sig in name.infer().get_signatures()]
 571  
 572      def get_signatures(self):
 573          """
 574          Returns all potential signatures for a function or a class. Multiple
 575          signatures are typical if you use Python stubs with ``@overload``.
 576  
 577          :rtype: list of :class:`BaseSignature`
 578          """
 579          return [
 580              BaseSignature(self._inference_state, s)
 581              for s in self._get_signatures()
 582          ]
 583  
 584      def execute(self):
 585          """
 586          Uses type inference to "execute" this identifier and returns the
 587          executed objects.
 588  
 589          :rtype: list of :class:`Name`
 590          """
 591          return _values_to_definitions(self._name.infer().execute_with_values())
 592  
 593      def get_type_hint(self):
 594          """
 595          Returns type hints like ``Iterable[int]`` or ``Union[int, str]``.
 596  
 597          This method might be quite slow, especially for functions. The problem
 598          is finding executions for those functions to return something like
 599          ``Callable[[int, str], str]``.
 600  
 601          :rtype: str
 602          """
 603          return self._name.infer().get_type_hint()
 604  
 605  
 606  class Completion(BaseName):
 607      """
 608      ``Completion`` objects are returned from :meth:`.Script.complete`. They
 609      provide additional information about a completion.
 610      """
 611      def __init__(self, inference_state, name, stack, like_name_length,
 612                   is_fuzzy, cached_name=None):
 613          super().__init__(inference_state, name)
 614  
 615          self._like_name_length = like_name_length
 616          self._stack = stack
 617          self._is_fuzzy = is_fuzzy
 618          self._cached_name = cached_name
 619  
 620          # Completion objects with the same Completion name (which means
 621          # duplicate items in the completion)
 622          self._same_name_completions = []
 623  
 624      def _complete(self, like_name):
 625          append = ''
 626          if settings.add_bracket_after_function \
 627                  and self.type == 'function':
 628              append = '('
 629  
 630          name = self._name.get_public_name()
 631          if like_name:
 632              name = name[self._like_name_length:]
 633          return name + append
 634  
 635      @property
 636      def complete(self):
 637          """
 638          Only works with non-fuzzy completions. Returns None if fuzzy
 639          completions are used.
 640  
 641          Return the rest of the word, e.g. completing ``isinstance``::
 642  
 643              isinstan# <-- Cursor is here
 644  
 645          would return the string 'ce'. It also adds additional stuff, depending
 646          on your ``settings.py``.
 647  
 648          Assuming the following function definition::
 649  
 650              def foo(param=0):
 651                  pass
 652  
 653          completing ``foo(par`` would give a ``Completion`` which ``complete``
 654          would be ``am=``.
 655          """
 656          if self._is_fuzzy:
 657              return None
 658          return self._complete(True)
 659  
 660      @property
 661      def name_with_symbols(self):
 662          """
 663          Similar to :attr:`.name`, but like :attr:`.name` returns also the
 664          symbols, for example assuming the following function definition::
 665  
 666              def foo(param=0):
 667                  pass
 668  
 669          completing ``foo(`` would give a ``Completion`` which
 670          ``name_with_symbols`` would be "param=".
 671  
 672          """
 673          return self._complete(False)
 674  
 675      def docstring(self, raw=False, fast=True):
 676          """
 677          Documented under :meth:`BaseName.docstring`.
 678          """
 679          if self._like_name_length >= 3:
 680              # In this case we can just resolve the like name, because we
 681              # wouldn't load like > 100 Python modules anymore.
 682              fast = False
 683  
 684          return super().docstring(raw=raw, fast=fast)
 685  
 686      def _get_docstring(self):
 687          if self._cached_name is not None:
 688              return completion_cache.get_docstring(
 689                  self._cached_name,
 690                  self._name.get_public_name(),
 691                  lambda: self._get_cache()
 692              )
 693          return super()._get_docstring()
 694  
 695      def _get_docstring_signature(self):
 696          if self._cached_name is not None:
 697              return completion_cache.get_docstring_signature(
 698                  self._cached_name,
 699                  self._name.get_public_name(),
 700                  lambda: self._get_cache()
 701              )
 702          return super()._get_docstring_signature()
 703  
 704      def _get_cache(self):
 705          return (
 706              super().type,
 707              super()._get_docstring_signature(),
 708              super()._get_docstring(),
 709          )
 710  
 711      @property
 712      def type(self):
 713          """
 714          Documented under :meth:`BaseName.type`.
 715          """
 716          # Purely a speed optimization.
 717          if self._cached_name is not None:
 718              return completion_cache.get_type(
 719                  self._cached_name,
 720                  self._name.get_public_name(),
 721                  lambda: self._get_cache()
 722              )
 723  
 724          return super().type
 725  
 726      def get_completion_prefix_length(self):
 727          """
 728          Returns the length of the prefix being completed.
 729          For example, completing ``isinstance``::
 730  
 731              isinstan# <-- Cursor is here
 732  
 733          would return 8, because len('isinstan') == 8.
 734  
 735          Assuming the following function definition::
 736  
 737              def foo(param=0):
 738                  pass
 739  
 740          completing ``foo(par`` would return 3.
 741          """
 742          return self._like_name_length
 743  
 744      def __repr__(self):
 745          return '<%s: %s>' % (type(self).__name__, self._name.get_public_name())
 746  
 747  
 748  class Name(BaseName):
 749      """
 750      *Name* objects are returned from many different APIs including
 751      :meth:`.Script.goto` or :meth:`.Script.infer`.
 752      """
 753      def __init__(self, inference_state, definition):
 754          super().__init__(inference_state, definition)
 755  
 756      @memoize_method
 757      def defined_names(self):
 758          """
 759          List sub-definitions (e.g., methods in class).
 760  
 761          :rtype: list of :class:`Name`
 762          """
 763          defs = self._name.infer()
 764          return sorted(
 765              unite(defined_names(self._inference_state, d) for d in defs),
 766              key=lambda s: s._name.start_pos or (0, 0)
 767          )
 768  
 769      def is_definition(self):
 770          """
 771          Returns True, if defined as a name in a statement, function or class.
 772          Returns False, if it's a reference to such a definition.
 773          """
 774          if self._name.tree_name is None:
 775              return True
 776          else:
 777              return self._name.tree_name.is_definition()
 778  
 779      def __eq__(self, other):
 780          return self._name.start_pos == other._name.start_pos \
 781              and self.module_path == other.module_path \
 782              and self.name == other.name \
 783              and self._inference_state == other._inference_state
 784  
 785      def __ne__(self, other):
 786          return not self.__eq__(other)
 787  
 788      def __hash__(self):
 789          return hash((self._name.start_pos, self.module_path, self.name, self._inference_state))
 790  
 791  
 792  class BaseSignature(Name):
 793      """
 794      These signatures are returned by :meth:`BaseName.get_signatures`
 795      calls.
 796      """
 797      def __init__(self, inference_state, signature):
 798          super().__init__(inference_state, signature.name)
 799          self._signature = signature
 800  
 801      @property
 802      def params(self):
 803          """
 804          Returns definitions for all parameters that a signature defines.
 805          This includes stuff like ``*args`` and ``**kwargs``.
 806  
 807          :rtype: list of :class:`.ParamName`
 808          """
 809          return [ParamName(self._inference_state, n)
 810                  for n in self._signature.get_param_names(resolve_stars=True)]
 811  
 812      def to_string(self):
 813          """
 814          Returns a text representation of the signature. This could for example
 815          look like ``foo(bar, baz: int, **kwargs)``.
 816  
 817          :rtype: str
 818          """
 819          return self._signature.to_string()
 820  
 821  
 822  class Signature(BaseSignature):
 823      """
 824      A full signature object is the return value of
 825      :meth:`.Script.get_signatures`.
 826      """
 827      def __init__(self, inference_state, signature, call_details):
 828          super().__init__(inference_state, signature)
 829          self._call_details = call_details
 830          self._signature = signature
 831  
 832      @property
 833      def index(self):
 834          """
 835          Returns the param index of the current cursor position.
 836          Returns None if the index cannot be found in the curent call.
 837  
 838          :rtype: int
 839          """
 840          return self._call_details.calculate_index(
 841              self._signature.get_param_names(resolve_stars=True)
 842          )
 843  
 844      @property
 845      def bracket_start(self):
 846          """
 847          Returns a line/column tuple of the bracket that is responsible for the
 848          last function call. The first line is 1 and the first column 0.
 849  
 850          :rtype: int, int
 851          """
 852          return self._call_details.bracket_leaf.start_pos
 853  
 854      def __repr__(self):
 855          return '<%s: index=%r %s>' % (
 856              type(self).__name__,
 857              self.index,
 858              self._signature.to_string(),
 859          )
 860  
 861  
 862  class ParamName(Name):
 863      def infer_default(self):
 864          """
 865          Returns default values like the ``1`` of ``def foo(x=1):``.
 866  
 867          :rtype: list of :class:`.Name`
 868          """
 869          return _values_to_definitions(self._name.infer_default())
 870  
 871      def infer_annotation(self, **kwargs):
 872          """
 873          :param execute_annotation: Default True; If False, values are not
 874              executed and classes are returned instead of instances.
 875          :rtype: list of :class:`.Name`
 876          """
 877          return _values_to_definitions(self._name.infer_annotation(ignore_stars=True, **kwargs))
 878  
 879      def to_string(self):
 880          """
 881          Returns a simple representation of a param, like
 882          ``f: Callable[..., Any]``.
 883  
 884          :rtype: str
 885          """
 886          return self._name.to_string()
 887  
 888      @property
 889      def kind(self):
 890          """
 891          Returns an enum instance of :mod:`inspect`'s ``Parameter`` enum.
 892  
 893          :rtype: :py:attr:`inspect.Parameter.kind`
 894          """
 895          return self._name.get_kind()
 896