diff --git a/RoslynPreviewSdkReferences.props b/RoslynPreviewSdkReferences.props new file mode 100644 index 000000000..b33089fac --- /dev/null +++ b/RoslynPreviewSdkReferences.props @@ -0,0 +1,19 @@ + + + /usr/share/dotnet/sdk/11.0.100-preview.5.26302.115/Roslyn/bincore + + + + + + $(RoslynPreviewSdkPath)/Microsoft.CodeAnalysis.dll + + + $(RoslynPreviewSdkPath)/Microsoft.CodeAnalysis.CSharp.dll + + + diff --git a/Src/CSharpier.Cli/CSharpier.Cli.csproj b/Src/CSharpier.Cli/CSharpier.Cli.csproj index a2f9b21a9..72828af41 100644 --- a/Src/CSharpier.Cli/CSharpier.Cli.csproj +++ b/Src/CSharpier.Cli/CSharpier.Cli.csproj @@ -1,5 +1,6 @@ + $(NoWarn);NU1510 Exe diff --git a/Src/CSharpier.Core/CSharp/SyntaxPrinter/Modifiers.cs b/Src/CSharpier.Core/CSharp/SyntaxPrinter/Modifiers.cs index f966d6084..05239d327 100644 --- a/Src/CSharpier.Core/CSharp/SyntaxPrinter/Modifiers.cs +++ b/Src/CSharpier.Core/CSharp/SyntaxPrinter/Modifiers.cs @@ -21,6 +21,7 @@ private class DefaultOrder : IComparer "new", "virtual", "abstract", + "closed", "sealed", "override", "readonly", diff --git a/Src/CSharpier.Core/CSharpier.Core.csproj b/Src/CSharpier.Core/CSharpier.Core.csproj index 9edf84f98..c1f53d93a 100644 --- a/Src/CSharpier.Core/CSharpier.Core.csproj +++ b/Src/CSharpier.Core/CSharpier.Core.csproj @@ -1,5 +1,6 @@ + CSharpier.Core net8.0;net9.0;net10.0;netstandard2.0 @@ -13,7 +14,6 @@ - all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -24,6 +24,9 @@ + + + diff --git a/Src/CSharpier.Generators/NodePrinterGenerator.cs b/Src/CSharpier.Generators/NodePrinterGenerator.cs index da37af63b..c33944122 100644 --- a/Src/CSharpier.Generators/NodePrinterGenerator.cs +++ b/Src/CSharpier.Generators/NodePrinterGenerator.cs @@ -74,6 +74,7 @@ public class NodePrinterGenerator : IIncrementalGenerator nameof(SyntaxKind.RecordStructDeclaration), nameof(SyntaxKind.EnumDeclaration), nameof(SyntaxKind.ExtensionBlockDeclaration), + "(SyntaxKind)9082", // SyntaxKind.UnionDeclaration in .NET 11 Preview 5 } }, { @@ -275,7 +276,12 @@ private object GetModel(ImmutableArray syntaxTrees) PrinterName = fileName, SyntaxNodeName = $"{fileName}Syntax", SyntaxKinds = SpecialCase.TryGetValue($"{fileName}Syntax", out var kinds) - ? string.Join(" or ", kinds.Select(x => $"SyntaxKind.{x}")) + ? string.Join( + " or ", + kinds.Select(x => + x.StartsWith("(", StringComparison.Ordinal) ? x : $"SyntaxKind.{x}" + ) + ) : $"SyntaxKind.{fileName}", }) .OrderBy(o => o.SyntaxNodeName) diff --git a/Src/CSharpier.Tests/CSharpier.Tests.csproj b/Src/CSharpier.Tests/CSharpier.Tests.csproj index 761bc5540..1dd22f205 100644 --- a/Src/CSharpier.Tests/CSharpier.Tests.csproj +++ b/Src/CSharpier.Tests/CSharpier.Tests.csproj @@ -1,4 +1,5 @@ + false CSharpier.Tests diff --git a/Src/CSharpier.Tests/FormattingTests/TestFiles/cs/ClosedAndUnionModifiers.expected.test b/Src/CSharpier.Tests/FormattingTests/TestFiles/cs/ClosedAndUnionModifiers.expected.test new file mode 100644 index 000000000..381ae8956 --- /dev/null +++ b/Src/CSharpier.Tests/FormattingTests/TestFiles/cs/ClosedAndUnionModifiers.expected.test @@ -0,0 +1,20 @@ +public closed record class JobStatus; + +public record class Queued : JobStatus; + +public record class Running(int PercentComplete) : JobStatus; + +public union Pet(Cat, Dog, Bird); + +public union Length(Meters, Feet) +{ + public double TotalMeters => + this switch + { + Meters m => m.Value, + Feet f => f.Value * 0.3048, + _ => throw new InvalidOperationException("The Length has no value."), + }; + + public Length Add(Length other) => new Meters(TotalMeters + other.TotalMeters); +} diff --git a/Src/CSharpier.Tests/FormattingTests/TestFiles/cs/ClosedAndUnionModifiers.test b/Src/CSharpier.Tests/FormattingTests/TestFiles/cs/ClosedAndUnionModifiers.test new file mode 100644 index 000000000..341f3761c --- /dev/null +++ b/Src/CSharpier.Tests/FormattingTests/TestFiles/cs/ClosedAndUnionModifiers.test @@ -0,0 +1,19 @@ +public closed record class JobStatus; + +public record class Queued : JobStatus; + +public record class Running(int PercentComplete) : JobStatus; + +public union Pet(Cat, Dog, Bird); + +public union Length(Meters, Feet) +{ + public double TotalMeters => this switch + { + Meters m => m.Value, + Feet f => f.Value * 0.3048, + _ => throw new InvalidOperationException("The Length has no value."), + }; + + public Length Add(Length other) => new Meters(TotalMeters + other.TotalMeters); +}