1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
use std::sync::Arc;

use cairo_lang_compiler::db::RootDatabaseBuilder;
use cairo_lang_plugins::get_default_plugins;

use crate::plugin::StarkNetPlugin;

pub trait StarknetRootDatabaseBuilderEx {
    /// Tunes a compiler database to Starknet (e.g. Starknet plugin).
    fn with_starknet(&mut self) -> &mut Self;
}

impl StarknetRootDatabaseBuilderEx for RootDatabaseBuilder {
    fn with_starknet(&mut self) -> &mut Self {
        // Override implicit precedence for compatibility with the Starknet OS.
        let precedence = [
            "Pedersen",
            "RangeCheck",
            "Bitwise",
            "EcOp",
            "Poseidon",
            "SegmentArena",
            "GasBuiltin",
            "System",
        ];

        let mut plugins = get_default_plugins();
        plugins.push(Arc::new(StarkNetPlugin::default()));

        self.with_implicit_precedence(&precedence).with_plugins(plugins)
    }
}