diff --git a/src/Init/TacticsExtra.lean b/src/Init/TacticsExtra.lean index 1ccbe8ff25..182a514a1d 100644 --- a/src/Init/TacticsExtra.lean +++ b/src/Init/TacticsExtra.lean @@ -24,14 +24,17 @@ private def expandIfThenElse pure (⟨holeOrTacticSeq⟩, #[]) else if holeOrTacticSeq.isOfKind `Lean.Parser.Term.hole then pure (← mkName, #[]) + else if tk.isMissing then + pure (← `(sorry), #[]) else let hole ← withFreshMacroScope mkName - let holeId := hole.raw[1] - let case ← (open TSyntax.Compat in `(tactic| - case $holeId:ident =>%$tk - -- annotate `then/else` with state after `case` - with_annotate_state $tk skip - $holeOrTacticSeq)) + let holeId : Ident := ⟨hole.raw[1]⟩ + let tacticSeq : TSyntax `Lean.Parser.Tactic.tacticSeq := ⟨holeOrTacticSeq⟩ + -- Use `missing` for ref to ensure that the source range is the same as `holeOrTacticSeq`'s. + let tacticSeq : TSyntax `Lean.Parser.Tactic.tacticSeq ← MonadRef.withRef .missing `(tacticSeq| + with_annotate_state $tk skip + ($tacticSeq)) + let case ← withRef tk <| `(tactic| case $holeId:ident =>%$tk $tacticSeq:tacticSeq) pure (hole, #[case]) let (posHole, posCase) ← mkCase thenTk pos `(?pos) let (negHole, negCase) ← mkCase elseTk neg `(?neg)