mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-27 12:29:21 +00:00
37 lines
1 KiB
Rust
37 lines
1 KiB
Rust
//! Functionality for generating trivial constructors
|
|
|
|
use hir::StructKind;
|
|
use syntax::{
|
|
ast::{make, Expr, Path},
|
|
ToSmolStr,
|
|
};
|
|
|
|
/// given a type return the trivial constructor (if one exists)
|
|
pub fn use_trivial_constructor(
|
|
db: &crate::RootDatabase,
|
|
path: Path,
|
|
ty: &hir::Type,
|
|
) -> Option<Expr> {
|
|
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).display_no_db().to_smolstr(),
|
|
)),
|
|
);
|
|
|
|
return Some(make::expr_path(path));
|
|
}
|
|
}
|
|
}
|
|
Some(hir::Adt::Struct(x)) if x.kind(db) == StructKind::Unit => {
|
|
return Some(make::expr_path(path));
|
|
}
|
|
_ => {}
|
|
}
|
|
|
|
None
|
|
}
|