luaur_analysis/functions/
parse_source_for_module.rs1use crate::records::source_module::SourceModule;
2use luaur_ast::enums::mode::Mode;
3use luaur_ast::records::parse_options::ParseOptions;
4use luaur_ast::records::parse_result::ParseResult;
5use luaur_ast::records::parser::Parser;
6
7pub fn parse_source_for_module(
8 source: &str,
9 source_module: &mut SourceModule,
10 capture_comments: bool,
11) -> ParseResult {
12 let mut options = ParseOptions::default();
13 options.allow_declaration_syntax = true;
14 options.capture_comments = capture_comments;
15
16 let parse_result = Parser::parse(
17 source,
18 source.len(),
19 alloc::sync::Arc::get_mut(&mut source_module.names)
20 .expect("SourceModule names must be uniquely owned while parsing"),
21 alloc::sync::Arc::get_mut(&mut source_module.allocator)
22 .expect("SourceModule allocator must be uniquely owned while parsing"),
23 options.clone(),
24 );
25
26 source_module.root = parse_result.root;
27 source_module.mode = Some(Mode::Definition);
28
29 if options.capture_comments {
30 source_module.hotcomments = parse_result.hotcomments.clone();
31 source_module.comment_locations = parse_result.comment_locations.clone();
32 }
33
34 parse_result
35}