I think the following would make a good example:
Create an example function which traverses the SyntaxTree, and renames all signals it encounters to be suffixed with "_visited".
It could even be written in the style of a unit test, with the following input and output:
Example Input
module RefModule (
input in1,
input in2,
output logic out
);
assign out = in1 & ~in2;
endmodule
Example Output
module RefModule (
input in1_visited,
input in2_visited,
output logic out_visited
);
assign out_visited = in1_visited & ~in2_visited;
endmodule
Additional context
I'd be happy to help finish this in a PR if you can just give a crude example of how this is accomplished.