lean4-htt/tests/lean/interactive
Marc Huisinga 8b8561a699
feat: improved go to definition (#9040)
This PR improves the 'Go to Definition' UX, specifically:
- Using 'Go to Definition' on a type class projection will now extract
the specific instances that were involved and provide them as locations
to jump to. For example, using 'Go to Definition' on the `toString` of
`toString 0` will yield results for `ToString.toString` and `ToString
Nat`.
- Using 'Go to Definition' on a macro that produces syntax with type
class projections will now also extract the specific instances that were
involved and provide them as locations to jump to. For example, using
'Go to Definition' on the `+` of `1 + 1` will yield results for
`HAdd.hAdd`, `HAdd α α α` and `Add Nat`.
- Using 'Go to Declaration' will now provide all the results of 'Go to
Definition' in addition to the elaborator and the parser that were
involved. For example, using 'Go to Declaration' on the `+` of `1 + 1`
will yield results for `HAdd.hAdd`, `HAdd α α α`, `Add Nat`,
``macro_rules | `($x + $y) => ...`` and `infixl:65 " + " => HAdd.hAdd`.
- Using 'Go to Type Definition' on a value with a type that contains
multiple constants will now provide 'Go to Definition' results for each
constant. For example, using 'Go to Type Definition' on `x` for `x :
Array Nat` will yield results for `Array` and `Nat`.

### Details
'Go to Definition' for type class projections was first implemented by
#1767, but there were still a couple of shortcomings with the
implementation. E.g. in order to jump to the instance in `toString 0`,
one had to add another space within the application and then use 'Go to
Definition' on that, or macros would block instances from being
displayed. Then, when the .ilean format was added, most 'Go to
Definition' requests were already handled using the .ileans in the
watchdog process, and so the file worker never received them to handle
them with the semantic information that it has available.

This PR resolves most of the issues with the previous implementation and
refactors the 'Go to Definition' control flow so that 'Go to Definition'
requests are always handled by the file worker, with the watchdog merely
using its .ilean position information to update the positions in the
response to a more up-to-date state. This is necessary because the file
worker obtains its position information from the .oleans, which need to
be rebuilt in order to be up-to-date, while the watchdog always receives
.ilean update notifications from each active file worker with the
current position information in the editor.

Finally, all of the 'Go to Definition' code is refactored to be easier
to maintain.

### Breaking changes
`InfoTree.hoverableInfoAt?` has been generalized to
`InfoTree.hoverableInfoAtM?` and now takes a general `filter` argument
instead of several boolean flags, as was the case before.
2025-07-21 15:47:44 +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
1018unknowMVarIssue.lean chore: change chatty test to interactive test (#8348) 2025-05-15 07:56:26 +00:00
1018unknowMVarIssue.lean.expected.out chore: change chatty test to interactive test (#8348) 2025-05-15 07:56:26 +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 feat: localize universe metavariable errors at let bindings and fun binders (#5402) 2024-09-24 05:30:42 +00:00
2058.lean.expected.out feat: improve infer binder type failure message and range (#8263) 2025-07-14 20:19:11 +00:00
2881.lean fix: some goal state issues (#5677) 2024-10-17 12:09:54 +00:00
2881.lean.expected.out fix: some goal state issues (#5677) 2024-10-17 12:09:54 +00:00
4078.lean fix: hovers on binders with metavariables (#4192) 2024-05-21 10:34:58 +00:00
4078.lean.expected.out fix: hovers on binders with metavariables (#4192) 2024-05-21 10:34:58 +00:00
4880.lean fix: ensure autoparam errors have correct positions (#4926) 2024-08-06 22:27:51 +00:00
4880.lean.expected.out chore: use note and hint' for message addenda (#8980) 2025-06-27 15:16:01 +00: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 feat: improve split error messages (#9424) 2025-07-18 22:36:10 +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
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
cancellation.lean fix: cancellation of synchronous part of previous elaboration (#7882) 2025-04-10 11:43:41 +00:00
cancellation.lean.expected.out test: goals accomplished (#8319) 2025-05-13 13:00:47 +00:00
catHover.lean chore: fix spelling mistakes in tests (#5439) 2024-09-24 03:22:53 +00:00
catHover.lean.expected.out chore: fix spelling mistakes in tests (#5439) 2024-09-24 03:22:53 +00:00
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 fix: travelling auto-completion (#5257) 2024-09-10 07:26:44 +00:00
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 feat: denote deprecations in completion items (#5707) 2024-10-14 13:05:16 +00:00
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 feat: completion fallback (#5299) 2024-09-12 16:09:20 +00:00
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: Lean.Grind.IsCharP (#7870) 2025-04-10 08:36:42 +00:00
completionPrivateTypes.lean
completionPrivateTypes.lean.expected.out fix: search path related bugs (#7873) 2025-04-09 15:37:49 +00:00
completionPrv.lean feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
completionPrv.lean.expected.out fix: search path related bugs (#7873) 2025-04-09 15:37:49 +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 feat: IntX operations and conversion theory (#7592) 2025-03-27 15:17:56 +00:00
compNamespace.lean.expected.out fix: namespace completion to only use the short name (#8350) 2025-05-22 11:58:47 +00:00
definition.lean test: make test deterministic (#7916) 2025-04-11 11:16:16 +00:00
definition.lean.expected.out feat: improved go to definition (#9040) 2025-07-21 15:47:44 +00:00
Diff.lean
Diff.lean.expected.out feat: pretty print props with only if domain is prop, add pp.foralls (#7812) 2025-04-04 02:55:47 +00:00
discrsIssue.lean
discrsIssue.lean.expected.out
docstringLinksExamples.lean feat: language reference links and examples in docstrings (#7240) 2025-03-12 09:17:27 +00:00
docstringLinksExamples.lean.expected.out feat: language reference links and examples in docstrings (#7240) 2025-03-12 09:17:27 +00:00
dotIdCompletion.lean
dotIdCompletion.lean.expected.out feat: faster auto-completion (#7134) 2025-02-19 10:05:18 +00:00
editAfterError.lean feat: incremental elaboration of definition headers, bodies, and tactics (#3940) 2024-05-22 13:23:30 +00:00
editAfterError.lean.expected.out feat: update and explain "unknown constant" and "failed to infer type" errors (#9423) 2025-07-18 19:20:31 +00:00
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
errorExplanationInteractive.lean feat: add initial error explanations (#8934) 2025-06-23 17:24:09 +00:00
errorExplanationInteractive.lean.expected.out feat: add initial error explanations (#8934) 2025-06-23 17:24:09 +00:00
expectedTypeAsGoal.lean
expectedTypeAsGoal.lean.expected.out feat: use omission dots for hidden let values in Infoview (#8041) 2025-05-27 23:09:11 +00:00
explicitAppInstHole.lean fix: refine how named arguments suppress explicit arguments (#5283) 2024-09-27 20:14:29 +00:00
explicitAppInstHole.lean.expected.out feat: add option pp.mvars.delayed (#5643) 2024-10-08 17:48:52 +00:00
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
goalsAccomplished.lean test: goals accomplished (#8319) 2025-05-13 13:00:47 +00:00
goalsAccomplished.lean.expected.out test: goals accomplished (#8319) 2025-05-13 13:00:47 +00:00
goTo.lean feat: improved go to definition (#9040) 2025-07-21 15:47:44 +00:00
goTo.lean.expected.out feat: improved go to definition (#9040) 2025-07-21 15:47:44 +00:00
goTo2.lean feat: improved go to definition (#9040) 2025-07-21 15:47:44 +00:00
goTo2.lean.expected.out feat: improved go to definition (#9040) 2025-07-21 15:47:44 +00:00
haveInfo.lean feat: incremental have (#4308) 2024-06-04 09:12:27 +00:00
haveInfo.lean.expected.out feat: 'unsolved goals' & 'goals accomplished' diagnostics (#7366) 2025-03-07 13:50:56 +00:00
highlight.lean fix: do not cancel async elaboration tasks (#7175) 2025-02-21 17:24:36 +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 fix: search path related bugs (#7873) 2025-04-09 15:37:49 +00:00
hover.lean.expected.out feat: improved go to definition (#9040) 2025-07-21 15:47:44 +00:00
hoverAt.lean
hoverAt.lean.expected.out
hoverBinderUndescore.lean
hoverBinderUndescore.lean.expected.out feat: add option pp.mvars.delayed (#5643) 2024-10-08 17:48:52 +00:00
hoverDot.lean
hoverDot.lean.expected.out chore: normalize URLs to the language reference in test results (#7782) 2025-04-02 06:17:31 +00:00
hoverException.lean
hoverException.lean.expected.out feat: @[builtin_doc] attribute (part 2) (#3918) 2024-09-13 08:05:10 +00:00
hoverTacticExt.lean feat: more infrastructure for tactic documentation (#4490) 2024-06-21 12:49:30 +00:00
hoverTacticExt.lean.expected.out feat: more infrastructure for tactic documentation (#4490) 2024-06-21 12:49:30 +00:00
incrementalCombinator.lean fix: update Parser.Term.letIdDeclNoBinders to use new letIdDecl format (#8929) 2025-06-22 19:28:46 +00:00
incrementalCombinator.lean.expected.out fix: update Parser.Term.letIdDeclNoBinders to use new letIdDecl format (#8929) 2025-06-22 19:28:46 +00:00
incrementalCommand.lean fix: do not cancel async elaboration tasks (#7175) 2025-02-21 17:24:36 +00:00
incrementalCommand.lean.expected.out feat: improve split error messages (#9424) 2025-07-18 22:36:10 +00:00
incrementalInduction.lean feat: incremental elaboration of definition headers, bodies, and tactics (#3940) 2024-05-22 13:23:30 +00:00
incrementalInduction.lean.expected.out feat: incremental elaboration of definition headers, bodies, and tactics (#3940) 2024-05-22 13:23:30 +00:00
incrementalMutual.lean fix: calculate error suppression per snapshot (#4657) 2024-07-08 09:54:43 +00:00
incrementalMutual.lean.expected.out feat: update and explain "unknown constant" and "failed to infer type" errors (#9423) 2025-07-18 19:20:31 +00:00
incrementalTactic.lean fix: calculate error suppression per snapshot (#4657) 2024-07-08 09:54:43 +00:00
incrementalTactic.lean.expected.out feat: improve split error messages (#9424) 2025-07-18 22:36:10 +00:00
infoIssues.lean
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
isRflParallel.lean chore: fix spelling mistakes (#8711) 2025-06-10 20:24:28 +00:00
isRflParallel.lean.expected.out feat: explicit defeq attribute (#8419) 2025-06-06 18:40:06 +00:00
issue4527.lean fix: cdot parser error message range (#4528) 2024-06-21 15:06:07 +00:00
issue4527.lean.expected.out feat: 'unsolved goals' & 'goals accomplished' diagnostics (#7366) 2025-03-07 13:50:56 +00:00
issue5021.lean fix: hover text over _ in ?_ (#5118) 2024-08-21 20:47:19 +00:00
issue5021.lean.expected.out chore: fix spelling mistakes (#7328) 2025-04-07 01:15:48 +00:00
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 fix: search path related bugs (#7873) 2025-04-09 15:37:49 +00:00
jumpMutual.lean.expected.out feat: improved go to definition (#9040) 2025-07-21 15:47:44 +00:00
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 feat: pretty print props with only if domain is prop, add pp.foralls (#7812) 2025-04-04 02:55:47 +00:00
plainTermGoal.lean
plainTermGoal.lean.expected.out
ppShowLetValues.lean feat: use omission dots for hidden let values in Infoview (#8041) 2025-05-27 23:09:11 +00:00
ppShowLetValues.lean.expected.out feat: use omission dots for hidden let values in Infoview (#8041) 2025-05-27 23:09:11 +00:00
rename.lean
rename.lean.expected.out
run.lean test: avoid re-elaboration of interactive runner (#7177) 2025-02-22 10:36:25 +00:00
rwElabConst.lean fix: deduplicate elaboration of constant argument to rw (#8232) 2025-05-15 11:33:10 +00:00
rwElabConst.lean.expected.out fix: deduplicate elaboration of constant argument to rw (#8232) 2025-05-15 11:33:10 +00:00
signatureHelp.lean fix: wrong signature help after map/filter/etc (#8655) 2025-06-06 13:07:01 +00:00
signatureHelp.lean.expected.out fix: wrong signature help after map/filter/etc (#8655) 2025-06-06 13:07:01 +00:00
stdOutput.lean
stdOutput.lean.expected.out
strInterpSynthError.lean fix: improve precision of synthesis failure spans in interpolated strings (#9004) 2025-06-27 01:47:32 +00:00
strInterpSynthError.lean.expected.out chore: use note and hint' for message addenda (#8980) 2025-06-27 15:16:01 +00:00
structInstFieldHints.lean feat: add hints for missing structure instance fields (#9317) 2025-07-17 03:22:34 +00:00
structInstFieldHints.lean.expected.out feat: add hints for missing structure instance fields (#9317) 2025-07-17 03:22:34 +00:00
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 feat: termination_by structural (#4542) 2024-07-01 16:51:30 +00:00
terminationBySuggestion.lean.expected.out feat: termination_by structural (#4542) 2024-07-01 16:51:30 +00:00
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 feat: incremental elaboration of definition headers, bodies, and tactics (#3940) 2024-05-22 13:23:30 +00:00
unterminatedDocComment.lean.expected.out feat: incremental elaboration of definition headers, bodies, and tactics (#3940) 2024-05-22 13:23:30 +00:00
userWidget.lean
userWidget.lean.expected.out