diff --git a/Src/CSharpier.Cli/EditorConfig/EditorConfigParser.cs b/Src/CSharpier.Cli/EditorConfig/EditorConfigParser.cs
index f4ebb5aeb..bac4df510 100644
--- a/Src/CSharpier.Cli/EditorConfig/EditorConfigParser.cs
+++ b/Src/CSharpier.Cli/EditorConfig/EditorConfigParser.cs
@@ -12,7 +12,8 @@ internal static class EditorConfigParser
/// Finds all configs above the given directory as well as within the subtree of this directory
public static List FindForDirectoryName(
string directoryName,
- IFileSystem fileSystem
+ IFileSystem fileSystem,
+ IgnoreFile ignoreFile
)
{
if (directoryName is "")
@@ -24,6 +25,7 @@ IFileSystem fileSystem
// TODO this is probably killing performance if nothing else when piping a single file
var editorConfigFiles = directoryInfo
.EnumerateFiles(".editorconfig", SearchOption.AllDirectories)
+ .Where(x => !ignoreFile.IsIgnored(x.FullName))
.ToList();
// already found any in this directory above
diff --git a/Src/CSharpier.Cli/IgnoreFile.cs b/Src/CSharpier.Cli/IgnoreFile.cs
index 97bd128cd..b2002c848 100644
--- a/Src/CSharpier.Cli/IgnoreFile.cs
+++ b/Src/CSharpier.Cli/IgnoreFile.cs
@@ -1,5 +1,4 @@
using System.IO.Abstractions;
-using Microsoft.Extensions.Logging;
namespace CSharpier.Cli;
diff --git a/Src/CSharpier.Cli/Options/OptionsProvider.cs b/Src/CSharpier.Cli/Options/OptionsProvider.cs
index 5e6c0c771..fa07e8b12 100644
--- a/Src/CSharpier.Cli/Options/OptionsProvider.cs
+++ b/Src/CSharpier.Cli/Options/OptionsProvider.cs
@@ -48,20 +48,25 @@ CancellationToken cancellationToken
IList? editorConfigSections = null;
+ var ignoreFile = await IgnoreFile.Create(directoryName, fileSystem, cancellationToken);
+
try
{
editorConfigSections = EditorConfigParser.FindForDirectoryName(
directoryName,
- fileSystem
+ fileSystem,
+ ignoreFile
);
}
catch (Exception ex)
{
- logger.LogError(ex, $"Failure parsing editorconfig files for {directoryName}");
+ logger.LogError(
+ ex,
+ "Failure parsing editorconfig files for {DirectoryName}",
+ directoryName
+ );
}
- var ignoreFile = await IgnoreFile.Create(directoryName, fileSystem, cancellationToken);
-
return new OptionsProvider(
editorConfigSections ?? Array.Empty(),
csharpierConfigs,
diff --git a/Src/CSharpier.Tests/OptionsProviderTests.cs b/Src/CSharpier.Tests/OptionsProviderTests.cs
index a1cd8df1d..be3adaee8 100644
--- a/Src/CSharpier.Tests/OptionsProviderTests.cs
+++ b/Src/CSharpier.Tests/OptionsProviderTests.cs
@@ -520,6 +520,53 @@ public async Task Should_Not_Prefer_Closer_EditorConfig()
result.TabWidth.Should().Be(1);
}
+ [Test]
+ public async Task Should_Ignore_Invalid_EditorConfig()
+ {
+ var context = new TestContext();
+ context.WhenAFileExists(
+ "c:/test/.editorconfig",
+ @"
+[*]
+indent_size = 2
+INVALID
+"
+ );
+
+ var result = await context.CreateProviderAndGetOptionsFor("c:/test", "c:/test/test.cs");
+
+ result.TabWidth.Should().Be(4);
+ }
+
+ [Test]
+ public async Task Should_Ignore_Ignored_EditorConfig()
+ {
+ var context = new TestContext();
+ context.WhenAFileExists(
+ "c:/test/subfolder/.editorconfig",
+ @"
+ [*]
+ indent_size = 2
+ "
+ );
+
+ context.WhenAFileExists(
+ "c:/test/.editorconfig",
+ @"
+ [*]
+ indent_size = 1
+ "
+ );
+
+ context.WhenAFileExists("c:/test/.csharpierignore", "/subfolder/.editorconfig");
+
+ var result = await context.CreateProviderAndGetOptionsFor(
+ "c:/test",
+ "c:/test/subfolder/test.cs"
+ );
+ result.TabWidth.Should().Be(1);
+ }
+
[Test]
public async Task Should_Prefer_Closer_CSharpierrc()
{