From f8a056117898c56d34d1758455bc54df50e2e426 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 6 Jan 2021 20:43:46 +0300 Subject: Align config's API with usage The config now is mostly immutable, optimize for that. --- crates/completion/src/completions/postfix.rs | 5 ++--- .../src/completions/postfix/format_like.rs | 7 +++--- crates/completion/src/completions/snippet.rs | 6 +++-- .../completion/src/completions/unqualified_path.rs | 18 +++++++-------- crates/completion/src/config.rs | 26 +--------------------- crates/completion/src/item.rs | 4 +--- crates/completion/src/lib.rs | 7 +++--- crates/completion/src/render.rs | 12 +++++----- crates/completion/src/render/function.rs | 4 ++-- crates/completion/src/render/pattern.rs | 6 ++--- crates/completion/src/test_utils.rs | 22 +++++++++++++----- 11 files changed, 49 insertions(+), 68 deletions(-) (limited to 'crates/completion/src') diff --git a/crates/completion/src/completions/postfix.rs b/crates/completion/src/completions/postfix.rs index 3883d6d21..4888f518a 100644 --- a/crates/completion/src/completions/postfix.rs +++ b/crates/completion/src/completions/postfix.rs @@ -2,7 +2,7 @@ mod format_like; -use ide_db::ty_filter::TryEnum; +use ide_db::{helpers::SnippetCap, ty_filter::TryEnum}; use syntax::{ ast::{self, AstNode, AstToken}, SyntaxKind::{BLOCK_EXPR, EXPR_STMT}, @@ -10,9 +10,8 @@ use syntax::{ }; use text_edit::TextEdit; -use self::format_like::add_format_like_completions; use crate::{ - config::SnippetCap, + completions::postfix::format_like::add_format_like_completions, context::CompletionContext, item::{Builder, CompletionKind}, CompletionItem, CompletionItemKind, Completions, diff --git a/crates/completion/src/completions/postfix/format_like.rs b/crates/completion/src/completions/postfix/format_like.rs index def4b13fb..3afc63021 100644 --- a/crates/completion/src/completions/postfix/format_like.rs +++ b/crates/completion/src/completions/postfix/format_like.rs @@ -14,12 +14,11 @@ // + `logw` -> `log::warn!(...)` // + `loge` -> `log::error!(...)` -use crate::{ - completions::postfix::postfix_snippet, config::SnippetCap, context::CompletionContext, - Completions, -}; +use ide_db::helpers::SnippetCap; use syntax::ast::{self, AstToken}; +use crate::{completions::postfix::postfix_snippet, context::CompletionContext, Completions}; + /// Mapping ("postfix completion item" => "macro to use") static KINDS: &[(&str, &str)] = &[ ("format", "format!"), diff --git a/crates/completion/src/completions/snippet.rs b/crates/completion/src/completions/snippet.rs index 842590130..b5e704696 100644 --- a/crates/completion/src/completions/snippet.rs +++ b/crates/completion/src/completions/snippet.rs @@ -1,8 +1,10 @@ //! This file provides snippet completions, like `pd` => `eprintln!(...)`. +use ide_db::helpers::SnippetCap; + use crate::{ - config::SnippetCap, item::Builder, CompletionContext, CompletionItem, CompletionItemKind, - CompletionKind, Completions, + item::Builder, CompletionContext, CompletionItem, CompletionItemKind, CompletionKind, + Completions, }; fn snippet(ctx: &CompletionContext, cap: SnippetCap, label: &str, snippet: &str) -> Builder { diff --git a/crates/completion/src/completions/unqualified_path.rs b/crates/completion/src/completions/unqualified_path.rs index 896f167ff..2da21b5c2 100644 --- a/crates/completion/src/completions/unqualified_path.rs +++ b/crates/completion/src/completions/unqualified_path.rs @@ -192,12 +192,14 @@ mod tests { use test_utils::mark; use crate::{ - test_utils::{check_edit, check_edit_with_config, completion_list_with_config}, + test_utils::{ + check_edit, check_edit_with_config, completion_list_with_config, TEST_CONFIG, + }, CompletionConfig, CompletionKind, }; fn check(ra_fixture: &str, expect: Expect) { - check_with_config(CompletionConfig::default(), ra_fixture, expect); + check_with_config(TEST_CONFIG, ra_fixture, expect); } fn check_with_config(config: CompletionConfig, ra_fixture: &str, expect: Expect) { @@ -205,10 +207,6 @@ mod tests { expect.assert_eq(&actual) } - fn fuzzy_completion_config() -> CompletionConfig { - CompletionConfig::default() - } - #[test] fn self_fulfilling_completion() { mark::check!(self_fulfilling_completion); @@ -832,7 +830,7 @@ impl My<|> #[test] fn function_fuzzy_completion() { check_edit_with_config( - fuzzy_completion_config(), + TEST_CONFIG, "stdin", r#" //- /lib.rs crate:dep @@ -858,7 +856,7 @@ fn main() { #[test] fn macro_fuzzy_completion() { check_edit_with_config( - fuzzy_completion_config(), + TEST_CONFIG, "macro_with_curlies!", r#" //- /lib.rs crate:dep @@ -886,7 +884,7 @@ fn main() { #[test] fn struct_fuzzy_completion() { check_edit_with_config( - fuzzy_completion_config(), + TEST_CONFIG, "ThirdStruct", r#" //- /lib.rs crate:dep @@ -917,7 +915,7 @@ fn main() { fn fuzzy_completions_come_in_specific_order() { mark::check!(certain_fuzzy_order_test); check_with_config( - fuzzy_completion_config(), + TEST_CONFIG, r#" //- /lib.rs crate:dep pub struct FirstStruct; diff --git a/crates/completion/src/config.rs b/crates/completion/src/config.rs index 9f82b0346..b4439b7d1 100644 --- a/crates/completion/src/config.rs +++ b/crates/completion/src/config.rs @@ -4,7 +4,7 @@ //! module, and we use to statically check that we only produce snippet //! completions if we are allowed to. -use ide_db::helpers::insert_use::MergeBehavior; +use ide_db::helpers::{insert_use::MergeBehavior, SnippetCap}; #[derive(Clone, Debug, PartialEq, Eq)] pub struct CompletionConfig { @@ -15,27 +15,3 @@ pub struct CompletionConfig { pub snippet_cap: Option, pub merge: Option, } - -impl CompletionConfig { - pub fn allow_snippets(&mut self, yes: bool) { - self.snippet_cap = if yes { Some(SnippetCap { _private: () }) } else { None } - } -} - -#[derive(Clone, Copy, Debug, PartialEq, Eq)] -pub struct SnippetCap { - _private: (), -} - -impl Default for CompletionConfig { - fn default() -> Self { - CompletionConfig { - enable_postfix_completions: true, - enable_autoimport_completions: true, - add_call_parenthesis: true, - add_call_argument_snippets: true, - snippet_cap: Some(SnippetCap { _private: () }), - merge: Some(MergeBehavior::Full), - } - } -} diff --git a/crates/completion/src/item.rs b/crates/completion/src/item.rs index 65f8353e7..7087fae37 100644 --- a/crates/completion/src/item.rs +++ b/crates/completion/src/item.rs @@ -5,13 +5,11 @@ use std::fmt; use hir::{Documentation, ModPath, Mutability}; use ide_db::helpers::{ insert_use::{self, ImportScope, MergeBehavior}, - mod_path_to_ast, + mod_path_to_ast, SnippetCap, }; use syntax::{algo, TextRange}; use text_edit::TextEdit; -use crate::config::SnippetCap; - /// `CompletionItem` describes a single completion variant in the editor pop-up. /// It is basically a POD with various properties. To construct a /// `CompletionItem`, use `new` method and the `Builder` struct. diff --git a/crates/completion/src/lib.rs b/crates/completion/src/lib.rs index 366aced71..3c7d5a46c 100644 --- a/crates/completion/src/lib.rs +++ b/crates/completion/src/lib.rs @@ -158,8 +158,7 @@ pub fn resolve_completion_edits( #[cfg(test)] mod tests { - use crate::config::CompletionConfig; - use crate::test_utils; + use crate::test_utils::{self, TEST_CONFIG}; struct DetailAndDocumentation<'a> { detail: &'a str, @@ -168,7 +167,7 @@ mod tests { fn check_detail_and_documentation(ra_fixture: &str, expected: DetailAndDocumentation) { let (db, position) = test_utils::position(ra_fixture); - let config = CompletionConfig::default(); + let config = TEST_CONFIG; let completions: Vec<_> = crate::completions(&db, &config, position).unwrap().into(); for item in completions { if item.detail() == Some(expected.detail) { @@ -183,7 +182,7 @@ mod tests { fn check_no_completion(ra_fixture: &str) { let (db, position) = test_utils::position(ra_fixture); - let config = CompletionConfig::default(); + let config = TEST_CONFIG; let completions: Option> = crate::completions(&db, &config, position) .and_then(|completions| { diff --git a/crates/completion/src/render.rs b/crates/completion/src/render.rs index ac0b2a513..7554c1565 100644 --- a/crates/completion/src/render.rs +++ b/crates/completion/src/render.rs @@ -11,13 +11,13 @@ pub(crate) mod type_alias; mod builder_ext; use hir::{Documentation, HasAttrs, HirDisplay, Mutability, ScopeDef, Type}; -use ide_db::RootDatabase; +use ide_db::{helpers::SnippetCap, RootDatabase}; use syntax::TextRange; use test_utils::mark; use crate::{ - config::SnippetCap, item::ImportEdit, CompletionContext, CompletionItem, CompletionItemKind, - CompletionKind, CompletionScore, + item::ImportEdit, CompletionContext, CompletionItem, CompletionItemKind, CompletionKind, + CompletionScore, }; use crate::render::{enum_variant::render_variant, function::render_fn, macro_::render_macro}; @@ -320,8 +320,8 @@ mod tests { use test_utils::mark; use crate::{ - test_utils::{check_edit, do_completion, get_all_items}, - CompletionConfig, CompletionKind, CompletionScore, + test_utils::{check_edit, do_completion, get_all_items, TEST_CONFIG}, + CompletionKind, CompletionScore, }; fn check(ra_fixture: &str, expect: Expect) { @@ -338,7 +338,7 @@ mod tests { } } - let mut completions = get_all_items(CompletionConfig::default(), ra_fixture); + let mut completions = get_all_items(TEST_CONFIG, ra_fixture); completions.sort_by_key(|it| (Reverse(it.score()), it.label().to_string())); let actual = completions .into_iter() diff --git a/crates/completion/src/render/function.rs b/crates/completion/src/render/function.rs index 081be14f4..7b2f62b4b 100644 --- a/crates/completion/src/render/function.rs +++ b/crates/completion/src/render/function.rs @@ -113,7 +113,7 @@ mod tests { use test_utils::mark; use crate::{ - test_utils::{check_edit, check_edit_with_config}, + test_utils::{check_edit, check_edit_with_config, TEST_CONFIG}, CompletionConfig, }; @@ -211,7 +211,7 @@ fn main() { S::foo(${1:&self})$0 } fn suppress_arg_snippets() { mark::check!(suppress_arg_snippets); check_edit_with_config( - CompletionConfig { add_call_argument_snippets: false, ..CompletionConfig::default() }, + CompletionConfig { add_call_argument_snippets: false, ..TEST_CONFIG }, "with_args", r#" fn with_args(x: i32, y: String) {} diff --git a/crates/completion/src/render/pattern.rs b/crates/completion/src/render/pattern.rs index a3b6a3cac..61d8a17e5 100644 --- a/crates/completion/src/render/pattern.rs +++ b/crates/completion/src/render/pattern.rs @@ -1,12 +1,10 @@ //! Renderer for patterns. use hir::{db::HirDatabase, HasAttrs, HasVisibility, Name, StructKind}; +use ide_db::helpers::SnippetCap; use itertools::Itertools; -use crate::{ - config::SnippetCap, item::CompletionKind, render::RenderContext, CompletionItem, - CompletionItemKind, -}; +use crate::{item::CompletionKind, render::RenderContext, CompletionItem, CompletionItemKind}; fn visible_fields( ctx: &RenderContext<'_>, diff --git a/crates/completion/src/test_utils.rs b/crates/completion/src/test_utils.rs index eb0c16f52..b5e296777 100644 --- a/crates/completion/src/test_utils.rs +++ b/crates/completion/src/test_utils.rs @@ -1,8 +1,11 @@ //! Runs completion for testing purposes. use hir::Semantics; -use ide_db::base_db::{fixture::ChangeFixture, FileLoader, FilePosition}; -use ide_db::RootDatabase; +use ide_db::{ + base_db::{fixture::ChangeFixture, FileLoader, FilePosition}, + helpers::{insert_use::MergeBehavior, SnippetCap}, + RootDatabase, +}; use itertools::Itertools; use stdx::{format_to, trim_indent}; use syntax::{AstNode, NodeOrToken, SyntaxElement}; @@ -10,6 +13,15 @@ use test_utils::{assert_eq_text, RangeOrOffset}; use crate::{item::CompletionKind, CompletionConfig, CompletionItem}; +pub(crate) const TEST_CONFIG: CompletionConfig = CompletionConfig { + enable_postfix_completions: true, + enable_autoimport_completions: true, + add_call_parenthesis: true, + add_call_argument_snippets: true, + snippet_cap: SnippetCap::new(true), + merge: Some(MergeBehavior::Full), +}; + /// Creates analysis from a multi-file fixture, returns positions marked with <|>. pub(crate) fn position(ra_fixture: &str) -> (RootDatabase, FilePosition) { let change_fixture = ChangeFixture::parse(ra_fixture); @@ -24,7 +36,7 @@ pub(crate) fn position(ra_fixture: &str) -> (RootDatabase, FilePosition) { } pub(crate) fn do_completion(code: &str, kind: CompletionKind) -> Vec { - do_completion_with_config(CompletionConfig::default(), code, kind) + do_completion_with_config(TEST_CONFIG, code, kind) } pub(crate) fn do_completion_with_config( @@ -39,7 +51,7 @@ pub(crate) fn do_completion_with_config( } pub(crate) fn completion_list(code: &str, kind: CompletionKind) -> String { - completion_list_with_config(CompletionConfig::default(), code, kind) + completion_list_with_config(TEST_CONFIG, code, kind) } pub(crate) fn completion_list_with_config( @@ -76,7 +88,7 @@ fn monospace_width(s: &str) -> usize { } pub(crate) fn check_edit(what: &str, ra_fixture_before: &str, ra_fixture_after: &str) { - check_edit_with_config(CompletionConfig::default(), what, ra_fixture_before, ra_fixture_after) + check_edit_with_config(TEST_CONFIG, what, ra_fixture_before, ra_fixture_after) } pub(crate) fn check_edit_with_config( -- cgit v1.2.3