From 4062b056691daca9593e01f67026e4199cd8da87 Mon Sep 17 00:00:00 2001
From: Jerko Steiner <jerko.steiner@gmail.com>
Date: Wed, 15 Jan 2020 16:45:38 +0100
Subject: [PATCH] Fix completion with langserver (autoimport in go)

---
 autoload/ale/completion.vim | 36 ++++++++++++++++++++++++++++++++++--
 1 file changed, 34 insertions(+), 2 deletions(-)

diff --git a/autoload/ale/completion.vim b/autoload/ale/completion.vim
index 2b5756e4..a173a0d4 100644
--- a/autoload/ale/completion.vim
+++ b/autoload/ale/completion.vim
@@ -523,13 +523,45 @@ function! ale#completion#ParseLSPCompletions(response) abort
             let l:doc = l:doc.value
         endif
 
-        call add(l:results, {
+        let l:result = {
         \   'word': l:word,
         \   'kind': ale#completion#GetCompletionSymbols(get(l:item, 'kind', '')),
         \   'icase': 1,
         \   'menu': get(l:item, 'detail', ''),
         \   'info': (type(l:doc) is v:t_string ? l:doc : ''),
-        \})
+        \}
+
+        if has_key(l:item, 'additionalTextEdits')
+            let l:text_changes = []
+            for l:edit in l:item.additionalTextEdits
+                let l:range = l:edit.range
+                call add(l:text_changes, {
+                \ 'start': {
+                \   'line': l:range.start.line + 1,
+                \   'offset': l:range.start.character + 1,
+                \ },
+                \ 'end': {
+                \   'line': l:range.end.line + 1,
+                \   'offset': l:range.end.character + 1,
+                \ },
+                \ 'newText': l:edit.newText,
+                \})
+            endfor
+
+            let l:changes = [{
+            \ 'fileName': expand('%:p'),
+            \ 'textChanges': l:text_changes,
+            \}]
+            \
+            let l:result.user_data = json_encode({
+            \   'codeActions': [{
+            \       'description': 'completion',
+            \       'changes': l:changes,
+            \   }],
+            \ })
+        endif
+
+        call add(l:results, l:result)
     endfor
 
     if has_key(l:info, 'prefix')