summary refs log tree commit diff
path: root/.config/nvim/after/ftplugin/go.lua
diff options
context:
space:
mode:
authorRobert Günzler <r@gnzler.io>2026-09-27 17:38:39 +0200
committerRobert Günzler <r@gnzler.io>2026-09-27 17:38:39 +0200
commit0860db73ae6fd9a6f6347219d820bf026a6b8b91 (patch)
tree11318c3670d1c32c5aa0bf404c22fba3bf63fc53 /.config/nvim/after/ftplugin/go.lua
parent4e34cbf9673aeaba252e01df554a0d204e83c5e2 (diff)
downloaddotfiles-master.tar.gz
Automated-commit-by: dots
Signed-off-by: Robert Günzler <r@gnzler.io>
Diffstat (limited to '')
-rw-r--r--.config/nvim/after/ftplugin/go.lua32
1 files changed, 32 insertions, 0 deletions
diff --git a/.config/nvim/after/ftplugin/go.lua b/.config/nvim/after/ftplugin/go.lua
new file mode 100644
index 0000000..ad5c56e
--- /dev/null
+++ b/.config/nvim/after/ftplugin/go.lua
@@ -0,0 +1,32 @@
+vim.api.nvim_create_autocmd({ 'LspAttach' }, {
+  pattern = '*.go',
+  group = vim.api.nvim_create_augroup('lspattach.go', {}),
+  callback = function(args)
+    local client = vim.lsp.get_client_by_id(args.data.client_id)
+    if not client:supports_method('workspace/executeCommand') then
+      return
+    end
+
+    vim.keymap.set('n', '<leader>i', function()
+      local p = vim
+        .system({
+          'sh',
+          '-c',
+          [[go mod graph | awk '{print $2}' | cut -d@ -f1 | sort -u]],
+        })
+        :wait()
+      local opts = vim.split(p.stdout, '\n')
+      vim.ui.select(opts, {}, function(choice)
+        client:exec_cmd({
+          command = 'gopls.add_import',
+          arguments = {
+            {
+              ['ImportPath'] = choice,
+              ['URI'] = vim.uri_from_bufnr(0),
+            },
+          },
+        })
+      end)
+    end, { desc = 'gopls: add import' })
+  end,
+})