(lua) Add support for returns in local_functions
The extractor function being the same, I refactored the lua config file a little bit
This commit is contained in:
@@ -1,56 +1,44 @@
|
|||||||
|
local common_function_extractor = function(node)
|
||||||
|
local tree = {
|
||||||
|
{
|
||||||
|
retrieve = "first",
|
||||||
|
node_type = "parameters",
|
||||||
|
subtree = {
|
||||||
|
{ retrieve = "all", node_type = "identifier", extract = true },
|
||||||
|
{ retrieve = "all", node_type = "spread", extract = true },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{ retrieve = "first", node_type = "return_statement", extract = true },
|
||||||
|
}
|
||||||
|
|
||||||
|
local nodes = neogen.utilities.nodes:matching_nodes_from(node, tree)
|
||||||
|
local res = neogen.utilities.extractors:extract_from_matched(nodes)
|
||||||
|
|
||||||
|
return {
|
||||||
|
parameters = res.identifier,
|
||||||
|
vararg = res.spread,
|
||||||
|
return_statement = res.return_statement,
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
return {
|
return {
|
||||||
-- Search for these nodes
|
-- Search for these nodes
|
||||||
parent = { "function", "local_function", "local_variable_declaration", "field", "variable_declaration" },
|
parent = { "function", "local_function", "local_variable_declaration", "field", "variable_declaration" },
|
||||||
|
|
||||||
-- Traverse down these nodes and extract the information as necessary
|
|
||||||
data = {
|
data = {
|
||||||
["function|local_function"] = {
|
-- When the function is inside one of those
|
||||||
-- Get second child from the parent node
|
|
||||||
["2"] = {
|
|
||||||
-- It has to be of type "parameters"
|
|
||||||
match = "parameters",
|
|
||||||
|
|
||||||
extract = function(node)
|
|
||||||
local tree = {
|
|
||||||
{ retrieve = "all", node_type = "identifier", extract = true },
|
|
||||||
{ retrieve = "all", node_type = "spread", extract = true },
|
|
||||||
}
|
|
||||||
local nodes = neogen.utilities.nodes:matching_nodes_from(node, tree)
|
|
||||||
local res = neogen.utilities.extractors:extract_from_matched(nodes)
|
|
||||||
|
|
||||||
return {
|
|
||||||
parameters = res.identifier,
|
|
||||||
vararg = res.spread,
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
["local_variable_declaration|field|variable_declaration"] = {
|
["local_variable_declaration|field|variable_declaration"] = {
|
||||||
["2"] = {
|
["2"] = {
|
||||||
match = "function_definition",
|
match = "function_definition",
|
||||||
|
|
||||||
extract = function(node)
|
extract = common_function_extractor,
|
||||||
local tree = {
|
},
|
||||||
{
|
},
|
||||||
retrieve = "first",
|
-- When the function is in the root tree
|
||||||
node_type = "parameters",
|
["function_definition|function|local_function"] = {
|
||||||
subtree = {
|
["0"] = {
|
||||||
{ retrieve = "all", node_type = "identifier", extract = true },
|
|
||||||
{ retrieve = "all", node_type = "spread", extract = true },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{ retrieve = "first", node_type = "return_statement", extract = true },
|
|
||||||
}
|
|
||||||
|
|
||||||
local nodes = neogen.utilities.nodes:matching_nodes_from(node, tree)
|
extract = common_function_extractor,
|
||||||
local res = neogen.utilities.extractors:extract_from_matched(nodes)
|
|
||||||
|
|
||||||
return {
|
|
||||||
parameters = res.identifier,
|
|
||||||
vararg = res.spread,
|
|
||||||
return_statement = res.return_statement,
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user