use std::cell::RefCell;
use std::rc::Rc;
use anymap::AnyMap;
use crate::core::config::FluffConfig;
use crate::core::dialects::base::Dialect;
use crate::core::parser::segments::base::ErasedSegment;
use crate::core::templaters::base::TemplatedFile;
#[derive(Clone, Debug)]
pub struct RuleContext<'a> {
pub dialect: &'a Dialect,
pub fix: bool,
pub templated_file: Option<TemplatedFile>,
pub path: Option<String>,
pub config: Option<&'a FluffConfig>,
pub segment: ErasedSegment,
pub parent_stack: Vec<ErasedSegment>,
pub raw_stack: Vec<ErasedSegment>,
pub memory: Rc<RefCell<AnyMap>>,
pub segment_idx: usize,
}
impl RuleContext<'_> {
pub fn siblings_post(&self) -> Vec<ErasedSegment> {
if !self.parent_stack.is_empty() {
self.parent_stack.last().unwrap().segments()[self.segment_idx + 1..].to_vec()
} else {
Vec::new()
}
}
}