This PR adds a linter (`linter.unusedSimpArgs`) that complains when a simp argument (`simp [foo]`) is unused. It should do the right thing if the `simp` invocation is run multiple times, e.g. inside `all_goals`. It does not trigger when the `simp` call is inside a macro. The linter message contains a clickable hint to remove the simp argument. I chose to display a separate warning for each unused argument. This means that the user has to click multiple times to remove all of them (and wait for re-elaboration in between). But this just means multiple endorphine kicks, and the main benefit over a single warning that would have to span the whole argument list is that already the squigglies tell the users about unused arguments. This closes #4483. Making Init and Std clean wrt to this linter revealed close to 1000 unused simp args, a pleasant experience for anyone enjoying tidying things: #8905
30 lines
552 B
Text
30 lines
552 B
Text
def a := 1
|
|
|
|
@[deprecated "Don't use `hi`." (since := "1970-01-01")]
|
|
theorem hi : a = 1 := rfl
|
|
|
|
attribute [simp] hi
|
|
|
|
example (h : 1 = b) : a = b := by
|
|
simp
|
|
guard_target =ₛ 1 = b
|
|
exact h
|
|
|
|
set_option linter.all true
|
|
set_option linter.unusedSimpArgs false
|
|
|
|
example (h : 1 = b) : a = b := by
|
|
simp[
|
|
hi
|
|
]
|
|
guard_target =ₛ 1 = b
|
|
exact h
|
|
|
|
@[deprecated "Don't use `hi'`, either." (since := "1970-01-01")]
|
|
theorem hi' : True := .intro
|
|
|
|
example : True := by
|
|
-- the warning is on `simp`
|
|
simp [
|
|
hi' -- warning should be logged here
|
|
]
|