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
use crate::EvaluationContext;
use crate::Scope;
use crate::{basic_shell_manager, config_holder::ConfigHolder};
use crate::{env::basic_host::BasicHost, Host};
use indexmap::IndexMap;
use parking_lot::Mutex;
use std::error::Error;
use std::sync::atomic::AtomicBool;
use std::sync::Arc;

pub fn basic_evaluation_context() -> Result<EvaluationContext, Box<dyn Error>> {
    let scope = Scope::new();
    let mut host = BasicHost {};
    let env_vars = host.vars().iter().cloned().collect::<IndexMap<_, _>>();
    scope.add_env(env_vars);

    Ok(EvaluationContext {
        scope,
        host: Arc::new(parking_lot::Mutex::new(Box::new(host))),
        current_errors: Arc::new(Mutex::new(vec![])),
        ctrl_c: Arc::new(AtomicBool::new(false)),
        configs: Arc::new(Mutex::new(ConfigHolder::new())),
        shell_manager: basic_shell_manager::basic_shell_manager()?,
        windows_drives_previous_cwd: Arc::new(Mutex::new(std::collections::HashMap::new())),
    })
}