Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Find References Request #306

Open
toddATavail opened this issue Oct 5, 2023 · 0 comments
Open

Find References Request #306

toddATavail opened this issue Oct 5, 2023 · 0 comments
Labels
enhancement lsp Language Server Protocol

Comments

@toddATavail
Copy link
Member

Support for locating the usages of the name at the specified module coordinates. Mandated by Find References Request.

This amounts to implementing org.eclipse.lsp4j.TextDocumentService.references.

For guidance, the places to begin digging into Swing/Anvil are:

  • avail.anvil.AvailEditor.handleClick
  • avail.anvil.AvailWorkbench.navigateToSendersOfName
  • avail.anvil.AvailWorkbench.allUsagesThen
  • avail.anvil.RenderingEngine.applyStylesAndPhrasePaths

Currently, the technique is:

  1. Resolve the mouse position to a document position
  2. Use the document position to obtain the TokenStyle associated with the PhraseNodeAttributeKey attribute that was applied by avail.anvil.RenderingEngine.applyStylesAndPhrasePaths
  3. Use the TokenStyle to obtain the name / symbol (NameInModule) and token index / message part index
  4. Use these to interrogate a Repository and a NamesIndex to obtain all usages associated with the name / symbol

The message part index (usually called tokenIndexInName) is currently used only to highlight the message part that the user specified. It does not appear that LSP (or lsp4j) are capable of transmitting this additional information as opaque client data. If we want to preserve the current behavior, then we will need to reply with LocationLinks rather than mere Locations, and use the MessageSplitter (or something akin but with pared down functionality) in the IDEA plugin to identify and highlight the message part. The current behavior was nice enough to build in Swing/Anvil in the first place, but is likely to require significant additional effort to port to IDEA, so we may want to consider strict parity as a stretch goal.

The following items count as usages:

  • Lexical sends appearing directly in source code
  • Generated sends appearing in macro substitution phrases (produced by executing macro sends during compilation)
@toddATavail toddATavail added enhancement lsp Language Server Protocol labels Oct 5, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement lsp Language Server Protocol
Projects
None yet
Development

No branches or pull requests

1 participant