Skip to content

feat: Improve role resolution error diagnostics#763

Draft
ejgallego wants to merge 3 commits intoleanprover:mainfrom
ejgallego:research/role-fallback
Draft

feat: Improve role resolution error diagnostics#763
ejgallego wants to merge 3 commits intoleanprover:mainfrom
ejgallego:research/role-fallback

Conversation

@ejgallego
Copy link
Contributor

@ejgallego ejgallego commented Feb 23, 2026

As seen in #762 , the experience of using a non-registered or incorrect role is far from ideal. In particular, the error message is a syntax error. We can do better if we only consider registered roles for name resolution.

In order to do this we:
remove the role-inline fallback that treated unknown/unregistered roles as plain function applications

  • add explicit diagnostics for role resolution failures:
    • function found but not registered as a role
    • function found but likely not a role
    • unknown role with fuzzy suggestion when close, otherwise an available-role list
  • display short role names (in-scope style) in diagnostics
  • expose registeredRoleNames in Verso.Doc.Elab.Monad to support role diagnostics
  • add Tests.RoleResolution and wire it into src/tests/Tests.lean

This PR is a RFC. If accepted, I'd suggest implementing the same idea for directives and commands, and implement role/directive/command auto-completion as a follow-up.

Notes:

  • There are a few cases where the fallback was needed, I've left them as is (so the test-project build fails) to illustrate the problem.
  • Code also needs cleanup due to use of Codex to help me write this quick, so don't review code in-depth yes.

@ejgallego ejgallego marked this pull request as draft February 23, 2026 00:04
As seen in leanprover#762 , the experience of using a non-registered or incorrect role is far from ideal. In particular, the error message is a syntax error. We can do better if we only consider registered roles for name resolution.

In order to do this we:
remove the role-inline fallback that treated unknown/unregistered roles as plain function applications
- add explicit diagnostics for role resolution failures:
  - function found but not registered as a role
  - function found but likely not a role
  - unknown role with fuzzy suggestion when close, otherwise an available-role list
- display short role names (in-scope style) in diagnostics
- expose `registeredRoleNames` in `Verso.Doc.Elab.Monad` to support role diagnostics
- add `Tests.RoleResolution` and wire it into `src/tests/Tests.lean`

This PR is a RFC. If accepted, I'd suggest implementing the same idea for directives and commands, and implement role/directive/command auto-completion as a follow-up.
@ejgallego ejgallego force-pushed the research/role-fallback branch from d9ac671 to 3796cec Compare February 23, 2026 00:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants