[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---@text
4--- This module provides a way to generate comments for Go code.
5---
6---@usage Set cursor on line with function/method/struct/etc and run `:GoCmt` to generate a comment.
7
8local ts = require "gopher._utils.ts"
9local log = require "gopher._utils.log"
10local comment = {}
11
12---@param name string
13---@return string
14---@dochide
15local function template(name)
16 return "// " .. name .. " "
17end
18
19---@param bufnr integer
20---@return string
21---@dochide
22local function generate(bufnr)
23 local s_ok, s_res = pcall(ts.get_struct_under_cursor, bufnr)
24 if s_ok then
25 return template(s_res.name)
26 end
27
28 local f_ok, f_res = pcall(ts.get_func_under_cursor, bufnr)
29 if f_ok then
30 return template(f_res.name)
31 end
32
33 local i_ok, i_res = pcall(ts.get_interface_under_cursor, bufnr)
34 if i_ok then
35 return template(i_res.name)
36 end
37
38 local p_ok, p_res = pcall(ts.get_package_under_cursor, bufnr)
39 if p_ok then
40 return "// Package " .. p_res.name .. " provides "
41 end
42
43 return "// "
44end
45
46function comment.comment()
47 local bufnr = vim.api.nvim_get_current_buf()
48 local cmt = generate(bufnr)
49 log.debug("generated comment: " .. cmt)
50
51 local pos = vim.fn.getcurpos()[2]
52 vim.fn.append(pos - 1, cmt)
53 vim.fn.setpos(".", { 0, pos, #cmt })
54 vim.cmd "startinsert!"
55end
56
57return comment