MCPcopy Create free account
hub / github.com/Doctave/dossier / parse

Function parse

dossier-ts/src/function.rs:88–141  ·  view source on GitHub ↗
(node: &Node, ctx: &mut ParserContext)

Source from the content-addressed store, hash-verified

86}
87
88pub(crate) fn parse(node: &Node, ctx: &mut ParserContext) -> Result<Symbol> {
89 assert_eq!(node.kind(), NODE_KIND);
90
91 let mut children = vec![];
92
93 let mut cursor = QueryCursor::new();
94 let function = cursor
95 .matches(&QUERY, *node, ctx.code.as_bytes())
96 .next()
97 .unwrap();
98
99 let main_node = node_for_capture("function", function.captures, &QUERY).unwrap();
100 let name_node = node_for_capture("function_name", function.captures, &QUERY).unwrap();
101 let type_param_node = node_for_capture("function_type_parameters", function.captures, &QUERY);
102 let parameters_node = node_for_capture("function_parameters", function.captures, &QUERY);
103 let return_type_node = node_for_capture("function_return_type", function.captures, &QUERY);
104
105 let identifier = name_node.utf8_text(ctx.code.as_bytes()).unwrap().to_owned();
106
107 ctx.push_scope();
108 ctx.push_fqn(&identifier);
109
110 if let Some(type_parameters) = type_param_node {
111 parse_type_parameters(&type_parameters, &mut children, ctx);
112 ctx.push_scope();
113 }
114
115 if let Some(parameter_nodes) = parameters_node {
116 parse_parameters(&parameter_nodes, &mut children, ctx)?;
117 }
118
119 if let Some(type_node) = return_type_node {
120 parse_return_type(&type_node, &mut children, ctx)?;
121 }
122
123 let docs = find_docs(&main_node, ctx.code);
124
125 if type_param_node.is_some() {
126 ctx.pop_scope();
127 }
128 ctx.pop_scope();
129 ctx.pop_fqn();
130
131 Ok(Symbol::in_context(
132 ctx,
133 SymbolKind::Function(Function {
134 identifier,
135 documentation: docs.map(process_comment),
136 is_exported: is_exported(&main_node),
137 children,
138 }),
139 Source::for_node(&main_node, ctx),
140 ))
141}
142
143pub(crate) fn parse_return_type(
144 node: &Node,

Callers 9

parse_return_typeFunction · 0.70
parse_parametersFunction · 0.70
parse_type_parametersFunction · 0.70
fqnsFunction · 0.70
parametersFunction · 0.70
readonly_parameterFunction · 0.70
genericsFunction · 0.70

Calls 12

node_for_captureFunction · 0.85
nextMethod · 0.80
parse_type_parametersFunction · 0.70
parse_parametersFunction · 0.70
parse_return_typeFunction · 0.70
find_docsFunction · 0.70
FunctionClass · 0.70
is_exportedFunction · 0.70
push_scopeMethod · 0.45
push_fqnMethod · 0.45
pop_scopeMethod · 0.45
pop_fqnMethod · 0.45

Tested by 6

fqnsFunction · 0.56
parametersFunction · 0.56
readonly_parameterFunction · 0.56
genericsFunction · 0.56