@@ -4,7 +4,7 @@ use std::collections::hash_map::Entry;
4
4
5
5
use hir_expand:: { mod_path:: path, name, name:: AsName , span_map:: SpanMapRef , HirFileId } ;
6
6
use la_arena:: Arena ;
7
- use span:: AstIdMap ;
7
+ use span:: { AstIdMap , SyntaxContextId } ;
8
8
use syntax:: {
9
9
ast:: { self , HasModuleItem , HasName , HasTypeBounds , IsString } ,
10
10
AstNode ,
@@ -45,7 +45,7 @@ impl<'a> Ctx<'a> {
45
45
db,
46
46
tree : ItemTree :: default ( ) ,
47
47
source_ast_id_map : db. ast_id_map ( file) ,
48
- body_ctx : crate :: lower:: LowerCtx :: with_file_id ( db, file) ,
48
+ body_ctx : crate :: lower:: LowerCtx :: new ( db, file) ,
49
49
}
50
50
}
51
51
@@ -535,7 +535,9 @@ impl<'a> Ctx<'a> {
535
535
fn lower_use ( & mut self , use_item : & ast:: Use ) -> Option < FileItemTreeId < Use > > {
536
536
let visibility = self . lower_visibility ( use_item) ;
537
537
let ast_id = self . source_ast_id_map . ast_id ( use_item) ;
538
- let ( use_tree, _) = lower_use_tree ( self . db , self . span_map ( ) , use_item. use_tree ( ) ?) ?;
538
+ let ( use_tree, _) = lower_use_tree ( self . db , use_item. use_tree ( ) ?, & mut |range| {
539
+ self . span_map ( ) . span_for_range ( range) . ctx
540
+ } ) ?;
539
541
540
542
let res = Use { visibility, ast_id, use_tree } ;
541
543
Some ( id ( self . data ( ) . uses . alloc ( res) ) )
@@ -558,7 +560,9 @@ impl<'a> Ctx<'a> {
558
560
559
561
fn lower_macro_call ( & mut self , m : & ast:: MacroCall ) -> Option < FileItemTreeId < MacroCall > > {
560
562
let span_map = self . span_map ( ) ;
561
- let path = Interned :: new ( ModPath :: from_src ( self . db . upcast ( ) , m. path ( ) ?, span_map) ?) ;
563
+ let path = Interned :: new ( ModPath :: from_src ( self . db . upcast ( ) , m. path ( ) ?, & mut |range| {
564
+ span_map. span_for_range ( range) . ctx
565
+ } ) ?) ;
562
566
let ast_id = self . source_ast_id_map . ast_id ( m) ;
563
567
let expand_to = hir_expand:: ExpandTo :: from_call_site ( m) ;
564
568
let res = MacroCall {
@@ -672,8 +676,9 @@ impl<'a> Ctx<'a> {
672
676
}
673
677
674
678
fn lower_visibility ( & mut self , item : & dyn ast:: HasVisibility ) -> RawVisibilityId {
675
- let vis =
676
- RawVisibility :: from_opt_ast_with_span_map ( self . db , item. visibility ( ) , self . span_map ( ) ) ;
679
+ let vis = RawVisibility :: from_ast ( self . db , item. visibility ( ) , & mut |range| {
680
+ self . span_map ( ) . span_for_range ( range) . ctx
681
+ } ) ;
677
682
self . data ( ) . vis . alloc ( vis)
678
683
}
679
684
@@ -745,28 +750,33 @@ fn lower_abi(abi: ast::Abi) -> Interned<str> {
745
750
746
751
struct UseTreeLowering < ' a > {
747
752
db : & ' a dyn DefDatabase ,
748
- span_map : SpanMapRef < ' a > ,
749
753
mapping : Arena < ast:: UseTree > ,
750
754
}
751
755
752
756
impl UseTreeLowering < ' _ > {
753
- fn lower_use_tree ( & mut self , tree : ast:: UseTree ) -> Option < UseTree > {
757
+ fn lower_use_tree (
758
+ & mut self ,
759
+ tree : ast:: UseTree ,
760
+ span_for_range : & mut dyn FnMut ( :: tt:: TextRange ) -> SyntaxContextId ,
761
+ ) -> Option < UseTree > {
754
762
if let Some ( use_tree_list) = tree. use_tree_list ( ) {
755
763
let prefix = match tree. path ( ) {
756
764
// E.g. use something::{{{inner}}};
757
765
None => None ,
758
766
// E.g. `use something::{inner}` (prefix is `None`, path is `something`)
759
767
// or `use something::{path::{inner::{innerer}}}` (prefix is `something::path`, path is `inner`)
760
768
Some ( path) => {
761
- match ModPath :: from_src ( self . db . upcast ( ) , path, self . span_map ) {
769
+ match ModPath :: from_src ( self . db . upcast ( ) , path, span_for_range ) {
762
770
Some ( it) => Some ( it) ,
763
771
None => return None , // FIXME: report errors somewhere
764
772
}
765
773
}
766
774
} ;
767
775
768
- let list =
769
- use_tree_list. use_trees ( ) . filter_map ( |tree| self . lower_use_tree ( tree) ) . collect ( ) ;
776
+ let list = use_tree_list
777
+ . use_trees ( )
778
+ . filter_map ( |tree| self . lower_use_tree ( tree, span_for_range) )
779
+ . collect ( ) ;
770
780
771
781
Some (
772
782
self . use_tree (
@@ -777,7 +787,7 @@ impl UseTreeLowering<'_> {
777
787
} else {
778
788
let is_glob = tree. star_token ( ) . is_some ( ) ;
779
789
let path = match tree. path ( ) {
780
- Some ( path) => Some ( ModPath :: from_src ( self . db . upcast ( ) , path, self . span_map ) ?) ,
790
+ Some ( path) => Some ( ModPath :: from_src ( self . db . upcast ( ) , path, span_for_range ) ?) ,
781
791
None => None ,
782
792
} ;
783
793
let alias = tree. rename ( ) . map ( |a| {
@@ -813,10 +823,10 @@ impl UseTreeLowering<'_> {
813
823
814
824
pub ( crate ) fn lower_use_tree (
815
825
db : & dyn DefDatabase ,
816
- span_map : SpanMapRef < ' _ > ,
817
826
tree : ast:: UseTree ,
827
+ span_for_range : & mut dyn FnMut ( :: tt:: TextRange ) -> SyntaxContextId ,
818
828
) -> Option < ( UseTree , Arena < ast:: UseTree > ) > {
819
- let mut lowering = UseTreeLowering { db, span_map , mapping : Arena :: new ( ) } ;
820
- let tree = lowering. lower_use_tree ( tree) ?;
829
+ let mut lowering = UseTreeLowering { db, mapping : Arena :: new ( ) } ;
830
+ let tree = lowering. lower_use_tree ( tree, span_for_range ) ?;
821
831
Some ( ( tree, lowering. mapping ) )
822
832
}
0 commit comments