in tools/linter/src/main/java/com/google/cloud/verticals/foundations/dataharmonization/tools/linter/rules/SpacingBlock.java [78:121]
private void addIndents(BaseTreeNode treeNode) {
IndexedDepthFirstIterator childWalker = treeNode.dfsWalker();
while (childWalker.hasNext()) {
TreeChildReference entry = childWalker.next();
// If the node is internal, or a non-newline or non-comment terminal node, do not enter the
// inner loop.
if (entry.node().isInternal() || !(entry.node().isNewline() || entry.node().isComment())) {
continue;
}
// If a newline or comment is found, start trimming the spaces after it.
while (childWalker.hasNext()) {
TreeChildReference maybeSpaceEntry = childWalker.peek();
// If a non-whitespace or newline or linter created node is reached, stop trimming spaces.
if (!maybeSpaceEntry.node().isWhitespace()
|| maybeSpaceEntry.node().isNewline()
|| maybeSpaceEntry.node().isLinterCreated()) {
break;
}
// Remove existing spaces.
childWalker.next();
childWalker.remove();
}
// If the current and next nodes are newlines, do not insert an indent.
if (entry.node().isNewline() && childWalker.peek().node().isNewline()) {
continue;
}
// If the next token is the last token of treeNode (i.e. the last }) we're done.
if (treeNode.isInternal()
&& childWalker.peek().node() == Iterables.getLast(treeNode.asInternal().getChildren())) {
break;
}
// Insert a new tab.
BaseTreeNode space = new TerminalNode(indent, treeNode, true, TerminalNode.Type.SPACE);
childWalker.insert(space);
}
}