[mirror] Make your go dev experience better github.com/olexsmir/gopher.nvim
neovim golang
at main 2.0 kB view raw
1---@toc_entry Generate comments 2---@tag gopher.nvim-comments 3---@text 4--- This module provides a way to generate comments for Go code. 5--- 6---@usage 7--- Set cursor on line with function/method/struct/etc and 8--- run `:GoCmt` to generate a comment. 9 10local ts = require "gopher._utils.ts" 11local log = require "gopher._utils.log" 12local u = require "gopher._utils" 13local comment = {} 14 15--- NOTE: The order of functions executed inside this function is IMPORTANT. 16--- This function is extremely fragile; run tests after making any changes. 17--- 18---@param bufnr integer 19---@param line string 20---@return string 21---@dochide 22local function generate(bufnr, line) 23 local sf_ok, sf_res = pcall(ts.get_struct_field_under_cursor, bufnr) 24 if sf_ok then 25 return u.indent(line, sf_res.indent) .. "// " .. sf_res.name .. " " 26 end 27 28 local s_ok, s_res = pcall(ts.get_struct_under_cursor, bufnr) 29 if s_ok then 30 return u.indent(line, s_res.indent) .. "// " .. s_res.name .. " " 31 end 32 33 local v_ok, v_res = pcall(ts.get_variable_under_cursor, bufnr) 34 if v_ok then 35 return u.indent(line, v_res.indent) .. "// " .. v_res.name .. " " 36 end 37 38 local f_ok, f_res = pcall(ts.get_func_under_cursor, bufnr) 39 if f_ok then 40 return u.indent(line, f_res.indent) .. "// " .. f_res.name .. " " 41 end 42 43 local i_ok, i_res = pcall(ts.get_interface_under_cursor, bufnr) 44 if i_ok then 45 return u.indent(line, i_res.indent) .. "// " .. i_res.name .. " " 46 end 47 48 local p_ok, p_res = pcall(ts.get_package_under_cursor, bufnr) 49 if p_ok then 50 return "// Package " .. p_res.name .. " provides " 51 end 52 53 return "// " 54end 55 56function comment.comment() 57 local bufnr = vim.api.nvim_get_current_buf() 58 local lnum = vim.fn.getcurpos()[2] 59 local line = vim.fn.getline(lnum) 60 local cmt = generate(bufnr, line) 61 log.debug("generated comment:", { 62 comment = cmt, 63 line = line, 64 }) 65 66 vim.fn.append(lnum - 1, cmt) 67 vim.fn.setpos(".", { bufnr, lnum, #cmt }) 68 vim.cmd "startinsert!" 69end 70 71return comment