Implement module section types "Static module functions" (#33) #48

Merged
Aire-One merged 2 commits from feat/#33 into master 2022-12-10 02:09:05 +01:00
2 changed files with 37 additions and 15 deletions

View File

@ -26,7 +26,12 @@ $(snippets.indent(snippets.render_record_properties(module.properties)))
# if #module.constructors ~= 0 then
-- Constructors
$(snippets.indent(snippets.render_record_functions(module.constructors)))
# end -- /constructors
# if #module.static_functions ~= 0 then
-- Static functions
$(snippets.indent(snippets.render_record_functions(module.static_functions)))
# end -- /static_functions
end
return $(module.record_name)

View File

@ -115,28 +115,45 @@ end
local function extract_section_functions(dl: string): { Function_Info.Function_Info }
local query_selectors = {
function_name = "dt a",
function_parameters = "dd table",
function_return_type = "dd ol",
header = "dt",
name = "a",
body = "dd",
parameters = "table",
return_types = "ol",
}
return scraper_utils.scrape_tuples(
dl,
{ query_selectors.function_name, query_selectors.function_parameters, query_selectors.function_return_type },
{ query_selectors.header, query_selectors.body },
function(nodes: { string : scan.HTMLNode | nil }): Function_Info.Function_Info
local function_info = Function_Info()
function_info.name =
extract_item_name(nodes[query_selectors.function_name])
function_info.parameters =
List(extract_function_parameters(nodes[query_selectors.function_parameters]))
function_info.return_types = List(
extract_function_return_types(
nodes[query_selectors.function_return_type]
if not nodes[query_selectors.header] or not nodes[query_selectors.body] then
log:warn(
logger.message_with_metadata(
"Missing header or body",
{ nodes = nodes }
)
)
error("Missing header or body")
end
local header = nodes[query_selectors.header] as scan.HTMLNode
local body = nodes[query_selectors.body] as scan.HTMLNode
local body_elements = scraper_utils.extract_nodes(
body:outer_html(),
{ query_selectors.parameters, query_selectors.return_types }
)
return function_info
return {
name = scraper_utils.scrape(
header:outer_html(),
query_selectors.name,
extract_item_name
)[1],
parameters = #body_elements:get(query_selectors.parameters) ~= 0 and
List(extract_function_parameters(body_elements:get(query_selectors.parameters)[1])) or
(List() as List<Function_Info.Parameter>),
return_types = #body_elements:get(query_selectors.return_types) ~= 0 and
List(extract_function_return_types(body_elements:get(query_selectors.return_types)[1])) or
(List() as List<string>),
}
end
)
end