Detect conflicting module names in construct_runtime! (#7968)

This commit is contained in:
Bastian Köcher
2021-01-25 10:37:20 +01:00
committed by GitHub
parent 2fcff6a129
commit 97bb9ab35a
3 changed files with 35 additions and 0 deletions
@@ -62,6 +62,7 @@ impl Module {
fn complete_modules(decl: impl Iterator<Item = ModuleDeclaration>) -> syn::Result<Vec<Module>> {
let mut indices = HashMap::new();
let mut last_index: Option<u8> = None;
let mut names = HashMap::new();
decl
.map(|module| {
@@ -88,6 +89,14 @@ fn complete_modules(decl: impl Iterator<Item = ModuleDeclaration>) -> syn::Resul
return Err(err);
}
if let Some(used_module) = names.insert(module.name.clone(), module.name.span()) {
let msg = "Two modules with the same name!";
let mut err = syn::Error::new(used_module, &msg);
err.combine(syn::Error::new(module.name.span(), &msg));
return Err(err);
}
Ok(Module {
name: module.name,
index: final_index,