aboutsummaryrefslogtreecommitdiff
path: root/crates/syntax/src/ast
diff options
context:
space:
mode:
authorZac Pullar-Strecker <[email protected]>2020-08-25 05:44:36 +0100
committerZac Pullar-Strecker <[email protected]>2020-08-25 05:44:36 +0100
commitb835f06cecd2189cb32a431fdb85245fbf53032a (patch)
tree8bb4ba65f4922e9cca571a7d4a7fa17d047ae779 /crates/syntax/src/ast
parent452afaebe188251cd4403e56999bf8b58de4fba9 (diff)
parentef9cea945d5767e7c60d5931a7649a73caea23ad (diff)
Merge remote-tracking branch 'upstream/master' into 503-hover-doc-links
Diffstat (limited to 'crates/syntax/src/ast')
-rw-r--r--crates/syntax/src/ast/generated/nodes.rs8
-rw-r--r--crates/syntax/src/ast/make.rs8
2 files changed, 14 insertions, 2 deletions
diff --git a/crates/syntax/src/ast/generated/nodes.rs b/crates/syntax/src/ast/generated/nodes.rs
index 6317407c6..d6af5755c 100644
--- a/crates/syntax/src/ast/generated/nodes.rs
+++ b/crates/syntax/src/ast/generated/nodes.rs
@@ -1380,6 +1380,7 @@ pub enum ExternItem {
1380 Fn(Fn), 1380 Fn(Fn),
1381 MacroCall(MacroCall), 1381 MacroCall(MacroCall),
1382 Static(Static), 1382 Static(Static),
1383 TypeAlias(TypeAlias),
1383} 1384}
1384impl ast::AttrsOwner for ExternItem {} 1385impl ast::AttrsOwner for ExternItem {}
1385impl ast::NameOwner for ExternItem {} 1386impl ast::NameOwner for ExternItem {}
@@ -3339,10 +3340,13 @@ impl From<MacroCall> for ExternItem {
3339impl From<Static> for ExternItem { 3340impl From<Static> for ExternItem {
3340 fn from(node: Static) -> ExternItem { ExternItem::Static(node) } 3341 fn from(node: Static) -> ExternItem { ExternItem::Static(node) }
3341} 3342}
3343impl From<TypeAlias> for ExternItem {
3344 fn from(node: TypeAlias) -> ExternItem { ExternItem::TypeAlias(node) }
3345}
3342impl AstNode for ExternItem { 3346impl AstNode for ExternItem {
3343 fn can_cast(kind: SyntaxKind) -> bool { 3347 fn can_cast(kind: SyntaxKind) -> bool {
3344 match kind { 3348 match kind {
3345 FN | MACRO_CALL | STATIC => true, 3349 FN | MACRO_CALL | STATIC | TYPE_ALIAS => true,
3346 _ => false, 3350 _ => false,
3347 } 3351 }
3348 } 3352 }
@@ -3351,6 +3355,7 @@ impl AstNode for ExternItem {
3351 FN => ExternItem::Fn(Fn { syntax }), 3355 FN => ExternItem::Fn(Fn { syntax }),
3352 MACRO_CALL => ExternItem::MacroCall(MacroCall { syntax }), 3356 MACRO_CALL => ExternItem::MacroCall(MacroCall { syntax }),
3353 STATIC => ExternItem::Static(Static { syntax }), 3357 STATIC => ExternItem::Static(Static { syntax }),
3358 TYPE_ALIAS => ExternItem::TypeAlias(TypeAlias { syntax }),
3354 _ => return None, 3359 _ => return None,
3355 }; 3360 };
3356 Some(res) 3361 Some(res)
@@ -3360,6 +3365,7 @@ impl AstNode for ExternItem {
3360 ExternItem::Fn(it) => &it.syntax, 3365 ExternItem::Fn(it) => &it.syntax,
3361 ExternItem::MacroCall(it) => &it.syntax, 3366 ExternItem::MacroCall(it) => &it.syntax,
3362 ExternItem::Static(it) => &it.syntax, 3367 ExternItem::Static(it) => &it.syntax,
3368 ExternItem::TypeAlias(it) => &it.syntax,
3363 } 3369 }
3364 } 3370 }
3365} 3371}
diff --git a/crates/syntax/src/ast/make.rs b/crates/syntax/src/ast/make.rs
index d20c085aa..7958721e2 100644
--- a/crates/syntax/src/ast/make.rs
+++ b/crates/syntax/src/ast/make.rs
@@ -7,7 +7,7 @@
7use itertools::Itertools; 7use itertools::Itertools;
8use stdx::format_to; 8use stdx::format_to;
9 9
10use crate::{ast, AstNode, SourceFile, SyntaxKind, SyntaxNode, SyntaxToken}; 10use crate::{ast, AstNode, SourceFile, SyntaxKind, SyntaxNode, SyntaxText, SyntaxToken};
11 11
12pub fn name(text: &str) -> ast::Name { 12pub fn name(text: &str) -> ast::Name {
13 ast_from_text(&format!("mod {};", text)) 13 ast_from_text(&format!("mod {};", text))
@@ -137,6 +137,12 @@ pub fn expr_prefix(op: SyntaxKind, expr: ast::Expr) -> ast::Expr {
137pub fn expr_call(f: ast::Expr, arg_list: ast::ArgList) -> ast::Expr { 137pub fn expr_call(f: ast::Expr, arg_list: ast::ArgList) -> ast::Expr {
138 expr_from_text(&format!("{}{}", f, arg_list)) 138 expr_from_text(&format!("{}{}", f, arg_list))
139} 139}
140pub fn expr_method_call<F>(text: &str, caller: F) -> Option<ast::Expr>
141where
142 F: FnOnce() -> Option<SyntaxText>,
143{
144 try_expr_from_text(&format!("{}.{}()", caller()?, text))
145}
140fn expr_from_text(text: &str) -> ast::Expr { 146fn expr_from_text(text: &str) -> ast::Expr {
141 ast_from_text(&format!("const C: () = {};", text)) 147 ast_from_text(&format!("const C: () = {};", text))
142} 148}