[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