neovim

Personal neovim configuration files
git clone git://gtms.dev/neovim
Log | Files | Refs

doc.lua (1251B)


      1 local lsp = require 'vim.lsp'
      2 local M = {}
      3 
      4 local open = function(path)
      5   local docid = vim.fn.jobstart('godoc -http :8765', {on_exit = function() M.docid = nil end})
      6   local cmd = string.format('noswallow_open "%s --new-window http://localhost:8765/pkg/%s"',
      7                             'brave', path)
      8   vim.fn.jobstart(cmd, {on_exit = function() vim.fn.jobstop(docid) end})
      9   if docid > 0 then
     10     return docid
     11   end
     12   return nil
     13 end
     14 
     15 M.docid = nil
     16 
     17 M.lsp_path = function() end
     18 
     19 M.godoc = function(path)
     20   if M.jobid then
     21     return
     22   end
     23   if path and path ~= '' then
     24     M.docid = open(path)
     25   else
     26     -- lsp
     27     vim.lsp.buf_request(0, 'textDocument/hover', lsp.util.make_position_params(),
     28                         function(err, method, result, client_id, bufnr, config)
     29       if result then
     30         local value = result.contents.value
     31         for line in value:gmatch('([^\n]+)') do
     32           local _, url = line:match('%[(.*)%]%((.*)%)')
     33           if url then
     34             path = url:gsub('https://pkg.go.dev/', ''):gsub('?utm_source=gopls', '')
     35             M.docid = open(path)
     36             break
     37           end
     38         end
     39       end
     40     end)
     41   end
     42 end
     43 
     44 M.godoc_stop = function()
     45   if M.docid then
     46     vim.fn.jobstop(M.docid)
     47   end
     48 end
     49 
     50 return M