code: def goto(self, context, name):
      definition = name.get_definition(import_name_always=True)
      if definition is not None:
          type_ = definition.type
          if type_ == "expr_stmt":
              # Only take the parent, because if it's more complicated than just
              # a name it's something you can "goto" again.
              is_simple_name = name.parent.type not in (
                  "power",
                  "trailer",
              )
              if is_simple_name:
                  return [TreeNameDefinition(context, name)]
          elif type_ == "param":
              return [ParamName(context, name)]
          elif type_ in ("funcdef", "classdef"):
              return [TreeNameDefinition(context, name)]
          elif type_ in ("import_from", "import_name"):
              module_names = imports.infer_import(
                  context, name, is_goto=True
              )
              return module_names
  
      par = name.parent
      node_type = par.type
      if (
          node_type == "argument"
          and par.children[1] == "="
          and par.children[0] == name
      ):
          # Named param goto.
          trailer = par.parent
          if trailer.type == "arglist":
              trailer = trailer.parent
          if trailer.type != "classdef":
              if trailer.type == "decorator":
                  context_set = context.eval_node(trailer.children[1])
              else:
                  i = trailer.parent.children.index(trailer)
                  to_evaluate = trailer.parent.children[:i]
                  if to_evaluate[0] == "await":
                      to_evaluate.pop(0)
                  context_set = context.eval_node(to_evaluate[0])
                  for trailer in to_evaluate[1:]:
                      context_set = eval_trailer(
                          context, context_set, trailer
                      )
              param_names = []
              for context in context_set:
                  try:
                      get_param_names = context.get_param_names
                  except AttributeError:
                      pass
                  else:
                      for param_name in get_param_names():
                          if param_name.string_name == name.value:
                              param_names.append(param_name)
              return param_names
      elif node_type == "dotted_name":  # Is a decorator.
          index = par.children.index(name)
          if index > 0:
              new_dotted = helpers.deep_ast_copy(par)
              new_dotted.children[index - 1 :] = []
              values = context.eval_node(new_dotted)
              return unite(
                  value.py__getattribute__(
                      name, name_context=context, is_goto=True
                  )
                  for value in values
              )
  
      if node_type == "trailer" and par.children[0] == ".":
          values = helpers.evaluate_call_of_leaf(
              context, name, cut_own_trailer=True
          )
          return unite(
              value.py__getattribute__(
                  name, name_context=context, is_goto=True
              )
              for value in values
          )
      else:
          stmt = (
              tree.search_ancestor(name, "expr_stmt", "lambdef") or name
          )
          if stmt.type == "lambdef":
              stmt = name
          return context.py__getattribute__(
              name,
              position=stmt.start_pos,
              search_global=True,
              is_goto=True,
          )
  
imports: from parso.python import tree
  import parso
  from parso import python_bytes_to_unicode
  from jedi import debug
  from jedi import parser_utils
  from jedi.evaluate.utils import unite
  from jedi.evaluate import imports
  from jedi.evaluate import recursion
  from jedi.evaluate.cache import evaluator_function_cache
  from jedi.evaluate import compiled
  from jedi.evaluate import helpers
  from jedi.evaluate.filters import TreeNameDefinition, ParamName
  from jedi.evaluate.base_context import ContextualizedName, ContextualizedNode, ContextSet, NO_CONTEXTS, iterate_contexts
  from jedi.evaluate.context import ClassContext, FunctionContext, AnonymousInstance, BoundMethod
  from jedi.evaluate.context.iterable import CompForContext
  from jedi.evaluate.syntax_tree import eval_trailer, eval_expr_stmt, eval_node, check_tuple_assignments
label_desc: Use image node_id 9 for calling the Evaluator obj's underlying member method code with example usage: obj.goto(context, name) and returns: unite, context, param_names, list, list, unite, list, module_names