diff options
Diffstat (limited to 'crates/ra_syntax/src/ast/make.rs')
-rw-r--r-- | crates/ra_syntax/src/ast/make.rs | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/crates/ra_syntax/src/ast/make.rs b/crates/ra_syntax/src/ast/make.rs index 0da24560e..53d6fa562 100644 --- a/crates/ra_syntax/src/ast/make.rs +++ b/crates/ra_syntax/src/ast/make.rs | |||
@@ -25,6 +25,31 @@ fn path_from_text(text: &str) -> ast::Path { | |||
25 | ast_from_text(text) | 25 | ast_from_text(text) |
26 | } | 26 | } |
27 | 27 | ||
28 | pub fn use_tree( | ||
29 | path: ast::Path, | ||
30 | use_tree_list: Option<ast::UseTreeList>, | ||
31 | alias: Option<ast::Alias>, | ||
32 | ) -> ast::UseTree { | ||
33 | let mut buf = "use ".to_string(); | ||
34 | buf += &path.syntax().to_string(); | ||
35 | if let Some(use_tree_list) = use_tree_list { | ||
36 | buf += &format!("::{}", use_tree_list.syntax()); | ||
37 | } | ||
38 | if let Some(alias) = alias { | ||
39 | buf += &format!(" {}", alias.syntax()); | ||
40 | } | ||
41 | ast_from_text(&buf) | ||
42 | } | ||
43 | |||
44 | pub fn use_tree_list(use_trees: impl IntoIterator<Item = ast::UseTree>) -> ast::UseTreeList { | ||
45 | let use_trees = use_trees.into_iter().map(|it| it.syntax().clone()).join(", "); | ||
46 | ast_from_text(&format!("use {{{}}};", use_trees)) | ||
47 | } | ||
48 | |||
49 | pub fn use_item(use_tree: ast::UseTree) -> ast::UseItem { | ||
50 | ast_from_text(&format!("use {};", use_tree.syntax())) | ||
51 | } | ||
52 | |||
28 | pub fn record_field(name: ast::NameRef, expr: Option<ast::Expr>) -> ast::RecordField { | 53 | pub fn record_field(name: ast::NameRef, expr: Option<ast::Expr>) -> ast::RecordField { |
29 | return match expr { | 54 | return match expr { |
30 | Some(expr) => from_text(&format!("{}: {}", name.syntax(), expr.syntax())), | 55 | Some(expr) => from_text(&format!("{}: {}", name.syntax(), expr.syntax())), |
@@ -219,22 +244,13 @@ fn unroot(n: SyntaxNode) -> SyntaxNode { | |||
219 | } | 244 | } |
220 | 245 | ||
221 | pub mod tokens { | 246 | pub mod tokens { |
222 | use crate::{ast, AstNode, Parse, SourceFile, SyntaxKind::*, SyntaxToken, T}; | ||
223 | use once_cell::sync::Lazy; | 247 | use once_cell::sync::Lazy; |
224 | 248 | ||
249 | use crate::{ast, AstNode, Parse, SourceFile, SyntaxKind::*, SyntaxToken}; | ||
250 | |||
225 | pub(super) static SOURCE_FILE: Lazy<Parse<SourceFile>> = | 251 | pub(super) static SOURCE_FILE: Lazy<Parse<SourceFile>> = |
226 | Lazy::new(|| SourceFile::parse("const C: <()>::Item = (1 != 1, 2 == 2, !true)\n;")); | 252 | Lazy::new(|| SourceFile::parse("const C: <()>::Item = (1 != 1, 2 == 2, !true)\n;")); |
227 | 253 | ||
228 | pub fn comma() -> SyntaxToken { | ||
229 | SOURCE_FILE | ||
230 | .tree() | ||
231 | .syntax() | ||
232 | .descendants_with_tokens() | ||
233 | .filter_map(|it| it.into_token()) | ||
234 | .find(|it| it.kind() == T![,]) | ||
235 | .unwrap() | ||
236 | } | ||
237 | |||
238 | pub fn single_space() -> SyntaxToken { | 254 | pub fn single_space() -> SyntaxToken { |
239 | SOURCE_FILE | 255 | SOURCE_FILE |
240 | .tree() | 256 | .tree() |