[mirror] Make your go dev experience better github.com/olexsmir/gopher.nvim
neovim golang
1---@toc_entry Generate comments 2---@tag gopher.nvim-comments 3---@usage Execute `:GoCmt` to generate a comment for the current function/method/struct/etc on this line. 4---@text This module provides a way to generate comments for Go code. 5 6local ts = require "gopher._utils.ts" 7local log = require "gopher._utils.log" 8local comment = {} 9 10---@param name string 11---@return string 12---@private 13local function template(name) 14 return "// " .. name .. " " 15end 16 17---@param bufnr integer 18---@return string 19---@private 20local function generate(bufnr) 21 local s_ok, s_res = pcall(ts.get_struct_under_cursor, bufnr) 22 if s_ok then 23 return template(s_res.name) 24 end 25 26 local f_ok, f_res = pcall(ts.get_func_under_cursor, bufnr) 27 if f_ok then 28 return template(f_res.name) 29 end 30 31 local i_ok, i_res = pcall(ts.get_interface_under_cursor, bufnr) 32 if i_ok then 33 return template(i_res.name) 34 end 35 36 local p_ok, p_res = pcall(ts.get_package_under_cursor, bufnr) 37 if p_ok then 38 return "// Package " .. p_res.name .. " provides " 39 end 40 41 return "// " 42end 43 44function comment.comment() 45 local bufnr = vim.api.nvim_get_current_buf() 46 local cmt = generate(bufnr) 47 log.debug("generated comment: " .. cmt) 48 49 local pos = vim.fn.getcurpos()[2] 50 vim.fn.append(pos - 1, cmt) 51 vim.fn.setpos(".", { 0, pos, #cmt }) 52 vim.cmd "startinsert!" 53end 54 55return comment