code: def message(self, message, source, point, ln):
          
          if message is None:
              message = "parsing failed"
          if ln is not None:
              message += " (line " + str(ln) + ")"
          if source:
              if point is None:
                  message += "\n" + " " * taberrfmt + clean(source)
              else:
                  part = clean(source.splitlines()[lineno(point, source) - 1], False).lstrip()
                  point -= len(source) - len(part)  # adjust all points based on lstrip
                  part = part.rstrip()  # adjust only points that are too large based on rstrip
                  message += "\n" + " " * taberrfmt + part
                  if point > 0:
                      if point >= len(part):
                          point = len(part) - 1
                      message += "\n" + " " * (taberrfmt + point) + "^"
          return message
docs: Creates a SyntaxError-like message.