Files
neogen/lua/neogen/configurations/rust.lua
2022-02-01 18:56:51 +01:00

97 lines
3.8 KiB
Lua

local extractors = require("neogen.utilities.extractors")
local i = require("neogen.types.template").item
local nodes_utils = require("neogen.utilities.nodes")
local template = require("neogen.utilities.template")
return {
parent = {
func = { "function_item", "function_signature_item" },
class = { "struct_item", "trait_item" },
file = { "source_file" },
},
data = {
func = {
["function_item|function_signature_item"] = {
["0"] = {
extract = function(node)
local tree = {
{
retrieve = "first",
node_type = "parameters",
subtree = {
{
retrieve = "all",
node_type = "parameter",
subtree = {
{
retrieve = "first",
node_type = "identifier",
extract = true,
as = i.Parameter,
},
},
},
{
retrieve = "all",
node_type = "type_identifier",
extract = true,
as = i.Parameter,
},
},
},
}
local nodes = nodes_utils:matching_nodes_from(node, tree)
local res = extractors:extract_from_matched(nodes)
return res
end,
},
},
},
file = {
["source_file"] = {
["0"] = {
extract = function()
return {}
end,
},
},
},
class = {
["struct_item|trait_item"] = {
["0"] = {
extract = function(node)
local tree = {
{
retrieve = "first",
node_type = "field_declaration_list",
subtree = {
{
retrieve = "all",
node_type = "field_declaration",
subtree = {
{
retrieve = "all",
node_type = "field_identifier",
extract = true,
as = i.Parameter,
},
},
},
},
},
}
local nodes = nodes_utils:matching_nodes_from(node, tree)
local res = extractors:extract_from_matched(nodes)
return res
end,
},
},
},
},
template = template
:config({ use_default_comment = true })
:add_annotation("rustdoc")
:add_default_annotation("rust_alternative"),
}