You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
go.nvim/lua/go/ts/go.lua

164 lines
5.8 KiB
Lua

local nodes = require("go.ts.nodes")
local log = require("go.utils").log
3 years ago
M = {
-- query_struct = "(type_spec name:(type_identifier) @definition.struct type: (struct_type))",
query_package = "(package_clause (package_identifier)@package.name)@package.clause",
query_struct_id = "(type_spec name:(type_identifier) @definition.struct (struct_type))",
query_em_struct_id = "(field_declaration name:(field_identifier) @definition.struct (struct_type))",
query_struct_block = [[((type_declaration (type_spec name:(type_identifier) @struct.name type: (struct_type)))@struct.declaration)]],
query_em_struct_block = [[(field_declaration name:(field_identifier)@struct.name type: (struct_type)) @struct.declaration]],
query_struct_block_from_id = [[(((type_spec name:(type_identifier) type: (struct_type)))@block.struct_from_id)]],
-- query_em_struct = "(field_declaration name:(field_identifier) @definition.struct type: (struct_type))",
query_interface_id = [[((type_declaration (type_spec name:(type_identifier) @interface.name type:(interface_type)))@interface.declaration)]],
query_interface_method = [[((method_spec name: (field_identifier)@method.name)@interface.method.declaration)]],
3 years ago
query_func = "((function_declaration name: (identifier)@function.name) @function.declaration)",
-- query_method = "(method_declaration receiver: (parameter_list (parameter_declaration name:(identifier)@method.receiver.name type:(type_identifier)@method.receiver.type)) name:(field_identifier)@method.name)@method.declaration"
query_method_name = [[((method_declaration
3 years ago
receiver: (parameter_list)@method.receiver
name: (field_identifier)@method.name
body:(block))@method.declaration)]],
query_method_void = [[((method_declaration
3 years ago
receiver: (parameter_list
(parameter_declaration
name: (identifier)@method.receiver.name
type: (pointer_type)@method.receiver.type)
)
name: (field_identifier)@method.name
parameters: (parameter_list)@method.parameter
body:(block)
)@method.declaration)]],
3 years ago
query_method_multi_ret = [[(method_declaration
receiver: (parameter_list
(parameter_declaration
name: (identifier)@method.receiver.name
type: (pointer_type)@method.receiver.type)
)
name: (field_identifier)@method.name
parameters: (parameter_list)@method.parameter
result: (parameter_list)@method.result
body:(block)
)@method.declaration]],
query_method_single_ret = [[((method_declaration
3 years ago
receiver: (parameter_list
(parameter_declaration
name: (identifier)@method.receiver.name
type: (pointer_type)@method.receiver.type)
)
name: (field_identifier)@method.name
parameters: (parameter_list)@method.parameter
result: (type_identifier)@method.result
body:(block)
)@method.declaration)]],
query_tr_method_void = [[((method_declaration
3 years ago
receiver: (parameter_list
(parameter_declaration
name: (identifier)@method.receiver.name
type: (type_identifier)@method.receiver.type)
)
name: (field_identifier)@method.name
parameters: (parameter_list)@method.parameter
body:(block)
)@method.declaration)]],
query_tr_method_multi_ret = [[((method_declaration
3 years ago
receiver: (parameter_list
(parameter_declaration
name: (identifier)@method.receiver.name
type: (type_identifier)@method.receiver.type)
)
name: (field_identifier)@method.name
parameters: (parameter_list)@method.parameter
result: (parameter_list)@method.result
body:(block)
)@method.declaration)]],
query_tr_method_single_ret = [[((method_declaration
3 years ago
receiver: (parameter_list
(parameter_declaration
name: (identifier)@method.receiver.name
type: (type_identifier)@method.receiver.type)
)
name: (field_identifier)@method.name
parameters: (parameter_list)@method.parameter
result: (type_identifier)@method.result
body:(block)
)@method.declaration)]]
3 years ago
}
function get_name_defaults()
return {["func"] = "function", ["if"] = "if", ["else"] = "else", ["for"] = "for"}
3 years ago
end
M.get_struct_node_at_pos = function(row, col)
local query = M.query_struct_block .. " " .. M.query_em_struct_block
3 years ago
local bufn = vim.fn.bufnr("")
local ns = nodes.nodes_at_cursor(query, get_name_defaults(), bufn, row, col)
if ns == nil then
print("struct not found")
else
log('struct node', ns)
return ns[#ns]
end
3 years ago
end
M.get_interface_node_at_pos = function(row, col)
local query = M.query_interface_id
3 years ago
local bufn = vim.fn.bufnr("")
local ns = nodes.nodes_at_cursor(query, get_name_defaults(), bufn, row, col)
if ns == nil then
3 years ago
print("interface not found")
else
return ns[#ns]
end
3 years ago
end
M.get_interface_method_node_at_pos = function(row, col)
local query = M.query_interface_method
3 years ago
local bufn = vim.fn.bufnr("")
local ns = nodes.nodes_at_cursor(query, get_name_defaults(), bufn, row, col)
if ns == nil then
3 years ago
print("interface method not found")
else
return ns[#ns]
end
3 years ago
end
M.get_func_method_node_at_pos = function(row, col)
local query = M.query_func .. " " .. M.query_method_name
3 years ago
-- local query = require("go.ts.go").query_method_name
local bufn = vim.fn.bufnr("")
local ns = nodes.nodes_at_cursor(query, get_name_defaults(), bufn, row, col)
if ns == nil then
return nil
end
if ns == nil then
3 years ago
print("function not found")
else
return ns[#ns]
end
3 years ago
end
M.get_package_node_at_pos = function(row, col)
if row > 10 then
return
end
local query = M.query_package
3 years ago
-- local query = require("go.ts.go").query_method_name
local bufn = vim.fn.bufnr("")
local ns = nodes.nodes_at_cursor(query, get_name_defaults(), bufn, row, col)
if ns == nil then
return nil
end
if ns == nil then
3 years ago
print("package not found")
else
return ns[#ns]
end
3 years ago
end
return M