@Override
    public Void visitIndent(IndentToken token) {
        assertExpected(token);
        
        // If we're dealing with a comment, just smile and wave
        if (tokens.peek().getType() == TokenType.COMMENT) {
            setExpected(TokenType.COMMENT);
            return null;
        }
        
        // If we're dealing with list items, don't do peep!
        if (tokens.peek().getType() == TokenType.LISTITEM) {
            setExpected(TokenType.LISTITEM);
            return null;
        }
        
        // Get the indent amount of the token
        int newIndent = token.value().length();
        
        // And the current indent amount
        int currentIndent = indents.get(level);
        
        // Higher value -> deeper indent level
        if (newIndent > currentIndent) {
            if (node == null || node.get() != null) {
                error("Indent mismatch 1! Expected " + currentIndent + " spaces, but found " + newIndent, token);
            }
            level++;
            indents.put(level, newIndent);
            parent = node;
        } else if (newIndent < currentIndent) {
            int originalIndent = currentIndent;
            while (newIndent < currentIndent) {
                parent = parent.getParent();
                level--;
                currentIndent = indents.get(level);
            }
            if (newIndent != currentIndent) {
                error("Indent mismatch 2! Expected " + originalIndent + " spaces, but found only " + newIndent, token);
            }
        }
        
        setExpected(TokenType.KEY, TokenType.COMMENT, TokenType.LISTITEM);
        return null;
    }