mirror of https://github.com/astral-sh/ruff
[ty] Added support for "go to references" in ty playground. (#19516)
This PR adds support for "go to references" in the ty playground. <img width="393" height="168" alt="image" src="https://github.com/user-attachments/assets/ce3ae1bf-c17c-4510-9f77-20b10f6170c4" /> --------- Co-authored-by: UnboundVariable <unbound@gmail.com>
This commit is contained in:
parent
e0149cd9f3
commit
63d1d332b3
|
|
@ -16,7 +16,7 @@ use ruff_source_file::{LineIndex, OneIndexed, SourceLocation};
|
|||
use ruff_text_size::{Ranged, TextSize};
|
||||
use ty_ide::{
|
||||
MarkupKind, RangedValue, goto_declaration, goto_definition, goto_type_definition, hover,
|
||||
inlay_hints,
|
||||
inlay_hints, references,
|
||||
};
|
||||
use ty_ide::{NavigationTargets, signature_help};
|
||||
use ty_project::metadata::options::Options;
|
||||
|
|
@ -327,6 +327,29 @@ impl Workspace {
|
|||
))
|
||||
}
|
||||
|
||||
#[wasm_bindgen(js_name = "gotoReferences")]
|
||||
pub fn goto_references(
|
||||
&self,
|
||||
file_id: &FileHandle,
|
||||
position: Position,
|
||||
) -> Result<Vec<LocationLink>, Error> {
|
||||
let source = source_text(&self.db, file_id.file);
|
||||
let index = line_index(&self.db, file_id.file);
|
||||
|
||||
let offset = position.to_text_size(&source, &index, self.position_encoding)?;
|
||||
|
||||
let Some(targets) = references(&self.db, file_id.file, offset, true) else {
|
||||
return Ok(Vec::new());
|
||||
};
|
||||
|
||||
Ok(targets
|
||||
.into_iter()
|
||||
.flat_map(|target| {
|
||||
map_targets_to_links(&self.db, target, &source, &index, self.position_encoding)
|
||||
})
|
||||
.collect())
|
||||
}
|
||||
|
||||
#[wasm_bindgen]
|
||||
pub fn hover(&self, file_id: &FileHandle, position: Position) -> Result<Option<Hover>, Error> {
|
||||
let source = source_text(&self.db, file_id.file);
|
||||
|
|
|
|||
|
|
@ -148,6 +148,7 @@ class PlaygroundServer
|
|||
languages.TypeDefinitionProvider,
|
||||
languages.DeclarationProvider,
|
||||
languages.DefinitionProvider,
|
||||
languages.ReferenceProvider,
|
||||
editor.ICodeEditorOpener,
|
||||
languages.HoverProvider,
|
||||
languages.InlayHintsProvider,
|
||||
|
|
@ -160,6 +161,7 @@ class PlaygroundServer
|
|||
private typeDefinitionProviderDisposable: IDisposable;
|
||||
private declarationProviderDisposable: IDisposable;
|
||||
private definitionProviderDisposable: IDisposable;
|
||||
private referenceProviderDisposable: IDisposable;
|
||||
private editorOpenerDisposable: IDisposable;
|
||||
private hoverDisposable: IDisposable;
|
||||
private inlayHintsDisposable: IDisposable;
|
||||
|
|
@ -179,6 +181,8 @@ class PlaygroundServer
|
|||
monaco.languages.registerDeclarationProvider("python", this);
|
||||
this.definitionProviderDisposable =
|
||||
monaco.languages.registerDefinitionProvider("python", this);
|
||||
this.referenceProviderDisposable =
|
||||
monaco.languages.registerReferenceProvider("python", this);
|
||||
this.hoverDisposable = monaco.languages.registerHoverProvider(
|
||||
"python",
|
||||
this,
|
||||
|
|
@ -582,6 +586,35 @@ class PlaygroundServer
|
|||
return mapNavigationTargets(links);
|
||||
}
|
||||
|
||||
provideReferences(
|
||||
model: editor.ITextModel,
|
||||
position: Position,
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
context: languages.ReferenceContext,
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
_: CancellationToken,
|
||||
): languages.ProviderResult<languages.Location[]> {
|
||||
const workspace = this.props.workspace;
|
||||
|
||||
const selectedFile = this.props.files.selected;
|
||||
if (selectedFile == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
const selectedHandle = this.props.files.handles[selectedFile];
|
||||
|
||||
if (selectedHandle == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
const links = workspace.gotoReferences(
|
||||
selectedHandle,
|
||||
new TyPosition(position.lineNumber, position.column),
|
||||
);
|
||||
|
||||
return mapNavigationTargets(links);
|
||||
}
|
||||
|
||||
openCodeEditor(
|
||||
source: editor.ICodeEditor,
|
||||
resource: Uri,
|
||||
|
|
@ -667,6 +700,7 @@ class PlaygroundServer
|
|||
this.typeDefinitionProviderDisposable.dispose();
|
||||
this.declarationProviderDisposable.dispose();
|
||||
this.definitionProviderDisposable.dispose();
|
||||
this.referenceProviderDisposable.dispose();
|
||||
this.inlayHintsDisposable.dispose();
|
||||
this.formatDisposable.dispose();
|
||||
this.rangeSemanticTokensDisposable.dispose();
|
||||
|
|
|
|||
Loading…
Reference in New Issue