dts-lsp 0.1.4

Language Server for Device Tree Source files
use tower_lsp::lsp_types::{Position, Range, Url};

#[derive(Clone)]
pub struct Symbol {
    pub uri: Url,
    pub range: Range,
}

impl Symbol {
    pub fn new(uri: Url, range: Range) -> Symbol {
        Symbol { uri, range }
    }
}

pub fn convert_range(range: &tree_sitter::Range) -> Range {
    Range::new(
        Position::new(
            u32::try_from(range.start_point.row).unwrap(),
            u32::try_from(range.start_point.column).unwrap(),
        ),
        Position::new(
            u32::try_from(range.end_point.row).unwrap(),
            u32::try_from(range.end_point.column).unwrap(),
        ),
    )
}

pub fn extension_one_of(url: &Url, exts: &[&str]) -> bool {
    let Some(url_ext) = std::path::Path::new(url.path()).extension() else {
        return false;
    };

    for ext in exts {
        if url_ext.eq_ignore_ascii_case(ext) {
            return true;
        }
    }
    false
}