//! Functionality for generating trivial constructors use hir::StructKind; use syntax::ast::{make, Expr, Path}; /// given a type return the trivial constructor (if one exists) pub fn use_trivial_constructor( db: &crate::RootDatabase, path: Path, ty: &hir::Type, ) -> Option { match ty.as_adt() { Some(hir::Adt::Enum(x)) => { if let &[variant] = &*x.variants(db) { if variant.kind(db) == hir::StructKind::Unit { let path = make::path_qualified( path, make::path_segment(make::name_ref(&variant.name(db).to_smol_str())), ); return Some(make::expr_path(path)); } } } Some(hir::Adt::Struct(x)) if x.kind(db) == StructKind::Unit => { return Some(make::expr_path(path)); } _ => {} } None }