Use upstream cov-mark

This commit is contained in:
Laurențiu Nicola 2021-03-08 22:19:44 +02:00
parent c5189a22cc
commit fc9eed4836
101 changed files with 354 additions and 514 deletions

View file

@ -2,7 +2,6 @@
use hir::{HasVisibility, Type};
use rustc_hash::FxHashSet;
use test_utils::mark;
use crate::{context::CompletionContext, Completions};
@ -19,7 +18,7 @@ pub(crate) fn complete_dot(acc: &mut Completions, ctx: &CompletionContext) {
};
if ctx.is_call {
mark::hit!(test_no_struct_field_completion_for_method_call);
cov_mark::hit!(test_no_struct_field_completion_for_method_call);
} else {
complete_fields(acc, ctx, &receiver_ty);
}
@ -62,7 +61,6 @@ fn complete_methods(acc: &mut Completions, ctx: &CompletionContext, receiver: &T
#[cfg(test)]
mod tests {
use expect_test::{expect, Expect};
use test_utils::mark;
use crate::{test_utils::completion_list, CompletionKind};
@ -122,7 +120,7 @@ impl A {
#[test]
fn test_no_struct_field_completion_for_method_call() {
mark::check!(test_no_struct_field_completion_for_method_call);
cov_mark::check!(test_no_struct_field_completion_for_method_call);
check(
r#"
struct A { the_field: u32 }

View file

@ -55,7 +55,6 @@ use ide_db::helpers::{
};
use rustc_hash::FxHashSet;
use syntax::{AstNode, SyntaxNode, T};
use test_utils::mark;
use crate::{
context::CompletionContext,
@ -174,7 +173,7 @@ fn import_assets(ctx: &CompletionContext, fuzzy_name: String) -> Option<ImportAs
if matches!(assets_for_path.as_ref()?.import_candidate(), ImportCandidate::Path(_))
&& fuzzy_name_length < 2
{
mark::hit!(ignore_short_input_for_path);
cov_mark::hit!(ignore_short_input_for_path);
None
} else {
assets_for_path
@ -186,7 +185,7 @@ fn compute_fuzzy_completion_order_key(
proposed_mod_path: &ModPath,
user_input_lowercased: &str,
) -> usize {
mark::hit!(certain_fuzzy_order_test);
cov_mark::hit!(certain_fuzzy_order_test);
let proposed_import_name = match proposed_mod_path.segments().last() {
Some(name) => name.to_string().to_lowercase(),
None => return usize::MAX,
@ -200,7 +199,6 @@ fn compute_fuzzy_completion_order_key(
#[cfg(test)]
mod tests {
use expect_test::{expect, Expect};
use test_utils::mark;
use crate::{
item::CompletionKind,
@ -295,7 +293,7 @@ fn main() {
#[test]
fn short_paths_are_ignored() {
mark::check!(ignore_short_input_for_path);
cov_mark::check!(ignore_short_input_for_path);
check(
r#"
@ -319,7 +317,7 @@ fn main() {
#[test]
fn fuzzy_completions_come_in_specific_order() {
mark::check!(certain_fuzzy_order_test);
cov_mark::check!(certain_fuzzy_order_test);
check(
r#"
//- /lib.rs crate:dep

View file

@ -3,7 +3,6 @@
use std::iter;
use syntax::SyntaxKind;
use test_utils::mark;
use crate::{CompletionContext, CompletionItem, CompletionItemKind, CompletionKind, Completions};
@ -47,11 +46,11 @@ pub(crate) fn complete_use_tree_keyword(acc: &mut Completions, ctx: &CompletionC
pub(crate) fn complete_expr_keyword(acc: &mut Completions, ctx: &CompletionContext) {
if ctx.token.kind() == SyntaxKind::COMMENT {
mark::hit!(no_keyword_completion_in_comments);
cov_mark::hit!(no_keyword_completion_in_comments);
return;
}
if ctx.record_lit_syntax.is_some() {
mark::hit!(no_keyword_completion_in_record_lit);
cov_mark::hit!(no_keyword_completion_in_record_lit);
return;
}
@ -172,7 +171,7 @@ fn add_keyword(ctx: &CompletionContext, acc: &mut Completions, kw: &str, snippet
Some(cap) => {
let tmp;
let snippet = if snippet.ends_with('}') && ctx.incomplete_let {
mark::hit!(let_semi);
cov_mark::hit!(let_semi);
tmp = format!("{};", snippet);
&tmp
} else {
@ -188,7 +187,6 @@ fn add_keyword(ctx: &CompletionContext, acc: &mut Completions, kw: &str, snippet
#[cfg(test)]
mod tests {
use expect_test::{expect, Expect};
use test_utils::mark;
use crate::{
test_utils::{check_edit, completion_list},
@ -494,7 +492,7 @@ fn quux() -> i32 {
#[test]
fn no_keyword_completion_in_comments() {
mark::check!(no_keyword_completion_in_comments);
cov_mark::check!(no_keyword_completion_in_comments);
check(
r#"
fn test() {
@ -599,7 +597,7 @@ struct Foo {
#[test]
fn skip_struct_initializer() {
mark::check!(no_keyword_completion_in_record_lit);
cov_mark::check!(no_keyword_completion_in_record_lit);
check(
r#"
struct Foo {
@ -643,7 +641,7 @@ fn foo() {
#[test]
fn let_semi() {
mark::check!(let_semi);
cov_mark::check!(let_semi);
check_edit(
"match",
r#"

View file

@ -3,7 +3,6 @@
use hir::{Adt, HasVisibility, PathResolution, ScopeDef};
use rustc_hash::FxHashSet;
use syntax::AstNode;
use test_utils::mark;
use crate::{CompletionContext, Completions};
@ -39,7 +38,7 @@ pub(crate) fn complete_qualified_path(acc: &mut Completions, ctx: &CompletionCon
if let Some(name_ref) = ctx.name_ref_syntax.as_ref() {
if name_ref.syntax().text() == name.to_string().as_str() {
// for `use self::foo$0`, don't suggest `foo` as a completion
mark::hit!(dont_complete_current_use);
cov_mark::hit!(dont_complete_current_use);
continue;
}
}
@ -155,7 +154,6 @@ pub(crate) fn complete_qualified_path(acc: &mut Completions, ctx: &CompletionCon
#[cfg(test)]
mod tests {
use expect_test::{expect, Expect};
use test_utils::mark;
use crate::{
test_utils::{check_edit, completion_list},
@ -174,7 +172,7 @@ mod tests {
#[test]
fn dont_complete_current_use() {
mark::check!(dont_complete_current_use);
cov_mark::check!(dont_complete_current_use);
check(r#"use self::foo$0;"#, expect![[""]]);
}

View file

@ -2,7 +2,6 @@
use hir::ScopeDef;
use syntax::AstNode;
use test_utils::mark;
use crate::{CompletionContext, Completions};
@ -30,13 +29,13 @@ pub(crate) fn complete_unqualified_path(acc: &mut Completions, ctx: &CompletionC
ctx.scope.process_all_names(&mut |name, res| {
if let ScopeDef::GenericParam(hir::GenericParam::LifetimeParam(_)) = res {
mark::hit!(skip_lifetime_completion);
cov_mark::hit!(skip_lifetime_completion);
return;
}
if ctx.use_item_syntax.is_some() {
if let (ScopeDef::Unknown, Some(name_ref)) = (&res, &ctx.name_ref_syntax) {
if name_ref.syntax().text() == name.to_string().as_str() {
mark::hit!(self_fulfilling_completion);
cov_mark::hit!(self_fulfilling_completion);
return;
}
}
@ -48,7 +47,6 @@ pub(crate) fn complete_unqualified_path(acc: &mut Completions, ctx: &CompletionC
#[cfg(test)]
mod tests {
use expect_test::{expect, Expect};
use test_utils::mark;
use crate::{
test_utils::{check_edit, completion_list_with_config, TEST_CONFIG},
@ -66,7 +64,7 @@ mod tests {
#[test]
fn self_fulfilling_completion() {
mark::check!(self_fulfilling_completion);
cov_mark::check!(self_fulfilling_completion);
check(
r#"
use foo$0
@ -185,7 +183,7 @@ fn quux() {
#[test]
fn completes_if_prefix_is_keyword() {
mark::check!(completes_if_prefix_is_keyword);
cov_mark::check!(completes_if_prefix_is_keyword);
check_edit(
"wherewolf",
r#"
@ -223,7 +221,7 @@ fn main() {
#[test]
fn does_not_complete_lifetimes() {
mark::check!(skip_lifetime_completion);
cov_mark::check!(skip_lifetime_completion);
check(
r#"fn quux<'a>() { $0 }"#,
expect![[r#"

View file

@ -7,7 +7,7 @@ use syntax::{
algo::find_node_at_offset, ast, match_ast, AstNode, NodeOrToken, SyntaxKind::*, SyntaxNode,
SyntaxToken, TextRange, TextSize,
};
use test_utils::mark;
use text_edit::Indel;
use crate::{
@ -240,7 +240,7 @@ impl<'a> CompletionContext<'a> {
// check kind of macro-expanded token, but use range of original token
let kind = self.token.kind();
if kind == IDENT || kind == UNDERSCORE || kind.is_keyword() {
mark::hit!(completes_if_prefix_is_keyword);
cov_mark::hit!(completes_if_prefix_is_keyword);
self.original_token.text_range()
} else {
TextRange::empty(self.position.offset)

View file

@ -15,7 +15,6 @@ use hir::{
};
use ide_db::{helpers::SnippetCap, RootDatabase, SymbolKind};
use syntax::TextRange;
use test_utils::mark;
use crate::{
item::ImportEdit, CompletionContext, CompletionItem, CompletionItemKind, CompletionKind,
@ -115,11 +114,11 @@ impl<'a> RenderContext<'a> {
fn active_name_and_type(&self) -> Option<(String, Type)> {
if let Some(record_field) = &self.completion.record_field_syntax {
mark::hit!(record_field_type_match);
cov_mark::hit!(record_field_type_match);
let (struct_field, _local) = self.completion.sema.resolve_record_field(record_field)?;
Some((struct_field.name(self.db()).to_string(), struct_field.signature_ty(self.db())))
} else if let Some(active_parameter) = &self.completion.active_parameter {
mark::hit!(active_param_type_match);
cov_mark::hit!(active_param_type_match);
Some((active_parameter.name.clone(), active_parameter.ty.clone()))
} else {
None
@ -269,7 +268,7 @@ impl<'a> Render<'a> {
_ => false,
};
if has_non_default_type_params {
mark::hit!(inserts_angle_brackets_for_generics);
cov_mark::hit!(inserts_angle_brackets_for_generics);
item = item
.lookup_by(local_name.clone())
.label(format!("{}<…>", local_name))
@ -358,7 +357,6 @@ mod tests {
use std::cmp::Reverse;
use expect_test::{expect, Expect};
use test_utils::mark;
use crate::{
test_utils::{check_edit, do_completion, get_all_items, TEST_CONFIG},
@ -734,7 +732,7 @@ fn foo(s: S) { s.$0 }
#[test]
fn no_call_parens_if_fn_ptr_needed() {
mark::check!(no_call_parens_if_fn_ptr_needed);
cov_mark::check!(no_call_parens_if_fn_ptr_needed);
check_edit(
"foo",
r#"
@ -758,7 +756,7 @@ fn main() -> ManualVtable {
#[test]
fn no_parens_in_use_item() {
mark::check!(no_parens_in_use_item);
cov_mark::check!(no_parens_in_use_item);
check_edit(
"foo",
r#"
@ -802,7 +800,7 @@ fn f(foo: &Foo) { foo.foo(); }
#[test]
fn inserts_angle_brackets_for_generics() {
mark::check!(inserts_angle_brackets_for_generics);
cov_mark::check!(inserts_angle_brackets_for_generics);
check_edit(
"Vec",
r#"
@ -851,7 +849,7 @@ fn foo(xs: Vec<i128>)
#[test]
fn active_param_score() {
mark::check!(active_param_type_match);
cov_mark::check!(active_param_type_match);
check_scores(
r#"
struct S { foo: i64, bar: u32, baz: u32 }
@ -868,7 +866,7 @@ fn foo(s: S) { test(s.$0) }
#[test]
fn record_field_scores() {
mark::check!(record_field_type_match);
cov_mark::check!(record_field_type_match);
check_scores(
r#"
struct A { foo: i64, bar: u32, baz: u32 }

View file

@ -1,7 +1,6 @@
//! Extensions for `Builder` structure required for item rendering.
use itertools::Itertools;
use test_utils::mark;
use crate::{item::Builder, CompletionContext};
@ -30,7 +29,7 @@ impl Builder {
return false;
}
if ctx.use_item_syntax.is_some() {
mark::hit!(no_parens_in_use_item);
cov_mark::hit!(no_parens_in_use_item);
return false;
}
if ctx.is_pattern_call {
@ -43,7 +42,7 @@ impl Builder {
// Don't add parentheses if the expected type is some function reference.
if let Some(ty) = &ctx.expected_type {
if ty.is_fn() {
mark::hit!(no_call_parens_if_fn_ptr_needed);
cov_mark::hit!(no_call_parens_if_fn_ptr_needed);
return false;
}
}
@ -67,7 +66,7 @@ impl Builder {
None => return self,
};
// If not an import, add parenthesis automatically.
mark::hit!(inserts_parens_for_function_calls);
cov_mark::hit!(inserts_parens_for_function_calls);
let (snippet, label) = if params.is_empty() {
(format!("{}()$0", name), format!("{}()", name))
@ -82,7 +81,7 @@ impl Builder {
format!("{}({})$0", name, function_params_snippet)
}
_ => {
mark::hit!(suppress_arg_snippets);
cov_mark::hit!(suppress_arg_snippets);
format!("{}($0)", name)
}
};

View file

@ -3,7 +3,6 @@
use hir::{HasAttrs, HirDisplay, ModPath, StructKind};
use ide_db::SymbolKind;
use itertools::Itertools;
use test_utils::mark;
use crate::{
item::{CompletionItem, CompletionKind, ImportEdit},
@ -68,7 +67,7 @@ impl<'a> EnumRender<'a> {
.detail(self.detail());
if self.variant_kind == StructKind::Tuple {
mark::hit!(inserts_parens_for_tuple_enums);
cov_mark::hit!(inserts_parens_for_tuple_enums);
let params = Params::Anonymous(self.variant.fields(self.ctx.db()).len());
builder =
builder.add_call_parens(self.ctx.completion, self.short_qualified_name, params);
@ -103,13 +102,11 @@ impl<'a> EnumRender<'a> {
#[cfg(test)]
mod tests {
use test_utils::mark;
use crate::test_utils::check_edit;
#[test]
fn inserts_parens_for_tuple_enums() {
mark::check!(inserts_parens_for_tuple_enums);
cov_mark::check!(inserts_parens_for_tuple_enums);
check_edit(
"Some",
r#"

View file

@ -3,7 +3,6 @@
use hir::{HasSource, HirDisplay, Type};
use ide_db::SymbolKind;
use syntax::ast::Fn;
use test_utils::mark;
use crate::{
item::{CompletionItem, CompletionItemKind, CompletionKind, ImportEdit},
@ -82,7 +81,7 @@ impl<'a> FunctionRender<'a> {
self.func.method_params(self.ctx.db()).unwrap_or_default()
} else {
if let Some(s) = ast_params.self_param() {
mark::hit!(parens_for_method_call_as_assoc_fn);
cov_mark::hit!(parens_for_method_call_as_assoc_fn);
params_pats.push(Some(s.to_string()));
}
self.func.assoc_fn_params(self.ctx.db())
@ -114,8 +113,6 @@ impl<'a> FunctionRender<'a> {
#[cfg(test)]
mod tests {
use test_utils::mark;
use crate::{
test_utils::{check_edit, check_edit_with_config, TEST_CONFIG},
CompletionConfig,
@ -123,7 +120,7 @@ mod tests {
#[test]
fn inserts_parens_for_function_calls() {
mark::check!(inserts_parens_for_function_calls);
cov_mark::check!(inserts_parens_for_function_calls);
check_edit(
"no_args",
r#"
@ -191,7 +188,7 @@ fn bar(s: &S) {
#[test]
fn parens_for_method_call_as_assoc_fn() {
mark::check!(parens_for_method_call_as_assoc_fn);
cov_mark::check!(parens_for_method_call_as_assoc_fn);
check_edit(
"foo",
r#"
@ -213,7 +210,7 @@ fn main() { S::foo(${1:&self})$0 }
#[test]
fn suppress_arg_snippets() {
mark::check!(suppress_arg_snippets);
cov_mark::check!(suppress_arg_snippets);
check_edit_with_config(
CompletionConfig { add_call_argument_snippets: false, ..TEST_CONFIG },
"with_args",

View file

@ -3,7 +3,6 @@
use hir::{Documentation, HasSource};
use ide_db::SymbolKind;
use syntax::display::macro_label;
use test_utils::mark;
use crate::{
item::{CompletionItem, CompletionKind, ImportEdit},
@ -57,7 +56,7 @@ impl<'a> MacroRender<'a> {
}
None if needs_bang => builder.insert_text(self.banged_name()),
_ => {
mark::hit!(dont_insert_macro_call_parens_unncessary);
cov_mark::hit!(dont_insert_macro_call_parens_unncessary);
builder.insert_text(&self.name)
}
};
@ -125,13 +124,11 @@ fn guess_macro_braces(macro_name: &str, docs: &str) -> (&'static str, &'static s
#[cfg(test)]
mod tests {
use test_utils::mark;
use crate::test_utils::check_edit;
#[test]
fn dont_insert_macro_call_parens_unncessary() {
mark::check!(dont_insert_macro_call_parens_unncessary);
cov_mark::check!(dont_insert_macro_call_parens_unncessary);
check_edit(
"frobnicate!",
r#"