From 8cdfa445d6629ffef4cb84967ff7017654045bc2 Mon Sep 17 00:00:00 2001 From: mo khan Date: Wed, 2 Jul 2025 18:36:06 -0600 Subject: chore: add vendor directory --- vendor/logos-codegen/src/error.rs | 110 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 vendor/logos-codegen/src/error.rs (limited to 'vendor/logos-codegen/src/error.rs') diff --git a/vendor/logos-codegen/src/error.rs b/vendor/logos-codegen/src/error.rs new file mode 100644 index 00000000..64f93c01 --- /dev/null +++ b/vendor/logos-codegen/src/error.rs @@ -0,0 +1,110 @@ +use std::fmt; + +use beef::lean::Cow; +use proc_macro2::{Span, TokenStream}; +use quote::quote; +use quote::{quote_spanned, ToTokens, TokenStreamExt}; + +pub type Result = std::result::Result; + +#[derive(Default)] +pub struct Errors { + collected: Vec, +} + +impl Errors { + pub fn err(&mut self, message: M, span: Span) -> &mut Self + where + M: Into>, + { + self.collected.push(SpannedError { + message: message.into(), + span, + }); + + self + } + + pub fn render(self) -> Option { + let errors = self.collected; + + match errors.len() { + 0 => None, + _ => Some(quote! { + fn _logos_derive_compile_errors() { + #(#errors)* + } + }), + } + } +} + +pub struct Error(Cow<'static, str>); + +#[derive(Debug)] +pub struct SpannedError { + message: Cow<'static, str>, + span: Span, +} + +impl Error { + pub fn new(message: M) -> Self + where + M: Into>, + { + Error(message.into()) + } + + pub fn span(self, span: Span) -> SpannedError { + SpannedError { + message: self.0, + span, + } + } +} + +impl fmt::Display for Error { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + self.0.fmt(f) + } +} + +impl fmt::Debug for Error { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + fmt::Display::fmt(self, f) + } +} + +impl From for Error { + fn from(err: regex_syntax::Error) -> Error { + Error(err.to_string().into()) + } +} + +impl From<&'static str> for Error { + fn from(err: &'static str) -> Error { + Error(err.into()) + } +} + +impl From for Error { + fn from(err: String) -> Error { + Error(err.into()) + } +} + +impl From for Cow<'static, str> { + fn from(err: Error) -> Self { + err.0 + } +} + +impl ToTokens for SpannedError { + fn to_tokens(&self, tokens: &mut TokenStream) { + let message = &*self.message; + + tokens.append_all(quote_spanned!(self.span => { + compile_error!(#message) + })) + } +} -- cgit v1.2.3