Skip to content

Commit bee153e

Browse files
committed
perf: fix two non linearities in the language server
1 parent 11e4e44 commit bee153e

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

src/Lean/Server/References.lean

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,9 @@ namespace ModuleRefs
117117

118118
/-- Adds `ref` to the `RefInfo` corresponding to `ref.ident` in `self`. See `RefInfo.addRef`. -/
119119
def addRef (self : ModuleRefs) (ref : Reference) : ModuleRefs :=
120-
let refInfo := self.getD ref.ident RefInfo.empty
121-
self.insert ref.ident (refInfo.addRef ref)
120+
self.alter ref.ident fun
121+
| some refInfo => some <| refInfo.addRef ref
122+
| none => some <| RefInfo.empty.addRef ref
122123

123124
/-- Converts `refs` to a JSON-serializable `Lsp.ModuleRefs` and collects all decls. -/
124125
def toLspModuleRefs (refs : ModuleRefs) : BaseIO (Lsp.ModuleRefs × Decls) := StateT.run (s := ∅) do
@@ -374,9 +375,9 @@ def dedupReferences (refs : Array Reference) (allowSimultaneousBinderUse := fals
374375
for ref in refs do
375376
let isBinder := if allowSimultaneousBinderUse then some ref.isBinder else none
376377
let key := (ref.ident, isBinder, ref.range)
377-
refsByIdAndRange := match refsByIdAndRange[key]? with
378-
| some ref' => refsByIdAndRange.insert key { ref' with aliases := ref'.aliases ++ ref.aliases }
379-
| none => refsByIdAndRange.insert key ref
378+
refsByIdAndRange := refsByIdAndRange.alter key fun
379+
| some ref' => some { ref' with aliases := ref'.aliases ++ ref.aliases }
380+
| none => some ref
380381

381382
let dedupedRefs := refsByIdAndRange.fold (init := #[]) fun refs _ ref => refs.push ref
382383
return dedupedRefs.qsort (·.range < ·.range)

0 commit comments

Comments
 (0)