Можно же передавать между IDE и компилятором сразу AST. Все равно IDE парсит исходники и создает какое-то дерево внутри (не обязательно AST), а потом компилятор делает подобную работу второй раз. Автокомплит, форматирование, все это ведь может делать компилятор, в нем уже есть нужные абстракции.
И сохранять исходники нужно сразу как обогащенный AST, что-бы по нему однозначно восстанавливался правильно форматированный текст, который нужен только в окне редактора. Тогда неправильно форматированный код просто не можно будет сохранить и не будет этого всего страдания, не будет табы vs. пробелы.