diff options
Diffstat (limited to 'crates/ra_hir/src')
-rw-r--r-- | crates/ra_hir/src/diagnostics.rs | 4 | ||||
-rw-r--r-- | crates/ra_hir/src/expr/validation.rs | 2 | ||||
-rw-r--r-- | crates/ra_hir/src/impl_block.rs | 2 | ||||
-rw-r--r-- | crates/ra_hir/src/nameres/raw.rs | 5 | ||||
-rw-r--r-- | crates/ra_hir/src/source_id.rs | 11 | ||||
-rw-r--r-- | crates/ra_hir/src/ty/tests.rs | 2 | ||||
-rw-r--r-- | crates/ra_hir/src/ty/traits.rs | 2 |
7 files changed, 16 insertions, 12 deletions
diff --git a/crates/ra_hir/src/diagnostics.rs b/crates/ra_hir/src/diagnostics.rs index 61cd9d6b1..d41525779 100644 --- a/crates/ra_hir/src/diagnostics.rs +++ b/crates/ra_hir/src/diagnostics.rs | |||
@@ -1,6 +1,6 @@ | |||
1 | use std::{fmt, any::Any}; | 1 | use std::{fmt, any::Any}; |
2 | 2 | ||
3 | use ra_syntax::{SyntaxNodePtr, TreeArc, AstPtr, TextRange, ast, SyntaxNode}; | 3 | use ra_syntax::{SyntaxNodePtr, TreeArc, AstPtr, TextRange, ast, SyntaxNode, AstNode}; |
4 | use relative_path::RelativePathBuf; | 4 | use relative_path::RelativePathBuf; |
5 | 5 | ||
6 | use crate::{HirFileId, HirDatabase, Name}; | 6 | use crate::{HirFileId, HirDatabase, Name}; |
@@ -30,7 +30,7 @@ pub trait Diagnostic: Any + Send + Sync + fmt::Debug + 'static { | |||
30 | impl dyn Diagnostic { | 30 | impl dyn Diagnostic { |
31 | pub fn syntax_node(&self, db: &impl HirDatabase) -> TreeArc<SyntaxNode> { | 31 | pub fn syntax_node(&self, db: &impl HirDatabase) -> TreeArc<SyntaxNode> { |
32 | let source_file = db.hir_parse(self.file()); | 32 | let source_file = db.hir_parse(self.file()); |
33 | self.syntax_node_ptr().to_node(&source_file).to_owned() | 33 | self.syntax_node_ptr().to_node(source_file.syntax()).to_owned() |
34 | } | 34 | } |
35 | pub fn downcast_ref<D: Diagnostic>(&self) -> Option<&D> { | 35 | pub fn downcast_ref<D: Diagnostic>(&self) -> Option<&D> { |
36 | self.as_any().downcast_ref() | 36 | self.as_any().downcast_ref() |
diff --git a/crates/ra_hir/src/expr/validation.rs b/crates/ra_hir/src/expr/validation.rs index fd4907313..aebed6788 100644 --- a/crates/ra_hir/src/expr/validation.rs +++ b/crates/ra_hir/src/expr/validation.rs | |||
@@ -76,7 +76,7 @@ impl<'a, 'b> ExprValidator<'a, 'b> { | |||
76 | let source_file = db.parse(file_id.original_file(db)); | 76 | let source_file = db.parse(file_id.original_file(db)); |
77 | if let Some(field_list_node) = source_map | 77 | if let Some(field_list_node) = source_map |
78 | .expr_syntax(id) | 78 | .expr_syntax(id) |
79 | .map(|ptr| ptr.to_node(&source_file)) | 79 | .map(|ptr| ptr.to_node(source_file.syntax())) |
80 | .and_then(StructLit::cast) | 80 | .and_then(StructLit::cast) |
81 | .and_then(|lit| lit.named_field_list()) | 81 | .and_then(|lit| lit.named_field_list()) |
82 | { | 82 | { |
diff --git a/crates/ra_hir/src/impl_block.rs b/crates/ra_hir/src/impl_block.rs index b7dd775f1..51fa491c3 100644 --- a/crates/ra_hir/src/impl_block.rs +++ b/crates/ra_hir/src/impl_block.rs | |||
@@ -34,7 +34,7 @@ impl ImplSourceMap { | |||
34 | ModuleSource::Module(m) => m.syntax().ancestors().find_map(SourceFile::cast).unwrap(), | 34 | ModuleSource::Module(m) => m.syntax().ancestors().find_map(SourceFile::cast).unwrap(), |
35 | }; | 35 | }; |
36 | 36 | ||
37 | self.map[impl_id].to_node(file).to_owned() | 37 | self.map[impl_id].to_node(file.syntax()).to_owned() |
38 | } | 38 | } |
39 | } | 39 | } |
40 | 40 | ||
diff --git a/crates/ra_hir/src/nameres/raw.rs b/crates/ra_hir/src/nameres/raw.rs index 43c97a0bf..211e02068 100644 --- a/crates/ra_hir/src/nameres/raw.rs +++ b/crates/ra_hir/src/nameres/raw.rs | |||
@@ -39,7 +39,10 @@ type ImportSource = Either<TreeArc<ast::UseTree>, TreeArc<ast::ExternCrateItem>> | |||
39 | 39 | ||
40 | impl ImportSourcePtr { | 40 | impl ImportSourcePtr { |
41 | fn to_node(self, file: &SourceFile) -> ImportSource { | 41 | fn to_node(self, file: &SourceFile) -> ImportSource { |
42 | self.map(|ptr| ptr.to_node(file).to_owned(), |ptr| ptr.to_node(file).to_owned()) | 42 | self.map( |
43 | |ptr| ptr.to_node(file.syntax()).to_owned(), | ||
44 | |ptr| ptr.to_node(file.syntax()).to_owned(), | ||
45 | ) | ||
43 | } | 46 | } |
44 | } | 47 | } |
45 | 48 | ||
diff --git a/crates/ra_hir/src/source_id.rs b/crates/ra_hir/src/source_id.rs index 0a8fb6d32..7a39be779 100644 --- a/crates/ra_hir/src/source_id.rs +++ b/crates/ra_hir/src/source_id.rs | |||
@@ -1,7 +1,7 @@ | |||
1 | use std::{marker::PhantomData, sync::Arc, hash::{Hash, Hasher}}; | 1 | use std::{marker::PhantomData, sync::Arc, hash::{Hash, Hasher}}; |
2 | 2 | ||
3 | use ra_arena::{Arena, RawId, impl_arena_id}; | 3 | use ra_arena::{Arena, RawId, impl_arena_id}; |
4 | use ra_syntax::{SyntaxNodePtr, TreeArc, SyntaxNode, SourceFile, AstNode, ast}; | 4 | use ra_syntax::{SyntaxNodePtr, TreeArc, SyntaxNode, AstNode, ast}; |
5 | 5 | ||
6 | use crate::{HirFileId, DefDatabase}; | 6 | use crate::{HirFileId, DefDatabase}; |
7 | 7 | ||
@@ -89,7 +89,7 @@ pub struct AstIdMap { | |||
89 | impl AstIdMap { | 89 | impl AstIdMap { |
90 | pub(crate) fn ast_id_map_query(db: &impl DefDatabase, file_id: HirFileId) -> Arc<AstIdMap> { | 90 | pub(crate) fn ast_id_map_query(db: &impl DefDatabase, file_id: HirFileId) -> Arc<AstIdMap> { |
91 | let source_file = db.hir_parse(file_id); | 91 | let source_file = db.hir_parse(file_id); |
92 | Arc::new(AstIdMap::from_source_file(&source_file)) | 92 | Arc::new(AstIdMap::from_source(source_file.syntax())) |
93 | } | 93 | } |
94 | 94 | ||
95 | pub(crate) fn file_item_query( | 95 | pub(crate) fn file_item_query( |
@@ -98,7 +98,7 @@ impl AstIdMap { | |||
98 | ast_id: ErasedFileAstId, | 98 | ast_id: ErasedFileAstId, |
99 | ) -> TreeArc<SyntaxNode> { | 99 | ) -> TreeArc<SyntaxNode> { |
100 | let source_file = db.hir_parse(file_id); | 100 | let source_file = db.hir_parse(file_id); |
101 | db.ast_id_map(file_id).arena[ast_id].to_node(&source_file).to_owned() | 101 | db.ast_id_map(file_id).arena[ast_id].to_node(source_file.syntax()).to_owned() |
102 | } | 102 | } |
103 | 103 | ||
104 | pub(crate) fn ast_id<N: AstNode>(&self, item: &N) -> FileAstId<N> { | 104 | pub(crate) fn ast_id<N: AstNode>(&self, item: &N) -> FileAstId<N> { |
@@ -115,13 +115,14 @@ impl AstIdMap { | |||
115 | FileAstId { raw, _ty: PhantomData } | 115 | FileAstId { raw, _ty: PhantomData } |
116 | } | 116 | } |
117 | 117 | ||
118 | fn from_source_file(source_file: &SourceFile) -> AstIdMap { | 118 | fn from_source(node: &SyntaxNode) -> AstIdMap { |
119 | assert!(node.parent().is_none()); | ||
119 | let mut res = AstIdMap { arena: Arena::default() }; | 120 | let mut res = AstIdMap { arena: Arena::default() }; |
120 | // By walking the tree in bread-first order we make sure that parents | 121 | // By walking the tree in bread-first order we make sure that parents |
121 | // get lower ids then children. That is, adding a new child does not | 122 | // get lower ids then children. That is, adding a new child does not |
122 | // change parent's id. This means that, say, adding a new function to a | 123 | // change parent's id. This means that, say, adding a new function to a |
123 | // trait does not change ids of top-level items, which helps caching. | 124 | // trait does not change ids of top-level items, which helps caching. |
124 | bfs(source_file.syntax(), |it| { | 125 | bfs(node, |it| { |
125 | if let Some(module_item) = ast::ModuleItem::cast(it) { | 126 | if let Some(module_item) = ast::ModuleItem::cast(it) { |
126 | res.alloc(module_item.syntax()); | 127 | res.alloc(module_item.syntax()); |
127 | } else if let Some(macro_call) = ast::MacroCall::cast(it) { | 128 | } else if let Some(macro_call) = ast::MacroCall::cast(it) { |
diff --git a/crates/ra_hir/src/ty/tests.rs b/crates/ra_hir/src/ty/tests.rs index 978cc2587..f8364203d 100644 --- a/crates/ra_hir/src/ty/tests.rs +++ b/crates/ra_hir/src/ty/tests.rs | |||
@@ -2715,7 +2715,7 @@ fn infer(content: &str) -> String { | |||
2715 | // sort ranges for consistency | 2715 | // sort ranges for consistency |
2716 | types.sort_by_key(|(ptr, _)| (ptr.range().start(), ptr.range().end())); | 2716 | types.sort_by_key(|(ptr, _)| (ptr.range().start(), ptr.range().end())); |
2717 | for (syntax_ptr, ty) in &types { | 2717 | for (syntax_ptr, ty) in &types { |
2718 | let node = syntax_ptr.to_node(&source_file); | 2718 | let node = syntax_ptr.to_node(source_file.syntax()); |
2719 | let (range, text) = if let Some(self_param) = ast::SelfParam::cast(node) { | 2719 | let (range, text) = if let Some(self_param) = ast::SelfParam::cast(node) { |
2720 | (self_param.self_kw_token().range(), "self".to_string()) | 2720 | (self_param.self_kw_token().range(), "self".to_string()) |
2721 | } else { | 2721 | } else { |
diff --git a/crates/ra_hir/src/ty/traits.rs b/crates/ra_hir/src/ty/traits.rs index 4260f7ef7..7de04c044 100644 --- a/crates/ra_hir/src/ty/traits.rs +++ b/crates/ra_hir/src/ty/traits.rs | |||
@@ -17,7 +17,7 @@ pub(crate) type Solver = chalk_solve::Solver; | |||
17 | /// This controls the maximum size of types Chalk considers. If we set this too | 17 | /// This controls the maximum size of types Chalk considers. If we set this too |
18 | /// high, we can run into slow edge cases; if we set it too low, Chalk won't | 18 | /// high, we can run into slow edge cases; if we set it too low, Chalk won't |
19 | /// find some solutions. | 19 | /// find some solutions. |
20 | const CHALK_SOLVER_MAX_SIZE: usize = 2; | 20 | const CHALK_SOLVER_MAX_SIZE: usize = 4; |
21 | 21 | ||
22 | #[derive(Debug, Copy, Clone)] | 22 | #[derive(Debug, Copy, Clone)] |
23 | struct ChalkContext<'a, DB> { | 23 | struct ChalkContext<'a, DB> { |