use std::collections::HashMap;
use crate::core::config::FluffConfig;
use crate::core::dialects::base::Dialect;
use crate::core::parser::segments::base::{CodeSegment, Segment};
use crate::core::templaters::base::TemplatedFile;
#[derive(Clone, Debug)]
pub struct RuleContext {
pub dialect: Dialect,
pub fix: bool,
pub templated_file: Option<TemplatedFile>,
pub path: Option<String>,
pub config: FluffConfig,
pub segment: Box<dyn Segment>,
pub parent_stack: Vec<Box<dyn Segment>>,
pub raw_stack: Vec<Box<dyn Segment>>,
pub memory: HashMap<String, String>,
pub segment_idx: usize,
}
impl RuleContext {
pub fn siblings_post(&self) -> Vec<Box<dyn Segment>> {
if !self.parent_stack.is_empty() {
self.parent_stack.last().unwrap().get_segments()[self.segment_idx + 1..].to_vec()
} else {
Vec::new()
}
}
}
impl Default for RuleContext {
fn default() -> Self {
Self {
dialect: Default::default(),
fix: Default::default(),
templated_file: Default::default(),
path: Default::default(),
config: Default::default(),
segment: CodeSegment::new("", &<_>::default(), <_>::default()),
parent_stack: Default::default(),
raw_stack: Default::default(),
memory: Default::default(),
segment_idx: Default::default(),
}
}
}