1111//! The main parser interface
1212
1313use rustc_data_structures:: sync:: { Lrc , Lock } ;
14- use ast:: { self , CrateConfig } ;
14+ use ast:: { self , CrateConfig , NodeId } ;
15+ use early_buffered_lints:: { BufferedEarlyLint , BufferedEarlyLintId } ;
1516use codemap:: { CodeMap , FilePathMapping } ;
16- use syntax_pos:: { Span , FileMap , FileName } ;
17+ use syntax_pos:: { Span , FileMap , FileName , MultiSpan } ;
1718use errors:: { Handler , ColorConfig , DiagnosticBuilder } ;
1819use feature_gate:: UnstableFeatures ;
1920use parse:: parser:: Parser ;
@@ -57,6 +58,7 @@ pub struct ParseSess {
5758 /// Used to determine and report recursive mod inclusions
5859 included_mod_stack : Lock < Vec < PathBuf > > ,
5960 code_map : Lrc < CodeMap > ,
61+ pub buffered_lints : Lock < Vec < BufferedEarlyLint > > ,
6062}
6163
6264impl ParseSess {
@@ -80,12 +82,29 @@ impl ParseSess {
8082 included_mod_stack : Lock :: new ( vec ! [ ] ) ,
8183 code_map,
8284 non_modrs_mods : Lock :: new ( vec ! [ ] ) ,
85+ buffered_lints : Lock :: new ( vec ! [ ] ) ,
8386 }
8487 }
8588
8689 pub fn codemap ( & self ) -> & CodeMap {
8790 & self . code_map
8891 }
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+ }
89108}
90109
91110#[ derive( Clone ) ]
0 commit comments