use crate::{
patterns::{
for_is_prev2, has_bind_pat_parent, has_block_expr_parent, has_field_list_parent,
- has_impl_as_prev_sibling, has_impl_parent, has_item_list_or_source_file_parent,
- has_ref_parent, has_trait_as_prev_sibling, has_trait_parent, inside_impl_trait_block,
- is_in_loop_body, is_match_arm, previous_token,
+ has_impl_parent, has_item_list_or_source_file_parent, has_prev_sibling, has_ref_parent,
+ has_trait_parent, inside_impl_trait_block, is_in_loop_body, is_match_arm, previous_token,
},
CompletionConfig,
};
}
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
-pub enum PrevSibling {
+pub(crate) enum PrevSibling {
Trait,
Impl,
}
self.previous_token = previous_token(syntax_element.clone());
self.in_loop_body = is_in_loop_body(syntax_element.clone());
self.is_match_arm = is_match_arm(syntax_element.clone());
- if has_impl_as_prev_sibling(syntax_element.clone()) {
+ if has_prev_sibling(syntax_element.clone(), IMPL) {
self.prev_sibling = Some(PrevSibling::Impl)
- } else if has_trait_as_prev_sibling(syntax_element.clone()) {
+ } else if has_prev_sibling(syntax_element.clone(), TRAIT) {
self.prev_sibling = Some(PrevSibling::Trait)
}
algo::non_trivia_sibling,
ast::{self, LoopBodyOwner},
match_ast, AstNode, Direction, NodeOrToken, SyntaxElement,
- SyntaxKind::*,
+ SyntaxKind::{self, *},
SyntaxNode, SyntaxToken, T,
};
pub(crate) fn has_bind_pat_parent(element: SyntaxElement) -> bool {
element.ancestors().any(|it| it.kind() == IDENT_PAT)
}
+
#[test]
fn test_has_bind_pat_parent() {
check_pattern_is_applicable(r"fn my_fn(m$0) {}", has_bind_pat_parent);
check_pattern_is_applicable(r"for i i$0", for_is_prev2);
}
-pub(crate) fn has_trait_as_prev_sibling(element: SyntaxElement) -> bool {
- previous_sibling_or_ancestor_sibling(element).filter(|it| it.kind() == TRAIT).is_some()
-}
-#[test]
-fn test_has_trait_as_prev_sibling() {
- check_pattern_is_applicable(r"trait A w$0 {}", has_trait_as_prev_sibling);
-}
-
-pub(crate) fn has_impl_as_prev_sibling(element: SyntaxElement) -> bool {
- previous_sibling_or_ancestor_sibling(element).filter(|it| it.kind() == IMPL).is_some()
+pub(crate) fn has_prev_sibling(element: SyntaxElement, kind: SyntaxKind) -> bool {
+ previous_sibling_or_ancestor_sibling(element).filter(|it| it.kind() == kind).is_some()
}
#[test]
fn test_has_impl_as_prev_sibling() {
- check_pattern_is_applicable(r"impl A w$0 {}", has_impl_as_prev_sibling);
+ check_pattern_is_applicable(r"impl A w$0 {}", |it| has_prev_sibling(it, IMPL));
}
pub(crate) fn is_in_loop_body(element: SyntaxElement) -> bool {