docs: def _push_to_list(lst, func_name, char, line, offset,
                    first_arg_pos, first_item, in_list_literal,
                    lead_spaces, options=None):
      """ _push_to_list(lst : [str], func_name : str, char : str, line : int, offset : int,
                          first_arg_pos :int , first_item : int, in_list_literal : bool,
                          lead_spaces : int, options : str)
  
      Called when an opening bracket is encountered. A hash containing the
      necessary data to pin point errors and the indentation level is stored in
      the list and the list returned.
      """
      opts = parse_options(options)
      keywords = add_keywords(opts)
      pos_hash = {'character': char,
                  'line_number': line,
                  'bracket_pos': offset,
                  'indent_level': offset + first_arg_pos,  # the default value, e.g in normal function
                  'func_name': func_name,
                  'spaces': 0}
  
      is_macro = is_macro_name(func_name, opts.dialect)
      two_spacer = is_macro or keywords[func_name] in [KEYWORD1, KEYWORD4]
  
      if in_list_literal or char == '{' or (char == '[' and opts.dialect == 'clojure'):
          # found quoted list or clojure hashmap/vector
          pos_hash['indent_level'] = first_item
  
      elif keywords[func_name] == KEYWORD2:
          # We only make the if-clause stand out if not in uniform mode
          pos_hash['indent_level'] = lead_spaces + ((offset + opts.indent_size * 2)
                                                    if not opts.uniform
                                                    else (offset + opts.indent_size))
  
      elif func_name != '':
          if two_spacer:
              pos_hash['indent_level'] = lead_spaces + offset + opts.indent_size
          elif keywords[func_name] == KEYWORD3:
              pos_hash['indent_level'] = lead_spaces + offset + (2 * opts.indent_size)
  
      lst.append(pos_hash)
      try:
          # A hack to make flets and labels in Lisp not indent like
          # functions. The 'labels' indentation may not be exactly
          # perfect.
          parent_func = lst[-3]['func_name']
          # Make 'special' indentation occur only in a Clojure binding block([]) for
          # letfns
          non_bind_block = opts.dialect == 'clojure' and lst[-2]['character'] != '['
          if keywords[parent_func] == KEYWORD4 and not non_bind_block:
              lst[-1]['indent_level'] = offset + opts.indent_size
      except IndexError:
          pass
      return lst