docs: def write_expression_list(self, nodes, separator=', ', allow_newlines=True, need_parens=True,
                                final_separator_if_multiline=True):
          """Writes a list of nodes, separated by separator.
  
          If allow_newlines, will write the expression over multiple lines if necessary to say within
          max_line_length. If need_parens, will surround the expression with parentheses in this case.
          If final_separator_if_multiline, will write a separator at the end of the list if it is
          divided over multiple lines.
  
          """
          first = True
          last_line = len(self.lines)
          current_line = list(self.current_line)
          for node in nodes:
              if first:
                  first = False
              else:
                  self.write(separator)
              self.visit(node)
              if allow_newlines and (self.current_line_length() > self.max_line_length or
                                     last_line != len(self.lines)):
                  break
          else:
              return  # stayed within the limit
  
          # reset state
          del self.lines[last_line:]
          self.current_line = current_line
  
          separator = separator.rstrip()
          if need_parens:
              self.write('(')
          self.write_newline()
          with self.add_indentation():
              num_nodes = len(nodes)
              for i, node in enumerate(nodes):
                  self.write_indentation()
                  self.visit(node)
                  if final_separator_if_multiline or i < num_nodes - 1:
                      self.write(separator)
                  self.write_newline()
  
          self.write_indentation()
          if need_parens:
              self.write(')')