Skip to content

Commit a54842a

Browse files
committed
#8 IO0003 false positive if IDirectory is used
1 parent 143deca commit a54842a

File tree

5 files changed

+18
-3
lines changed

5 files changed

+18
-3
lines changed

System.IO.Abstractions.Analyzers.Tests/Analyzers/DirectoryAnalyzerTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ public class DirectoryAnalyzerTests: CSharpDiagnosticAnalyzerTest<DirectoryAnaly
1111
{
1212
[Theory]
1313
[InlineData("Valid.txt")]
14+
[InlineData("FalsePositive.txt")]
1415
public void Analyzer_is_not_triggered(string filename)
1516
{
1617
var source = ReadFile(filename);
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
namespace Foobar
2+
{
3+
using System.Collections.Generic;
4+
using System.IO;
5+
using System.IO.Abstractions;
6+
using System.Linq;
7+
8+
internal static class DirectoryExtensions
9+
{
10+
public static IEnumerable<string> GetJpegs(this IDirectory directory, string path) => directory.EnumerateFiles(path, "*.jpeg", SearchOption.TopDirectoryOnly).Union(
11+
directory.EnumerateFiles(path, "*.jpg", SearchOption.TopDirectoryOnly));
12+
}
13+
}

System.IO.Abstractions.Analyzers/Analyzers/BaseFileSystemNodeAnalyzer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ private bool IsStaticInvocationStartWith(InvocationExpressionSyntax invocation)
5757
return invocation.IsKind(SyntaxKind.InvocationExpression)
5858
&& invocation.Expression.NormalizeWhitespace()
5959
.ToFullString()
60-
.StartsWith(GetFileSystemType().Name + ".", StringComparison.CurrentCultureIgnoreCase);
60+
.StartsWith(GetFileSystemType().Name + ".", StringComparison.Ordinal);
6161
}
6262
}
6363
}

System.IO.Abstractions.Analyzers/CodeFixes/FileServiceInterfaceInjectionCodeFix.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ public sealed override async Task RegisterCodeFixesAsync(CodeFixContext context)
3535
var constructor = RoslynClassFileSystem.GetConstructor(classDeclarationSyntax);
3636

3737
if (!RoslynClassFileSystem.HasFileSystemField(classDeclarationSyntax)
38-
|| constructor != null && !RoslynClassFileSystem.ConstructorHasFileSystemParameter(constructor))
38+
|| constructor != null && !RoslynClassFileSystem.ConstructorHasFileSystemParameter(constructor)
39+
|| constructor != null && !RoslynClassFileSystem.ConstructorHasAssignmentExpression(constructor))
3940
{
4041
context.RegisterCodeFix(new FileServiceInterfaceInjectionCodeAction(Title,
4142
context.Document,

System.IO.Abstractions.Analyzers/RoslynToken/RoslynClassFileSystem.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public static UsingDirectiveSyntax GetSystemIoUsing(CompilationUnitSyntax unit)
4747
public static UsingDirectiveSyntax GetUsing(CompilationUnitSyntax unit, string usingName)
4848
{
4949
return unit.Usings.FirstOrDefault(x =>
50-
x.Name.NormalizeWhitespace().ToFullString().Equals(usingName, StringComparison.CurrentCultureIgnoreCase));
50+
x.Name.NormalizeWhitespace().ToFullString().Equals(usingName, StringComparison.Ordinal));
5151
}
5252

5353
public static FieldDeclarationSyntax CreateFileSystemFieldDeclaration()

0 commit comments

Comments
 (0)