lean4-htt/tests/lean/interactive
Marc Huisinga 26dba92ce9
feat: faster auto-completion (#7134)
This PR significantly improves the performance of auto-completion by
optimizing individual requests by a factor of ~2 and by giving language
clients like VS Code the opportunity to reuse the state of previous
completion requests, thus greatly reducing the latency for the
auto-completion list to update when adding more characters to an
identifier.

In my testing: 
- The latency of completing `C` in a file with `import Mathlib` was
reduced from ~1650ms to ~800ms
- The latency of completing `Cat` in a file with `import Mathlib` was
reduced from ~800ms to ~430ms
- The latency of completing dot notation was mostly unaffected
- Successive completions are now practically instant, e.g. if we were to
complete `C` and then type it out to `Cat`, before it would take roughly
~1650ms + ~800ms, whereas now there is only a significant latency for
completing `C` (~800ms) and the completion list is updated practically
instantly when typing out `Cat`.

<details> 
  <summary>(Video) Auto-completion latency before this PR</summary>

![Auto-completion latency before this
PR](https://github.com/user-attachments/assets/125bc1ba-b14c-477b-9580-d8067c641342)
</details>

<details> 
  <summary>(Video) Auto-completion latency after this PR</summary>

![Auto-completion latency after this
PR](https://github.com/user-attachments/assets/43d4b587-d51f-4877-aaef-424ecc771490)
</details>

In detail, this PR makes the following changes:
- Set `isIncomplete` to `false` in non-synthetic completion responses so
that the client can re-use these completion states.
- Replace the server side fuzzy matching with a simple and fast check
that all characters in the identifier thus far are present in the same
order in the declaration to match against. There are some examples where
the simple and fast check yields a completion item that the fuzzy
matching would filter, but since VS Code filters the completion items
with its own fuzzy matching after that anyways, these extra completion
items are never actually displayed to the user.
- Remove all notions of scoring and sorting completion items from the
language server. We now rely entirely on the client to sort the
completion items as it sees fit. In my testing, the only significant
change as a result of this is that while the language server would
sometimes penalize namespaces with lots of components, VS Code instead
uses a strictly alphabetic order. Even before this change, we never
actually really prioritized local variables over global variables, so
the penalty wasn't very helpful in practice. We might add some small
form of local variable prioritization in the future, though.
- Remove the empty completion list hack that was introduced in #1885. It
does not appear to be necessary anymore.
2025-02-19 10:05:18 +00:00
..
533.lean
533.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
863.lean
863.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
1031.lean
1031.lean.expected.out
1265.lean
1265.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
1403.lean
1403.lean.expected.out feat: update omega/solve_by_elim to use new tactic syntax, use new tactic syntax (#5932) 2024-11-03 16:23:37 +00:00
1525.lean
1525.lean.expected.out
1659.lean
1659.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
2058.lean
2058.lean.expected.out
2881.lean fix: some goal state issues (#5677) 2024-10-17 12:09:54 +00:00
2881.lean.expected.out
4078.lean
4078.lean.expected.out
4880.lean
4880.lean.expected.out feat: structure auto-completion & partial InfoTrees 2024-11-19 09:26:58 +01:00
5659.lean fix: proper "excess binders" error locations for rintro and intro (#6565) 2025-01-08 08:36:45 +00:00
5659.lean.expected.out fix: proper "excess binders" error locations for rintro and intro (#6565) 2025-01-08 08:36:45 +00:00
6594.lean fix: incremental goal state requests select incomplete snapshot (#6887) 2025-02-14 11:53:24 +00:00
6594.lean.expected.out fix: incremental goal state requests select incomplete snapshot (#6887) 2025-02-14 11:53:24 +00:00
amb.lean
amb.lean.expected.out
anonHyp.lean feat: remove space before propositions with inaccessible names 2022-04-07 07:54:50 -07:00
anonHyp.lean.expected.out
autoBoundIssue.lean feat: upstream definition of Vector from Batteries (#6197) 2024-11-24 23:01:32 +00:00
autoBoundIssue.lean.expected.out feat: upstream definition of Vector from Batteries (#6197) 2024-11-24 23:01:32 +00:00
builtinCodeactions.lean fix: line break in simp? output (#6048) 2024-11-13 15:49:11 +00:00
builtinCodeactions.lean.expected.out fix: line break in simp? output (#6048) 2024-11-13 15:49:11 +00:00
catHover.lean
catHover.lean.expected.out
codeaction.lean
codeaction.lean.expected.out
compHeader.lean
compHeader.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
completion.lean
completion.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
completion2.lean
completion2.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
completion3.lean
completion3.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
completion4.lean
completion4.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
completion5.lean
completion5.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
completion6.lean
completion6.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
completion7.lean
completion7.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
completionAtPrint.lean feat: Environment.addConstAsync (#6691) 2025-01-19 02:00:16 +00:00
completionAtPrint.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
completionBracketedDot.lean
completionBracketedDot.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
completionCheck.lean
completionCheck.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
completionDanglingDot.lean fix: don't issue atomic id completions when there is a dangling dot (#5837) 2024-11-19 12:23:41 +00:00
completionDanglingDot.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
completionDeprecation.lean
completionDeprecation.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
completionEOF.lean
completionEOF.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
completionFallback.lean
completionFallback.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
completionFromExpectedType.lean
completionFromExpectedType.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
completionIStr.lean
completionIStr.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
completionOpenNamespaces.lean
completionOpenNamespaces.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
completionOption.lean
completionOption.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
completionPrefixIssue.lean
completionPrefixIssue.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
completionPrivateTypes.lean
completionPrivateTypes.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
completionPrv.lean feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
completionPrv.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
completionStructureInstance.lean fix: use sensible notion of indentation in structure instance field completion (#6279) 2024-12-02 09:37:12 +00:00
completionStructureInstance.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
completionTactics.lean fix: use sensible notion of indentation in structure instance field completion (#6279) 2024-12-02 09:37:12 +00:00
completionTactics.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
compNamespace.lean
compNamespace.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
definition.lean
definition.lean.expected.out
Diff.lean
Diff.lean.expected.out
discrsIssue.lean
discrsIssue.lean.expected.out
dotIdCompletion.lean
dotIdCompletion.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
editAfterError.lean
editAfterError.lean.expected.out
editCompletion.lean feat: incremental elaboration of definition headers, bodies, and tactics (#3940) 2024-05-22 13:23:30 +00:00
editCompletion.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
expectedTypeAsGoal.lean
expectedTypeAsGoal.lean.expected.out
explicitAppInstHole.lean
explicitAppInstHole.lean.expected.out
foldingRange.lean
foldingRange.lean.expected.out
ghostGoals.lean fix: ghost goals in autoparam tactic block (#6408) 2024-12-17 20:57:39 +00:00
ghostGoals.lean.expected.out fix: ghost goals in autoparam tactic block (#6408) 2024-12-17 20:57:39 +00:00
goalEOF.lean
goalEOF.lean.expected.out
goalIssue.lean
goalIssue.lean.expected.out feat: custom eliminators for induction and cases tactics, and beautiful eliminators for Nat (#3629) 2024-03-09 15:31:51 +00:00
goTo.lean
goTo.lean.expected.out
goTo2.lean
goTo2.lean.expected.out
haveInfo.lean
haveInfo.lean.expected.out
highlight.lean fix: avoid new term info around def bodies (#6031) 2024-11-11 14:54:59 +00:00
highlight.lean.expected.out fix: avoid new term info around def bodies (#6031) 2024-11-11 14:54:59 +00:00
hover.lean
hover.lean.expected.out doc: add recommended spellings for many term notations (#6886) 2025-02-03 13:46:39 +00:00
hoverAt.lean
hoverAt.lean.expected.out
hoverBinderUndescore.lean
hoverBinderUndescore.lean.expected.out
hoverDot.lean
hoverDot.lean.expected.out
hoverException.lean
hoverException.lean.expected.out
hoverTacticExt.lean
hoverTacticExt.lean.expected.out
incrementalCombinator.lean
incrementalCombinator.lean.expected.out
incrementalCommand.lean fix: reparsing may need to backtrack two commands (#6236) 2024-11-27 13:06:57 +00:00
incrementalCommand.lean.expected.out fix: reparsing may need to backtrack two commands (#6236) 2024-11-27 13:06:57 +00:00
incrementalInduction.lean
incrementalInduction.lean.expected.out
incrementalMutual.lean
incrementalMutual.lean.expected.out
incrementalTactic.lean
incrementalTactic.lean.expected.out fix: proper "excess binders" error locations for rintro and intro (#6565) 2025-01-08 08:36:45 +00:00
infoIssues.lean feat: annotate match tactic alternatives with expected state 2022-04-29 16:16:09 +02:00
infoIssues.lean.expected.out
internalNamesIssue.lean
internalNamesIssue.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
inWordCompletion.lean feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
inWordCompletion.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
issue4527.lean
issue4527.lean.expected.out
issue5021.lean
issue5021.lean.expected.out
issue5597.lean fix: declareSimpLikeTactic macro to use mkSynthetic (#5838) 2024-10-30 14:27:56 +00:00
issue5597.lean.expected.out fix: declareSimpLikeTactic macro to use mkSynthetic (#5838) 2024-10-30 14:27:56 +00:00
jumpMutual.lean
jumpMutual.lean.expected.out
keywordCompletion.lean
keywordCompletion.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
lean3HoverIssue.lean
lean3HoverIssue.lean.expected.out
macroGoalIssue.lean
macroGoalIssue.lean.expected.out
match.lean
match.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
matchPatternHover.lean
matchPatternHover.lean.expected.out
matchStxCompletion.lean
matchStxCompletion.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
partialNamespace.lean
partialNamespace.lean.expected.out
plainGoal.lean
plainGoal.lean.expected.out
plainTermGoal.lean
plainTermGoal.lean.expected.out
rename.lean
rename.lean.expected.out
run.lean
stdOutput.lean
stdOutput.lean.expected.out
structNameParentProj.lean feat: make structure parent projections nameable (#7100) 2025-02-18 07:38:13 +00:00
structNameParentProj.lean.expected.out feat: make structure parent projections nameable (#7100) 2025-02-18 07:38:13 +00:00
terminationBySuggestion.lean
terminationBySuggestion.lean.expected.out
test_single.sh
travellingCompletions.lean feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
travellingCompletions.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
unterminatedDocComment.lean
unterminatedDocComment.lean.expected.out
userWidget.lean
userWidget.lean.expected.out