11
11
//! The main parser interface
12
12
13
13
use rustc_data_structures:: sync:: { Lrc , Lock } ;
14
- use ast:: { self , CrateConfig } ;
14
+ use ast:: { self , CrateConfig , NodeId } ;
15
+ use early_buffered_lints:: { BufferedEarlyLint , BufferedEarlyLintId } ;
15
16
use codemap:: { CodeMap , FilePathMapping } ;
16
- use syntax_pos:: { Span , FileMap , FileName } ;
17
+ use syntax_pos:: { Span , FileMap , FileName , MultiSpan } ;
17
18
use errors:: { Handler , ColorConfig , DiagnosticBuilder } ;
18
19
use feature_gate:: UnstableFeatures ;
19
20
use parse:: parser:: Parser ;
@@ -57,6 +58,7 @@ pub struct ParseSess {
57
58
/// Used to determine and report recursive mod inclusions
58
59
included_mod_stack : Lock < Vec < PathBuf > > ,
59
60
code_map : Lrc < CodeMap > ,
61
+ pub buffered_lints : Lock < Vec < BufferedEarlyLint > > ,
60
62
}
61
63
62
64
impl ParseSess {
@@ -80,12 +82,29 @@ impl ParseSess {
80
82
included_mod_stack : Lock :: new ( vec ! [ ] ) ,
81
83
code_map,
82
84
non_modrs_mods : Lock :: new ( vec ! [ ] ) ,
85
+ buffered_lints : Lock :: new ( vec ! [ ] ) ,
83
86
}
84
87
}
85
88
86
89
pub fn codemap ( & self ) -> & CodeMap {
87
90
& self . code_map
88
91
}
92
+
93
+ pub fn buffer_lint < S : Into < MultiSpan > > ( & self ,
94
+ lint_id : BufferedEarlyLintId ,
95
+ span : S ,
96
+ id : NodeId ,
97
+ msg : & str ,
98
+ ) {
99
+ self . buffered_lints
100
+ . borrow_mut ( )
101
+ . push ( BufferedEarlyLint {
102
+ span : span. into ( ) ,
103
+ id,
104
+ msg : msg. into ( ) ,
105
+ lint_id,
106
+ } ) ;
107
+ }
89
108
}
90
109
91
110
#[ derive( Clone ) ]
0 commit comments