Unnamed repository; edit this file 'description' to name the repository.
Remove `Option` from enum variants diagnostics
`ThinVec` doesn't allocate when empty.
| -rw-r--r-- | crates/hir-def/src/lib.rs | 2 | ||||
| -rw-r--r-- | crates/hir-def/src/signatures.rs | 9 | ||||
| -rw-r--r-- | crates/hir/src/lib.rs | 26 |
3 files changed, 18 insertions, 19 deletions
diff --git a/crates/hir-def/src/lib.rs b/crates/hir-def/src/lib.rs index bf265cd42e..7b7d046581 100644 --- a/crates/hir-def/src/lib.rs +++ b/crates/hir-def/src/lib.rs @@ -298,7 +298,7 @@ impl EnumId { pub fn enum_variants_with_diagnostics( self, db: &dyn DefDatabase, - ) -> &(EnumVariants, Option<ThinVec<InactiveEnumVariantCode>>) { + ) -> &(EnumVariants, ThinVec<InactiveEnumVariantCode>) { EnumVariants::of(db, self) } } diff --git a/crates/hir-def/src/signatures.rs b/crates/hir-def/src/signatures.rs index 463fc9ceff..e9307a1255 100644 --- a/crates/hir-def/src/signatures.rs +++ b/crates/hir-def/src/signatures.rs @@ -1,6 +1,6 @@ //! Item signature IR definitions -use std::{cell::LazyCell, ops::Not as _}; +use std::cell::LazyCell; use bitflags::bitflags; use cfg::{CfgExpr, CfgOptions}; @@ -1065,7 +1065,7 @@ impl EnumVariants { pub(crate) fn of( db: &dyn DefDatabase, e: EnumId, - ) -> (EnumVariants, Option<ThinVec<InactiveEnumVariantCode>>) { + ) -> (EnumVariants, ThinVec<InactiveEnumVariantCode>) { let loc = e.lookup(db); let source = loc.source(db); let ast_id_map = db.ast_id_map(source.file_id); @@ -1073,7 +1073,7 @@ impl EnumVariants { let mut diagnostics = ThinVec::new(); let cfg_options = loc.container.krate(db).cfg_options(db); let Some(variants) = source.value.variant_list() else { - return (EnumVariants { variants: FxIndexMap::default() }, None); + return (EnumVariants { variants: FxIndexMap::default() }, ThinVec::new()); }; let mut variants = variants .variants() @@ -1103,8 +1103,9 @@ impl EnumVariants { }) .collect::<FxIndexMap<_, _>>(); variants.shrink_to_fit(); + diagnostics.shrink_to_fit(); - (EnumVariants { variants }, diagnostics.is_empty().not().then_some(diagnostics)) + (EnumVariants { variants }, diagnostics) } } diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs index 633fe1f86b..f9d28ea3b4 100644 --- a/crates/hir/src/lib.rs +++ b/crates/hir/src/lib.rs @@ -781,20 +781,18 @@ impl Module { let (variants, diagnostics) = e.id.enum_variants_with_diagnostics(db); let file = e.id.lookup(db).id.file_id; let ast_id_map = db.ast_id_map(file); - if let Some(diagnostics) = &diagnostics { - for diag in diagnostics.iter() { - acc.push( - InactiveCode { - node: InFile::new( - file, - ast_id_map.get(diag.ast_id).syntax_node_ptr(), - ), - cfg: diag.cfg.clone(), - opts: diag.opts.clone(), - } - .into(), - ); - } + for diag in diagnostics { + acc.push( + InactiveCode { + node: InFile::new( + file, + ast_id_map.get(diag.ast_id).syntax_node_ptr(), + ), + cfg: diag.cfg.clone(), + opts: diag.opts.clone(), + } + .into(), + ); } for &(v, _) in variants.variants.values() { let source_map = &v.fields_with_source_map(db).1; |