use std::path::PathBuf;
use thiserror::Error;
#[derive(Debug, Error)]
pub enum SurgeonError {
#[error("symbol not found: {path}")]
SymbolNotFound {
path: String,
did_you_mean: Vec<String>,
},
#[error("file not found: {0}")]
FileNotFound(PathBuf),
#[error("unsupported language for path: {0}")]
UnsupportedLanguage(PathBuf),
#[error("parse error in {path}: {reason}")]
ParseError {
path: std::path::PathBuf,
reason: String,
},
#[error("filesystem error: {0}")]
Io(#[from] std::io::Error),
}
impl From<SurgeonError> for pathfinder_common::error::PathfinderError {
fn from(error: SurgeonError) -> Self {
match error {
SurgeonError::SymbolNotFound { path, did_you_mean } => Self::SymbolNotFound {
semantic_path: path,
did_you_mean,
},
SurgeonError::FileNotFound(path) => Self::FileNotFound { path },
SurgeonError::UnsupportedLanguage(path) => Self::UnsupportedLanguage { path },
SurgeonError::ParseError { path, reason } => Self::ParseError { path, reason },
SurgeonError::Io(err) => Self::IoError {
message: err.to_string(),
},
}
}
}