From 8949347e2c5d523b7045440f1f51c42a769392dd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bla=C5=BE=20Hrastnik?= <blaz@mxxn.io>
Date: Mon, 17 May 2021 16:35:34 +0900
Subject: [PATCH] Completion: apply additionalTextEdits.

Used for adding imports to the file when completing.
---
 helix-term/src/ui/completion.rs | 23 +++++++++++++----------
 1 file changed, 13 insertions(+), 10 deletions(-)

diff --git a/helix-term/src/ui/completion.rs b/helix-term/src/ui/completion.rs
index 6fc7967a..719daa0f 100644
--- a/helix-term/src/ui/completion.rs
+++ b/helix-term/src/ui/completion.rs
@@ -82,16 +82,6 @@ impl Completion {
                             // and we insert at position.
                         };
 
-                        // TODO: merge edit with additional_text_edits
-                        if let Some(additional_edits) = &item.additional_text_edits {
-                            if !additional_edits.is_empty() {
-                                unimplemented!(
-                                    "completion: additional_text_edits: {:?}",
-                                    additional_edits
-                                );
-                            }
-                        }
-
                         // if more text was entered, remove it
                         let cursor = doc.selection(view.id).cursor();
                         if trigger_offset < cursor {
@@ -109,6 +99,19 @@ impl Completion {
                             offset_encoding, // TODO: should probably transcode in Client
                         );
                         doc.apply(&transaction, view.id);
+
+                        // TODO: merge edit with additional_text_edits
+                        if let Some(additional_edits) = &item.additional_text_edits {
+                            // gopls uses this to add extra imports
+                            if !additional_edits.is_empty() {
+                                let transaction = util::generate_transaction_from_edits(
+                                    doc.text(),
+                                    additional_edits.clone(),
+                                    offset_encoding, // TODO: should probably transcode in Client
+                                );
+                                doc.apply(&transaction, view.id);
+                            }
+                        }
                     }
                     _ => (),
                 };