code: def niceStringify(self, level):
          
          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
docs: Returns a string representation with new lines and shifts