rustdoc-prettier 0.1.0

Format `//!` and `///` comments with prettier
use crate::span::LineColumn;

mod impls;

use impls::CachingOffsetCalculator;

#[cfg(feature = "check-offsets")]
use impls::StatelessOffsetCalculator;

pub trait Interface {
    fn offset_from_line_column(&mut self, line_column: LineColumn) -> (usize, bool);
}

#[derive(Debug)]
pub struct OffsetCalculator<'original> {
    caching: CachingOffsetCalculator<'original>,

    #[cfg(feature = "check-offsets")]
    stateless: StatelessOffsetCalculator<'original>,
}

impl<'original> OffsetCalculator<'original> {
    pub fn new(original: &'original str) -> Self {
        Self {
            caching: CachingOffsetCalculator::new(original),

            #[cfg(feature = "check-offsets")]
            stateless: StatelessOffsetCalculator::new(original),
        }
    }
}

impl<'original> Interface for OffsetCalculator<'original> {
    fn offset_from_line_column(&mut self, line_column: LineColumn) -> (usize, bool) {
        let (offset, ascii) = self.caching.offset_from_line_column(line_column);

        #[cfg(feature = "check-offsets")]
        {
            let (offset_comparator, ascii_comparator) =
                self.stateless.offset_from_line_column(line_column);
            assert_eq!(offset, offset_comparator);
            assert_eq!(ascii, ascii_comparator);
        }

        (offset, ascii)
    }
}