The reference request carries no read/write information, so derive it:
- Classify every reference syntactically first — assignment and compound
assignment, ++/--, and ref/out arguments are writes, everything else is a
read. The suffix test only looks past the end of the reference, so the `=`
in `previous = x` does not make the read of `x` look like a write.
- Then ask textDocument/documentHighlight per file, whose Read/Write kinds
override the syntactic answer. Plain Text highlights carry no kind and
leave it standing, so servers without the feature still get a sensible
column. Files have to be opened as text documents for the server to
answer, so results spanning more than 60 files skip this step.
In the panel: a sortable Kind column with read/write badges, All / Reads /
Writes buttons, the kind included in the text filter, and a write count in
the summary line. The kind filter is persisted with the rest of the view
state. Line and Kind columns carry minimum widths that fit their own
headers, which Line previously did not.
Verified against DotRush on a field that is both read and written: the
assignment and the `ref` argument classify as writes, the subscript, the
comparison and the right-hand-side use as reads.
The editor view does not mark writes yet.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
createWebviewPanel only ever lives in the editor area, so the table could
not be dragged next to Terminal / Problems. A WebviewView can, and it can
also be dragged to either side bar.
- Extract ResultsView: the table's html, messaging, row building and
navigation, independent of what hosts the webview. ReferencePanel keeps
hosting it in an editor group; ReferenceViewProvider hosts it in a
contributed panel view container. Results that arrive before the docked
view has been resolved are queued and applied on resolve.
- coloredReferences.panelLocation selects the placement: bottom (default),
beside, or below. "below" makes the editor row first so the table is wide
and short, which suits the column layout better than a tall narrow group.
- sourceColumn() now ignores editors with no view column, so opening a
reference from the docked view lands in a real editor group.
- toggleView and the refresh button work from either host.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The extension shows Find All References results in a syntax-highlighted
virtual document. Two things were wrong and roadmap item 1 was missing.
Fixes, all reproduced against a real C# solution with DotRush:
- Navigation and hover were dead on every result. setTextDocumentLanguage()
closes and re-opens the document under the same URI, which fired
onDidCloseTextDocument and dropped the results from the store. The text
still rendered because VS Code caches the model, so the pane looked
correct while Enter / F12 / Ctrl+Click / hover all returned nothing.
The virtual URI now carries the source file's extension so VS Code infers
the language without recreating the document, and a close only discards
results once no tab or document for that URI remains.
- reuseTab never reused: the symbol name is part of the URI, so every new
symbol opened another tab. The previous results tab is now closed and its
group taken over.
- The reference count in the title double-counted when two language servers
answer the same request (DotRush plus C# Dev Kit). It now comes from the
de-duplicated set.
- A results tab hidden behind another editor was duplicated into a new group
instead of being revealed.
- Decorations are reapplied on active-editor change; a results tab restored
from a previous window is closed instead of left as a dead empty document;
searching with no symbol under the cursor no longer searches for "symbol".
Roadmap item 1 - webview results panel:
- Shared gathering, grouping and rendering moved to references.ts so both
views work from the same data.
- panel.ts plus media/ render the results as a table with resizable,
sortable Code / File / Line / Project / Containing member columns,
collapsible per-file groups, a filter box, keyboard navigation, and
single-click preview versus Enter to jump. Column widths default to a
share of the panel width until dragged.
- Containing member comes from executeDocumentSymbolProvider, nested types
included.
- coloredReferences.view selects the default view; toggleView switches the
current results between the two.
Adds an integration suite that launches a real VS Code against a C#
solution and asserts on the rendered output, including that every displayed
line maps back to the source line it claims.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>