@@ -1310,15 +1310,17 @@ public Tuple<List<SuppressedRecord>, List<DiagnosticRecord>> SuppressRule(
1310
1310
}
1311
1311
1312
1312
List < RuleSuppression > ruleSuppressions = ruleSuppressionsDict [ ruleName ] ;
1313
-
1313
+ var offsetArr = GetOffsetArray ( diagnostics ) ;
1314
1314
int recordIndex = 0 ;
1315
1315
int startRecord = 0 ;
1316
1316
bool [ ] suppressed = new bool [ diagnostics . Count ] ;
1317
-
1318
1317
foreach ( RuleSuppression ruleSuppression in ruleSuppressions )
1319
1318
{
1320
1319
int suppressionCount = 0 ;
1321
- while ( startRecord < diagnostics . Count && diagnostics [ startRecord ] . Extent . StartOffset < ruleSuppression . StartOffset )
1320
+ while ( startRecord < diagnostics . Count
1321
+ // && diagnostics[startRecord].Extent.StartOffset < ruleSuppression.StartOffset)
1322
+ // && diagnostics[startRecord].Extent.StartLineNumber < ruleSuppression.st)
1323
+ && offsetArr [ startRecord ] . Item1 < ruleSuppression . StartOffset )
1322
1324
{
1323
1325
startRecord += 1 ;
1324
1326
}
@@ -1329,8 +1331,10 @@ public Tuple<List<SuppressedRecord>, List<DiagnosticRecord>> SuppressRule(
1329
1331
while ( recordIndex < diagnostics . Count )
1330
1332
{
1331
1333
DiagnosticRecord record = diagnostics [ recordIndex ] ;
1334
+ var curOffset = offsetArr [ recordIndex ] ;
1332
1335
1333
- if ( record . Extent . EndOffset > ruleSuppression . EndOffset )
1336
+ //if (record.Extent.EndOffset > ruleSuppression.EndOffset)
1337
+ if ( curOffset . Item2 > ruleSuppression . EndOffset )
1334
1338
{
1335
1339
break ;
1336
1340
}
@@ -1378,6 +1382,55 @@ public Tuple<List<SuppressedRecord>, List<DiagnosticRecord>> SuppressRule(
1378
1382
return result ;
1379
1383
}
1380
1384
1385
+ private Tuple < int , int > [ ] GetOffsetArray ( List < DiagnosticRecord > diagnostics )
1386
+ {
1387
+ Func < int , int , Tuple < int , int > > GetTuple = ( x , y ) => new Tuple < int , int > ( x , y ) ;
1388
+ Func < Tuple < int , int > > GetDefaultTuple = ( ) => GetTuple ( 0 , 0 ) ;
1389
+
1390
+ var offsets = new Tuple < int , int > [ diagnostics . Count ] ;
1391
+ for ( int k = 0 ; k < diagnostics . Count ; k ++ )
1392
+ {
1393
+ var ext = diagnostics [ k ] . Extent ;
1394
+ if ( ext . StartOffset == 0 && ext . EndOffset == 0 )
1395
+ {
1396
+ // check if line and column number do not correspond to 0 offsets
1397
+ if ( ext . StartLineNumber == 1
1398
+ && ext . StartColumnNumber == 1
1399
+ && ext . EndLineNumber == 1
1400
+ && ext . EndColumnNumber == 1 )
1401
+ {
1402
+ offsets [ k ] = GetDefaultTuple ( ) ;
1403
+ }
1404
+ else
1405
+ {
1406
+ // created using the ScriptExtent constructor, which sets
1407
+ // StartOffset and EndOffset to 0
1408
+ // find the token the corresponding start line and column number
1409
+ var startToken = Tokens . Where ( x
1410
+ => x . Extent . StartLineNumber == ext . StartLineNumber
1411
+ && x . Extent . StartColumnNumber == ext . StartColumnNumber )
1412
+ . FirstOrDefault ( ) ;
1413
+ if ( startToken == null )
1414
+ {
1415
+ offsets [ k ] = GetDefaultTuple ( ) ;
1416
+ continue ;
1417
+ }
1418
+ var endToken = Tokens . Where ( x
1419
+ => x . Extent . EndLineNumber == ext . EndLineNumber
1420
+ && x . Extent . EndColumnNumber == ext . EndColumnNumber )
1421
+ . FirstOrDefault ( ) ;
1422
+ if ( endToken == null )
1423
+ {
1424
+ offsets [ k ] = GetDefaultTuple ( ) ;
1425
+ continue ;
1426
+ }
1427
+ offsets [ k ] = GetTuple ( startToken . Extent . StartOffset , endToken . Extent . EndOffset ) ;
1428
+ }
1429
+ }
1430
+ }
1431
+ return offsets ;
1432
+ }
1433
+
1381
1434
public static string [ ] ProcessCustomRulePaths ( string [ ] rulePaths , SessionState sessionState , bool recurse = false )
1382
1435
{
1383
1436
//if directory is given, list all the psd1 files
0 commit comments