src5_rs/core/parser/
ast.rs

1use cairo_lang_compiler::db::RootDatabase;
2use cairo_lang_diagnostics::DiagnosticsBuilder;
3use cairo_lang_filesystem::db::FilesGroup;
4use cairo_lang_filesystem::ids::{FileLongId, VirtualFile};
5use cairo_lang_parser::parser::Parser;
6use cairo_lang_starknet::plugin::StarkNetPlugin;
7use cairo_lang_syntax::node::{SyntaxNode, TypedSyntaxNode};
8use std::sync::Arc;
9
10pub fn get_database_with_starknet_plugin() -> RootDatabase {
11    RootDatabase::builder()
12        .with_semantic_plugin(Arc::new(StarkNetPlugin::default()))
13        .build()
14        .unwrap()
15}
16
17/// Get the AST from cairo code represented as a string
18pub fn get_syntax_tree(db: &RootDatabase, content: String) -> SyntaxNode {
19    let virtual_file = db.intern_file(FileLongId::Virtual(VirtualFile {
20        parent: None,
21        name: "string_to_parse".into(),
22        content: Arc::new(content.clone()),
23    }));
24    let mut diagnostics = DiagnosticsBuilder::new();
25    Parser::parse_file(db, &mut diagnostics, virtual_file, content.as_str()).as_syntax_node()
26}