Skip to content

1.3.0

Latest

Choose a tag to compare

@belav belav released this 07 Jun 17:55
· 6 commits to main since this release
c3fe3f2

1.3.0

Breaking Changes

Change xml formatting to return error when it runs into syntax error so it is consistent with c# #1854

Previously CSharpier treated an invalid xml file as a warning instead of an error. This was inconsistent with how it treated c# files.
Invalid c# or xml files are not treated as errors.
The --compilation-errors-as-warnings argument has been renamed to --syntax-errors-as-warnings and can be used to return warnings instead of errors when encountering invalid files.

What's Changed

Feature: Configurable whitespace handling for xml #1790

CSharpier now supports two types of xml whitespace formatting strict or ignore.
By default all xml except xaml or axaml is treated as strict whitespace. See details

Feature: Move closing bracket for xml elements to the same line. #1598

With strict xml whitespace handling, csharpier now keeps the closing bracket for an element on the same line instead of breaking it to a new line.

<!-- input & expected output -->
<ElementWithAttribute Attribute="AttributeValue__________________"
  >TextValue</ElementWithAttribute>

<!-- 1.2.6 -->
<ElementWithAttribute Attribute="AttributeValue__________________"
  >TextValue</ElementWithAttribute
>

Feature: Support for csharpier-ignore with XML formatter #1788

CSharpier now supports csharpier-ignore in xml files. See details

Feature: Add MSBuild transitive and multi-target support #1833

CSharpier.MSBuild can now work as a transitive dependency.

Feature: allow checking formatting with cache #1830

The csharpier check command now supports a --use-cache option.

Feature: remove dependency on Microsoft.AspNetCore.App #1508

Previously CSharpier required that Microsoft.AspNetCore.App be installed. CSharpier has been modified to use an HttpListener when it is run using server to remove the need for this dependency.

Fix: csharpier-ignore comment removes linespaces before block #1867

CSharpier was removing blank lines before csharpier-ignore comments in some cases

// input and expected output
var x = 1;
    
// csharpier-ignore
var y=1;

/// 1.2.6
var x = 1;
// csharpier-ignore
var y=1;

Fix: Inconsistent indentation for raw string literals. #1857

CSharpier was not consistently indenting raw string literals when they were inside of simple lambdas.

// input & expected output
CallMethod(() =>
{
    var someString = """
        SomeRawString
        """;
});

// 1.2.6
CallMethod(() =>
{
    var someString = """
    SomeRawString
    """;
});

Fix: case of modifier reorder with leading trivia #1855

CSharpier was incorrectly reporting a syntax validation failure when it was reordering modifiers. This is now resolved.

// when this code is modified and the modifiers are reorderd it should not report a syntax validation failure.
public class ClassName
{
    // SomeComment
    override public int GetHashCode() => 0;
}

Fix: Xml breaks final element when it contains mixed content #1841

CSharpier was breaking the end element in some cases when it should not be.

<!-- input & expected output -->
<HtmlTypeElement
  >Some long text to make things break <a href="http://url.com"
    >url.com</a> more text.</HtmlTypeElement>

<!-- 1.2.6 -->
<HtmlTypeElement
  >Some long text to make things break <a href="http://url.com"
    >url.com</a
  > more text.</HtmlTypeElement
>

Fix: Unable to ignore csharpier formatting within case statement group #1824

CSharpier now supports csharpier-ignore comments within case statements.

switch (1)
{
    case 2:
        // csharpier-ignore
        var unformatted      = true;
        break;
}

Fix: Incorrect formatting for simple lambda expression with comment #1147

CSharpier was indenting code for a simple lambda with a leading comment.

// input & expected output
this.Where___________________(
    // Comment
    x =>
    {
        return x;
    }
);

// 1.2.6
this.Where___________________(
    // Comment
    x =>
{
    return x;
});

Fix: Ignores files it shouldn't ignore when negative patterns are used #1803

Fixed a couple more edgecases with CSharpier not handling negative ignore patterns the same way that git does

Fix: Tolerate missing directories when formatting from stdin #1848

CSharpier was throwing a DirectoryNotFoundException if it were passed a path via --stdin-path with a directory that did not exist.

Fix: Stop .gitignore walk at git worktree boundary #1860

When CSharpier walks up the target directory looking for .gitignore files it stops when encountering a .git directory. However in a git worktree there is no directory, .git is a file. This change ensures CSharpier stops when encountering a .git file so that CSharpier behaves the same in a worktree.

perf: cache IgnoreWithBasePath #1758

perf: fast comparison using FullSpan and source code #1737

perf: optimise SyntaxNodeComparer #1730

perf: set capacity of List in MembersForcedLine #1709

perf: use Stack.Peek to reduce Pop and Push churn #1708

perf: add Doc.Null check to Argument avoids Concat creation #1706

perf: use overload for Any( SyntaxTriviaList to prevent allocations #1703

Full Changelog: 1.2.6...1.3.0