private static bool CanRemovePragmaTrivia( SyntaxToken token, Diagnostic diagnostic, AbstractSuppressionCodeFixProvider fixer, bool isStartToken, out int indexOfTriviaToRemove ) { indexOfTriviaToRemove = -1; var triviaList = GetTriviaListForSuppression(token, isStartToken, fixer); var diagnosticSpan = diagnostic.Location.SourceSpan; bool shouldIncludeTrivia(SyntaxTrivia t) => isStartToken ? t.FullSpan.End <= diagnosticSpan.Start : t.FullSpan.Start >= diagnosticSpan.End; var filteredTriviaList = triviaList.Where(shouldIncludeTrivia); if (isStartToken) { // Walk bottom up for leading trivia. filteredTriviaList = filteredTriviaList.Reverse(); } foreach (var trivia in filteredTriviaList) { if ( fixer.IsAnyPragmaDirectiveForId( trivia, diagnostic.Id, out var isEnableDirective, out var hasMultipleIds ) ) { if (hasMultipleIds) { // Handle only simple cases where we have a single pragma directive with single ID matching ours in the trivia. return(false); } // We want to look for leading disable directive and trailing enable directive. if ( (isStartToken && !isEnableDirective) || (!isStartToken && isEnableDirective) ) { indexOfTriviaToRemove = triviaList.IndexOf(trivia); return(true); } return(false); } } return(false); }
private static bool CanRemovePragmaTrivia(SyntaxToken token, Diagnostic diagnostic, AbstractSuppressionCodeFixProvider fixer, bool isStartToken, out int indexOfTriviaToRemove) { indexOfTriviaToRemove = -1; var triviaList = GetTriviaListForSuppression(token, isStartToken, fixer); var diagnosticSpan = diagnostic.Location.SourceSpan; Func<SyntaxTrivia, bool> shouldIncludeTrivia = t => isStartToken ? t.FullSpan.End <= diagnosticSpan.Start : t.FullSpan.Start >= diagnosticSpan.End; var filteredTriviaList = triviaList.Where(shouldIncludeTrivia); if (isStartToken) { // Walk bottom up for leading trivia. filteredTriviaList = filteredTriviaList.Reverse(); } foreach (var trivia in filteredTriviaList) { bool isEnableDirective, hasMultipleIds; if (fixer.IsAnyPragmaDirectiveForId(trivia, diagnostic.Id, out isEnableDirective, out hasMultipleIds)) { if (hasMultipleIds) { // Handle only simple cases where we have a single pragma directive with single ID matching ours in the trivia. return false; } // We want to look for leading disable directive and trailing enable directive. if ((isStartToken && !isEnableDirective) || (!isStartToken && isEnableDirective)) { indexOfTriviaToRemove = triviaList.IndexOf(trivia); return true; } return false; } } return false; }