|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Collections.Immutable;
using System.Threading;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.PooledObjects;
using Roslyn.Utilities;
namespace Microsoft.CodeAnalysis.RemoveUnnecessaryImports;
internal sealed class CSharpUnnecessaryImportsProvider
: AbstractUnnecessaryImportsProvider<UsingDirectiveSyntax>
{
public static readonly CSharpUnnecessaryImportsProvider Instance = new();
private CSharpUnnecessaryImportsProvider()
{
}
public override ImmutableArray<UsingDirectiveSyntax> GetUnnecessaryImports(
SemanticModel model,
Func<SyntaxNode, bool>? predicate,
CancellationToken cancellationToken)
{
var root = model.SyntaxTree.GetRoot(cancellationToken);
predicate ??= Functions<SyntaxNode>.True;
var diagnostics = model.GetDiagnostics(cancellationToken: cancellationToken);
using var _ = ArrayBuilder<UsingDirectiveSyntax>.GetInstance(out var result);
foreach (var diagnostic in diagnostics)
{
if (diagnostic.Id == "CS8019" &&
root.FindNode(diagnostic.Location.SourceSpan) is UsingDirectiveSyntax node && predicate(node))
{
result.Add(node);
}
}
result.RemoveDuplicates();
return result.ToImmutableArray();
}
}
|