def METHOD_NAME(self, n):
    k = n.kind
    if k == "operator":
        self.indent += 2
        self._visitnode(n, n.op)
        self.indent -= 2
    elif k == "list":
        self.indent += 2
        dochild = self._visitnode(n, n.parts)
        if dochild is None or dochild:
            self.indent += 2
            for child in n.parts:
                self.METHOD_NAME(child)
            self.indent -= 2
        self.indent -= 2
    elif k == "reservedword":
        self.indent += 2
        self._visitnode(n, n.word)
        self.indent -= 2
    elif k == "pipe":
        self.indent += 2
        self._visitnode(n, n.pipe)
        self.indent -= 2
    elif k == "pipeline":
        self.indent += 2
        dochild = self._visitnode(n, n.parts)
        self.indent -= 2
        if dochild is None or dochild:
            self.indent += 2
            for child in n.parts:
                self.METHOD_NAME(child)
            self.indent -= 2
    elif k == "compound":
        self.indent += 2
        dochild = self._visitnode(n, n.list, n.redirects)
        if dochild is None or dochild:
            self.indent += 2
            for child in n.list:
                self.METHOD_NAME(child)
            for child in n.redirects:
                self.METHOD_NAME(child)
            self.indent -= 2
        self.indent -= 2
    elif k in ("if", "for", "while", "until"):
        self.indent += 2
        dochild = self._visitnode(n, n.parts)
        if dochild is None or dochild:
            self.indent += 2
            for child in n.parts:
                self.METHOD_NAME(child)
            self.indent -= 2
        self.indent -= 2
    elif k == "command":
        self.indent += 2
        dochild = self._visitnode(n, n.parts)
        if dochild is None or dochild:
            self.indent += 2
            for child in n.parts:
                self.METHOD_NAME(child)
            self.indent -= 2
        self.indent -= 2
    elif k == "function":
        self.indent += 2
        dochild = self._visitnode(n, n.name, n.body, n.parts)
        if dochild is None or dochild:
            self.indent += 2
            for child in n.parts:
                self.METHOD_NAME(child)
            self.indent -= 2
        self.indent -= 2
    elif k == "redirect":
        self.indent += 2
        dochild = self._visitnode(n, n.input, n.type, n.output, n.heredoc)
        if dochild is None or dochild:
            self.indent += 2
            if isinstance(n.output, ast.node):
                self.METHOD_NAME(n.output)
            if n.heredoc:
                self.METHOD_NAME(n.heredoc)
            self.indent -= 2
        self.indent -= 2
    elif k == "word":
        self.indent += 2
        dochild = self._visitnode(n, n.word)
        if dochild is None or dochild:
            self.indent += 2
            for child in n.parts:
                self.METHOD_NAME(child)
            self.indent -= 2
        self.indent -= 2
    elif k == "assignment":
        self.indent += 2
        dochild = self._visitnode(n, n.word)
        if dochild is None or dochild:
            self.indent += 2
            for child in n.parts:
                self.METHOD_NAME(child)
            self.indent -= 2
        self.indent -= 2
    elif k in ("parameter", "tilde", "heredoc"):
        self.indent += 2
        self._visitnode(n, n.value)
        self.indent -= 2
    elif k in ("commandsubstitution", "processsubstitution"):
        self.indent += 2
        dochild = self._visitnode(n, n.command)
        if dochild is None or dochild:
            self.indent += 2
            self.METHOD_NAME(n.command)
            self.indent -= 2
        self.indent -= 2
    else:
        raise ValueError("unknown node kind %r" % k)
    self.indent += 2
    self.visitnodeend(n)
    self.indent -= 