/-! Incremental reuse in combinator -/

def case (h : a ∨ b ∨ c) : True := by
  cases h
  case inr h =>
    cases h
    case inl =>
      dbg_trace "c 0"
      dbg_trace "c 1"
      dbg_trace "c 2"
                  --^ sync
                  --^ insert: ".5"

/-!
`case` with multiple tags should *not* be accidentally incremental, leading to e.g. kernel errors.
-/

-- RESET
def case2 (h : a ∨ b ∨ c) : True := by
  cases h
  case inl | inr =>
    skip
    sorry
       --^ sync
       --^ insert: " "
       --^ collectDiagnostics

-- RESET
def cdot (h : a ∨ b) : True := by
  cases h
  . dbg_trace "d 0"
    dbg_trace "d 1"
    dbg_trace "d 2"
                --^ sync
                --^ insert: ".5"
  dbg_trace "d 3"

-- RESET
def have : True := by
  dbg_trace "h 0"
  have : True := by
    dbg_trace "h 1"
    dbg_trace "h 2"
                --^ sync
                --^ insert: ".5"
  dbg_trace "h 3"

/-!
Updating the `have` header should update the unsolved goals position (and currently re-run the body)
-/
-- RESET
def spaceHave : True := by
  have : True := by
              --^ collectDiagnostics
              --^ insert: " "
              --^ collectDiagnostics
    dbg_trace "sh"

-- RESET
def next : True := by
  next =>
    dbg_trace "n 0"
    dbg_trace "n 1"
                --^ sync
                --^ insert: ".5"

-- RESET
def if : True := by
  if h : True then
    dbg_trace "i 0"
    dbg_trace "i 1"
                --^ sync
                --^ insert: ".5"
  else
    skip


/-!
Removing an extraneous case should not stick around.
-/
-- RESET
example (n : Nat) : n = n := by
  induction n with
  | zero => simp
--v sync
--v delete: "| one => sorry"
  | one => simp
  | succ => simp
--^ collectDiagnostics

/-!
"Missing alternative name" should not stick around.
-/
-- RESET
example (n : Nat) : n = n := by
  induction n with
  | zero => simp
  |  -- insert here
  --^ sync
  --^ insert: "succ => sorry"
  --^ collectDiagnostics
