fix(scraper): extract_section_functions coupling
Before this fix, the `extract_section_functions` function had issues with how the elements where discovered. There are some scenarios where selected nodes weren't from the same function definition. It causes the generated teal to mix up the functions parameters.
This commit is contained in:
parent
8127e457d4
commit
b29032537c
|
@ -115,28 +115,44 @@ 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",
|
||||
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(),
|
||||
"a",
|
||||
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
|
||||
|
|
Loading…
Reference in New Issue