bc7d84c3ce
* a rule * access * after * amount * annotations * assignment * assist * associated * attribute * borrowed * built-in type * clarification * command * const * constructor * corresponding * counterparts * curlies * dependencies * deterministic * diagnostic * duplicates * edge * edited * efficient * elsewhere * execution * expression * extensions * extracted * fill * github * helper * heuristic * incomplete * indent end * inlay * invocation * lifetime * looking * maybe * move * mutability * mutable * necessarily * necessary * negative * nonexistent * occurred * offsets * offsetted * overridden * parameters * params * params_and_where_preds_in_scope * paredit * parent * parentheses * prepended if * punctuation * receive * receiver * referring * repeated * representing * semantically * separately * shouldnot * siblings * similar * something's * statement * struct * structure * surprise * the * this * transparent * unimplemented * unnamed * unnecessary * unneeded * unreachable * unterminated * utilities * variant * variants * visibility * work around (v) * workaround Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
35 lines
1.0 KiB
Rust
35 lines
1.0 KiB
Rust
//! Functionality for generating trivial constructors
|
|
|
|
use hir::StructKind;
|
|
use syntax::ast;
|
|
|
|
/// given a type return the trivial constructor (if one exists)
|
|
pub fn use_trivial_constructor(
|
|
db: &crate::RootDatabase,
|
|
path: ast::Path,
|
|
ty: &hir::Type,
|
|
) -> Option<ast::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 = ast::make::path_qualified(
|
|
path,
|
|
syntax::ast::make::path_segment(ast::make::name_ref(
|
|
&variant.name(db).to_smol_str(),
|
|
)),
|
|
);
|
|
|
|
return Some(syntax::ast::make::expr_path(path));
|
|
}
|
|
}
|
|
}
|
|
Some(hir::Adt::Struct(x)) if x.kind(db) == StructKind::Unit => {
|
|
return Some(syntax::ast::make::expr_path(path));
|
|
}
|
|
_ => {}
|
|
}
|
|
|
|
None
|
|
}
|