Skip to content

Commit

Permalink
Fix parsing .editorconfig EOL (#10740)
Browse files Browse the repository at this point in the history
  • Loading branch information
JanProvaznik authored Oct 3, 2024
1 parent 95c7bf0 commit ff5cb70
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 3 deletions.
2 changes: 1 addition & 1 deletion eng/Versions.props
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the MIT license. See License.txt in the project root for full license information. -->
<Project>
<PropertyGroup>
<VersionPrefix>17.12.0</VersionPrefix><DotNetFinalVersionKind>release</DotNetFinalVersionKind>
<VersionPrefix>17.12.1</VersionPrefix><DotNetFinalVersionKind>release</DotNetFinalVersionKind>
<PackageValidationBaselineVersion>17.11.4</PackageValidationBaselineVersion>
<AssemblyVersion>15.1.0.0</AssemblyVersion>
<PreReleaseVersionLabel>preview</PreReleaseVersionLabel>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ internal static EditorConfigFile Parse(string text)
// dictionary, but we also use a case-insensitive key comparer when doing lookups
var activeSectionProperties = ImmutableDictionary.CreateBuilder<string, string>(StringComparer.OrdinalIgnoreCase);
string activeSectionName = "";
var lines = string.IsNullOrEmpty(text) ? Array.Empty<string>() : text.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
var lines = string.IsNullOrEmpty(text) ? Array.Empty<string>() : text.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);

foreach(var line in lines)
{
Expand Down
29 changes: 28 additions & 1 deletion src/BuildCheck.UnitTests/EditorConfigParser_Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public void EditorconfigFileDiscovery_RootTrue()
""");

var parser = new EditorConfigParser();
var listOfEditorConfigFile = parser.DiscoverEditorConfigFiles(Path.Combine(workFolder1.Path, "subfolder", "projectfile.proj") ).ToList();
var listOfEditorConfigFile = parser.DiscoverEditorConfigFiles(Path.Combine(workFolder1.Path, "subfolder", "projectfile.proj")).ToList();
// should be one because root=true so we do not need to go further
listOfEditorConfigFile.Count.ShouldBe(1);
listOfEditorConfigFile[0].IsRoot.ShouldBeTrue();
Expand Down Expand Up @@ -116,4 +116,31 @@ public void EditorconfigFileDiscovery_RootFalse()
listOfEditorConfigFile[0].IsRoot.ShouldBeFalse();
listOfEditorConfigFile[0].NamedSections[0].Name.ShouldBe("*.csproj");
}

[Fact]
public void Parse_HandlesDifferentLineEndings()
{
var mixedEndingsText = "root = true\r\n" +
"[*.cs]\n" +
"indent_style = space\r\n" +
"indent_size = 4\n" +
"[*.md]\r\n" +
"trim_trailing_whitespace = true";

var result = EditorConfigFile.Parse(mixedEndingsText);

result.IsRoot.ShouldBeTrue("Root property should be true");
result.NamedSections.Length.ShouldBe(2);

var csSection = result.NamedSections.FirstOrDefault(s => s.Name == "*.cs");
csSection.ShouldNotBeNull();
csSection.Properties.Count.ShouldBe(2);
csSection.Properties["indent_style"].ShouldBe("space");
csSection.Properties["indent_size"].ShouldBe("4");

var mdSection = result.NamedSections.FirstOrDefault(s => s.Name == "*.md");
mdSection.ShouldNotBeNull();
mdSection.Properties.Count.ShouldBe(1);
mdSection.Properties["trim_trailing_whitespace"].ShouldBe("true");
}
}

0 comments on commit ff5cb70

Please sign in to comment.