@@ -177,13 +177,30 @@ var CSSLint = (function() {
177177 var i = 0 ,
178178 reporter ,
179179 lines ,
180+ allow = { } ,
180181 report ,
181182 parser = new parserlib . css . Parser ( { starHack : true , ieFilters : true ,
182183 underscoreHack : true , strict : false } ) ;
183184
184185 // normalize line endings
185186 lines = text . replace ( / \n \r ? / g, "$split$" ) . split ( "$split$" ) ;
186187
188+ // find 'allow' comments
189+ CSSLint . Util . forEach ( lines , function ( line , lineno ) {
190+ var allowLine = line && line . match ( / \/ \* [ \t ] * c s s l i n t [ \t ] + a l l o w : [ \t ] * ( [ ^ \* ] * ) \* \/ / i) ,
191+ allowRules = allowLine && allowLine [ 1 ] ,
192+ allowRuleset = { } ;
193+
194+ if ( allowRules ) {
195+ allowRules . toLowerCase ( ) . split ( "," ) . forEach ( function ( allowRule ) {
196+ allowRuleset [ allowRule . trim ( ) ] = true ;
197+ } ) ;
198+ if ( Object . keys ( allowRuleset ) . length > 0 ) {
199+ allow [ lineno + 1 ] = allowRuleset ;
200+ }
201+ }
202+ } ) ;
203+
187204 if ( ! ruleset ) {
188205 ruleset = this . getRuleset ( ) ;
189206 }
@@ -194,7 +211,7 @@ var CSSLint = (function() {
194211 ruleset = applyEmbeddedRuleset ( text , ruleset ) ;
195212 }
196213
197- reporter = new Reporter ( lines , ruleset ) ;
214+ reporter = new Reporter ( lines , ruleset , allow ) ;
198215
199216 ruleset . errors = 2 ; //always report parsing errors as errors
200217 for ( i in ruleset ) {
@@ -216,7 +233,8 @@ var CSSLint = (function() {
216233 report = {
217234 messages : reporter . messages ,
218235 stats : reporter . stats ,
219- ruleset : reporter . ruleset
236+ ruleset : reporter . ruleset ,
237+ allow : reporter . allow
220238 } ;
221239
222240 //sort by line numbers, rollups at the bottom
0 commit comments