Skip to content

Commit 4eb53cc

Browse files
committed
warn on unused included variable
1 parent 14bddb8 commit 4eb53cc

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

src/Lean/Elab/MutualDef.lean

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,7 @@ private def elabFunValues (headers : Array DefViewElabHeader) (vars : Array Expr
366366
withReuseContext header.value do
367367
withDeclName header.declName <| withLevelNames header.levelNames do
368368
let valStx ← liftMacroM <| declValToTerm header.value
369-
(if header.kind.isTheorem && !deprecated.oldSectionVars.get (← getOptions) then withHeaderSecVars vars includedVars #[header] else fun x => x #[]) fun _ => do
369+
(if header.kind.isTheorem && !deprecated.oldSectionVars.get (← getOptions) then withHeaderSecVars vars includedVars #[header] else fun x => x #[]) fun vars => do
370370
forallBoundedTelescope header.type header.numParams fun xs type => do
371371
-- Add new info nodes for new fvars. The server will detect all fvars of a binder by the binder's source location.
372372
for i in [0:header.binderIds.size] do
@@ -378,6 +378,15 @@ private def elabFunValues (headers : Array DefViewElabHeader) (vars : Array Expr
378378
-- NOTE: without this `instantiatedMVars`, `mkLambdaFVars` may leave around a redex that
379379
-- leads to more section variables being included than necessary
380380
let val ← instantiateMVars val
381+
unless header.type.hasSorry || val.hasSorry do
382+
for var in vars do
383+
unless header.type.containsFVar var.fvarId! || val.containsFVar var.fvarId! || (← vars.anyM (fun v => return (← v.fvarId!.getType).containsFVar var.fvarId!)) do
384+
let varDecl ← var.fvarId!.getDecl
385+
let var := if varDecl.userName.hasMacroScopes && varDecl.binderInfo.isInstImplicit then
386+
m!"[{varDecl.type}]".group
387+
else
388+
var
389+
logWarningAt header.ref m!"included section variable '{var}' is not used in '{header.declName}', consider excluding it"
381390
mkLambdaFVars xs val
382391
if let some snap := header.bodySnap? then
383392
snap.new.resolve <| some {

0 commit comments

Comments
 (0)