Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide_ssr/src/parsing.rs')
-rw-r--r--crates/ide_ssr/src/parsing.rs37
1 files changed, 18 insertions, 19 deletions
diff --git a/crates/ide_ssr/src/parsing.rs b/crates/ide_ssr/src/parsing.rs
index ae7d5b4bf1..aaaee576b5 100644
--- a/crates/ide_ssr/src/parsing.rs
+++ b/crates/ide_ssr/src/parsing.rs
@@ -4,12 +4,12 @@
//! placeholders, which start with `$`. For replacement templates, this is the final form. For
//! search patterns, we go further and parse the pattern as each kind of thing that we can match.
//! e.g. expressions, type references etc.
-
-use crate::errors::bail;
-use crate::{SsrError, SsrPattern, SsrRule};
use rustc_hash::{FxHashMap, FxHashSet};
use std::{fmt::Display, str::FromStr};
-use syntax::{ast, AstNode, SmolStr, SyntaxKind, SyntaxNode, T};
+use syntax::{SmolStr, SyntaxKind, SyntaxNode, T};
+
+use crate::errors::bail;
+use crate::{fragments, SsrError, SsrPattern, SsrRule};
#[derive(Debug)]
pub(crate) struct ParsedRule {
@@ -73,17 +73,16 @@ impl ParsedRule {
rules: Vec::new(),
};
- let raw_template_stmt = raw_template.map(ast::Stmt::parse);
- if let raw_template_expr @ Some(Ok(_)) = raw_template.map(ast::Expr::parse) {
- builder.try_add(ast::Expr::parse(&raw_pattern), raw_template_expr);
+ let raw_template_stmt = raw_template.map(fragments::stmt);
+ if let raw_template_expr @ Some(Ok(_)) = raw_template.map(fragments::expr) {
+ builder.try_add(fragments::expr(&raw_pattern), raw_template_expr);
} else {
- builder.try_add(ast::Expr::parse(&raw_pattern), raw_template_stmt.clone());
+ builder.try_add(fragments::expr(&raw_pattern), raw_template_stmt.clone());
}
- builder.try_add(ast::Type::parse(&raw_pattern), raw_template.map(ast::Type::parse));
- builder.try_add(ast::Item::parse(&raw_pattern), raw_template.map(ast::Item::parse));
- builder.try_add(ast::Path::parse(&raw_pattern), raw_template.map(ast::Path::parse));
- builder.try_add(ast::Pat::parse(&raw_pattern), raw_template.map(ast::Pat::parse));
- builder.try_add(ast::Stmt::parse(&raw_pattern), raw_template_stmt);
+ builder.try_add(fragments::ty(&raw_pattern), raw_template.map(fragments::ty));
+ builder.try_add(fragments::item(&raw_pattern), raw_template.map(fragments::item));
+ builder.try_add(fragments::pat(&raw_pattern), raw_template.map(fragments::pat));
+ builder.try_add(fragments::stmt(&raw_pattern), raw_template_stmt);
builder.build()
}
}
@@ -94,20 +93,20 @@ struct RuleBuilder {
}
impl RuleBuilder {
- fn try_add<T: AstNode, T2: AstNode>(
+ fn try_add(
&mut self,
- pattern: Result<T, ()>,
- template: Option<Result<T2, ()>>,
+ pattern: Result<SyntaxNode, ()>,
+ template: Option<Result<SyntaxNode, ()>>,
) {
match (pattern, template) {
(Ok(pattern), Some(Ok(template))) => self.rules.push(ParsedRule {
placeholders_by_stand_in: self.placeholders_by_stand_in.clone(),
- pattern: pattern.syntax().clone(),
- template: Some(template.syntax().clone()),
+ pattern,
+ template: Some(template),
}),
(Ok(pattern), None) => self.rules.push(ParsedRule {
placeholders_by_stand_in: self.placeholders_by_stand_in.clone(),
- pattern: pattern.syntax().clone(),
+ pattern,
template: None,
}),
_ => {}