LS: smart indentation

Implementation of smart indentation that uses new syntax trees
Please comment the intuition behind this. It is not quite clear.