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