3790: Better names for config structs r=matklad a=matklad



bors r+
🤖

Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
This commit is contained in:
bors[bot] 2020-03-31 14:06:03 +00:00 committed by GitHub
commit fa3c7742af
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 142 additions and 128 deletions

View file

@ -22,7 +22,7 @@ use crate::conv::{map_rust_diagnostic_to_lsp, MappedRustDiagnostic};
pub use crate::conv::url_from_path_with_drive_lowercasing;
#[derive(Clone, Debug)]
pub struct CheckOptions {
pub struct CheckConfig {
pub enable: bool,
pub args: Vec<String>,
pub command: String,
@ -42,13 +42,11 @@ pub struct CheckWatcher {
}
impl CheckWatcher {
pub fn new(options: &CheckOptions, workspace_root: PathBuf) -> CheckWatcher {
let options = options.clone();
pub fn new(config: CheckConfig, workspace_root: PathBuf) -> CheckWatcher {
let (task_send, task_recv) = unbounded::<CheckTask>();
let (cmd_send, cmd_recv) = unbounded::<CheckCommand>();
let handle = jod_thread::spawn(move || {
let mut check = CheckWatcherThread::new(options, workspace_root);
let mut check = CheckWatcherThread::new(config, workspace_root);
check.run(&task_send, &cmd_recv);
});
CheckWatcher { task_recv, cmd_send, handle: Some(handle) }
@ -78,14 +76,14 @@ pub enum CheckCommand {
}
struct CheckWatcherThread {
options: CheckOptions,
options: CheckConfig,
workspace_root: PathBuf,
watcher: WatchThread,
last_update_req: Option<Instant>,
}
impl CheckWatcherThread {
fn new(options: CheckOptions, workspace_root: PathBuf) -> CheckWatcherThread {
fn new(options: CheckConfig, workspace_root: PathBuf) -> CheckWatcherThread {
CheckWatcherThread {
options,
workspace_root,
@ -324,7 +322,7 @@ impl WatchThread {
WatchThread { message_recv: never(), _handle: None }
}
fn new(options: &CheckOptions, workspace_root: &Path) -> WatchThread {
fn new(options: &CheckConfig, workspace_root: &Path) -> WatchThread {
let mut args: Vec<String> = vec![
options.command.clone(),
"--workspace".to_string(),

View file

@ -34,15 +34,15 @@ pub use crate::completion::completion_item::{
};
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct CompletionOptions {
pub struct CompletionConfig {
pub enable_postfix_completions: bool,
pub add_call_parenthesis: bool,
pub add_call_argument_snippets: bool,
}
impl Default for CompletionOptions {
impl Default for CompletionConfig {
fn default() -> Self {
CompletionOptions {
CompletionConfig {
enable_postfix_completions: true,
add_call_parenthesis: true,
add_call_argument_snippets: true,
@ -75,9 +75,9 @@ impl Default for CompletionOptions {
pub(crate) fn completions(
db: &RootDatabase,
position: FilePosition,
options: &CompletionOptions,
config: &CompletionConfig,
) -> Option<Completions> {
let ctx = CompletionContext::new(db, position, options)?;
let ctx = CompletionContext::new(db, position, config)?;
let mut acc = Completions::default();

View file

@ -15,7 +15,7 @@ use crate::{
};
pub(super) fn complete_postfix(acc: &mut Completions, ctx: &CompletionContext) {
if !ctx.options.enable_postfix_completions {
if !ctx.config.enable_postfix_completions {
return;
}

View file

@ -11,7 +11,7 @@ use ra_syntax::{
};
use ra_text_edit::AtomTextEdit;
use crate::{completion::CompletionOptions, FilePosition};
use crate::{completion::CompletionConfig, FilePosition};
/// `CompletionContext` is created early during completion to figure out, where
/// exactly is the cursor, syntax-wise.
@ -19,7 +19,7 @@ use crate::{completion::CompletionOptions, FilePosition};
pub(crate) struct CompletionContext<'a> {
pub(super) sema: Semantics<'a, RootDatabase>,
pub(super) db: &'a RootDatabase,
pub(super) options: &'a CompletionOptions,
pub(super) config: &'a CompletionConfig,
pub(super) offset: TextUnit,
/// The token before the cursor, in the original file.
pub(super) original_token: SyntaxToken,
@ -61,7 +61,7 @@ impl<'a> CompletionContext<'a> {
pub(super) fn new(
db: &'a RootDatabase,
position: FilePosition,
options: &'a CompletionOptions,
config: &'a CompletionConfig,
) -> Option<CompletionContext<'a>> {
let sema = Semantics::new(db);
@ -85,7 +85,7 @@ impl<'a> CompletionContext<'a> {
let mut ctx = CompletionContext {
sema,
db,
options,
config,
original_token,
token,
offset: position.offset,

View file

@ -106,7 +106,7 @@ impl Completions {
};
// Add `<>` for generic types
if ctx.is_path_type && !ctx.has_type_args && ctx.options.add_call_parenthesis {
if ctx.is_path_type && !ctx.has_type_args && ctx.config.add_call_parenthesis {
let has_non_default_type_params = match resolution {
ScopeDef::ModuleDef(Adt(it)) => it.has_non_default_type_params(ctx.db),
ScopeDef::ModuleDef(TypeAlias(it)) => it.has_non_default_type_params(ctx.db),
@ -211,14 +211,14 @@ impl Completions {
.detail(function_signature.to_string());
// If not an import, add parenthesis automatically.
if ctx.use_item_syntax.is_none() && !ctx.is_call && ctx.options.add_call_parenthesis {
if ctx.use_item_syntax.is_none() && !ctx.is_call && ctx.config.add_call_parenthesis {
tested_by!(inserts_parens_for_function_calls);
let (snippet, label) = if params.is_empty() || has_self_param && params.len() == 1 {
(format!("{}()$0", name), format!("{}()", name))
} else {
builder = builder.trigger_call_info();
let snippet = if ctx.options.add_call_argument_snippets {
let snippet = if ctx.config.add_call_argument_snippets {
let to_skip = if has_self_param { 1 } else { 0 };
let function_params_snippet = function_signature
.parameter_names
@ -311,7 +311,7 @@ mod tests {
use crate::completion::{
test_utils::{do_completion, do_completion_with_options},
CompletionItem, CompletionKind, CompletionOptions,
CompletionConfig, CompletionItem, CompletionKind,
};
fn do_reference_completion(ra_fixture: &str) -> Vec<CompletionItem> {
@ -320,7 +320,7 @@ mod tests {
fn do_reference_completion_with_options(
ra_fixture: &str,
options: CompletionOptions,
options: CompletionConfig,
) -> Vec<CompletionItem> {
do_completion_with_options(ra_fixture, CompletionKind::Reference, &options)
}
@ -589,7 +589,7 @@ mod tests {
s.f<|>
}
",
CompletionOptions {
CompletionConfig {
add_call_argument_snippets: false,
.. Default::default()
}

View file

@ -1,19 +1,19 @@
//! Runs completion for testing purposes.
use crate::{
completion::{completion_item::CompletionKind, CompletionOptions},
completion::{completion_item::CompletionKind, CompletionConfig},
mock_analysis::{analysis_and_position, single_file_with_position},
CompletionItem,
};
pub(crate) fn do_completion(code: &str, kind: CompletionKind) -> Vec<CompletionItem> {
do_completion_with_options(code, kind, &CompletionOptions::default())
do_completion_with_options(code, kind, &CompletionConfig::default())
}
pub(crate) fn do_completion_with_options(
code: &str,
kind: CompletionKind,
options: &CompletionOptions,
options: &CompletionConfig,
) -> Vec<CompletionItem> {
let (analysis, position) = if code.contains("//-") {
analysis_and_position(code)

View file

@ -11,14 +11,14 @@ use ra_syntax::{
use crate::{FileId, FunctionSignature};
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct InlayHintsOptions {
pub struct InlayHintsConfig {
pub type_hints: bool,
pub parameter_hints: bool,
pub chaining_hints: bool,
pub max_length: Option<usize>,
}
impl Default for InlayHintsOptions {
impl Default for InlayHintsConfig {
fn default() -> Self {
Self { type_hints: true, parameter_hints: true, chaining_hints: true, max_length: None }
}
@ -41,7 +41,7 @@ pub struct InlayHint {
pub(crate) fn inlay_hints(
db: &RootDatabase,
file_id: FileId,
options: &InlayHintsOptions,
config: &InlayHintsConfig,
) -> Vec<InlayHint> {
let _p = profile("inlay_hints");
let sema = Semantics::new(db);
@ -50,14 +50,14 @@ pub(crate) fn inlay_hints(
let mut res = Vec::new();
for node in file.syntax().descendants() {
if let Some(expr) = ast::Expr::cast(node.clone()) {
get_chaining_hints(&mut res, &sema, options, expr);
get_chaining_hints(&mut res, &sema, config, expr);
}
match_ast! {
match node {
ast::CallExpr(it) => { get_param_name_hints(&mut res, &sema, options, ast::Expr::from(it)); },
ast::MethodCallExpr(it) => { get_param_name_hints(&mut res, &sema, options, ast::Expr::from(it)); },
ast::BindPat(it) => { get_bind_pat_hints(&mut res, &sema, options, it); },
ast::CallExpr(it) => { get_param_name_hints(&mut res, &sema, config, ast::Expr::from(it)); },
ast::MethodCallExpr(it) => { get_param_name_hints(&mut res, &sema, config, ast::Expr::from(it)); },
ast::BindPat(it) => { get_bind_pat_hints(&mut res, &sema, config, it); },
_ => (),
}
}
@ -68,10 +68,10 @@ pub(crate) fn inlay_hints(
fn get_chaining_hints(
acc: &mut Vec<InlayHint>,
sema: &Semantics<RootDatabase>,
options: &InlayHintsOptions,
config: &InlayHintsConfig,
expr: ast::Expr,
) -> Option<()> {
if !options.chaining_hints {
if !config.chaining_hints {
return None;
}
@ -95,7 +95,7 @@ fn get_chaining_hints(
let next = tokens.next()?.kind();
let next_next = tokens.next()?.kind();
if next == SyntaxKind::WHITESPACE && next_next == SyntaxKind::DOT {
let label = ty.display_truncated(sema.db, options.max_length).to_string();
let label = ty.display_truncated(sema.db, config.max_length).to_string();
acc.push(InlayHint {
range: expr.syntax().text_range(),
kind: InlayKind::ChainingHint,
@ -108,10 +108,10 @@ fn get_chaining_hints(
fn get_param_name_hints(
acc: &mut Vec<InlayHint>,
sema: &Semantics<RootDatabase>,
options: &InlayHintsOptions,
config: &InlayHintsConfig,
expr: ast::Expr,
) -> Option<()> {
if !options.parameter_hints {
if !config.parameter_hints {
return None;
}
@ -148,10 +148,10 @@ fn get_param_name_hints(
fn get_bind_pat_hints(
acc: &mut Vec<InlayHint>,
sema: &Semantics<RootDatabase>,
options: &InlayHintsOptions,
config: &InlayHintsConfig,
pat: ast::BindPat,
) -> Option<()> {
if !options.type_hints {
if !config.type_hints {
return None;
}
@ -164,7 +164,7 @@ fn get_bind_pat_hints(
acc.push(InlayHint {
range: pat.syntax().text_range(),
kind: InlayKind::TypeHint,
label: ty.display_truncated(sema.db, options.max_length).to_string().into(),
label: ty.display_truncated(sema.db, config.max_length).to_string().into(),
});
Some(())
}
@ -270,7 +270,7 @@ fn get_fn_signature(sema: &Semantics<RootDatabase>, expr: &ast::Expr) -> Option<
#[cfg(test)]
mod tests {
use crate::inlay_hints::InlayHintsOptions;
use crate::inlay_hints::InlayHintsConfig;
use insta::assert_debug_snapshot;
use crate::mock_analysis::single_file;
@ -284,7 +284,7 @@ mod tests {
let _x = foo(4, 4);
}"#,
);
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsOptions{ parameter_hints: true, type_hints: false, chaining_hints: false, max_length: None}).unwrap(), @r###"
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig{ parameter_hints: true, type_hints: false, chaining_hints: false, max_length: None}).unwrap(), @r###"
[
InlayHint {
range: [106; 107),
@ -308,7 +308,7 @@ mod tests {
let _x = foo(4, 4);
}"#,
);
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsOptions{ type_hints: false, parameter_hints: false, chaining_hints: false, max_length: None}).unwrap(), @r###"[]"###);
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig{ type_hints: false, parameter_hints: false, chaining_hints: false, max_length: None}).unwrap(), @r###"[]"###);
}
#[test]
@ -320,7 +320,7 @@ mod tests {
let _x = foo(4, 4);
}"#,
);
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsOptions{ type_hints: true, parameter_hints: false, chaining_hints: false, max_length: None}).unwrap(), @r###"
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig{ type_hints: true, parameter_hints: false, chaining_hints: false, max_length: None}).unwrap(), @r###"
[
InlayHint {
range: [97; 99),
@ -344,7 +344,7 @@ fn main() {
}"#,
);
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsOptions::default()).unwrap(), @r###"
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###"
[
InlayHint {
range: [69; 71),
@ -401,7 +401,7 @@ fn main() {
}"#,
);
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsOptions::default()).unwrap(), @r###"
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###"
[
InlayHint {
range: [193; 197),
@ -481,7 +481,7 @@ fn main() {
}"#,
);
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsOptions::default()).unwrap(), @r###"
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###"
[
InlayHint {
range: [21; 30),
@ -545,7 +545,7 @@ fn main() {
}"#,
);
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsOptions::default()).unwrap(), @r###"
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###"
[
InlayHint {
range: [21; 30),
@ -595,7 +595,7 @@ fn main() {
}"#,
);
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsOptions::default()).unwrap(), @r###"
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###"
[
InlayHint {
range: [188; 192),
@ -690,7 +690,7 @@ fn main() {
}"#,
);
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsOptions::default()).unwrap(), @r###"
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###"
[
InlayHint {
range: [188; 192),
@ -785,7 +785,7 @@ fn main() {
}"#,
);
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsOptions::default()).unwrap(), @r###"
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###"
[
InlayHint {
range: [252; 256),
@ -857,7 +857,7 @@ fn main() {
}"#,
);
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsOptions { max_length: Some(8), ..Default::default() }).unwrap(), @r###"
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig { max_length: Some(8), ..Default::default() }).unwrap(), @r###"
[
InlayHint {
range: [74; 75),
@ -945,7 +945,7 @@ fn main() {
}"#,
);
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsOptions::default()).unwrap(), @r###"
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig::default()).unwrap(), @r###"
[
InlayHint {
range: [798; 809),
@ -1067,7 +1067,7 @@ fn main() {
}"#,
);
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsOptions { max_length: Some(8), ..Default::default() }).unwrap(), @r###"
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig { max_length: Some(8), ..Default::default() }).unwrap(), @r###"
[]
"###
);
@ -1093,7 +1093,7 @@ fn main() {
}"#,
);
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsOptions { max_length: Some(8), ..Default::default() }).unwrap(), @r###"
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig { max_length: Some(8), ..Default::default() }).unwrap(), @r###"
[]
"###
);
@ -1115,7 +1115,7 @@ fn main() {
.into_c();
}"#,
);
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsOptions{ parameter_hints: false, type_hints: false, chaining_hints: true, max_length: None}).unwrap(), @r###"
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig{ parameter_hints: false, type_hints: false, chaining_hints: true, max_length: None}).unwrap(), @r###"
[
InlayHint {
range: [232; 269),
@ -1144,7 +1144,7 @@ fn main() {
let c = A(B(C)).into_b().into_c();
}"#,
);
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsOptions{ parameter_hints: false, type_hints: false, chaining_hints: true, max_length: None}).unwrap(), @r###"[]"###);
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig{ parameter_hints: false, type_hints: false, chaining_hints: true, max_length: None}).unwrap(), @r###"[]"###);
}
#[test]
@ -1162,7 +1162,7 @@ fn main() {
.0;
}"#,
);
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsOptions{ parameter_hints: false, type_hints: false, chaining_hints: true, max_length: None}).unwrap(), @r###"
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig{ parameter_hints: false, type_hints: false, chaining_hints: true, max_length: None}).unwrap(), @r###"
[
InlayHint {
range: [150; 221),
@ -1204,7 +1204,7 @@ fn main() {
.into_c();
}"#,
);
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsOptions{ parameter_hints: false, type_hints: false, chaining_hints: true, max_length: None}).unwrap(), @r###"
assert_debug_snapshot!(analysis.inlay_hints(file_id, &InlayHintsConfig{ parameter_hints: false, type_hints: false, chaining_hints: true, max_length: None}).unwrap(), @r###"
[
InlayHint {
range: [403; 452),

View file

@ -62,13 +62,13 @@ use crate::display::ToNav;
pub use crate::{
assists::{Assist, AssistId},
call_hierarchy::CallItem,
completion::{CompletionItem, CompletionItemKind, CompletionOptions, InsertTextFormat},
completion::{CompletionConfig, CompletionItem, CompletionItemKind, InsertTextFormat},
diagnostics::Severity,
display::{file_structure, FunctionSignature, NavigationTarget, StructureNode},
expand_macro::ExpandedMacro,
folding_ranges::{Fold, FoldKind},
hover::HoverResult,
inlay_hints::{InlayHint, InlayHintsOptions, InlayKind},
inlay_hints::{InlayHint, InlayHintsConfig, InlayKind},
references::{Declaration, Reference, ReferenceAccess, ReferenceKind, ReferenceSearchResult},
runnables::{Runnable, RunnableKind, TestId},
source_change::{FileSystemEdit, SourceChange, SourceFileEdit},
@ -325,9 +325,9 @@ impl Analysis {
pub fn inlay_hints(
&self,
file_id: FileId,
inlay_hint_opts: &InlayHintsOptions,
config: &InlayHintsConfig,
) -> Cancelable<Vec<InlayHint>> {
self.with_db(|db| inlay_hints::inlay_hints(db, file_id, inlay_hint_opts))
self.with_db(|db| inlay_hints::inlay_hints(db, file_id, config))
}
/// Returns the set of folding ranges.
@ -450,9 +450,9 @@ impl Analysis {
pub fn completions(
&self,
position: FilePosition,
options: &CompletionOptions,
config: &CompletionConfig,
) -> Cancelable<Option<Vec<CompletionItem>>> {
self.with_db(|db| completion::completions(db, position, options).map(Into::into))
self.with_db(|db| completion::completions(db, position, config).map(Into::into))
}
/// Computes assists (aka code actions aka intentions) for the given

View file

@ -12,7 +12,7 @@ use ra_db::{
salsa::{Database, Durability},
FileId, SourceDatabaseExt,
};
use ra_ide::{Analysis, AnalysisChange, AnalysisHost, CompletionOptions, FilePosition, LineCol};
use ra_ide::{Analysis, AnalysisChange, AnalysisHost, CompletionConfig, FilePosition, LineCol};
use crate::cli::{load_cargo::load_cargo, Verbosity};
@ -102,7 +102,7 @@ pub fn analysis_bench(
let file_position = FilePosition { file_id, offset };
if is_completion {
let options = CompletionOptions::default();
let options = CompletionConfig::default();
let res = do_work(&mut host, file_id, |analysis| {
analysis.completions(file_position, &options)
});

View file

@ -579,7 +579,7 @@ impl TryConvWith<&WorldSnapshot> for (FileId, RangeInfo<Vec<NavigationTarget>>)
.into_iter()
.map(|nav| (file_id, RangeInfo::new(range, nav)))
.try_conv_with_to_vec(world)?;
if world.options.supports_location_link {
if world.config.supports_location_link {
Ok(links.into())
} else {
let locations: Vec<Location> = links

View file

@ -21,8 +21,8 @@ use lsp_types::{
WorkDoneProgressBegin, WorkDoneProgressCreateParams, WorkDoneProgressEnd,
WorkDoneProgressReport,
};
use ra_cargo_watch::{url_from_path_with_drive_lowercasing, CheckOptions, CheckTask};
use ra_ide::{Canceled, FileId, InlayHintsOptions, LibraryData, SourceRootId};
use ra_cargo_watch::{url_from_path_with_drive_lowercasing, CheckConfig, CheckTask};
use ra_ide::{Canceled, FileId, InlayHintsConfig, LibraryData, SourceRootId};
use ra_prof::profile;
use ra_vfs::{VfsFile, VfsTask, Watch};
use relative_path::RelativePathBuf;
@ -38,7 +38,7 @@ use crate::{
subscriptions::Subscriptions,
},
req,
world::{Options, WorldSnapshot, WorldState},
world::{Config, WorldSnapshot, WorldState},
Result, ServerConfig,
};
use req::ConfigurationParams;
@ -81,11 +81,11 @@ fn get_feature_flags(config: &ServerConfig, connection: &Connection) -> FeatureF
ff
}
fn get_options(
fn get_config(
config: &ServerConfig,
text_document_caps: Option<&TextDocumentClientCapabilities>,
) -> Options {
Options {
) -> Config {
Config {
publish_decorations: config.publish_decorations,
supports_location_link: text_document_caps
.and_then(|it| it.definition)
@ -95,13 +95,13 @@ fn get_options(
.and_then(|it| it.folding_range.as_ref())
.and_then(|it| it.line_folding_only)
.unwrap_or(false),
inlay_hints: InlayHintsOptions {
inlay_hints: InlayHintsConfig {
type_hints: config.inlay_hints_type,
parameter_hints: config.inlay_hints_parameter,
chaining_hints: config.inlay_hints_chaining,
max_length: config.inlay_hints_max_length,
},
cargo_watch: CheckOptions {
check: CheckConfig {
enable: config.cargo_watch_enable,
args: config.cargo_watch_args.clone(),
command: config.cargo_watch_command.clone(),
@ -210,7 +210,7 @@ pub fn main_loop(
config.lru_capacity,
&globs,
Watch(!config.use_client_watching),
get_options(&config, text_document_caps),
get_config(&config, text_document_caps),
feature_flags,
)
};
@ -435,7 +435,7 @@ fn loop_turn(
.to_owned();
world_state.update_configuration(
new_config.lru_capacity,
get_options(&new_config, text_document_caps),
get_config(&new_config, text_document_caps),
get_feature_flags(&new_config, connection),
);
}
@ -498,7 +498,7 @@ fn loop_turn(
update_file_notifications_on_threadpool(
pool,
world_state.snapshot(),
world_state.options.publish_decorations,
world_state.config.publish_decorations,
task_sender.clone(),
loop_state.subscriptions.subscriptions(),
)

View file

@ -19,7 +19,7 @@ use lsp_types::{
TextEdit, WorkspaceEdit,
};
use ra_ide::{
Assist, AssistId, CompletionOptions, FileId, FilePosition, FileRange, Query, RangeInfo,
Assist, AssistId, CompletionConfig, FileId, FilePosition, FileRange, Query, RangeInfo,
Runnable, RunnableKind, SearchScope,
};
use ra_prof::profile;
@ -425,7 +425,7 @@ pub fn handle_completion(
return Ok(None);
}
let options = CompletionOptions {
let config = CompletionConfig {
enable_postfix_completions: world.feature_flags.get("completion.enable-postfix"),
add_call_parenthesis: world.feature_flags.get("completion.insertion.add-call-parenthesis"),
add_call_argument_snippets: world
@ -433,7 +433,7 @@ pub fn handle_completion(
.get("completion.insertion.add-argument-snippets"),
};
let items = match world.analysis().completions(position, &options)? {
let items = match world.analysis().completions(position, &config)? {
None => return Ok(None),
Some(items) => items,
};
@ -457,7 +457,7 @@ pub fn handle_folding_range(
let ctx = FoldConvCtx {
text: &text,
line_index: &line_index,
line_folding_only: world.options.line_folding_only,
line_folding_only: world.config.line_folding_only,
};
let res = Some(folds.into_iter().map_conv_with(&ctx).collect());
Ok(res)
@ -611,7 +611,7 @@ pub fn handle_formatting(
let end_position = TextUnit::of_str(&file).conv_with(&file_line_index);
let mut rustfmt = process::Command::new("rustfmt");
rustfmt.args(&world.options.rustfmt_args);
rustfmt.args(&world.config.rustfmt_args);
if let Some(&crate_id) = crate_ids.first() {
// Assume all crates are in the same edition
let edition = world.analysis().crate_edition(crate_id)?;
@ -815,7 +815,7 @@ pub fn handle_code_lens(
};
lenses.push(lens);
if world.options.vscode_lldb {
if world.config.vscode_lldb {
if r.args[0] == "run" {
r.args[0] = "build".into();
} else {
@ -1028,7 +1028,7 @@ pub fn handle_inlay_hints(
let analysis = world.analysis();
let line_index = analysis.file_line_index(file_id)?;
Ok(analysis
.inlay_hints(file_id, &world.options.inlay_hints)?
.inlay_hints(file_id, &world.config.inlay_hints)?
.into_iter()
.map_conv_with(&line_index)
.collect())

View file

@ -11,9 +11,9 @@ use std::{
use crossbeam_channel::{unbounded, Receiver};
use lsp_types::Url;
use parking_lot::RwLock;
use ra_cargo_watch::{url_from_path_with_drive_lowercasing, CheckOptions, CheckWatcher};
use ra_cargo_watch::{url_from_path_with_drive_lowercasing, CheckConfig, CheckWatcher};
use ra_ide::{
Analysis, AnalysisChange, AnalysisHost, CrateGraph, FileId, InlayHintsOptions, LibraryData,
Analysis, AnalysisChange, AnalysisHost, CrateGraph, FileId, InlayHintsConfig, LibraryData,
SourceRootId,
};
use ra_project_model::{get_rustc_cfg_options, ProcMacroClient, ProjectWorkspace};
@ -31,7 +31,7 @@ use crate::{
use ra_db::ExternSourceId;
use rustc_hash::{FxHashMap, FxHashSet};
fn create_watcher(workspaces: &[ProjectWorkspace], options: &Options) -> Option<CheckWatcher> {
fn create_watcher(workspaces: &[ProjectWorkspace], config: &Config) -> Option<CheckWatcher> {
// FIXME: Figure out the multi-workspace situation
workspaces
.iter()
@ -41,7 +41,7 @@ fn create_watcher(workspaces: &[ProjectWorkspace], options: &Options) -> Option<
})
.map(|cargo| {
let cargo_project_root = cargo.workspace_root().to_path_buf();
Some(CheckWatcher::new(&options.cargo_watch, cargo_project_root))
Some(CheckWatcher::new(config.check.clone(), cargo_project_root))
})
.unwrap_or_else(|| {
log::warn!("Cargo check watching only supported for cargo workspaces, disabling");
@ -50,13 +50,13 @@ fn create_watcher(workspaces: &[ProjectWorkspace], options: &Options) -> Option<
}
#[derive(Debug, Clone)]
pub struct Options {
pub struct Config {
pub publish_decorations: bool,
pub supports_location_link: bool,
pub line_folding_only: bool,
pub inlay_hints: InlayHintsOptions,
pub inlay_hints: InlayHintsConfig,
pub rustfmt_args: Vec<String>,
pub cargo_watch: CheckOptions,
pub check: CheckConfig,
pub vscode_lldb: bool,
}
@ -67,7 +67,7 @@ pub struct Options {
/// incremental salsa database.
#[derive(Debug)]
pub struct WorldState {
pub options: Options,
pub config: Config,
pub feature_flags: Arc<FeatureFlags>,
pub roots: Vec<PathBuf>,
pub workspaces: Arc<Vec<ProjectWorkspace>>,
@ -81,7 +81,7 @@ pub struct WorldState {
/// An immutable snapshot of the world's state at a point in time.
pub struct WorldSnapshot {
pub options: Options,
pub config: Config,
pub feature_flags: Arc<FeatureFlags>,
pub workspaces: Arc<Vec<ProjectWorkspace>>,
pub analysis: Analysis,
@ -97,7 +97,7 @@ impl WorldState {
lru_capacity: Option<usize>,
exclude_globs: &[Glob],
watch: Watch,
options: Options,
config: Config,
feature_flags: FeatureFlags,
) -> WorldState {
let mut change = AnalysisChange::new();
@ -185,12 +185,12 @@ impl WorldState {
});
change.set_crate_graph(crate_graph);
let check_watcher = create_watcher(&workspaces, &options);
let check_watcher = create_watcher(&workspaces, &config);
let mut analysis_host = AnalysisHost::new(lru_capacity);
analysis_host.apply_change(change);
WorldState {
options,
config: config,
feature_flags: Arc::new(feature_flags),
roots: folder_roots,
workspaces: Arc::new(workspaces),
@ -206,13 +206,13 @@ impl WorldState {
pub fn update_configuration(
&mut self,
lru_capacity: Option<usize>,
options: Options,
config: Config,
feature_flags: FeatureFlags,
) {
self.feature_flags = Arc::new(feature_flags);
self.analysis_host.update_lru_capacity(lru_capacity);
self.check_watcher = create_watcher(&self.workspaces, &options);
self.options = options;
self.check_watcher = create_watcher(&self.workspaces, &config);
self.config = config;
}
/// Returns a vec of libraries
@ -268,7 +268,7 @@ impl WorldState {
pub fn snapshot(&self) -> WorldSnapshot {
WorldSnapshot {
options: self.options.clone(),
config: self.config.clone(),
feature_flags: Arc::clone(&self.feature_flags),
workspaces: Arc::clone(&self.workspaces),
analysis: self.analysis_host.analysis(),

View file

@ -261,41 +261,57 @@
"default": [],
"description": "Paths to exclude from analysis"
},
"rust-analyzer.rustfmtArgs": {
"type": "array",
"items": {
"type": "string"
},
"default": [],
"description": "Additional arguments to rustfmt"
},
"rust-analyzer.useClientWatching": {
"type": "boolean",
"default": true,
"description": "client provided file watching instead of notify watching."
},
"rust-analyzer.cargo-watch.enable": {
"type": "boolean",
"default": true,
"markdownDescription": "Run specified `cargo-watch` command for diagnostics on save"
},
"rust-analyzer.cargo-watch.arguments": {
"rust-analyzer.rustfmt.extraArgs": {
"type": "array",
"items": {
"type": "string"
},
"markdownDescription": "`cargo-watch` arguments. (e.g: `--features=\"shumway,pdf\"` will run as `cargo watch -x \"check --features=\"shumway,pdf\"\"` )",
"default": [],
"markdownDescription": "Additional `cargo fmt` arguments"
},
"rust-analyzer.rustfmt.overrideCommand": {
"type": "array",
"items": {
"type": "string"
},
"default": [],
"markdownDescription": "Advanced option, fully override `cargo fmt` command line"
},
"rust-analyzer.checkOnSave.enable": {
"type": "boolean",
"default": true,
"markdownDescription": "Run `cargo check` command for diagnostics on save"
},
"rust-analyzer.checkOnSave.cargoCommand": {
"type": "string",
"default": "check",
"markdownDescription": "Cargo command to run on save"
},
"rust-analyzer.checkOnSave.allTargets": {
"type": "boolean",
"default": true,
"markdownDescription": "Check all targets and tests (will be passed as `--all-targets`)"
},
"rust-analyzer.checkOnSave.extraArgs": {
"type": "array",
"items": {
"type": "string"
},
"markdownDescription": "Additional `cargo check` arguments",
"default": []
},
"rust-analyzer.cargo-watch.command": {
"type": "string",
"markdownDescription": "`cargo-watch` command. (e.g: `clippy` will run as `cargo watch -x clippy` )",
"default": "check"
},
"rust-analyzer.cargo-watch.allTargets": {
"type": "boolean",
"markdownDescription": "Check all targets and tests (will be passed as `--all-targets`)",
"default": true
"rust-analyzer.checkOnSave.overrideCommand": {
"type": "array",
"items": {
"type": "string"
},
"default": [],
"markdownDescription": "Advanced option, fully override `cargo check` command line (this must include at least `--message-format=json`)"
},
"rust-analyzer.trace.server": {
"type": "string",