From ff209db23e0143d9875adb7d9391e6383cb52411 Mon Sep 17 00:00:00 2001 From: Oleksandr Smirnov Date: Tue, 18 Mar 2025 23:34:38 +0200 Subject: [PATCH] fix(comment): now it works --- lua/gopher/_utils/ts.lua | 24 +++++++++++--- lua/gopher/comment.lua | 72 ++++++++++++++++++---------------------- lua/gopher/init.lua | 2 +- 3 files changed, 53 insertions(+), 45 deletions(-) diff --git a/lua/gopher/_utils/ts.lua b/lua/gopher/_utils/ts.lua index b9f5d6f..1b49771 100644 --- a/lua/gopher/_utils/ts.lua +++ b/lua/gopher/_utils/ts.lua @@ -8,11 +8,15 @@ local queries = { [(function_declaration name: (identifier) @_name) (method_declaration name: (field_identifier) @_name)] ]], - - -- package = [[(package_clause (package_identifier)@package.name)@package.clause]], - -- interface = [[((type_declaration (type_spec name:(type_identifier) @interface.name type:(interface_type)))@interface.declaration)]], - -- method_name = [[((method_declaration receiver: (parameter_list)@method.receiver name: (field_identifier)@method.name body:(block))@method.declaration)]], - -- func = [[((function_declaration name: (identifier)@function.name) @function.declaration)]], + package = [[ + ((package_clause + (package_identifier)) @_name) + ]], + interface = [[ + (type_spec + name: (type_identifier) @_name + type: (interface_type)) + ]], } ---@param parent_type string|[string] @@ -102,4 +106,14 @@ function ts.get_func_under_cursor(bufnr) return do_stuff(bufnr, { "function_declaration", "method_declaration" }, queries.func) end +---@param bufnr integer +function ts.get_package_under_cursor(bufnr) + return do_stuff(bufnr, "package_clause", queries.package) +end + +---@param bufnr integer +function ts.get_interface_inder_cursor(bufnr) + return do_stuff(bufnr, "type_declaration", queries.interface) +end + return ts diff --git a/lua/gopher/comment.lua b/lua/gopher/comment.lua index 9c1f399..9634f77 100644 --- a/lua/gopher/comment.lua +++ b/lua/gopher/comment.lua @@ -3,57 +3,51 @@ ---@usage Execute `:GoCmt` to generate a comment for the current function/method/struct/etc on this line. ---@text This module provides a way to generate comments for Go code. +local ts = require "gopher._utils.ts" local log = require "gopher._utils.log" +local comment = {} -local function generate(row, col) - local ts_utils = require "gopher._utils.ts" - local comment, ns = nil, nil +---@param bufnr integer +---@return string +local function generate(bufnr) + local cmt = "// " - ns = ts_utils.get_package_node_at_pos(row, col, nil) - if ns ~= nil then - comment = "// Package " .. ns.name .. " provides " .. ns.name - return comment, ns + local ok, res = pcall(ts.get_struct_under_cursor, bufnr) + if ok then + cmt = cmt .. res.name .. " " + return cmt end - ns = ts_utils.get_struct_under_cursor(row, col, nil) - if ns ~= nil then - comment = "// " .. ns.name .. " " .. ns.type .. " " - return comment, ns + ok, res = pcall(ts.get_func_under_cursor, bufnr) + if ok then + cmt = cmt .. res.name .. " " + return cmt end - ns = ts_utils.get_func_method_node_at_pos(row, col, nil) - if ns ~= nil then - comment = "// " .. ns.name .. " " .. ns.type .. " " - return comment, ns + ok, res = pcall(ts.get_interface_inder_cursor, bufnr) + if ok then + cmt = cmt .. res.name .. " " + return cmt end - ns = ts_utils.get_interface_node_at_pos(row, col, nil) - if ns ~= nil then - comment = "// " .. ns.name .. " " .. ns.type .. " " - return comment, ns + ok, res = pcall(ts.get_package_under_cursor, bufnr) + if ok then + cmt = cmt .. "Package " .. res.name .. " provides " + return cmt end - return "// ", {} + return cmt end -return function() - local row, col = unpack(vim.api.nvim_win_get_cursor(0)) - local comment, ns = generate(row + 1, col + 1) +function comment.comment() + local bufnr = vim.api.nvim_get_current_buf() + local cmt = generate(bufnr) + log.debug("generated comment: " .. cmt) - log.debug("generated comment: " .. comment) - - vim.api.nvim_win_set_cursor(0, { - ns.dim.s.r, - ns.dim.s.c, - }) - - ---@diagnostic disable-next-line: param-type-mismatch - vim.fn.append(row - 1, comment) - - vim.api.nvim_win_set_cursor(0, { - ns.dim.s.r, - #comment + 1, - }) - - vim.cmd [[startinsert!]] + local pos = vim.fn.getcurpos()[2] + vim.fn.append(pos - 1, cmt) + vim.fn.setpos(".", { 0, pos, #cmt }) + vim.cmd "startinsert!" end + +return comment diff --git a/lua/gopher/init.lua b/lua/gopher/init.lua index e18a8bd..0de883b 100644 --- a/lua/gopher/init.lua +++ b/lua/gopher/init.lua @@ -38,7 +38,7 @@ gopher.install_deps = require("gopher.installer").install_deps gopher.impl = require("gopher.impl").impl gopher.iferr = require("gopher.iferr").iferr -gopher.comment = require "gopher.comment" +gopher.comment = require("gopher.comment").comment gopher.tags = { add = tags.add,