Skip to main content

luaur_analysis/functions/
parse_source_for_module.rs

1use 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}