Returns a string representation with new lines and shifts

def niceStringify(self, level):
        """Returns a string representation with new lines and shifts"""
        out = level * "    " + \
            "Function[" + str(self.keywordLine) + \
            ":" + str(self.keywordPos) + \
            ":" + self._getLPA() + \
            ":" + str(self.colonLine) + \
            ":" + str(self.colonPos) + \
            "]: '" + self.name + "'"
        if self.isAsync:
            out += " (async)"
        if self.returnAnnotation is not None:
            out += " -> '" + self.returnAnnotation + "'"
        for item in self.arguments:
            out += '\n' + level * "    " + "Argument: '" + str(item) + "'"
        for item in self.decorators:
            out += '\n' + level * "    " + str(item)
        if self.docstring is not None:
            out += '\n' + level * "    " + str(self.docstring)
        for item in self.functions:
            out += '\n' + item.niceStringify(level + 1)
        for item in self.classes:
            out += '\n' + item.niceStringify(level + 1)
        return out