From 64a4e2889e176e93c79311acbc037ecc2d7cb1e6 Mon Sep 17 00:00:00 2001 From: Andrew Gallant Date: Wed, 17 Sep 2025 11:16:14 -0400 Subject: [PATCH] [ty] Add new completion data to wasm bridge --- crates/ty_wasm/src/lib.rs | 47 +++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 7 deletions(-) diff --git a/crates/ty_wasm/src/lib.rs b/crates/ty_wasm/src/lib.rs index 6b750e0f6d..a9739d24ff 100644 --- a/crates/ty_wasm/src/lib.rs +++ b/crates/ty_wasm/src/lib.rs @@ -423,13 +423,32 @@ impl Workspace { Ok(completions .into_iter() - .map(|completion| Completion { - kind: completion.kind(&self.db).map(CompletionKind::from), - name: completion.name.into(), - documentation: completion - .documentation - .map(|documentation| documentation.render_plaintext()), - detail: completion.ty.map(|ty| ty.display(&self.db).to_string()), + .map(|comp| { + let kind = comp.kind(&self.db).map(CompletionKind::from); + let type_display = comp.ty.map(|ty| ty.display(&self.db).to_string()); + let import_edit = comp.import.as_ref().map(|edit| { + let range = Range::from_text_range( + edit.range(), + &index, + &source, + self.position_encoding, + ); + TextEdit { + range, + new_text: edit.content().map(ToString::to_string).unwrap_or_default(), + } + }); + Completion { + name: comp.name.into(), + kind, + detail: type_display, + description: comp.module_name.map(ToString::to_string), + insert_text: comp.insert.map(String::from), + additional_text_edits: import_edit.map(|edit| vec![edit]), + documentation: comp + .documentation + .map(|docstring| docstring.render_plaintext()), + } }) .collect()) } @@ -918,9 +937,15 @@ pub struct Completion { pub name: String, pub kind: Option, #[wasm_bindgen(getter_with_clone)] + pub insert_text: Option, + #[wasm_bindgen(getter_with_clone)] + pub additional_text_edits: Option>, + #[wasm_bindgen(getter_with_clone)] pub documentation: Option, #[wasm_bindgen(getter_with_clone)] pub detail: Option, + #[wasm_bindgen(getter_with_clone)] + pub description: Option, } #[wasm_bindgen] @@ -985,6 +1010,14 @@ impl From for CompletionKind { } } +#[wasm_bindgen] +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct TextEdit { + range: Range, + #[wasm_bindgen(getter_with_clone)] + new_text: String, +} + #[wasm_bindgen] #[derive(Debug, Clone, PartialEq, Eq, Copy)] pub enum InlayHintKind {