This is a rewrite of the `UnusedVariables` lint to inline and simplify many of the dependent functions to try to improve the performance of this lint, which quite often shows up in perf reports. * The mvar assignment scanning is one of the most expensive parts of the process, so we do two things to improve this: * Lazily perform the scan only if we need it * Use an object-pointer hashmap to ensure that we don't have quadratic behavior when there are many mvar assignments with slight differences. * The dependency on `Lean.Server` is removed, meaning we don't need to do the LSP conversion stuff anymore. The main logic of reference finding is inlined. * We take `fvarAliases` into account, and union together fvars which are aliases of a base fvar. (It would be great if we had `UnionFind` here.) More docs will be added once we confirm an actual perf improvement. --------- Co-authored-by: Sebastian Ullrich <sebasti@nullri.ch>
50 lines
3.3 KiB
Text
50 lines
3.3 KiB
Text
linterUnusedVariables.lean:16:21-16:22: warning: unused variable `x` [linter.unusedVariables]
|
||
linterUnusedVariables.lean:17:6-17:7: warning: unused variable `y` [linter.unusedVariables]
|
||
linterUnusedVariables.lean:22:8-22:9: warning: unused variable `x` [linter.unusedVariables]
|
||
linterUnusedVariables.lean:38:5-38:6: warning: unused variable `x` [linter.unusedVariables]
|
||
linterUnusedVariables.lean:43:5-43:6: warning: unused variable `x` [linter.unusedVariables]
|
||
linterUnusedVariables.lean:46:7-46:8: warning: unused variable `x` [linter.unusedVariables]
|
||
linterUnusedVariables.lean:49:8-49:9: warning: unused variable `x` [linter.unusedVariables]
|
||
linterUnusedVariables.lean:53:9-53:10: warning: unused variable `z` [linter.unusedVariables]
|
||
linterUnusedVariables.lean:55:11-55:12: warning: unused variable `z` [linter.unusedVariables]
|
||
linterUnusedVariables.lean:60:14-60:15: warning: unused variable `y` [linter.unusedVariables]
|
||
linterUnusedVariables.lean:66:20-66:21: warning: unused variable `y` [linter.unusedVariables]
|
||
linterUnusedVariables.lean:71:34-71:38: warning: unused variable `inst` [linter.unusedVariables]
|
||
linterUnusedVariables.lean:112:25-112:26: warning: unused variable `x` [linter.unusedVariables]
|
||
linterUnusedVariables.lean:113:6-113:7: warning: unused variable `y` [linter.unusedVariables]
|
||
linterUnusedVariables.lean:119:6-119:7: warning: unused variable `a` [linter.unusedVariables]
|
||
linterUnusedVariables.lean:129:26-129:27: warning: unused variable `z` [linter.unusedVariables]
|
||
linterUnusedVariables.lean:137:9-137:10: warning: unused variable `h` [linter.unusedVariables]
|
||
linterUnusedVariables.lean:151:8-151:9: warning: unused variable `y` [linter.unusedVariables]
|
||
linterUnusedVariables.lean:154:20-154:21: warning: unused variable `β` [linter.unusedVariables]
|
||
linterUnusedVariables.lean:155:7-155:8: warning: unused variable `x` [linter.unusedVariables]
|
||
linterUnusedVariables.lean:165:6-165:7: warning: unused variable `s` [linter.unusedVariables]
|
||
linterUnusedVariables.lean:189:6-189:7: warning: unused variable `y` [linter.unusedVariables]
|
||
linterUnusedVariables.lean:196:19-196:20: warning: unused variable `x` [linter.unusedVariables]
|
||
linterUnusedVariables.lean:200:6-200:7: warning: unused variable `y` [linter.unusedVariables]
|
||
linterUnusedVariables.lean:205:6-205:7: warning: unused variable `y` [linter.unusedVariables]
|
||
linterUnusedVariables.lean:210:6-210:7: warning: unused variable `y` [linter.unusedVariables]
|
||
linterUnusedVariables.lean:219:32-219:33: warning: unused variable `b` [linter.unusedVariables]
|
||
linterUnusedVariables.lean:236:27-236:28: error: don't know how to synthesize placeholder
|
||
context:
|
||
bar : ?m
|
||
bar' : Nat → Nat
|
||
α : Type ?u
|
||
β : ?m
|
||
inst : ToString α
|
||
a : Nat
|
||
⊢ Nat
|
||
linterUnusedVariables.lean:237:0-237:7: warning: declaration uses 'sorry'
|
||
linterUnusedVariables.lean:238:0-238:7: warning: declaration uses 'sorry'
|
||
linterUnusedVariables.lean:239:29-241:7: error: unexpected token 'theorem'; expected '{' or tactic
|
||
linterUnusedVariables.lean:239:27-239:29: error: unsolved goals
|
||
bar : ?m
|
||
bar' : Nat → Nat
|
||
α : Type ?u
|
||
β : ?m
|
||
inst : ToString α
|
||
a : Nat
|
||
⊢ Nat
|
||
linterUnusedVariables.lean:249:9-249:12: warning: unused variable `ord` [linter.unusedVariables]
|
||
linterUnusedVariables.lean:250:15-250:18: warning: unused variable `ord` [linter.unusedVariables]
|
||
linterUnusedVariables.lean:251:9-251:10: warning: unused variable `h` [linter.unusedVariables]
|