any 3:2 multi-map group: any pairing of the 3 with the 2 is valid, one is shown
all 3:1 all-to-all group: each of the 3 corresponds to the 1
inserted
deleted
updated
moved
click a highlight to reveal its counterpart
Code view:
A painting is a person's account of this edit as text, recorded independently of the node mapping - a rendering often has several equally defensible answers where the mapping has one. Deletions and insertions carry no position on the opposite side in a painting, so that panel draws no caret for them.
Before
1fn main() {
2 let number = 11;
3if number % 2 == 0 {
4 println!("Even");
5 } else {
6 println!("Odd");
7 }
8}
9
After
1fn main() {
2 let number = 11;
3if number == 0 {
4 println!("Zero");
5 } elseif number % 2 == 0 {
6 println!("Even");
7 } else {
8 println!("Odd");
9 }
10}
11
Before
1fn main() {
2 let number = 11;
3 if number % 2 == 0 {
4 println!("Even");
5 } else {
6 println!("Odd");
7 }
8}
9
After
1fn main() {
2 let number = 11;
3if number == 0 {
4println!("Zero");
5} else if number % 2 == 0 {
6 println!("Even");
7 } else {
8 println!("Odd");
9 }
10}
11
Before
1fn main() {
2 let number = 11;
3if number % 2 == 0 {
4 println!("Even");
5 } else {
6 println!("Odd");
7 }
8}
9
After
1fn main() {
2 let number = 11;
3if number == 0 {
4 println!("Zero");
5 } elseif number % 2 == 0 {
6 println!("Even");
7 } else {
8 println!("Odd");
9 }
10}
11
Before
source_filefunction_item
fn "fn"
identifier "main"
parameters
( "("
) ")"
block
{ "{"
let_declaration
let "let"
identifier "number"
= "="
integer_literal "11"
; ";"
expression_statement
if_expression (+41 nodes collapsed)
} "}"
After
source_filefunction_item
fn "fn"
identifier "main"
parameters
( "("
) ")"
block
{ "{"
let_declaration
let "let"
identifier "number"
= "="
integer_literal "11"
; ";"
expression_statementif_expression
if "if"
binary_expression
identifier "number"
== "=="
integer_literal "0"
block
{ "{"
expression_statementmacro_invocation
identifier "println"
! "!"
token_tree
( "("
string_literal
" "\""
string_content "Zero"
" "\""
) ")"
; ";"
} "}"
else_clause
else "else"
if_expression (+41 nodes collapsed)
} "}"
Keybindings
j / k
next / previous visible node (tree panels)
h / l
collapse / expand the focused node
g / G
jump to first / last visible node
Tab
switch focus between Before/After panels
/
search: jump to next node whose text contains a given string
a
jump the other panel to this node's mapped counterpart
i
hide identical matches, showing only inserted/deleted/updated nodes and their ancestors
v
cycle the view: split / code only / tree only
p
cycle what the code view renders: the node mapping, then each human painting
r
mark this fixture as reviewed, or forget the mark (kept in this browser only)