feat: initial version of bool_to_enum assist

This commit is contained in:
Ryan Mehri 2023-08-19 16:49:26 -06:00
parent 994df3d6a3
commit d7a8e800c9
3 changed files with 754 additions and 0 deletions

View file

@ -973,6 +973,11 @@ pub fn tuple_field(visibility: Option<ast::Visibility>, ty: ast::Type) -> ast::T
ast_from_text(&format!("struct f({visibility}{ty});"))
}
pub fn variant_list(variants: impl IntoIterator<Item = ast::Variant>) -> ast::VariantList {
let variants = variants.into_iter().join(", ");
ast_from_text(&format!("enum f {{ {variants} }}"))
}
pub fn variant(name: ast::Name, field_list: Option<ast::FieldList>) -> ast::Variant {
let field_list = match field_list {
None => String::new(),
@ -1037,6 +1042,19 @@ pub fn struct_(
ast_from_text(&format!("{visibility}struct {strukt_name}{type_params}{field_list}{semicolon}",))
}
pub fn enum_(
visibility: Option<ast::Visibility>,
enum_name: ast::Name,
variant_list: ast::VariantList,
) -> ast::Enum {
let visibility = match visibility {
None => String::new(),
Some(it) => format!("{it} "),
};
ast_from_text(&format!("{visibility}enum {enum_name} {variant_list}"))
}
pub fn attr_outer(meta: ast::Meta) -> ast::Attr {
ast_from_text(&format!("#[{meta}]"))
}
@ -1149,6 +1167,16 @@ pub mod tokens {
lit.syntax().first_child_or_token().unwrap().into_token().unwrap()
}
pub fn ident(text: &str) -> SyntaxToken {
assert_eq!(text.trim(), text);
let path: ast::Path = super::ext::ident_path(text);
path.syntax()
.descendants_with_tokens()
.filter_map(|it| it.into_token())
.find(|it| it.kind() == IDENT)
.unwrap()
}
pub fn single_newline() -> SyntaxToken {
let res = SOURCE_FILE
.tree()