rust-analyzer keeps whitespace, represents incomplete programs, and shares unchanged immutable syntax subtrees. See a real broken-code parse and the green/red tree split.
rust-analyzer models IDE answers as queries over changing inputs. Trace how dependencies let a small edit preserve unrelated parsing and semantic work.
Trace go to definition from a cursor token through syntax, macro expansion, name resolution, semantic identity, and finally back to an editable source range.