aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock39
-rw-r--r--crates/ra_assists/src/handlers/raw_string.rs2
-rw-r--r--crates/ra_assists/src/handlers/replace_qualified_name_with_use.rs2
-rw-r--r--crates/ra_hir_ty/src/lower.rs2
-rw-r--r--crates/ra_ide/src/completion/completion_context.rs4
-rw-r--r--crates/ra_ide/src/diagnostics.rs2
-rw-r--r--crates/ra_ide/src/inlay_hints.rs2
-rw-r--r--crates/ra_project_model/src/project_json.rs60
-rw-r--r--crates/rust-analyzer/src/reload.rs2
-rw-r--r--crates/vfs/src/loader.rs14
10 files changed, 69 insertions, 60 deletions
diff --git a/Cargo.lock b/Cargo.lock
index c58c3035c..1700fcd97 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -26,15 +26,6 @@ dependencies = [
26 26
27[[package]] 27[[package]]
28name = "ansi_term" 28name = "ansi_term"
29version = "0.11.0"
30source = "registry+https://github.com/rust-lang/crates.io-index"
31checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
32dependencies = [
33 "winapi 0.3.9",
34]
35
36[[package]]
37name = "ansi_term"
38version = "0.12.1" 29version = "0.12.1"
39source = "registry+https://github.com/rust-lang/crates.io-index" 30source = "registry+https://github.com/rust-lang/crates.io-index"
40checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" 31checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
@@ -111,9 +102,9 @@ checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de"
111 102
112[[package]] 103[[package]]
113name = "cargo_metadata" 104name = "cargo_metadata"
114version = "0.10.0" 105version = "0.10.1"
115source = "registry+https://github.com/rust-lang/crates.io-index" 106source = "registry+https://github.com/rust-lang/crates.io-index"
116checksum = "b8de60b887edf6d74370fc8eb177040da4847d971d6234c7b13a6da324ef0caf" 107checksum = "052dbdd9db69a339d5fa9ac87bfe2e1319f709119f0345988a597af82bb1011c"
117dependencies = [ 108dependencies = [
118 "semver", 109 "semver",
119 "serde", 110 "serde",
@@ -470,6 +461,15 @@ dependencies = [
470] 461]
471 462
472[[package]] 463[[package]]
464name = "hashbrown"
465version = "0.8.1"
466source = "registry+https://github.com/rust-lang/crates.io-index"
467checksum = "34f595585f103464d8d2f6e9864682d74c1601fed5e07d62b1c9058dba8246fb"
468dependencies = [
469 "autocfg",
470]
471
472[[package]]
473name = "heck" 473name = "heck"
474version = "0.3.1" 474version = "0.3.1"
475source = "registry+https://github.com/rust-lang/crates.io-index" 475source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -509,11 +509,12 @@ dependencies = [
509 509
510[[package]] 510[[package]]
511name = "indexmap" 511name = "indexmap"
512version = "1.4.0" 512version = "1.5.0"
513source = "registry+https://github.com/rust-lang/crates.io-index" 513source = "registry+https://github.com/rust-lang/crates.io-index"
514checksum = "c398b2b113b55809ceb9ee3e753fcbac793f1956663f3c36549c1346015c2afe" 514checksum = "5b88cd59ee5f71fea89a62248fc8f387d44400cefe05ef548466d61ced9029a7"
515dependencies = [ 515dependencies = [
516 "autocfg", 516 "autocfg",
517 "hashbrown",
517] 518]
518 519
519[[package]] 520[[package]]
@@ -1602,9 +1603,9 @@ dependencies = [
1602 1603
1603[[package]] 1604[[package]]
1604name = "semver" 1605name = "semver"
1605version = "0.9.0" 1606version = "0.10.0"
1606source = "registry+https://github.com/rust-lang/crates.io-index" 1607source = "registry+https://github.com/rust-lang/crates.io-index"
1607checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" 1608checksum = "394cec28fa623e00903caf7ba4fa6fb9a0e260280bb8cdbbba029611108a0190"
1608dependencies = [ 1609dependencies = [
1609 "semver-parser", 1610 "semver-parser",
1610 "serde", 1611 "serde",
@@ -1886,11 +1887,11 @@ dependencies = [
1886 1887
1887[[package]] 1888[[package]]
1888name = "tracing-subscriber" 1889name = "tracing-subscriber"
1889version = "0.2.7" 1890version = "0.2.8"
1890source = "registry+https://github.com/rust-lang/crates.io-index" 1891source = "registry+https://github.com/rust-lang/crates.io-index"
1891checksum = "c72c8cf3ec4ed69fef614d011a5ae4274537a8a8c59133558029bd731eb71659" 1892checksum = "cafe899b943f5433c6cab468d75a17ea92948fe9fe60b00f41e13d5e0d4fd054"
1892dependencies = [ 1893dependencies = [
1893 "ansi_term 0.11.0", 1894 "ansi_term",
1894 "chrono", 1895 "chrono",
1895 "lazy_static", 1896 "lazy_static",
1896 "matchers", 1897 "matchers",
@@ -1910,7 +1911,7 @@ version = "0.1.4"
1910source = "registry+https://github.com/rust-lang/crates.io-index" 1911source = "registry+https://github.com/rust-lang/crates.io-index"
1911checksum = "37ee7f0f53ed2093971a698db799ef56a2dfd89b32e3aeb5165f0e637a02be04" 1912checksum = "37ee7f0f53ed2093971a698db799ef56a2dfd89b32e3aeb5165f0e637a02be04"
1912dependencies = [ 1913dependencies = [
1913 "ansi_term 0.12.1", 1914 "ansi_term",
1914 "atty", 1915 "atty",
1915 "chrono", 1916 "chrono",
1916 "termcolor", 1917 "termcolor",
diff --git a/crates/ra_assists/src/handlers/raw_string.rs b/crates/ra_assists/src/handlers/raw_string.rs
index ba1dcb610..4e8a0c2db 100644
--- a/crates/ra_assists/src/handlers/raw_string.rs
+++ b/crates/ra_assists/src/handlers/raw_string.rs
@@ -131,7 +131,7 @@ pub(crate) fn remove_hash(acc: &mut Assists, ctx: &AssistContext) -> Option<()>
131 let token = ctx.find_token_at_offset(RAW_STRING).and_then(ast::RawString::cast)?; 131 let token = ctx.find_token_at_offset(RAW_STRING).and_then(ast::RawString::cast)?;
132 132
133 let text = token.text().as_str(); 133 let text = token.text().as_str();
134 if !text.starts_with("r#") && text.ends_with("#") { 134 if !text.starts_with("r#") && text.ends_with('#') {
135 return None; 135 return None;
136 } 136 }
137 137
diff --git a/crates/ra_assists/src/handlers/replace_qualified_name_with_use.rs b/crates/ra_assists/src/handlers/replace_qualified_name_with_use.rs
index dfd314abf..3d51faa54 100644
--- a/crates/ra_assists/src/handlers/replace_qualified_name_with_use.rs
+++ b/crates/ra_assists/src/handlers/replace_qualified_name_with_use.rs
@@ -106,7 +106,7 @@ fn maybe_replace_path(
106 path: ast::Path, 106 path: ast::Path,
107 target: ast::Path, 107 target: ast::Path,
108) -> Option<()> { 108) -> Option<()> {
109 if !path_eq(path.clone(), target.clone()) { 109 if !path_eq(path.clone(), target) {
110 return None; 110 return None;
111 } 111 }
112 112
diff --git a/crates/ra_hir_ty/src/lower.rs b/crates/ra_hir_ty/src/lower.rs
index f274579ea..1eacc6f95 100644
--- a/crates/ra_hir_ty/src/lower.rs
+++ b/crates/ra_hir_ty/src/lower.rs
@@ -341,7 +341,7 @@ impl Ty {
341 let segment = remaining_segments.first().unwrap(); 341 let segment = remaining_segments.first().unwrap();
342 let found = associated_type_by_name_including_super_traits( 342 let found = associated_type_by_name_including_super_traits(
343 ctx.db, 343 ctx.db,
344 trait_ref.clone(), 344 trait_ref,
345 &segment.name, 345 &segment.name,
346 ); 346 );
347 match found { 347 match found {
diff --git a/crates/ra_ide/src/completion/completion_context.rs b/crates/ra_ide/src/completion/completion_context.rs
index 9e82d6854..c84d43d77 100644
--- a/crates/ra_ide/src/completion/completion_context.rs
+++ b/crates/ra_ide/src/completion/completion_context.rs
@@ -215,7 +215,7 @@ impl<'a> CompletionContext<'a> {
215 215
216 fn fill_keyword_patterns(&mut self, file_with_fake_ident: &SyntaxNode, offset: TextSize) { 216 fn fill_keyword_patterns(&mut self, file_with_fake_ident: &SyntaxNode, offset: TextSize) {
217 let fake_ident_token = file_with_fake_ident.token_at_offset(offset).right_biased().unwrap(); 217 let fake_ident_token = file_with_fake_ident.token_at_offset(offset).right_biased().unwrap();
218 let syntax_element = NodeOrToken::Token(fake_ident_token.clone()); 218 let syntax_element = NodeOrToken::Token(fake_ident_token);
219 self.block_expr_parent = has_block_expr_parent(syntax_element.clone()); 219 self.block_expr_parent = has_block_expr_parent(syntax_element.clone());
220 self.unsafe_is_prev = unsafe_is_prev(syntax_element.clone()); 220 self.unsafe_is_prev = unsafe_is_prev(syntax_element.clone());
221 self.if_is_prev = if_is_prev(syntax_element.clone()); 221 self.if_is_prev = if_is_prev(syntax_element.clone());
@@ -228,7 +228,7 @@ impl<'a> CompletionContext<'a> {
228 self.trait_as_prev_sibling = has_trait_as_prev_sibling(syntax_element.clone()); 228 self.trait_as_prev_sibling = has_trait_as_prev_sibling(syntax_element.clone());
229 self.is_match_arm = is_match_arm(syntax_element.clone()); 229 self.is_match_arm = is_match_arm(syntax_element.clone());
230 self.has_item_list_or_source_file_parent = 230 self.has_item_list_or_source_file_parent =
231 has_item_list_or_source_file_parent(syntax_element.clone()); 231 has_item_list_or_source_file_parent(syntax_element);
232 } 232 }
233 233
234 fn fill( 234 fn fill(
diff --git a/crates/ra_ide/src/diagnostics.rs b/crates/ra_ide/src/diagnostics.rs
index fe75f4b2c..e029af0dc 100644
--- a/crates/ra_ide/src/diagnostics.rs
+++ b/crates/ra_ide/src/diagnostics.rs
@@ -183,7 +183,7 @@ fn missing_struct_field_fix(
183 } 183 }
184 new_field = format!("\n{}{}", indent, new_field); 184 new_field = format!("\n{}{}", indent, new_field);
185 185
186 let needs_comma = !last_field_syntax.to_string().ends_with(","); 186 let needs_comma = !last_field_syntax.to_string().ends_with(',');
187 if needs_comma { 187 if needs_comma {
188 new_field = format!(",{}", new_field); 188 new_field = format!(",{}", new_field);
189 } 189 }
diff --git a/crates/ra_ide/src/inlay_hints.rs b/crates/ra_ide/src/inlay_hints.rs
index 43a5e29b5..09883ab4d 100644
--- a/crates/ra_ide/src/inlay_hints.rs
+++ b/crates/ra_ide/src/inlay_hints.rs
@@ -171,7 +171,7 @@ fn get_param_name_hints(
171 .map(|(param_name, arg)| InlayHint { 171 .map(|(param_name, arg)| InlayHint {
172 range: arg.syntax().text_range(), 172 range: arg.syntax().text_range(),
173 kind: InlayKind::ParameterHint, 173 kind: InlayKind::ParameterHint,
174 label: param_name.to_string().into(), 174 label: param_name.into(),
175 }); 175 });
176 176
177 acc.extend(hints); 177 acc.extend(hints);
diff --git a/crates/ra_project_model/src/project_json.rs b/crates/ra_project_model/src/project_json.rs
index b96227949..778cc84ef 100644
--- a/crates/ra_project_model/src/project_json.rs
+++ b/crates/ra_project_model/src/project_json.rs
@@ -34,6 +34,7 @@ pub struct Crate {
34 pub(crate) target: Option<String>, 34 pub(crate) target: Option<String>,
35 pub(crate) out_dir: Option<AbsPathBuf>, 35 pub(crate) out_dir: Option<AbsPathBuf>,
36 pub(crate) proc_macro_dylib_path: Option<AbsPathBuf>, 36 pub(crate) proc_macro_dylib_path: Option<AbsPathBuf>,
37 pub(crate) is_workspace_member: bool,
37} 38}
38 39
39impl ProjectJson { 40impl ProjectJson {
@@ -43,32 +44,42 @@ impl ProjectJson {
43 crates: data 44 crates: data
44 .crates 45 .crates
45 .into_iter() 46 .into_iter()
46 .map(|crate_data| Crate { 47 .map(|crate_data| {
47 root_module: base.join(crate_data.root_module), 48 let is_workspace_member = crate_data.is_workspace_member.unwrap_or_else(|| {
48 edition: crate_data.edition.into(), 49 crate_data.root_module.is_relative()
49 deps: crate_data 50 && !crate_data.root_module.starts_with("..")
50 .deps 51 || crate_data.root_module.starts_with(base)
51 .into_iter() 52 });
52 .map(|dep_data| Dependency { 53 Crate {
53 crate_id: CrateId(dep_data.krate as u32), 54 root_module: base.join(crate_data.root_module),
54 name: dep_data.name, 55 edition: crate_data.edition.into(),
55 }) 56 deps: crate_data
56 .collect::<Vec<_>>(), 57 .deps
57 cfg: { 58 .into_iter()
58 let mut cfg = CfgOptions::default(); 59 .map(|dep_data| Dependency {
59 for entry in &crate_data.cfg { 60 crate_id: CrateId(dep_data.krate as u32),
60 match split_delim(entry, '=') { 61 name: dep_data.name,
61 Some((key, value)) => { 62 })
62 cfg.insert_key_value(key.into(), value.into()); 63 .collect::<Vec<_>>(),
64 cfg: {
65 let mut cfg = CfgOptions::default();
66 for entry in &crate_data.cfg {
67 match split_delim(entry, '=') {
68 Some((key, value)) => {
69 cfg.insert_key_value(key.into(), value.into());
70 }
71 None => cfg.insert_atom(entry.into()),
63 } 72 }
64 None => cfg.insert_atom(entry.into()),
65 } 73 }
66 } 74 cfg
67 cfg 75 },
68 }, 76 target: crate_data.target,
69 target: crate_data.target, 77 out_dir: crate_data.out_dir.map(|it| base.join(it)),
70 out_dir: crate_data.out_dir.map(|it| base.join(it)), 78 proc_macro_dylib_path: crate_data
71 proc_macro_dylib_path: crate_data.proc_macro_dylib_path.map(|it| base.join(it)), 79 .proc_macro_dylib_path
80 .map(|it| base.join(it)),
81 is_workspace_member,
82 }
72 }) 83 })
73 .collect::<Vec<_>>(), 84 .collect::<Vec<_>>(),
74 } 85 }
@@ -91,6 +102,7 @@ struct CrateData {
91 target: Option<String>, 102 target: Option<String>,
92 out_dir: Option<PathBuf>, 103 out_dir: Option<PathBuf>,
93 proc_macro_dylib_path: Option<PathBuf>, 104 proc_macro_dylib_path: Option<PathBuf>,
105 is_workspace_member: Option<bool>,
94} 106}
95 107
96#[derive(Deserialize)] 108#[derive(Deserialize)]
diff --git a/crates/rust-analyzer/src/reload.rs b/crates/rust-analyzer/src/reload.rs
index 3f4dbdd8c..d7ae00b07 100644
--- a/crates/rust-analyzer/src/reload.rs
+++ b/crates/rust-analyzer/src/reload.rs
@@ -242,7 +242,7 @@ impl GlobalState {
242 }) 242 })
243 .map(move |cargo| { 243 .map(move |cargo| {
244 let cargo_project_root = cargo.workspace_root().to_path_buf(); 244 let cargo_project_root = cargo.workspace_root().to_path_buf();
245 FlycheckHandle::spawn(sender, config.clone(), cargo_project_root.into()) 245 FlycheckHandle::spawn(sender, config, cargo_project_root.into())
246 }) 246 })
247 } 247 }
248} 248}
diff --git a/crates/vfs/src/loader.rs b/crates/vfs/src/loader.rs
index 9c6e4b6a7..04e257f53 100644
--- a/crates/vfs/src/loader.rs
+++ b/crates/vfs/src/loader.rs
@@ -83,11 +83,11 @@ impl Directories {
83 self.includes_path(path) 83 self.includes_path(path)
84 } 84 }
85 fn includes_path(&self, path: &AbsPath) -> bool { 85 fn includes_path(&self, path: &AbsPath) -> bool {
86 let mut include = None; 86 let mut include: Option<&AbsPathBuf> = None;
87 for incl in &self.include { 87 for incl in &self.include {
88 if is_prefix(incl, path) { 88 if path.starts_with(incl) {
89 include = Some(match include { 89 include = Some(match include {
90 Some(prev) if is_prefix(incl, prev) => prev, 90 Some(prev) if prev.starts_with(incl) => prev,
91 _ => incl, 91 _ => incl,
92 }) 92 })
93 } 93 }
@@ -97,15 +97,11 @@ impl Directories {
97 None => return false, 97 None => return false,
98 }; 98 };
99 for excl in &self.exclude { 99 for excl in &self.exclude {
100 if is_prefix(excl, path) && is_prefix(include, excl) { 100 if path.starts_with(excl) && excl.starts_with(include) {
101 return false; 101 return false;
102 } 102 }
103 } 103 }
104 return true; 104 true
105
106 fn is_prefix(short: &AbsPath, long: &AbsPath) -> bool {
107 long.strip_prefix(short).is_some()
108 }
109 } 105 }
110} 106}
111 107