LS: smart indentation

Implementation of smart indentation that uses new syntax trees
I think it's good to segment it like this. In fact, I wish we did it more. The alternative is to have a createSmartIndenter function