@@ -5,7 +5,8 @@ use marker_api::{
5
5
ast:: {
6
6
item:: { Body , ItemKind } ,
7
7
ty:: SemTyKind ,
8
- BodyId , ExprId , ItemId , Span , SpanId , SymbolId , TyDefId ,
8
+ BodyId , ExpnId , ExpnInfo , ExprId , FileInfo , FilePos , ItemId , Span , SpanId , SpanPos , SpanSource , SymbolId ,
9
+ TyDefId ,
9
10
} ,
10
11
context:: DriverCallbacks ,
11
12
diagnostic:: { Diagnostic , EmissionNode } ,
@@ -47,6 +48,9 @@ impl<'ast> DriverContextWrapper<'ast> {
47
48
expr_ty,
48
49
span,
49
50
span_snippet,
51
+ span_source,
52
+ span_pos_to_file_loc,
53
+ span_expn_info,
50
54
symbol_str,
51
55
resolve_method_target,
52
56
}
@@ -55,7 +59,7 @@ impl<'ast> DriverContextWrapper<'ast> {
55
59
56
60
// False positive because `EmissionNode` are non-exhaustive
57
61
#[ allow( improper_ctypes_definitions) ]
58
- extern "C" fn lint_level_at ( data : & ( ) , lint : & ' static Lint , node : EmissionNode ) -> Level {
62
+ extern "C" fn lint_level_at < ' ast > ( data : & ' ast ( ) , lint : & ' static Lint , node : EmissionNode ) -> Level {
59
63
unsafe { as_driver_cx ( data) } . lint_level_at ( lint, node)
60
64
}
61
65
@@ -91,11 +95,29 @@ extern "C" fn span_snippet<'ast>(data: &'ast (), span: &Span<'ast>) -> ffi::FfiO
91
95
unsafe { as_driver_cx ( data) } . span_snippet ( span) . map ( Into :: into) . into ( )
92
96
}
93
97
98
+ // False positive because `SpanSource` is non-exhaustive
99
+ #[ allow( improper_ctypes_definitions) ]
100
+ extern "C" fn span_source < ' ast > ( data : & ' ast ( ) , span : & Span < ' _ > ) -> SpanSource < ' ast > {
101
+ unsafe { as_driver_cx ( data) } . span_source ( span)
102
+ }
103
+
104
+ extern "C" fn span_pos_to_file_loc < ' ast > (
105
+ data : & ' ast ( ) ,
106
+ file : & FileInfo < ' ast > ,
107
+ pos : SpanPos ,
108
+ ) -> ffi:: FfiOption < FilePos < ' ast > > {
109
+ unsafe { as_driver_cx ( data) } . span_pos_to_file_loc ( file, pos) . into ( )
110
+ }
111
+
112
+ extern "C" fn span_expn_info < ' ast > ( data : & ' ast ( ) , expn_id : ExpnId ) -> FfiOption < & ' ast ExpnInfo < ' ast > > {
113
+ unsafe { as_driver_cx ( data) } . span_expn_info ( expn_id) . into ( )
114
+ }
115
+
94
116
extern "C" fn symbol_str < ' ast > ( data : & ' ast ( ) , sym : SymbolId ) -> ffi:: FfiStr < ' ast > {
95
117
unsafe { as_driver_cx ( data) } . symbol_str ( sym) . into ( )
96
118
}
97
119
98
- extern "C" fn resolve_method_target ( data : & ( ) , id : ExprId ) -> ItemId {
120
+ extern "C" fn resolve_method_target < ' ast > ( data : & ' ast ( ) , id : ExprId ) -> ItemId {
99
121
unsafe { as_driver_cx ( data) } . resolve_method_target ( id)
100
122
}
101
123
@@ -117,7 +139,10 @@ pub trait DriverContext<'ast> {
117
139
118
140
fn expr_ty ( & ' ast self , expr : ExprId ) -> SemTyKind < ' ast > ;
119
141
fn span ( & ' ast self , owner : SpanId ) -> & ' ast Span < ' ast > ;
120
- fn span_snippet ( & ' ast self , span : & Span < ' ast > ) -> Option < & ' ast str > ;
142
+ fn span_snippet ( & ' ast self , span : & Span < ' _ > ) -> Option < & ' ast str > ;
143
+ fn span_source ( & ' ast self , span : & Span < ' _ > ) -> SpanSource < ' ast > ;
144
+ fn span_expn_info ( & ' ast self , expn_id : ExpnId ) -> Option < & ' ast ExpnInfo < ' ast > > ;
145
+ fn span_pos_to_file_loc ( & ' ast self , file : & FileInfo < ' ast > , pos : SpanPos ) -> Option < FilePos < ' ast > > ;
121
146
fn symbol_str ( & ' ast self , api_id : SymbolId ) -> & ' ast str ;
122
147
fn resolve_method_target ( & ' ast self , id : ExprId ) -> ItemId ;
123
148
}
0 commit comments