Miscellaneous code actions #
This declares some basic tactic code actions, using the @[tactic_code_action]
API.
Return the syntax stack leading to target
from root
, if one exists.
Instances For
Constructs a hole with a kind matching the provided hole elaborator.
Instances For
Hole code action used to fill in a structure's field when specifying an instance.
In the following:
instance : Monad Id := _
invoking the hole code action "Generate a skeleton for the structure under construction." produces:
instance : Monad Id := {
map := _
mapConst := _
pure := _
seq := _
seqLeft := _
seqRight := _
bind := _
}
Instances For
Returns the fields of a structure, unfolding parent structures.
Returns the explicit arguments given a type.
Equations
- Std.CodeAction.getExplicitArgs (Lean.Expr.forallE n binderType body bi) x = Std.CodeAction.getExplicitArgs body (if Lean.BinderInfo.isExplicit bi = true then Array.push x n else x)
- Std.CodeAction.getExplicitArgs x x = x
Instances For
Invoking hole code action "Generate a list of equations for a recursive definition" in the following:
def foo : Expr → Unit := _
produces:
def foo : Expr → Unit := fun
| .bvar deBruijnIndex => _
| .fvar fvarId => _
| .mvar mvarId => _
| .sort u => _
| .const declName us => _
| .app fn arg => _
| .lam binderName binderType body binderInfo => _
| .forallE binderName binderType body binderInfo => _
| .letE declName type value body nonDep => _
| .lit _ => _
| .mdata data expr => _
| .proj typeName idx struct => _
Instances For
Invoking hole code action "Start a tactic proof" will fill in a hole with by done
.
Instances For
Similar to getElabInfo
, but returns the names of binders instead of just the numbers;
intended for code actions which need to name the binders.
Instances For
Invoking tactic code action "Generate an explicit pattern match for 'induction'" in the following:
example (x : Nat) : x = x := by
induction x
produces:
example (x : Nat) : x = x := by
induction x with
| zero => sorry
| succ n ih => sorry
It also works for cases
.
Instances For
The "Add subgoals" code action puts · done
subgoals for any goals remaining at the end of a
proof.
example : True ∧ True := by
constructor
-- <- here
is transformed to
example : True ∧ True := by
constructor
· done
· done