Files
neogen/lua/neogen/configurations/java.lua
2023-05-12 17:31:04 +02:00

116 lines
3.8 KiB
Lua

local extractors = require("neogen.utilities.extractors")
local nodes_utils = require("neogen.utilities.nodes")
local template = require("neogen.template")
local function_tree = {
{
retrieve = "first",
node_type = "formal_parameters",
subtree = {
{
retrieve = "all",
node_type = "formal_parameter",
subtree = {
{ retrieve = "all", node_type = "identifier", extract = true },
},
},
},
},
{
retrieve = "all",
node_type = "throws",
subtree = {
{ retrieve = "all", node_type = "type_identifier", extract = true, as = "throw_statement" },
},
},
{
retrieve = "first",
node_type = "block|constructor_body",
subtree = {
{ retrieve = "first", node_type = "return_statement", extract = true },
{ retrieve = "all", recursive = true, node_type = "throw_statement", extract = true },
{
retrieve = "first",
node_type = "try_statement",
subtree = {
{
retrieve = "first",
node_type = "block",
subtree = {
{
retrieve = "first",
node_type = "return_statement",
extract = true,
},
},
},
},
},
},
},
}
return {
parent = {
class = { "class_declaration" },
func = { "method_declaration", "constructor_declaration" },
},
data = {
func = {
["constructor_declaration"] = {
["0"] = {
extract = function(node)
local results = {}
local tree = function_tree
local nodes = nodes_utils:matching_nodes_from(node, tree)
local res = extractors:extract_from_matched(nodes)
results.throw_statement = res.throw_statement
results.parameters = res.identifier
return results
end,
},
},
["method_declaration"] = {
["0"] = {
extract = function(node)
local results = {}
local tree = function_tree
local nodes = nodes_utils:matching_nodes_from(node, tree)
local res = extractors:extract_from_matched(nodes)
results.parameters = res.identifier
if res.throws then
results.throw_statement = res.throws
else
results.throw_statement = res.throw_statement
end
results.return_statement = res.return_statement
return results
end,
},
},
},
class = {
["class_declaration"] = {
["0"] = {
extract = function(node)
local results = {}
local tree = { { retrieve = "all", node_type = "identifier", extract = true } }
local nodes = nodes_utils:matching_nodes_from(node, tree)
local res = extractors:extract_from_matched(nodes)
results.class_name = res.identifier
return results
end,
},
},
},
},
template = template:add_default_annotation("javadoc"),
}