code: def value_assign(self, end_token=None):
          
          while True:
              token = self.next()
              t_value = token["value"]
              if end_token:
                  if t_value == end_token:
                      raise self.ParseEnd()
                  elif t_value == "\n":
                      continue
              if token["type"] == "literal":
                  return self.make_value(t_value)
              if token["type"] == "function":
                  return self.config_function(token)
              elif t_value == "[":
                  return self.make_list()
              elif t_value == "{":
                  return self.make_dict()
              elif t_value == "(":
                  return tuple(self.make_list(end_token=")"))
              else:
                  self.error("Value expected", previous=not (end_token))
docs: We are expecting a value (literal, list, dict, tuple).
          If end_token then we are inside a list, dict or tuple so we are allow
          newlines and also check for the end token.