Merge branch 'improve-errormsg' into 'main'

Improve errormsg

See merge request wotsubo/endcap-sl-software-ri-generator!15
This commit is contained in:
Wataru Otsubo 2025-04-14 07:25:44 +00:00
commit 06a0da0ddb
2 changed files with 39 additions and 23 deletions

View file

@ -12,6 +12,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Packagin with Nix flakes (with nixpkgs buildRustPackage) [!16](https://gitlab.cern.ch/wotsubo/endcap-sl-software-ri-generator/-/merge_requests/16)
- Now xml metadata can be overwritten with corresponding environmental variables. [!17](https://gitlab.cern.ch/wotsubo/endcap-sl-software-ri-generator/-/merge_requests/17)
### Changed
- Improve error message from syn in generator. !15
## [0.3.1] - 2025-04-11
### Changed

View file

@ -26,8 +26,12 @@ use thiserror::Error;
#[derive(Debug, Error)]
pub enum CodeGenError {
#[error("tokenization(syn) error")]
SynError(#[from] syn::Error),
#[error("tokenization(syn) error: {source}: {code}")]
SynError {
#[source]
source: syn::Error,
code: String,
},
#[error("failed to create file (name duplicated): {0}")]
FilePathDuplicatedError(String),
#[error("parent is required for {module}")]
@ -42,11 +46,17 @@ mod util {
use super::CodeGenError;
pub(super) fn parse_to_ident(s: &str) -> Result<proc_macro2::Ident, CodeGenError> {
Ok(syn::parse_str(s)?)
syn::parse_str(s).map_err(|e| CodeGenError::SynError {
source: e,
code: s.to_string(),
})
}
pub(super) fn parse_to_literal(s: &str) -> Result<proc_macro2::Literal, CodeGenError> {
Ok(syn::parse_str(s)?)
syn::parse_str(s).map_err(|e| CodeGenError::SynError {
source: e,
code: s.to_string(),
})
}
// currently only U32 is used, so `dead_code` for Debug, PartialEq
@ -161,10 +171,9 @@ This code is auto generated using endcap_sl_software_ri_generator.
GENERATOR_GIT_SHA,
);
let files = self.generate_register_interface(None, None, HashMap::new())?;
Ok(files
files
.into_iter()
.map(
|(path, tokens)| -> Result<(PathBuf, syn::File), syn::Error> {
.map(|(path, tokens)| -> Result<(PathBuf, syn::File), _> {
let tokens = if path
.file_name()
.is_some_and(|file| file == "register_interface.rs")
@ -177,11 +186,14 @@ This code is auto generated using endcap_sl_software_ri_generator.
} else {
tokens
};
let file: syn::File = syn::parse2(tokens)?;
let file: syn::File =
syn::parse2(tokens.clone()).map_err(|e| CodeGenError::SynError {
source: e,
code: tokens.to_string(),
})?;
Ok((path, file))
},
)
.process_results(|kv| HashMap::from_iter(kv))?)
})
.process_results(|kv| HashMap::from_iter(kv))
}
}