aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src')
-rw-r--r--crates/ra_hir/src/lang_item.rs2
-rw-r--r--crates/ra_hir/src/nameres/raw.rs5
-rw-r--r--crates/ra_hir/src/ty/traits.rs12
3 files changed, 12 insertions, 7 deletions
diff --git a/crates/ra_hir/src/lang_item.rs b/crates/ra_hir/src/lang_item.rs
index 8764240b3..6c4e8ffbd 100644
--- a/crates/ra_hir/src/lang_item.rs
+++ b/crates/ra_hir/src/lang_item.rs
@@ -153,7 +153,7 @@ impl LangItems {
153 153
154fn lang_item_name<T: AttrsOwner>(node: &T) -> Option<SmolStr> { 154fn lang_item_name<T: AttrsOwner>(node: &T) -> Option<SmolStr> {
155 node.attrs() 155 node.attrs()
156 .filter_map(|a| a.as_key_value()) 156 .filter_map(|a| a.as_simple_key_value())
157 .filter(|(key, _)| key == "lang") 157 .filter(|(key, _)| key == "lang")
158 .map(|(_, val)| val) 158 .map(|(_, val)| val)
159 .nth(0) 159 .nth(0)
diff --git a/crates/ra_hir/src/nameres/raw.rs b/crates/ra_hir/src/nameres/raw.rs
index 32a049f4e..606bd1a95 100644
--- a/crates/ra_hir/src/nameres/raw.rs
+++ b/crates/ra_hir/src/nameres/raw.rs
@@ -355,8 +355,7 @@ impl<DB: AstDatabase> RawItemsCollector<&DB> {
355 355
356 let name = m.name().map(|it| it.as_name()); 356 let name = m.name().map(|it| it.as_name());
357 let ast_id = self.source_ast_id_map.ast_id(&m); 357 let ast_id = self.source_ast_id_map.ast_id(&m);
358 let export = m.has_atom_attr("macro_export") 358 let export = m.attrs().filter_map(|x| x.simple_name()).any(|name| name == "macro_export");
359 || m.attrs().filter_map(|x| x.as_call()).any(|(name, _)| name == "macro_export");
360 359
361 let m = self.raw_items.macros.alloc(MacroData { ast_id, path, name, export }); 360 let m = self.raw_items.macros.alloc(MacroData { ast_id, path, name, export });
362 self.push_item(current_module, RawItem::Macro(m)); 361 self.push_item(current_module, RawItem::Macro(m));
@@ -387,7 +386,7 @@ impl<DB: AstDatabase> RawItemsCollector<&DB> {
387 386
388fn extract_mod_path_attribute(module: &ast::Module) -> Option<SmolStr> { 387fn extract_mod_path_attribute(module: &ast::Module) -> Option<SmolStr> {
389 module.attrs().into_iter().find_map(|attr| { 388 module.attrs().into_iter().find_map(|attr| {
390 attr.as_key_value().and_then(|(name, value)| { 389 attr.as_simple_key_value().and_then(|(name, value)| {
391 let is_path = name == "path"; 390 let is_path = name == "path";
392 if is_path { 391 if is_path {
393 Some(value) 392 Some(value)
diff --git a/crates/ra_hir/src/ty/traits.rs b/crates/ra_hir/src/ty/traits.rs
index d11dab294..b0f67ae50 100644
--- a/crates/ra_hir/src/ty/traits.rs
+++ b/crates/ra_hir/src/ty/traits.rs
@@ -1,9 +1,8 @@
1//! Trait solving using Chalk. 1//! Trait solving using Chalk.
2use std::sync::Arc; 2use std::sync::{Arc, Mutex};
3 3
4use chalk_ir::cast::Cast; 4use chalk_ir::cast::Cast;
5use log::debug; 5use log::debug;
6use parking_lot::Mutex;
7use ra_db::salsa; 6use ra_db::salsa;
8use ra_prof::profile; 7use ra_prof::profile;
9use rustc_hash::FxHashSet; 8use rustc_hash::FxHashSet;
@@ -38,7 +37,14 @@ impl TraitSolver {
38 ) -> Option<chalk_solve::Solution> { 37 ) -> Option<chalk_solve::Solution> {
39 let context = ChalkContext { db, krate: self.krate }; 38 let context = ChalkContext { db, krate: self.krate };
40 debug!("solve goal: {:?}", goal); 39 debug!("solve goal: {:?}", goal);
41 let solution = self.inner.lock().solve(&context, goal); 40 let mut solver = match self.inner.lock() {
41 Ok(it) => it,
42 // Our cancellation works via unwinding, but, as chalk is not
43 // panic-safe, we need to make sure to propagate the cancellation.
44 // Ideally, we should also make chalk panic-safe.
45 Err(_) => ra_db::Canceled::throw(),
46 };
47 let solution = solver.solve(&context, goal);
42 debug!("solve({:?}) => {:?}", goal, solution); 48 debug!("solve({:?}) => {:?}", goal, solution);
43 solution 49 solution
44 } 50 }