From e9d053eb3d46fc52226b1743a3049a20a8e7337a Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Thu, 1 May 2025 20:14:52 +0000 Subject: [PATCH 1/5] [main] Source code updates from dotnet/cecil (#318) [main] Source code updates from dotnet/cecil - Delete src/cecil/eng/DotNetBuild.props --- prereqs/git-info/cecil.props | 6 +++--- src/cecil/eng/Version.Details.xml | 6 +++--- src/cecil/global.json | 2 +- src/source-manifest.json | 6 +++--- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/prereqs/git-info/cecil.props b/prereqs/git-info/cecil.props index d06ecb96363..09461395a29 100644 --- a/prereqs/git-info/cecil.props +++ b/prereqs/git-info/cecil.props @@ -1,8 +1,8 @@  - 15e0893c42bc3200bba6af4f3c79fdeabd4a294d - 20250428.3 - 0.11.5-alpha.25228.3 + b861ffe40adc95775897af7f77cdae5292ac8c35 + 20250429.1 + 0.11.5-alpha.25229.1 \ No newline at end of file diff --git a/src/cecil/eng/Version.Details.xml b/src/cecil/eng/Version.Details.xml index f3c1973bec0..4fa76d855f8 100644 --- a/src/cecil/eng/Version.Details.xml +++ b/src/cecil/eng/Version.Details.xml @@ -1,12 +1,12 @@ - + - + https://github.com/dotnet/dotnet - efbfb137a317fb339a6b7be36af7188cc508dc95 + 78c5fa9a48d469a19ab5a61c16c955c1f370b5be diff --git a/src/cecil/global.json b/src/cecil/global.json index 74946e36ece..88bdc536c7f 100644 --- a/src/cecil/global.json +++ b/src/cecil/global.json @@ -4,6 +4,6 @@ }, "msbuild-sdks": { "Microsoft.Build.NoTargets": "3.7.0", - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.25228.104" + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.25229.109" } } diff --git a/src/source-manifest.json b/src/source-manifest.json index 09bb8f46ac6..7ff881cafd0 100644 --- a/src/source-manifest.json +++ b/src/source-manifest.json @@ -22,11 +22,11 @@ "commitSha": "21ba24a7015eee34b6879b4fd2f0b94b5ff8faa6" }, { - "packageVersion": "0.11.5-alpha.25228.3", - "barId": 266127, + "packageVersion": "0.11.5-alpha.25229.1", + "barId": 266345, "path": "cecil", "remoteUri": "https://github.com/dotnet/cecil", - "commitSha": "15e0893c42bc3200bba6af4f3c79fdeabd4a294d" + "commitSha": "b861ffe40adc95775897af7f77cdae5292ac8c35" }, { "packageVersion": "0.1.622401", From 4b12d796538e24889d27f82612eb71c8f536d219 Mon Sep 17 00:00:00 2001 From: Ella Hathaway <67609881+ellahathaway@users.noreply.github.com> Date: Thu, 1 May 2025 14:48:04 -0700 Subject: [PATCH 2/5] VMR signing validation should fail when no files are processed (#330) --- .../SigningValidation.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/SigningValidation.cs b/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/SigningValidation.cs index a045f4620c6..ec2e41a6360 100644 --- a/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/SigningValidation.cs +++ b/eng/tools/tasks/Microsoft.DotNet.UnifiedBuild.Tasks/SigningValidation.cs @@ -217,6 +217,13 @@ private void RunSignCheck() Log.LogError($"SignCheck failed with exit code {process.ExitCode}: {errorLogContent}"); } + string stdoutLog = GetLogPath(_signCheckStdoutLogFileName); + string stdoutLogContent = File.Exists(stdoutLog) ? File.ReadAllText(stdoutLog).Trim() : string.Empty; + if (!string.IsNullOrWhiteSpace(stdoutLogContent) && stdoutLogContent.Contains("No files were processed")) + { + Log.LogError("SignCheck did not process any files."); + } + Log.LogMessage(MessageImportance.High, $"SignCheck completed."); } } From 2154894852476c5933761ce7c1e0f1773af00248 Mon Sep 17 00:00:00 2001 From: Nikola Milosavljevic Date: Thu, 1 May 2025 15:35:56 -0700 Subject: [PATCH 3/5] Build scenario-tests in installers validation job (#327) Co-authored-by: Viktor Hofer --- repo-projects/scenario-tests.proj | 11 +++++++---- .../Microsoft.DotNet.Installer.Tests.csproj | 5 +++++ .../installer-tests-prereqs.proj | 13 +++++++++++++ 3 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 test/Microsoft.DotNet.Installer.Tests/installer-tests-prereqs.proj diff --git a/repo-projects/scenario-tests.proj b/repo-projects/scenario-tests.proj index 870ca09c177..5704fe9cb20 100644 --- a/repo-projects/scenario-tests.proj +++ b/repo-projects/scenario-tests.proj @@ -10,12 +10,15 @@ $(TestArgs) /p:TestRestoreConfigFile=$(OriginalNuGetConfigFile) - true + + + true + true - - + diff --git a/test/Microsoft.DotNet.Installer.Tests/Microsoft.DotNet.Installer.Tests.csproj b/test/Microsoft.DotNet.Installer.Tests/Microsoft.DotNet.Installer.Tests.csproj index cb27cef2f2d..cb9dd846fe6 100755 --- a/test/Microsoft.DotNet.Installer.Tests/Microsoft.DotNet.Installer.Tests.csproj +++ b/test/Microsoft.DotNet.Installer.Tests/Microsoft.DotNet.Installer.Tests.csproj @@ -13,6 +13,11 @@ + + + + + $(NetCurrent) + + + + + + + + + From dde5207006a0614169351c1819b7ce335b8a1ecf Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Fri, 2 May 2025 08:27:51 +0200 Subject: [PATCH 4/5] [main] Source code updates from dotnet/razor (#341) Co-authored-by: dotnet-maestro[bot] --- prereqs/git-info/razor.props | 6 +- .../src/Language/Legacy/CSharpCodeParser.cs | 2 +- .../Syntax.xml.Internal.Generated.cs | 3819 +++++----------- .../Generated/Syntax.xml.Main.Generated.cs | 1395 ++---- .../Generated/Syntax.xml.Syntax.Generated.cs | 3910 +++++------------ .../AbstractFileWriter.cs | 121 +- .../Properties/launchSettings.json | 8 + .../RazorSyntaxGenerator/SourceWriter.cs | 2416 +++++----- .../IRazorNotificationHandler.cs | 2 +- .../CodeActions}/CohostCodeActionsEndpoint.cs | 12 +- .../CohostCodeActionsResolveEndpoint.cs | 16 +- .../CohostStartupService.cs | 42 +- .../Completion}/CohostCompletionListCache.cs | 0 .../CohostDocumentCompletionEndpoint.cs | 25 +- ...CohostDocumentCompletionResolveEndpoint.cs | 27 +- ...hostDocumentPullDiagnosticsEndpointBase.cs | 135 + .../CohostDocumentHighlightEndpoint.cs | 5 +- .../CohostFoldingRangeEndpoint.cs | 3 +- .../Hover}/CohostHoverEndpoint.cs | 3 +- .../IRazorCohostStartupService.cs | 2 + ...deAnalysis.Razor.CohostingShared.projitems | 10 + .../RazorCohostClientCapabilitiesService.cs | 2 + .../RazorCohostDynamicRegistrationService.cs | 20 +- .../WellKnownStartupOrder.cs | 25 + .../ISnippetCompletionItemProvider.cs | 12 + .../Extensions/TextDocumentExtensions.cs | 6 +- .../Completion/RemoteCompletionService.cs | 2 +- .../RemoteFindAllReferencesService.cs | 4 +- .../RemoteGoToDefinitionService.cs | 4 +- .../RazorBrokeredServiceBase.FactoryBase`1.cs | 10 +- .../RazorBrokeredServiceData.cs | 4 +- .../RemoteHostServicesProvider.cs | 14 +- ...Accessor.cs => RemoteWorkspaceProvider.cs} | 7 +- .../RemoteCSharpSemanticTokensProvider.cs | 8 +- .../ServiceArgs.cs | 2 + .../CohostDocumentPullDiagnosticsEndpoint.cs | 148 +- .../RazorCustomMessageTarget_Completion.cs | 2 +- .../Snippets/SnippetCompletionItemProvider.cs | 9 +- .../DocumentPullDiagnosticsEndpoint.cs | 71 + .../Services/DynamicFileProviderFactory.cs | 7 +- .../Services/EmptyServiceProvider.cs | 2 +- .../Services/InProcServiceFactory.cs | 5 +- ...oProvider.cs => LspDynamicFileProvider.cs} | 10 +- .../RazorClientServerManagerProvider.cs | 2 + .../VSCodeLanguageServerFeatureOptions.cs | 13 +- .../Services/VSCodeRemoteServiceInvoker.cs | 5 +- .../VSCodeRemoteServicesInitializer.cs | 16 +- .../Services/VSCodeWorkspaceProvider.cs | 27 + src/razor/src/Razor/src/rzls/LspLogger.cs | 2 +- .../Cohost/BrokeredServiceFactory.cs | 2 +- .../CohostDocumentPullDiagnosticsTest.cs | 5 +- .../Cohost/CohostEndpointTestBase.cs | 6 +- src/source-manifest.json | 6 +- 53 files changed, 4269 insertions(+), 8148 deletions(-) create mode 100644 src/razor/src/Compiler/tools/RazorSyntaxGenerator/Properties/launchSettings.json rename src/razor/src/Razor/src/{Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost => Microsoft.CodeAnalysis.Razor.CohostingShared/CodeActions}/CohostCodeActionsEndpoint.cs (94%) rename src/razor/src/Razor/src/{Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost => Microsoft.CodeAnalysis.Razor.CohostingShared/CodeActions}/CohostCodeActionsResolveEndpoint.cs (91%) rename src/razor/src/Razor/src/{Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost => Microsoft.CodeAnalysis.Razor.CohostingShared/Completion}/CohostCompletionListCache.cs (100%) rename src/razor/src/Razor/src/{Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost => Microsoft.CodeAnalysis.Razor.CohostingShared/Completion}/CohostDocumentCompletionEndpoint.cs (93%) rename src/razor/src/Razor/src/{Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost => Microsoft.CodeAnalysis.Razor.CohostingShared/Completion}/CohostDocumentCompletionResolveEndpoint.cs (87%) create mode 100644 src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/Diagnostics/CohostDocumentPullDiagnosticsEndpointBase.cs rename src/razor/src/Razor/src/{Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost => Microsoft.CodeAnalysis.Razor.CohostingShared/DocumentHighlight}/CohostDocumentHighlightEndpoint.cs (94%) rename src/razor/src/Razor/src/{Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost => Microsoft.CodeAnalysis.Razor.CohostingShared/FoldingRange}/CohostFoldingRangeEndpoint.cs (97%) rename src/razor/src/Razor/src/{Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost => Microsoft.CodeAnalysis.Razor.CohostingShared/Hover}/CohostHoverEndpoint.cs (96%) create mode 100644 src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/WellKnownStartupOrder.cs create mode 100644 src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Completion/ISnippetCompletionItemProvider.cs rename src/razor/src/Razor/src/{Microsoft.VisualStudio.LanguageServices.Razor => Microsoft.CodeAnalysis.Razor.Workspaces}/Extensions/TextDocumentExtensions.cs (91%) rename src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/{RemoteWorkspaceAccessor.cs => RemoteWorkspaceProvider.cs} (88%) create mode 100644 src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Endpoints/DocumentPullDiagnosticsEndpoint.cs rename src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/{DynamicFileInfoProvider.cs => LspDynamicFileProvider.cs} (83%) create mode 100644 src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/VSCodeWorkspaceProvider.cs diff --git a/prereqs/git-info/razor.props b/prereqs/git-info/razor.props index 66bc2951cc2..56eb9919142 100644 --- a/prereqs/git-info/razor.props +++ b/prereqs/git-info/razor.props @@ -1,8 +1,8 @@  - 8babb3ad96fe6ac7a28619b18b2f3a0c352e3d1a - 20250428.4 - 10.0.0-preview.25228.4 + 2e057fe832fbda6847f68d5782508d6c469d794c + 20250501.3 + 10.0.0-preview.25251.3 \ No newline at end of file diff --git a/src/razor/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Legacy/CSharpCodeParser.cs b/src/razor/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Legacy/CSharpCodeParser.cs index 170162650d3..e2b4c2a5975 100644 --- a/src/razor/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Legacy/CSharpCodeParser.cs +++ b/src/razor/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Legacy/CSharpCodeParser.cs @@ -2650,7 +2650,7 @@ private void ParseReservedDirective(SyntaxListBuilder builder, chunkGenerator = SpanChunkGenerator.Null; CompleteBlock(); var keyword = OutputAsMetaCode(Output()); - var directiveBody = SyntaxFactory.RazorDirectiveBody(keyword, cSharpCode: null); + var directiveBody = SyntaxFactory.RazorDirectiveBody(keyword, csharpCode: null); // transition could be null if we're already inside a code block. transition = transition ?? SyntaxFactory.CSharpTransition(SyntaxFactory.MissingToken(SyntaxKind.Transition), chunkGenerator: null); diff --git a/src/razor/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Syntax/Generated/Syntax.xml.Internal.Generated.cs b/src/razor/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Syntax/Generated/Syntax.xml.Internal.Generated.cs index 59718bdfa58..90bbbd9b49a 100644 --- a/src/razor/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Syntax/Generated/Syntax.xml.Internal.Generated.cs +++ b/src/razor/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Syntax/Generated/Syntax.xml.Internal.Generated.cs @@ -1,32 +1,28 @@ // using System; -using System.Collections; using System.Collections.Generic; -using System.Linq; -using System.Threading; using Microsoft.AspNetCore.Razor.Language.Legacy; -namespace Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax -{ - +namespace Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax; - internal abstract partial class RazorBlockSyntax : RazorSyntaxNode - { +internal abstract partial class RazorBlockSyntax : RazorSyntaxNode +{ internal RazorBlockSyntax(SyntaxKind kind, RazorDiagnostic[] diagnostics, SyntaxAnnotation[] annotations) - : base(kind, diagnostics, annotations) + : base(kind, diagnostics, annotations) { } + internal RazorBlockSyntax(SyntaxKind kind) - : base(kind) + : base(kind) { } public abstract SyntaxList Children { get; } - } +} - internal sealed partial class RazorDocumentSyntax : RazorSyntaxNode - { +internal sealed partial class RazorDocumentSyntax : RazorSyntaxNode +{ private readonly RazorBlockSyntax _document; private readonly SyntaxToken _endOfFile; @@ -40,7 +36,6 @@ internal RazorDocumentSyntax(SyntaxKind kind, RazorBlockSyntax document, SyntaxT _endOfFile = endOfFile; } - internal RazorDocumentSyntax(SyntaxKind kind, RazorBlockSyntax document, SyntaxToken endOfFile) : base(kind) { @@ -51,33 +46,21 @@ internal RazorDocumentSyntax(SyntaxKind kind, RazorBlockSyntax document, SyntaxT _endOfFile = endOfFile; } - public RazorBlockSyntax Document { get { return _document; } } - public SyntaxToken EndOfFile { get { return _endOfFile; } } + public RazorBlockSyntax Document => _document; + public SyntaxToken EndOfFile => _endOfFile; internal override GreenNode GetSlot(int index) - { - switch (index) + => index switch { - case 0: return _document; - case 1: return _endOfFile; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.RazorDocumentSyntax(this, parent, position); - } + 0 => _document, + 1 => _endOfFile, + _ => null + }; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitRazorDocument(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.RazorDocumentSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitRazorDocument(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitRazorDocument(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitRazorDocument(this); public RazorDocumentSyntax Update(RazorBlockSyntax document, SyntaxToken endOfFile) { @@ -86,10 +69,10 @@ public RazorDocumentSyntax Update(RazorBlockSyntax document, SyntaxToken endOfFi var newNode = SyntaxFactory.RazorDocument(document, endOfFile); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -97,18 +80,14 @@ public RazorDocumentSyntax Update(RazorBlockSyntax document, SyntaxToken endOfFi } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new RazorDocumentSyntax(Kind, _document, _endOfFile, diagnostics, GetAnnotations()); - } + => new RazorDocumentSyntax(Kind, _document, _endOfFile, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new RazorDocumentSyntax(Kind, _document, _endOfFile, GetDiagnostics(), annotations); - } - } + => new RazorDocumentSyntax(Kind, _document, _endOfFile, GetDiagnostics(), annotations); +} - internal sealed partial class RazorCommentBlockSyntax : RazorSyntaxNode - { +internal sealed partial class RazorCommentBlockSyntax : RazorSyntaxNode +{ private readonly SyntaxToken _startCommentTransition; private readonly SyntaxToken _startCommentStar; private readonly SyntaxToken _comment; @@ -131,7 +110,6 @@ internal RazorCommentBlockSyntax(SyntaxKind kind, SyntaxToken startCommentTransi _endCommentTransition = endCommentTransition; } - internal RazorCommentBlockSyntax(SyntaxKind kind, SyntaxToken startCommentTransition, SyntaxToken startCommentStar, SyntaxToken comment, SyntaxToken endCommentStar, SyntaxToken endCommentTransition) : base(kind) { @@ -148,39 +126,27 @@ internal RazorCommentBlockSyntax(SyntaxKind kind, SyntaxToken startCommentTransi _endCommentTransition = endCommentTransition; } - public SyntaxToken StartCommentTransition { get { return _startCommentTransition; } } - public SyntaxToken StartCommentStar { get { return _startCommentStar; } } - public SyntaxToken Comment { get { return _comment; } } - public SyntaxToken EndCommentStar { get { return _endCommentStar; } } - public SyntaxToken EndCommentTransition { get { return _endCommentTransition; } } + public SyntaxToken StartCommentTransition => _startCommentTransition; + public SyntaxToken StartCommentStar => _startCommentStar; + public SyntaxToken Comment => _comment; + public SyntaxToken EndCommentStar => _endCommentStar; + public SyntaxToken EndCommentTransition => _endCommentTransition; internal override GreenNode GetSlot(int index) - { - switch (index) - { - case 0: return _startCommentTransition; - case 1: return _startCommentStar; - case 2: return _comment; - case 3: return _endCommentStar; - case 4: return _endCommentTransition; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.RazorCommentBlockSyntax(this, parent, position); - } + => index switch + { + 0 => _startCommentTransition, + 1 => _startCommentStar, + 2 => _comment, + 3 => _endCommentStar, + 4 => _endCommentTransition, + _ => null + }; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitRazorCommentBlock(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.RazorCommentBlockSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitRazorCommentBlock(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitRazorCommentBlock(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitRazorCommentBlock(this); public RazorCommentBlockSyntax Update(SyntaxToken startCommentTransition, SyntaxToken startCommentStar, SyntaxToken comment, SyntaxToken endCommentStar, SyntaxToken endCommentTransition) { @@ -189,10 +155,10 @@ public RazorCommentBlockSyntax Update(SyntaxToken startCommentTransition, Syntax var newNode = SyntaxFactory.RazorCommentBlock(startCommentTransition, startCommentStar, comment, endCommentStar, endCommentTransition); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -200,18 +166,14 @@ public RazorCommentBlockSyntax Update(SyntaxToken startCommentTransition, Syntax } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new RazorCommentBlockSyntax(Kind, _startCommentTransition, _startCommentStar, _comment, _endCommentStar, _endCommentTransition, diagnostics, GetAnnotations()); - } + => new RazorCommentBlockSyntax(Kind, _startCommentTransition, _startCommentStar, _comment, _endCommentStar, _endCommentTransition, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new RazorCommentBlockSyntax(Kind, _startCommentTransition, _startCommentStar, _comment, _endCommentStar, _endCommentTransition, GetDiagnostics(), annotations); - } - } + => new RazorCommentBlockSyntax(Kind, _startCommentTransition, _startCommentStar, _comment, _endCommentStar, _endCommentTransition, GetDiagnostics(), annotations); +} - internal sealed partial class RazorMetaCodeSyntax : RazorSyntaxNode - { +internal sealed partial class RazorMetaCodeSyntax : RazorSyntaxNode +{ private readonly GreenNode _metaCode; private readonly ISpanChunkGenerator _chunkGenerator; @@ -227,7 +189,6 @@ internal RazorMetaCodeSyntax(SyntaxKind kind, GreenNode metaCode, ISpanChunkGene _chunkGenerator = chunkGenerator; } - internal RazorMetaCodeSyntax(SyntaxKind kind, GreenNode metaCode, ISpanChunkGenerator chunkGenerator) : base(kind) { @@ -240,44 +201,28 @@ internal RazorMetaCodeSyntax(SyntaxKind kind, GreenNode metaCode, ISpanChunkGene _chunkGenerator = chunkGenerator; } - public SyntaxList MetaCode { get { return new SyntaxList(_metaCode); } } - public ISpanChunkGenerator ChunkGenerator { get { return _chunkGenerator; } } + public SyntaxList MetaCode => new SyntaxList(_metaCode); + public ISpanChunkGenerator ChunkGenerator => _chunkGenerator; internal override GreenNode GetSlot(int index) - { - switch (index) - { - case 0: return _metaCode; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.RazorMetaCodeSyntax(this, parent, position); - } + => index == 0 ? this._metaCode : null; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitRazorMetaCode(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.RazorMetaCodeSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitRazorMetaCode(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitRazorMetaCode(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitRazorMetaCode(this); - public RazorMetaCodeSyntax Update(Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList metaCode, ISpanChunkGenerator chunkGenerator) + public RazorMetaCodeSyntax Update(InternalSyntax.SyntaxList metaCode, ISpanChunkGenerator chunkGenerator) { if (metaCode != MetaCode) { var newNode = SyntaxFactory.RazorMetaCode(metaCode, chunkGenerator); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -285,18 +230,14 @@ public RazorMetaCodeSyntax Update(Microsoft.AspNetCore.Razor.Language.Syntax.Int } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new RazorMetaCodeSyntax(Kind, _metaCode, _chunkGenerator, diagnostics, GetAnnotations()); - } + => new RazorMetaCodeSyntax(Kind, _metaCode, _chunkGenerator, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new RazorMetaCodeSyntax(Kind, _metaCode, _chunkGenerator, GetDiagnostics(), annotations); - } - } + => new RazorMetaCodeSyntax(Kind, _metaCode, _chunkGenerator, GetDiagnostics(), annotations); +} - internal sealed partial class GenericBlockSyntax : RazorBlockSyntax - { +internal sealed partial class GenericBlockSyntax : RazorBlockSyntax +{ private readonly GreenNode _children; internal GenericBlockSyntax(SyntaxKind kind, GreenNode children, RazorDiagnostic[] diagnostics, SyntaxAnnotation[] annotations) @@ -310,7 +251,6 @@ internal GenericBlockSyntax(SyntaxKind kind, GreenNode children, RazorDiagnostic } } - internal GenericBlockSyntax(SyntaxKind kind, GreenNode children) : base(kind) { @@ -322,43 +262,27 @@ internal GenericBlockSyntax(SyntaxKind kind, GreenNode children) } } - public override SyntaxList Children { get { return new SyntaxList(_children); } } + public override SyntaxList Children => new SyntaxList(_children); internal override GreenNode GetSlot(int index) - { - switch (index) - { - case 0: return _children; - default: return null; - } - } + => index == 0 ? this._children : null; - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.GenericBlockSyntax(this, parent, position); - } - - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitGenericBlock(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.GenericBlockSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitGenericBlock(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitGenericBlock(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitGenericBlock(this); - public GenericBlockSyntax Update(Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList children) + public GenericBlockSyntax Update(InternalSyntax.SyntaxList children) { if (children != Children) { var newNode = SyntaxFactory.GenericBlock(children); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -366,18 +290,14 @@ public GenericBlockSyntax Update(Microsoft.AspNetCore.Razor.Language.Syntax.Inte } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new GenericBlockSyntax(Kind, _children, diagnostics, GetAnnotations()); - } + => new GenericBlockSyntax(Kind, _children, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new GenericBlockSyntax(Kind, _children, GetDiagnostics(), annotations); - } - } + => new GenericBlockSyntax(Kind, _children, GetDiagnostics(), annotations); +} - internal sealed partial class UnclassifiedTextLiteralSyntax : RazorSyntaxNode - { +internal sealed partial class UnclassifiedTextLiteralSyntax : RazorSyntaxNode +{ private readonly GreenNode _literalTokens; private readonly ISpanChunkGenerator _chunkGenerator; @@ -393,7 +313,6 @@ internal UnclassifiedTextLiteralSyntax(SyntaxKind kind, GreenNode literalTokens, _chunkGenerator = chunkGenerator; } - internal UnclassifiedTextLiteralSyntax(SyntaxKind kind, GreenNode literalTokens, ISpanChunkGenerator chunkGenerator) : base(kind) { @@ -406,44 +325,28 @@ internal UnclassifiedTextLiteralSyntax(SyntaxKind kind, GreenNode literalTokens, _chunkGenerator = chunkGenerator; } - public SyntaxList LiteralTokens { get { return new SyntaxList(_literalTokens); } } - public ISpanChunkGenerator ChunkGenerator { get { return _chunkGenerator; } } + public SyntaxList LiteralTokens => new SyntaxList(_literalTokens); + public ISpanChunkGenerator ChunkGenerator => _chunkGenerator; internal override GreenNode GetSlot(int index) - { - switch (index) - { - case 0: return _literalTokens; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.UnclassifiedTextLiteralSyntax(this, parent, position); - } + => index == 0 ? this._literalTokens : null; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitUnclassifiedTextLiteral(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.UnclassifiedTextLiteralSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitUnclassifiedTextLiteral(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitUnclassifiedTextLiteral(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitUnclassifiedTextLiteral(this); - public UnclassifiedTextLiteralSyntax Update(Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) + public UnclassifiedTextLiteralSyntax Update(InternalSyntax.SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) { if (literalTokens != LiteralTokens) { var newNode = SyntaxFactory.UnclassifiedTextLiteral(literalTokens, chunkGenerator); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -451,30 +354,27 @@ public UnclassifiedTextLiteralSyntax Update(Microsoft.AspNetCore.Razor.Language. } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new UnclassifiedTextLiteralSyntax(Kind, _literalTokens, _chunkGenerator, diagnostics, GetAnnotations()); - } + => new UnclassifiedTextLiteralSyntax(Kind, _literalTokens, _chunkGenerator, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new UnclassifiedTextLiteralSyntax(Kind, _literalTokens, _chunkGenerator, GetDiagnostics(), annotations); - } - } + => new UnclassifiedTextLiteralSyntax(Kind, _literalTokens, _chunkGenerator, GetDiagnostics(), annotations); +} - internal abstract partial class MarkupSyntaxNode : RazorSyntaxNode - { +internal abstract partial class MarkupSyntaxNode : RazorSyntaxNode +{ internal MarkupSyntaxNode(SyntaxKind kind, RazorDiagnostic[] diagnostics, SyntaxAnnotation[] annotations) - : base(kind, diagnostics, annotations) + : base(kind, diagnostics, annotations) { } + internal MarkupSyntaxNode(SyntaxKind kind) - : base(kind) + : base(kind) { } - } +} - internal sealed partial class MarkupBlockSyntax : RazorBlockSyntax - { +internal sealed partial class MarkupBlockSyntax : RazorBlockSyntax +{ private readonly GreenNode _children; internal MarkupBlockSyntax(SyntaxKind kind, GreenNode children, RazorDiagnostic[] diagnostics, SyntaxAnnotation[] annotations) @@ -488,7 +388,6 @@ internal MarkupBlockSyntax(SyntaxKind kind, GreenNode children, RazorDiagnostic[ } } - internal MarkupBlockSyntax(SyntaxKind kind, GreenNode children) : base(kind) { @@ -500,43 +399,27 @@ internal MarkupBlockSyntax(SyntaxKind kind, GreenNode children) } } - public override SyntaxList Children { get { return new SyntaxList(_children); } } + public override SyntaxList Children => new SyntaxList(_children); internal override GreenNode GetSlot(int index) - { - switch (index) - { - case 0: return _children; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.MarkupBlockSyntax(this, parent, position); - } + => index == 0 ? this._children : null; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupBlock(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.MarkupBlockSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupBlock(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupBlock(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupBlock(this); - public MarkupBlockSyntax Update(Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList children) + public MarkupBlockSyntax Update(InternalSyntax.SyntaxList children) { if (children != Children) { var newNode = SyntaxFactory.MarkupBlock(children); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -544,18 +427,14 @@ public MarkupBlockSyntax Update(Microsoft.AspNetCore.Razor.Language.Syntax.Inter } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new MarkupBlockSyntax(Kind, _children, diagnostics, GetAnnotations()); - } + => new MarkupBlockSyntax(Kind, _children, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new MarkupBlockSyntax(Kind, _children, GetDiagnostics(), annotations); - } - } + => new MarkupBlockSyntax(Kind, _children, GetDiagnostics(), annotations); +} - internal sealed partial class MarkupTransitionSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupTransitionSyntax : MarkupSyntaxNode +{ private readonly GreenNode _transitionTokens; private readonly ISpanChunkGenerator _chunkGenerator; @@ -571,7 +450,6 @@ internal MarkupTransitionSyntax(SyntaxKind kind, GreenNode transitionTokens, ISp _chunkGenerator = chunkGenerator; } - internal MarkupTransitionSyntax(SyntaxKind kind, GreenNode transitionTokens, ISpanChunkGenerator chunkGenerator) : base(kind) { @@ -584,44 +462,28 @@ internal MarkupTransitionSyntax(SyntaxKind kind, GreenNode transitionTokens, ISp _chunkGenerator = chunkGenerator; } - public SyntaxList TransitionTokens { get { return new SyntaxList(_transitionTokens); } } - public ISpanChunkGenerator ChunkGenerator { get { return _chunkGenerator; } } + public SyntaxList TransitionTokens => new SyntaxList(_transitionTokens); + public ISpanChunkGenerator ChunkGenerator => _chunkGenerator; internal override GreenNode GetSlot(int index) - { - switch (index) - { - case 0: return _transitionTokens; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.MarkupTransitionSyntax(this, parent, position); - } + => index == 0 ? this._transitionTokens : null; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupTransition(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.MarkupTransitionSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupTransition(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTransition(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTransition(this); - public MarkupTransitionSyntax Update(Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList transitionTokens, ISpanChunkGenerator chunkGenerator) + public MarkupTransitionSyntax Update(InternalSyntax.SyntaxList transitionTokens, ISpanChunkGenerator chunkGenerator) { if (transitionTokens != TransitionTokens) { var newNode = SyntaxFactory.MarkupTransition(transitionTokens, chunkGenerator); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -629,18 +491,14 @@ public MarkupTransitionSyntax Update(Microsoft.AspNetCore.Razor.Language.Syntax. } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new MarkupTransitionSyntax(Kind, _transitionTokens, _chunkGenerator, diagnostics, GetAnnotations()); - } + => new MarkupTransitionSyntax(Kind, _transitionTokens, _chunkGenerator, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new MarkupTransitionSyntax(Kind, _transitionTokens, _chunkGenerator, GetDiagnostics(), annotations); - } - } + => new MarkupTransitionSyntax(Kind, _transitionTokens, _chunkGenerator, GetDiagnostics(), annotations); +} - internal sealed partial class MarkupTextLiteralSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupTextLiteralSyntax : MarkupSyntaxNode +{ private readonly GreenNode _literalTokens; private readonly ISpanChunkGenerator _chunkGenerator; @@ -656,7 +514,6 @@ internal MarkupTextLiteralSyntax(SyntaxKind kind, GreenNode literalTokens, ISpan _chunkGenerator = chunkGenerator; } - internal MarkupTextLiteralSyntax(SyntaxKind kind, GreenNode literalTokens, ISpanChunkGenerator chunkGenerator) : base(kind) { @@ -669,44 +526,28 @@ internal MarkupTextLiteralSyntax(SyntaxKind kind, GreenNode literalTokens, ISpan _chunkGenerator = chunkGenerator; } - public SyntaxList LiteralTokens { get { return new SyntaxList(_literalTokens); } } - public ISpanChunkGenerator ChunkGenerator { get { return _chunkGenerator; } } + public SyntaxList LiteralTokens => new SyntaxList(_literalTokens); + public ISpanChunkGenerator ChunkGenerator => _chunkGenerator; internal override GreenNode GetSlot(int index) - { - switch (index) - { - case 0: return _literalTokens; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.MarkupTextLiteralSyntax(this, parent, position); - } + => index == 0 ? this._literalTokens : null; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupTextLiteral(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.MarkupTextLiteralSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupTextLiteral(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTextLiteral(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTextLiteral(this); - public MarkupTextLiteralSyntax Update(Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) + public MarkupTextLiteralSyntax Update(InternalSyntax.SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) { if (literalTokens != LiteralTokens) { var newNode = SyntaxFactory.MarkupTextLiteral(literalTokens, chunkGenerator); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -714,18 +555,14 @@ public MarkupTextLiteralSyntax Update(Microsoft.AspNetCore.Razor.Language.Syntax } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new MarkupTextLiteralSyntax(Kind, _literalTokens, _chunkGenerator, diagnostics, GetAnnotations()); - } + => new MarkupTextLiteralSyntax(Kind, _literalTokens, _chunkGenerator, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new MarkupTextLiteralSyntax(Kind, _literalTokens, _chunkGenerator, GetDiagnostics(), annotations); - } - } + => new MarkupTextLiteralSyntax(Kind, _literalTokens, _chunkGenerator, GetDiagnostics(), annotations); +} - internal sealed partial class MarkupEphemeralTextLiteralSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupEphemeralTextLiteralSyntax : MarkupSyntaxNode +{ private readonly GreenNode _literalTokens; private readonly ISpanChunkGenerator _chunkGenerator; @@ -741,7 +578,6 @@ internal MarkupEphemeralTextLiteralSyntax(SyntaxKind kind, GreenNode literalToke _chunkGenerator = chunkGenerator; } - internal MarkupEphemeralTextLiteralSyntax(SyntaxKind kind, GreenNode literalTokens, ISpanChunkGenerator chunkGenerator) : base(kind) { @@ -754,44 +590,28 @@ internal MarkupEphemeralTextLiteralSyntax(SyntaxKind kind, GreenNode literalToke _chunkGenerator = chunkGenerator; } - public SyntaxList LiteralTokens { get { return new SyntaxList(_literalTokens); } } - public ISpanChunkGenerator ChunkGenerator { get { return _chunkGenerator; } } + public SyntaxList LiteralTokens => new SyntaxList(_literalTokens); + public ISpanChunkGenerator ChunkGenerator => _chunkGenerator; internal override GreenNode GetSlot(int index) - { - switch (index) - { - case 0: return _literalTokens; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.MarkupEphemeralTextLiteralSyntax(this, parent, position); - } + => index == 0 ? this._literalTokens : null; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupEphemeralTextLiteral(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.MarkupEphemeralTextLiteralSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupEphemeralTextLiteral(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupEphemeralTextLiteral(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupEphemeralTextLiteral(this); - public MarkupEphemeralTextLiteralSyntax Update(Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) + public MarkupEphemeralTextLiteralSyntax Update(InternalSyntax.SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) { if (literalTokens != LiteralTokens) { var newNode = SyntaxFactory.MarkupEphemeralTextLiteral(literalTokens, chunkGenerator); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -799,18 +619,14 @@ public MarkupEphemeralTextLiteralSyntax Update(Microsoft.AspNetCore.Razor.Langua } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new MarkupEphemeralTextLiteralSyntax(Kind, _literalTokens, _chunkGenerator, diagnostics, GetAnnotations()); - } + => new MarkupEphemeralTextLiteralSyntax(Kind, _literalTokens, _chunkGenerator, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new MarkupEphemeralTextLiteralSyntax(Kind, _literalTokens, _chunkGenerator, GetDiagnostics(), annotations); - } - } + => new MarkupEphemeralTextLiteralSyntax(Kind, _literalTokens, _chunkGenerator, GetDiagnostics(), annotations); +} - internal sealed partial class MarkupCommentBlockSyntax : RazorBlockSyntax - { +internal sealed partial class MarkupCommentBlockSyntax : RazorBlockSyntax +{ private readonly GreenNode _children; internal MarkupCommentBlockSyntax(SyntaxKind kind, GreenNode children, RazorDiagnostic[] diagnostics, SyntaxAnnotation[] annotations) @@ -824,7 +640,6 @@ internal MarkupCommentBlockSyntax(SyntaxKind kind, GreenNode children, RazorDiag } } - internal MarkupCommentBlockSyntax(SyntaxKind kind, GreenNode children) : base(kind) { @@ -836,43 +651,27 @@ internal MarkupCommentBlockSyntax(SyntaxKind kind, GreenNode children) } } - public override SyntaxList Children { get { return new SyntaxList(_children); } } + public override SyntaxList Children => new SyntaxList(_children); internal override GreenNode GetSlot(int index) - { - switch (index) - { - case 0: return _children; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.MarkupCommentBlockSyntax(this, parent, position); - } + => index == 0 ? this._children : null; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupCommentBlock(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.MarkupCommentBlockSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupCommentBlock(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupCommentBlock(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupCommentBlock(this); - public MarkupCommentBlockSyntax Update(Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList children) + public MarkupCommentBlockSyntax Update(InternalSyntax.SyntaxList children) { if (children != Children) { var newNode = SyntaxFactory.MarkupCommentBlock(children); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -880,18 +679,14 @@ public MarkupCommentBlockSyntax Update(Microsoft.AspNetCore.Razor.Language.Synta } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new MarkupCommentBlockSyntax(Kind, _children, diagnostics, GetAnnotations()); - } + => new MarkupCommentBlockSyntax(Kind, _children, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new MarkupCommentBlockSyntax(Kind, _children, GetDiagnostics(), annotations); - } - } + => new MarkupCommentBlockSyntax(Kind, _children, GetDiagnostics(), annotations); +} - internal sealed partial class MarkupMinimizedAttributeBlockSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupMinimizedAttributeBlockSyntax : MarkupSyntaxNode +{ private readonly MarkupTextLiteralSyntax _namePrefix; private readonly MarkupTextLiteralSyntax _name; @@ -908,7 +703,6 @@ internal MarkupMinimizedAttributeBlockSyntax(SyntaxKind kind, MarkupTextLiteralS _name = name; } - internal MarkupMinimizedAttributeBlockSyntax(SyntaxKind kind, MarkupTextLiteralSyntax namePrefix, MarkupTextLiteralSyntax name) : base(kind) { @@ -922,33 +716,21 @@ internal MarkupMinimizedAttributeBlockSyntax(SyntaxKind kind, MarkupTextLiteralS _name = name; } - public MarkupTextLiteralSyntax NamePrefix { get { return _namePrefix; } } - public MarkupTextLiteralSyntax Name { get { return _name; } } + public MarkupTextLiteralSyntax NamePrefix => _namePrefix; + public MarkupTextLiteralSyntax Name => _name; internal override GreenNode GetSlot(int index) - { - switch (index) + => index switch { - case 0: return _namePrefix; - case 1: return _name; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.MarkupMinimizedAttributeBlockSyntax(this, parent, position); - } + 0 => _namePrefix, + 1 => _name, + _ => null + }; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupMinimizedAttributeBlock(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.MarkupMinimizedAttributeBlockSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupMinimizedAttributeBlock(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupMinimizedAttributeBlock(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupMinimizedAttributeBlock(this); public MarkupMinimizedAttributeBlockSyntax Update(MarkupTextLiteralSyntax namePrefix, MarkupTextLiteralSyntax name) { @@ -957,10 +739,10 @@ public MarkupMinimizedAttributeBlockSyntax Update(MarkupTextLiteralSyntax namePr var newNode = SyntaxFactory.MarkupMinimizedAttributeBlock(namePrefix, name); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -968,18 +750,14 @@ public MarkupMinimizedAttributeBlockSyntax Update(MarkupTextLiteralSyntax namePr } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new MarkupMinimizedAttributeBlockSyntax(Kind, _namePrefix, _name, diagnostics, GetAnnotations()); - } + => new MarkupMinimizedAttributeBlockSyntax(Kind, _namePrefix, _name, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new MarkupMinimizedAttributeBlockSyntax(Kind, _namePrefix, _name, GetDiagnostics(), annotations); - } - } + => new MarkupMinimizedAttributeBlockSyntax(Kind, _namePrefix, _name, GetDiagnostics(), annotations); +} - internal sealed partial class MarkupAttributeBlockSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupAttributeBlockSyntax : MarkupSyntaxNode +{ private readonly MarkupTextLiteralSyntax _namePrefix; private readonly MarkupTextLiteralSyntax _name; private readonly MarkupTextLiteralSyntax _nameSuffix; @@ -1023,7 +801,6 @@ internal MarkupAttributeBlockSyntax(SyntaxKind kind, MarkupTextLiteralSyntax nam } } - internal MarkupAttributeBlockSyntax(SyntaxKind kind, MarkupTextLiteralSyntax namePrefix, MarkupTextLiteralSyntax name, MarkupTextLiteralSyntax nameSuffix, SyntaxToken equalsToken, MarkupTextLiteralSyntax valuePrefix, RazorBlockSyntax value, MarkupTextLiteralSyntax valueSuffix) : base(kind) { @@ -1059,43 +836,31 @@ internal MarkupAttributeBlockSyntax(SyntaxKind kind, MarkupTextLiteralSyntax nam } } - public MarkupTextLiteralSyntax NamePrefix { get { return _namePrefix; } } - public MarkupTextLiteralSyntax Name { get { return _name; } } - public MarkupTextLiteralSyntax NameSuffix { get { return _nameSuffix; } } - public SyntaxToken EqualsToken { get { return _equalsToken; } } - public MarkupTextLiteralSyntax ValuePrefix { get { return _valuePrefix; } } - public RazorBlockSyntax Value { get { return _value; } } - public MarkupTextLiteralSyntax ValueSuffix { get { return _valueSuffix; } } + public MarkupTextLiteralSyntax NamePrefix => _namePrefix; + public MarkupTextLiteralSyntax Name => _name; + public MarkupTextLiteralSyntax NameSuffix => _nameSuffix; + public SyntaxToken EqualsToken => _equalsToken; + public MarkupTextLiteralSyntax ValuePrefix => _valuePrefix; + public RazorBlockSyntax Value => _value; + public MarkupTextLiteralSyntax ValueSuffix => _valueSuffix; internal override GreenNode GetSlot(int index) - { - switch (index) - { - case 0: return _namePrefix; - case 1: return _name; - case 2: return _nameSuffix; - case 3: return _equalsToken; - case 4: return _valuePrefix; - case 5: return _value; - case 6: return _valueSuffix; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.MarkupAttributeBlockSyntax(this, parent, position); - } + => index switch + { + 0 => _namePrefix, + 1 => _name, + 2 => _nameSuffix, + 3 => _equalsToken, + 4 => _valuePrefix, + 5 => _value, + 6 => _valueSuffix, + _ => null + }; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupAttributeBlock(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.MarkupAttributeBlockSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupAttributeBlock(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupAttributeBlock(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupAttributeBlock(this); public MarkupAttributeBlockSyntax Update(MarkupTextLiteralSyntax namePrefix, MarkupTextLiteralSyntax name, MarkupTextLiteralSyntax nameSuffix, SyntaxToken equalsToken, MarkupTextLiteralSyntax valuePrefix, RazorBlockSyntax value, MarkupTextLiteralSyntax valueSuffix) { @@ -1104,10 +869,10 @@ public MarkupAttributeBlockSyntax Update(MarkupTextLiteralSyntax namePrefix, Mar var newNode = SyntaxFactory.MarkupAttributeBlock(namePrefix, name, nameSuffix, equalsToken, valuePrefix, value, valueSuffix); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -1115,18 +880,14 @@ public MarkupAttributeBlockSyntax Update(MarkupTextLiteralSyntax namePrefix, Mar } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new MarkupAttributeBlockSyntax(Kind, _namePrefix, _name, _nameSuffix, _equalsToken, _valuePrefix, _value, _valueSuffix, diagnostics, GetAnnotations()); - } + => new MarkupAttributeBlockSyntax(Kind, _namePrefix, _name, _nameSuffix, _equalsToken, _valuePrefix, _value, _valueSuffix, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new MarkupAttributeBlockSyntax(Kind, _namePrefix, _name, _nameSuffix, _equalsToken, _valuePrefix, _value, _valueSuffix, GetDiagnostics(), annotations); - } - } + => new MarkupAttributeBlockSyntax(Kind, _namePrefix, _name, _nameSuffix, _equalsToken, _valuePrefix, _value, _valueSuffix, GetDiagnostics(), annotations); +} - internal sealed partial class MarkupMiscAttributeContentSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupMiscAttributeContentSyntax : MarkupSyntaxNode +{ private readonly GreenNode _children; internal MarkupMiscAttributeContentSyntax(SyntaxKind kind, GreenNode children, RazorDiagnostic[] diagnostics, SyntaxAnnotation[] annotations) @@ -1140,7 +901,6 @@ internal MarkupMiscAttributeContentSyntax(SyntaxKind kind, GreenNode children, R } } - internal MarkupMiscAttributeContentSyntax(SyntaxKind kind, GreenNode children) : base(kind) { @@ -1152,43 +912,27 @@ internal MarkupMiscAttributeContentSyntax(SyntaxKind kind, GreenNode children) } } - public SyntaxList Children { get { return new SyntaxList(_children); } } + public SyntaxList Children => new SyntaxList(_children); internal override GreenNode GetSlot(int index) - { - switch (index) - { - case 0: return _children; - default: return null; - } - } + => index == 0 ? this._children : null; - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.MarkupMiscAttributeContentSyntax(this, parent, position); - } - - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupMiscAttributeContent(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.MarkupMiscAttributeContentSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupMiscAttributeContent(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupMiscAttributeContent(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupMiscAttributeContent(this); - public MarkupMiscAttributeContentSyntax Update(Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList children) + public MarkupMiscAttributeContentSyntax Update(InternalSyntax.SyntaxList children) { if (children != Children) { var newNode = SyntaxFactory.MarkupMiscAttributeContent(children); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -1196,18 +940,14 @@ public MarkupMiscAttributeContentSyntax Update(Microsoft.AspNetCore.Razor.Langua } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new MarkupMiscAttributeContentSyntax(Kind, _children, diagnostics, GetAnnotations()); - } + => new MarkupMiscAttributeContentSyntax(Kind, _children, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new MarkupMiscAttributeContentSyntax(Kind, _children, GetDiagnostics(), annotations); - } - } + => new MarkupMiscAttributeContentSyntax(Kind, _children, GetDiagnostics(), annotations); +} - internal sealed partial class MarkupLiteralAttributeValueSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupLiteralAttributeValueSyntax : MarkupSyntaxNode +{ private readonly MarkupTextLiteralSyntax _prefix; private readonly MarkupTextLiteralSyntax _value; @@ -1227,7 +967,6 @@ internal MarkupLiteralAttributeValueSyntax(SyntaxKind kind, MarkupTextLiteralSyn } } - internal MarkupLiteralAttributeValueSyntax(SyntaxKind kind, MarkupTextLiteralSyntax prefix, MarkupTextLiteralSyntax value) : base(kind) { @@ -1244,33 +983,21 @@ internal MarkupLiteralAttributeValueSyntax(SyntaxKind kind, MarkupTextLiteralSyn } } - public MarkupTextLiteralSyntax Prefix { get { return _prefix; } } - public MarkupTextLiteralSyntax Value { get { return _value; } } + public MarkupTextLiteralSyntax Prefix => _prefix; + public MarkupTextLiteralSyntax Value => _value; internal override GreenNode GetSlot(int index) - { - switch (index) + => index switch { - case 0: return _prefix; - case 1: return _value; - default: return null; - } - } + 0 => _prefix, + 1 => _value, + _ => null + }; - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.MarkupLiteralAttributeValueSyntax(this, parent, position); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.MarkupLiteralAttributeValueSyntax(this, parent, position); - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupLiteralAttributeValue(this); - } - - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupLiteralAttributeValue(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupLiteralAttributeValue(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupLiteralAttributeValue(this); public MarkupLiteralAttributeValueSyntax Update(MarkupTextLiteralSyntax prefix, MarkupTextLiteralSyntax value) { @@ -1279,10 +1006,10 @@ public MarkupLiteralAttributeValueSyntax Update(MarkupTextLiteralSyntax prefix, var newNode = SyntaxFactory.MarkupLiteralAttributeValue(prefix, value); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -1290,18 +1017,14 @@ public MarkupLiteralAttributeValueSyntax Update(MarkupTextLiteralSyntax prefix, } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new MarkupLiteralAttributeValueSyntax(Kind, _prefix, _value, diagnostics, GetAnnotations()); - } + => new MarkupLiteralAttributeValueSyntax(Kind, _prefix, _value, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new MarkupLiteralAttributeValueSyntax(Kind, _prefix, _value, GetDiagnostics(), annotations); - } - } + => new MarkupLiteralAttributeValueSyntax(Kind, _prefix, _value, GetDiagnostics(), annotations); +} - internal sealed partial class MarkupDynamicAttributeValueSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupDynamicAttributeValueSyntax : MarkupSyntaxNode +{ private readonly MarkupTextLiteralSyntax _prefix; private readonly RazorBlockSyntax _value; @@ -1318,7 +1041,6 @@ internal MarkupDynamicAttributeValueSyntax(SyntaxKind kind, MarkupTextLiteralSyn _value = value; } - internal MarkupDynamicAttributeValueSyntax(SyntaxKind kind, MarkupTextLiteralSyntax prefix, RazorBlockSyntax value) : base(kind) { @@ -1332,33 +1054,21 @@ internal MarkupDynamicAttributeValueSyntax(SyntaxKind kind, MarkupTextLiteralSyn _value = value; } - public MarkupTextLiteralSyntax Prefix { get { return _prefix; } } - public RazorBlockSyntax Value { get { return _value; } } + public MarkupTextLiteralSyntax Prefix => _prefix; + public RazorBlockSyntax Value => _value; internal override GreenNode GetSlot(int index) - { - switch (index) + => index switch { - case 0: return _prefix; - case 1: return _value; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.MarkupDynamicAttributeValueSyntax(this, parent, position); - } + 0 => _prefix, + 1 => _value, + _ => null + }; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupDynamicAttributeValue(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.MarkupDynamicAttributeValueSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupDynamicAttributeValue(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupDynamicAttributeValue(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupDynamicAttributeValue(this); public MarkupDynamicAttributeValueSyntax Update(MarkupTextLiteralSyntax prefix, RazorBlockSyntax value) { @@ -1367,10 +1077,10 @@ public MarkupDynamicAttributeValueSyntax Update(MarkupTextLiteralSyntax prefix, var newNode = SyntaxFactory.MarkupDynamicAttributeValue(prefix, value); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -1378,18 +1088,14 @@ public MarkupDynamicAttributeValueSyntax Update(MarkupTextLiteralSyntax prefix, } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new MarkupDynamicAttributeValueSyntax(Kind, _prefix, _value, diagnostics, GetAnnotations()); - } + => new MarkupDynamicAttributeValueSyntax(Kind, _prefix, _value, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new MarkupDynamicAttributeValueSyntax(Kind, _prefix, _value, GetDiagnostics(), annotations); - } - } + => new MarkupDynamicAttributeValueSyntax(Kind, _prefix, _value, GetDiagnostics(), annotations); +} - internal sealed partial class MarkupElementSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupElementSyntax : MarkupSyntaxNode +{ private readonly MarkupStartTagSyntax _startTag; private readonly GreenNode _body; private readonly MarkupEndTagSyntax _endTag; @@ -1415,7 +1121,6 @@ internal MarkupElementSyntax(SyntaxKind kind, MarkupStartTagSyntax startTag, Gre } } - internal MarkupElementSyntax(SyntaxKind kind, MarkupStartTagSyntax startTag, GreenNode body, MarkupEndTagSyntax endTag) : base(kind) { @@ -1437,47 +1142,35 @@ internal MarkupElementSyntax(SyntaxKind kind, MarkupStartTagSyntax startTag, Gre } } - public MarkupStartTagSyntax StartTag { get { return _startTag; } } - public SyntaxList Body { get { return new SyntaxList(_body); } } - public MarkupEndTagSyntax EndTag { get { return _endTag; } } + public MarkupStartTagSyntax StartTag => _startTag; + public SyntaxList Body => new SyntaxList(_body); + public MarkupEndTagSyntax EndTag => _endTag; internal override GreenNode GetSlot(int index) - { - switch (index) + => index switch { - case 0: return _startTag; - case 1: return _body; - case 2: return _endTag; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.MarkupElementSyntax(this, parent, position); - } + 0 => _startTag, + 1 => _body, + 2 => _endTag, + _ => null + }; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupElement(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.MarkupElementSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupElement(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupElement(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupElement(this); - public MarkupElementSyntax Update(MarkupStartTagSyntax startTag, Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList body, MarkupEndTagSyntax endTag) + public MarkupElementSyntax Update(MarkupStartTagSyntax startTag, InternalSyntax.SyntaxList body, MarkupEndTagSyntax endTag) { if (startTag != StartTag || body != Body || endTag != EndTag) { var newNode = SyntaxFactory.MarkupElement(startTag, body, endTag); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -1485,18 +1178,14 @@ public MarkupElementSyntax Update(MarkupStartTagSyntax startTag, Microsoft.AspNe } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new MarkupElementSyntax(Kind, _startTag, _body, _endTag, diagnostics, GetAnnotations()); - } + => new MarkupElementSyntax(Kind, _startTag, _body, _endTag, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new MarkupElementSyntax(Kind, _startTag, _body, _endTag, GetDiagnostics(), annotations); - } - } + => new MarkupElementSyntax(Kind, _startTag, _body, _endTag, GetDiagnostics(), annotations); +} - internal sealed partial class MarkupStartTagSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupStartTagSyntax : MarkupSyntaxNode +{ private readonly SyntaxToken _openAngle; private readonly SyntaxToken _bang; private readonly SyntaxToken _name; @@ -1533,7 +1222,6 @@ internal MarkupStartTagSyntax(SyntaxKind kind, SyntaxToken openAngle, SyntaxToke _chunkGenerator = chunkGenerator; } - internal MarkupStartTagSyntax(SyntaxKind kind, SyntaxToken openAngle, SyntaxToken bang, SyntaxToken name, GreenNode attributes, SyntaxToken forwardSlash, SyntaxToken closeAngle, ISpanChunkGenerator chunkGenerator) : base(kind) { @@ -1562,54 +1250,42 @@ internal MarkupStartTagSyntax(SyntaxKind kind, SyntaxToken openAngle, SyntaxToke _chunkGenerator = chunkGenerator; } - public SyntaxToken OpenAngle { get { return _openAngle; } } - public SyntaxToken Bang { get { return _bang; } } - public SyntaxToken Name { get { return _name; } } - public SyntaxList Attributes { get { return new SyntaxList(_attributes); } } - public SyntaxToken ForwardSlash { get { return _forwardSlash; } } - public SyntaxToken CloseAngle { get { return _closeAngle; } } - public ISpanChunkGenerator ChunkGenerator { get { return _chunkGenerator; } } + public SyntaxToken OpenAngle => _openAngle; + public SyntaxToken Bang => _bang; + public SyntaxToken Name => _name; + public SyntaxList Attributes => new SyntaxList(_attributes); + public SyntaxToken ForwardSlash => _forwardSlash; + public SyntaxToken CloseAngle => _closeAngle; + public ISpanChunkGenerator ChunkGenerator => _chunkGenerator; internal override GreenNode GetSlot(int index) - { - switch (index) - { - case 0: return _openAngle; - case 1: return _bang; - case 2: return _name; - case 3: return _attributes; - case 4: return _forwardSlash; - case 5: return _closeAngle; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.MarkupStartTagSyntax(this, parent, position); - } + => index switch + { + 0 => _openAngle, + 1 => _bang, + 2 => _name, + 3 => _attributes, + 4 => _forwardSlash, + 5 => _closeAngle, + _ => null + }; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupStartTag(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.MarkupStartTagSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupStartTag(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupStartTag(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupStartTag(this); - public MarkupStartTagSyntax Update(SyntaxToken openAngle, SyntaxToken bang, SyntaxToken name, Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList attributes, SyntaxToken forwardSlash, SyntaxToken closeAngle, ISpanChunkGenerator chunkGenerator) + public MarkupStartTagSyntax Update(SyntaxToken openAngle, SyntaxToken bang, SyntaxToken name, InternalSyntax.SyntaxList attributes, SyntaxToken forwardSlash, SyntaxToken closeAngle, ISpanChunkGenerator chunkGenerator) { if (openAngle != OpenAngle || bang != Bang || name != Name || attributes != Attributes || forwardSlash != ForwardSlash || closeAngle != CloseAngle) { var newNode = SyntaxFactory.MarkupStartTag(openAngle, bang, name, attributes, forwardSlash, closeAngle, chunkGenerator); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -1617,18 +1293,14 @@ public MarkupStartTagSyntax Update(SyntaxToken openAngle, SyntaxToken bang, Synt } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new MarkupStartTagSyntax(Kind, _openAngle, _bang, _name, _attributes, _forwardSlash, _closeAngle, _chunkGenerator, diagnostics, GetAnnotations()); - } + => new MarkupStartTagSyntax(Kind, _openAngle, _bang, _name, _attributes, _forwardSlash, _closeAngle, _chunkGenerator, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new MarkupStartTagSyntax(Kind, _openAngle, _bang, _name, _attributes, _forwardSlash, _closeAngle, _chunkGenerator, GetDiagnostics(), annotations); - } - } + => new MarkupStartTagSyntax(Kind, _openAngle, _bang, _name, _attributes, _forwardSlash, _closeAngle, _chunkGenerator, GetDiagnostics(), annotations); +} - internal sealed partial class MarkupEndTagSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupEndTagSyntax : MarkupSyntaxNode +{ private readonly SyntaxToken _openAngle; private readonly SyntaxToken _forwardSlash; private readonly SyntaxToken _bang; @@ -1662,7 +1334,6 @@ internal MarkupEndTagSyntax(SyntaxKind kind, SyntaxToken openAngle, SyntaxToken _chunkGenerator = chunkGenerator; } - internal MarkupEndTagSyntax(SyntaxKind kind, SyntaxToken openAngle, SyntaxToken forwardSlash, SyntaxToken bang, SyntaxToken name, MarkupMiscAttributeContentSyntax miscAttributeContent, SyntaxToken closeAngle, ISpanChunkGenerator chunkGenerator) : base(kind) { @@ -1688,42 +1359,30 @@ internal MarkupEndTagSyntax(SyntaxKind kind, SyntaxToken openAngle, SyntaxToken _chunkGenerator = chunkGenerator; } - public SyntaxToken OpenAngle { get { return _openAngle; } } - public SyntaxToken ForwardSlash { get { return _forwardSlash; } } - public SyntaxToken Bang { get { return _bang; } } - public SyntaxToken Name { get { return _name; } } - public MarkupMiscAttributeContentSyntax MiscAttributeContent { get { return _miscAttributeContent; } } - public SyntaxToken CloseAngle { get { return _closeAngle; } } - public ISpanChunkGenerator ChunkGenerator { get { return _chunkGenerator; } } + public SyntaxToken OpenAngle => _openAngle; + public SyntaxToken ForwardSlash => _forwardSlash; + public SyntaxToken Bang => _bang; + public SyntaxToken Name => _name; + public MarkupMiscAttributeContentSyntax MiscAttributeContent => _miscAttributeContent; + public SyntaxToken CloseAngle => _closeAngle; + public ISpanChunkGenerator ChunkGenerator => _chunkGenerator; internal override GreenNode GetSlot(int index) - { - switch (index) - { - case 0: return _openAngle; - case 1: return _forwardSlash; - case 2: return _bang; - case 3: return _name; - case 4: return _miscAttributeContent; - case 5: return _closeAngle; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.MarkupEndTagSyntax(this, parent, position); - } + => index switch + { + 0 => _openAngle, + 1 => _forwardSlash, + 2 => _bang, + 3 => _name, + 4 => _miscAttributeContent, + 5 => _closeAngle, + _ => null + }; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupEndTag(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.MarkupEndTagSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupEndTag(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupEndTag(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupEndTag(this); public MarkupEndTagSyntax Update(SyntaxToken openAngle, SyntaxToken forwardSlash, SyntaxToken bang, SyntaxToken name, MarkupMiscAttributeContentSyntax miscAttributeContent, SyntaxToken closeAngle, ISpanChunkGenerator chunkGenerator) { @@ -1732,10 +1391,10 @@ public MarkupEndTagSyntax Update(SyntaxToken openAngle, SyntaxToken forwardSlash var newNode = SyntaxFactory.MarkupEndTag(openAngle, forwardSlash, bang, name, miscAttributeContent, closeAngle, chunkGenerator); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -1743,18 +1402,14 @@ public MarkupEndTagSyntax Update(SyntaxToken openAngle, SyntaxToken forwardSlash } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new MarkupEndTagSyntax(Kind, _openAngle, _forwardSlash, _bang, _name, _miscAttributeContent, _closeAngle, _chunkGenerator, diagnostics, GetAnnotations()); - } + => new MarkupEndTagSyntax(Kind, _openAngle, _forwardSlash, _bang, _name, _miscAttributeContent, _closeAngle, _chunkGenerator, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new MarkupEndTagSyntax(Kind, _openAngle, _forwardSlash, _bang, _name, _miscAttributeContent, _closeAngle, _chunkGenerator, GetDiagnostics(), annotations); - } - } + => new MarkupEndTagSyntax(Kind, _openAngle, _forwardSlash, _bang, _name, _miscAttributeContent, _closeAngle, _chunkGenerator, GetDiagnostics(), annotations); +} - internal sealed partial class MarkupTagHelperElementSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupTagHelperElementSyntax : MarkupSyntaxNode +{ private readonly MarkupTagHelperStartTagSyntax _startTag; private readonly GreenNode _body; private readonly MarkupTagHelperEndTagSyntax _endTag; @@ -1777,7 +1432,6 @@ internal MarkupTagHelperElementSyntax(SyntaxKind kind, MarkupTagHelperStartTagSy } } - internal MarkupTagHelperElementSyntax(SyntaxKind kind, MarkupTagHelperStartTagSyntax startTag, GreenNode body, MarkupTagHelperEndTagSyntax endTag) : base(kind) { @@ -1796,47 +1450,35 @@ internal MarkupTagHelperElementSyntax(SyntaxKind kind, MarkupTagHelperStartTagSy } } - public MarkupTagHelperStartTagSyntax StartTag { get { return _startTag; } } - public SyntaxList Body { get { return new SyntaxList(_body); } } - public MarkupTagHelperEndTagSyntax EndTag { get { return _endTag; } } + public MarkupTagHelperStartTagSyntax StartTag => _startTag; + public SyntaxList Body => new SyntaxList(_body); + public MarkupTagHelperEndTagSyntax EndTag => _endTag; internal override GreenNode GetSlot(int index) - { - switch (index) + => index switch { - case 0: return _startTag; - case 1: return _body; - case 2: return _endTag; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.MarkupTagHelperElementSyntax(this, parent, position); - } + 0 => _startTag, + 1 => _body, + 2 => _endTag, + _ => null + }; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupTagHelperElement(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.MarkupTagHelperElementSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupTagHelperElement(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTagHelperElement(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTagHelperElement(this); - public MarkupTagHelperElementSyntax Update(MarkupTagHelperStartTagSyntax startTag, Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList body, MarkupTagHelperEndTagSyntax endTag) + public MarkupTagHelperElementSyntax Update(MarkupTagHelperStartTagSyntax startTag, InternalSyntax.SyntaxList body, MarkupTagHelperEndTagSyntax endTag) { if (startTag != StartTag || body != Body || endTag != EndTag) { var newNode = SyntaxFactory.MarkupTagHelperElement(startTag, body, endTag); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -1844,18 +1486,14 @@ public MarkupTagHelperElementSyntax Update(MarkupTagHelperStartTagSyntax startTa } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new MarkupTagHelperElementSyntax(Kind, _startTag, _body, _endTag, diagnostics, GetAnnotations()); - } + => new MarkupTagHelperElementSyntax(Kind, _startTag, _body, _endTag, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new MarkupTagHelperElementSyntax(Kind, _startTag, _body, _endTag, GetDiagnostics(), annotations); - } - } + => new MarkupTagHelperElementSyntax(Kind, _startTag, _body, _endTag, GetDiagnostics(), annotations); +} - internal sealed partial class MarkupTagHelperStartTagSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupTagHelperStartTagSyntax : MarkupSyntaxNode +{ private readonly SyntaxToken _openAngle; private readonly SyntaxToken _bang; private readonly SyntaxToken _name; @@ -1892,7 +1530,6 @@ internal MarkupTagHelperStartTagSyntax(SyntaxKind kind, SyntaxToken openAngle, S _chunkGenerator = chunkGenerator; } - internal MarkupTagHelperStartTagSyntax(SyntaxKind kind, SyntaxToken openAngle, SyntaxToken bang, SyntaxToken name, GreenNode attributes, SyntaxToken forwardSlash, SyntaxToken closeAngle, ISpanChunkGenerator chunkGenerator) : base(kind) { @@ -1921,54 +1558,42 @@ internal MarkupTagHelperStartTagSyntax(SyntaxKind kind, SyntaxToken openAngle, S _chunkGenerator = chunkGenerator; } - public SyntaxToken OpenAngle { get { return _openAngle; } } - public SyntaxToken Bang { get { return _bang; } } - public SyntaxToken Name { get { return _name; } } - public SyntaxList Attributes { get { return new SyntaxList(_attributes); } } - public SyntaxToken ForwardSlash { get { return _forwardSlash; } } - public SyntaxToken CloseAngle { get { return _closeAngle; } } - public ISpanChunkGenerator ChunkGenerator { get { return _chunkGenerator; } } + public SyntaxToken OpenAngle => _openAngle; + public SyntaxToken Bang => _bang; + public SyntaxToken Name => _name; + public SyntaxList Attributes => new SyntaxList(_attributes); + public SyntaxToken ForwardSlash => _forwardSlash; + public SyntaxToken CloseAngle => _closeAngle; + public ISpanChunkGenerator ChunkGenerator => _chunkGenerator; internal override GreenNode GetSlot(int index) - { - switch (index) - { - case 0: return _openAngle; - case 1: return _bang; - case 2: return _name; - case 3: return _attributes; - case 4: return _forwardSlash; - case 5: return _closeAngle; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.MarkupTagHelperStartTagSyntax(this, parent, position); - } + => index switch + { + 0 => _openAngle, + 1 => _bang, + 2 => _name, + 3 => _attributes, + 4 => _forwardSlash, + 5 => _closeAngle, + _ => null + }; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupTagHelperStartTag(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.MarkupTagHelperStartTagSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupTagHelperStartTag(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTagHelperStartTag(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTagHelperStartTag(this); - public MarkupTagHelperStartTagSyntax Update(SyntaxToken openAngle, SyntaxToken bang, SyntaxToken name, Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList attributes, SyntaxToken forwardSlash, SyntaxToken closeAngle, ISpanChunkGenerator chunkGenerator) + public MarkupTagHelperStartTagSyntax Update(SyntaxToken openAngle, SyntaxToken bang, SyntaxToken name, InternalSyntax.SyntaxList attributes, SyntaxToken forwardSlash, SyntaxToken closeAngle, ISpanChunkGenerator chunkGenerator) { if (openAngle != OpenAngle || bang != Bang || name != Name || attributes != Attributes || forwardSlash != ForwardSlash || closeAngle != CloseAngle) { var newNode = SyntaxFactory.MarkupTagHelperStartTag(openAngle, bang, name, attributes, forwardSlash, closeAngle, chunkGenerator); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -1976,18 +1601,14 @@ public MarkupTagHelperStartTagSyntax Update(SyntaxToken openAngle, SyntaxToken b } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new MarkupTagHelperStartTagSyntax(Kind, _openAngle, _bang, _name, _attributes, _forwardSlash, _closeAngle, _chunkGenerator, diagnostics, GetAnnotations()); - } + => new MarkupTagHelperStartTagSyntax(Kind, _openAngle, _bang, _name, _attributes, _forwardSlash, _closeAngle, _chunkGenerator, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new MarkupTagHelperStartTagSyntax(Kind, _openAngle, _bang, _name, _attributes, _forwardSlash, _closeAngle, _chunkGenerator, GetDiagnostics(), annotations); - } - } + => new MarkupTagHelperStartTagSyntax(Kind, _openAngle, _bang, _name, _attributes, _forwardSlash, _closeAngle, _chunkGenerator, GetDiagnostics(), annotations); +} - internal sealed partial class MarkupTagHelperEndTagSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupTagHelperEndTagSyntax : MarkupSyntaxNode +{ private readonly SyntaxToken _openAngle; private readonly SyntaxToken _forwardSlash; private readonly SyntaxToken _bang; @@ -2021,7 +1642,6 @@ internal MarkupTagHelperEndTagSyntax(SyntaxKind kind, SyntaxToken openAngle, Syn _chunkGenerator = chunkGenerator; } - internal MarkupTagHelperEndTagSyntax(SyntaxKind kind, SyntaxToken openAngle, SyntaxToken forwardSlash, SyntaxToken bang, SyntaxToken name, MarkupMiscAttributeContentSyntax miscAttributeContent, SyntaxToken closeAngle, ISpanChunkGenerator chunkGenerator) : base(kind) { @@ -2047,42 +1667,30 @@ internal MarkupTagHelperEndTagSyntax(SyntaxKind kind, SyntaxToken openAngle, Syn _chunkGenerator = chunkGenerator; } - public SyntaxToken OpenAngle { get { return _openAngle; } } - public SyntaxToken ForwardSlash { get { return _forwardSlash; } } - public SyntaxToken Bang { get { return _bang; } } - public SyntaxToken Name { get { return _name; } } - public MarkupMiscAttributeContentSyntax MiscAttributeContent { get { return _miscAttributeContent; } } - public SyntaxToken CloseAngle { get { return _closeAngle; } } - public ISpanChunkGenerator ChunkGenerator { get { return _chunkGenerator; } } + public SyntaxToken OpenAngle => _openAngle; + public SyntaxToken ForwardSlash => _forwardSlash; + public SyntaxToken Bang => _bang; + public SyntaxToken Name => _name; + public MarkupMiscAttributeContentSyntax MiscAttributeContent => _miscAttributeContent; + public SyntaxToken CloseAngle => _closeAngle; + public ISpanChunkGenerator ChunkGenerator => _chunkGenerator; internal override GreenNode GetSlot(int index) - { - switch (index) - { - case 0: return _openAngle; - case 1: return _forwardSlash; - case 2: return _bang; - case 3: return _name; - case 4: return _miscAttributeContent; - case 5: return _closeAngle; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.MarkupTagHelperEndTagSyntax(this, parent, position); - } + => index switch + { + 0 => _openAngle, + 1 => _forwardSlash, + 2 => _bang, + 3 => _name, + 4 => _miscAttributeContent, + 5 => _closeAngle, + _ => null + }; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupTagHelperEndTag(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.MarkupTagHelperEndTagSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupTagHelperEndTag(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTagHelperEndTag(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTagHelperEndTag(this); public MarkupTagHelperEndTagSyntax Update(SyntaxToken openAngle, SyntaxToken forwardSlash, SyntaxToken bang, SyntaxToken name, MarkupMiscAttributeContentSyntax miscAttributeContent, SyntaxToken closeAngle, ISpanChunkGenerator chunkGenerator) { @@ -2091,10 +1699,10 @@ public MarkupTagHelperEndTagSyntax Update(SyntaxToken openAngle, SyntaxToken for var newNode = SyntaxFactory.MarkupTagHelperEndTag(openAngle, forwardSlash, bang, name, miscAttributeContent, closeAngle, chunkGenerator); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -2102,18 +1710,14 @@ public MarkupTagHelperEndTagSyntax Update(SyntaxToken openAngle, SyntaxToken for } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new MarkupTagHelperEndTagSyntax(Kind, _openAngle, _forwardSlash, _bang, _name, _miscAttributeContent, _closeAngle, _chunkGenerator, diagnostics, GetAnnotations()); - } + => new MarkupTagHelperEndTagSyntax(Kind, _openAngle, _forwardSlash, _bang, _name, _miscAttributeContent, _closeAngle, _chunkGenerator, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new MarkupTagHelperEndTagSyntax(Kind, _openAngle, _forwardSlash, _bang, _name, _miscAttributeContent, _closeAngle, _chunkGenerator, GetDiagnostics(), annotations); - } - } + => new MarkupTagHelperEndTagSyntax(Kind, _openAngle, _forwardSlash, _bang, _name, _miscAttributeContent, _closeAngle, _chunkGenerator, GetDiagnostics(), annotations); +} - internal sealed partial class MarkupTagHelperAttributeSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupTagHelperAttributeSyntax : MarkupSyntaxNode +{ private readonly MarkupTextLiteralSyntax _namePrefix; private readonly MarkupTextLiteralSyntax _name; private readonly MarkupTextLiteralSyntax _nameSuffix; @@ -2154,7 +1758,6 @@ internal MarkupTagHelperAttributeSyntax(SyntaxKind kind, MarkupTextLiteralSyntax } } - internal MarkupTagHelperAttributeSyntax(SyntaxKind kind, MarkupTextLiteralSyntax namePrefix, MarkupTextLiteralSyntax name, MarkupTextLiteralSyntax nameSuffix, SyntaxToken equalsToken, MarkupTextLiteralSyntax valuePrefix, MarkupTagHelperAttributeValueSyntax value, MarkupTextLiteralSyntax valueSuffix) : base(kind) { @@ -2187,43 +1790,31 @@ internal MarkupTagHelperAttributeSyntax(SyntaxKind kind, MarkupTextLiteralSyntax } } - public MarkupTextLiteralSyntax NamePrefix { get { return _namePrefix; } } - public MarkupTextLiteralSyntax Name { get { return _name; } } - public MarkupTextLiteralSyntax NameSuffix { get { return _nameSuffix; } } - public SyntaxToken EqualsToken { get { return _equalsToken; } } - public MarkupTextLiteralSyntax ValuePrefix { get { return _valuePrefix; } } - public MarkupTagHelperAttributeValueSyntax Value { get { return _value; } } - public MarkupTextLiteralSyntax ValueSuffix { get { return _valueSuffix; } } + public MarkupTextLiteralSyntax NamePrefix => _namePrefix; + public MarkupTextLiteralSyntax Name => _name; + public MarkupTextLiteralSyntax NameSuffix => _nameSuffix; + public SyntaxToken EqualsToken => _equalsToken; + public MarkupTextLiteralSyntax ValuePrefix => _valuePrefix; + public MarkupTagHelperAttributeValueSyntax Value => _value; + public MarkupTextLiteralSyntax ValueSuffix => _valueSuffix; internal override GreenNode GetSlot(int index) - { - switch (index) - { - case 0: return _namePrefix; - case 1: return _name; - case 2: return _nameSuffix; - case 3: return _equalsToken; - case 4: return _valuePrefix; - case 5: return _value; - case 6: return _valueSuffix; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.MarkupTagHelperAttributeSyntax(this, parent, position); - } + => index switch + { + 0 => _namePrefix, + 1 => _name, + 2 => _nameSuffix, + 3 => _equalsToken, + 4 => _valuePrefix, + 5 => _value, + 6 => _valueSuffix, + _ => null + }; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupTagHelperAttribute(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.MarkupTagHelperAttributeSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupTagHelperAttribute(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTagHelperAttribute(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTagHelperAttribute(this); public MarkupTagHelperAttributeSyntax Update(MarkupTextLiteralSyntax namePrefix, MarkupTextLiteralSyntax name, MarkupTextLiteralSyntax nameSuffix, SyntaxToken equalsToken, MarkupTextLiteralSyntax valuePrefix, MarkupTagHelperAttributeValueSyntax value, MarkupTextLiteralSyntax valueSuffix) { @@ -2232,10 +1823,10 @@ public MarkupTagHelperAttributeSyntax Update(MarkupTextLiteralSyntax namePrefix, var newNode = SyntaxFactory.MarkupTagHelperAttribute(namePrefix, name, nameSuffix, equalsToken, valuePrefix, value, valueSuffix); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -2243,18 +1834,14 @@ public MarkupTagHelperAttributeSyntax Update(MarkupTextLiteralSyntax namePrefix, } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new MarkupTagHelperAttributeSyntax(Kind, _namePrefix, _name, _nameSuffix, _equalsToken, _valuePrefix, _value, _valueSuffix, diagnostics, GetAnnotations()); - } + => new MarkupTagHelperAttributeSyntax(Kind, _namePrefix, _name, _nameSuffix, _equalsToken, _valuePrefix, _value, _valueSuffix, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new MarkupTagHelperAttributeSyntax(Kind, _namePrefix, _name, _nameSuffix, _equalsToken, _valuePrefix, _value, _valueSuffix, GetDiagnostics(), annotations); - } - } + => new MarkupTagHelperAttributeSyntax(Kind, _namePrefix, _name, _nameSuffix, _equalsToken, _valuePrefix, _value, _valueSuffix, GetDiagnostics(), annotations); +} - internal sealed partial class MarkupMinimizedTagHelperAttributeSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupMinimizedTagHelperAttributeSyntax : MarkupSyntaxNode +{ private readonly MarkupTextLiteralSyntax _namePrefix; private readonly MarkupTextLiteralSyntax _name; @@ -2271,7 +1858,6 @@ internal MarkupMinimizedTagHelperAttributeSyntax(SyntaxKind kind, MarkupTextLite _name = name; } - internal MarkupMinimizedTagHelperAttributeSyntax(SyntaxKind kind, MarkupTextLiteralSyntax namePrefix, MarkupTextLiteralSyntax name) : base(kind) { @@ -2285,33 +1871,21 @@ internal MarkupMinimizedTagHelperAttributeSyntax(SyntaxKind kind, MarkupTextLite _name = name; } - public MarkupTextLiteralSyntax NamePrefix { get { return _namePrefix; } } - public MarkupTextLiteralSyntax Name { get { return _name; } } + public MarkupTextLiteralSyntax NamePrefix => _namePrefix; + public MarkupTextLiteralSyntax Name => _name; internal override GreenNode GetSlot(int index) - { - switch (index) + => index switch { - case 0: return _namePrefix; - case 1: return _name; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.MarkupMinimizedTagHelperAttributeSyntax(this, parent, position); - } + 0 => _namePrefix, + 1 => _name, + _ => null + }; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupMinimizedTagHelperAttribute(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.MarkupMinimizedTagHelperAttributeSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupMinimizedTagHelperAttribute(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupMinimizedTagHelperAttribute(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupMinimizedTagHelperAttribute(this); public MarkupMinimizedTagHelperAttributeSyntax Update(MarkupTextLiteralSyntax namePrefix, MarkupTextLiteralSyntax name) { @@ -2320,10 +1894,10 @@ public MarkupMinimizedTagHelperAttributeSyntax Update(MarkupTextLiteralSyntax na var newNode = SyntaxFactory.MarkupMinimizedTagHelperAttribute(namePrefix, name); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -2331,18 +1905,14 @@ public MarkupMinimizedTagHelperAttributeSyntax Update(MarkupTextLiteralSyntax na } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new MarkupMinimizedTagHelperAttributeSyntax(Kind, _namePrefix, _name, diagnostics, GetAnnotations()); - } + => new MarkupMinimizedTagHelperAttributeSyntax(Kind, _namePrefix, _name, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new MarkupMinimizedTagHelperAttributeSyntax(Kind, _namePrefix, _name, GetDiagnostics(), annotations); - } - } + => new MarkupMinimizedTagHelperAttributeSyntax(Kind, _namePrefix, _name, GetDiagnostics(), annotations); +} - internal sealed partial class MarkupTagHelperAttributeValueSyntax : RazorBlockSyntax - { +internal sealed partial class MarkupTagHelperAttributeValueSyntax : RazorBlockSyntax +{ private readonly GreenNode _children; internal MarkupTagHelperAttributeValueSyntax(SyntaxKind kind, GreenNode children, RazorDiagnostic[] diagnostics, SyntaxAnnotation[] annotations) @@ -2356,7 +1926,6 @@ internal MarkupTagHelperAttributeValueSyntax(SyntaxKind kind, GreenNode children } } - internal MarkupTagHelperAttributeValueSyntax(SyntaxKind kind, GreenNode children) : base(kind) { @@ -2368,43 +1937,27 @@ internal MarkupTagHelperAttributeValueSyntax(SyntaxKind kind, GreenNode children } } - public override SyntaxList Children { get { return new SyntaxList(_children); } } + public override SyntaxList Children => new SyntaxList(_children); internal override GreenNode GetSlot(int index) - { - switch (index) - { - case 0: return _children; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.MarkupTagHelperAttributeValueSyntax(this, parent, position); - } + => index == 0 ? this._children : null; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupTagHelperAttributeValue(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.MarkupTagHelperAttributeValueSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupTagHelperAttributeValue(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTagHelperAttributeValue(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTagHelperAttributeValue(this); - public MarkupTagHelperAttributeValueSyntax Update(Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList children) + public MarkupTagHelperAttributeValueSyntax Update(InternalSyntax.SyntaxList children) { if (children != Children) { var newNode = SyntaxFactory.MarkupTagHelperAttributeValue(children); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -2412,18 +1965,14 @@ public MarkupTagHelperAttributeValueSyntax Update(Microsoft.AspNetCore.Razor.Lan } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new MarkupTagHelperAttributeValueSyntax(Kind, _children, diagnostics, GetAnnotations()); - } + => new MarkupTagHelperAttributeValueSyntax(Kind, _children, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new MarkupTagHelperAttributeValueSyntax(Kind, _children, GetDiagnostics(), annotations); - } - } + => new MarkupTagHelperAttributeValueSyntax(Kind, _children, GetDiagnostics(), annotations); +} - internal sealed partial class MarkupTagHelperDirectiveAttributeSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupTagHelperDirectiveAttributeSyntax : MarkupSyntaxNode +{ private readonly MarkupTextLiteralSyntax _namePrefix; private readonly RazorMetaCodeSyntax _transition; private readonly MarkupTextLiteralSyntax _name; @@ -2479,7 +2028,6 @@ internal MarkupTagHelperDirectiveAttributeSyntax(SyntaxKind kind, MarkupTextLite } } - internal MarkupTagHelperDirectiveAttributeSyntax(SyntaxKind kind, MarkupTextLiteralSyntax namePrefix, RazorMetaCodeSyntax transition, MarkupTextLiteralSyntax name, RazorMetaCodeSyntax colon, MarkupTextLiteralSyntax parameterName, MarkupTextLiteralSyntax nameSuffix, SyntaxToken equalsToken, MarkupTextLiteralSyntax valuePrefix, MarkupTagHelperAttributeValueSyntax value, MarkupTextLiteralSyntax valueSuffix) : base(kind) { @@ -2524,49 +2072,37 @@ internal MarkupTagHelperDirectiveAttributeSyntax(SyntaxKind kind, MarkupTextLite } } - public MarkupTextLiteralSyntax NamePrefix { get { return _namePrefix; } } - public RazorMetaCodeSyntax Transition { get { return _transition; } } - public MarkupTextLiteralSyntax Name { get { return _name; } } - public RazorMetaCodeSyntax Colon { get { return _colon; } } - public MarkupTextLiteralSyntax ParameterName { get { return _parameterName; } } - public MarkupTextLiteralSyntax NameSuffix { get { return _nameSuffix; } } - public SyntaxToken EqualsToken { get { return _equalsToken; } } - public MarkupTextLiteralSyntax ValuePrefix { get { return _valuePrefix; } } - public MarkupTagHelperAttributeValueSyntax Value { get { return _value; } } - public MarkupTextLiteralSyntax ValueSuffix { get { return _valueSuffix; } } + public MarkupTextLiteralSyntax NamePrefix => _namePrefix; + public RazorMetaCodeSyntax Transition => _transition; + public MarkupTextLiteralSyntax Name => _name; + public RazorMetaCodeSyntax Colon => _colon; + public MarkupTextLiteralSyntax ParameterName => _parameterName; + public MarkupTextLiteralSyntax NameSuffix => _nameSuffix; + public SyntaxToken EqualsToken => _equalsToken; + public MarkupTextLiteralSyntax ValuePrefix => _valuePrefix; + public MarkupTagHelperAttributeValueSyntax Value => _value; + public MarkupTextLiteralSyntax ValueSuffix => _valueSuffix; internal override GreenNode GetSlot(int index) - { - switch (index) - { - case 0: return _namePrefix; - case 1: return _transition; - case 2: return _name; - case 3: return _colon; - case 4: return _parameterName; - case 5: return _nameSuffix; - case 6: return _equalsToken; - case 7: return _valuePrefix; - case 8: return _value; - case 9: return _valueSuffix; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.MarkupTagHelperDirectiveAttributeSyntax(this, parent, position); - } + => index switch + { + 0 => _namePrefix, + 1 => _transition, + 2 => _name, + 3 => _colon, + 4 => _parameterName, + 5 => _nameSuffix, + 6 => _equalsToken, + 7 => _valuePrefix, + 8 => _value, + 9 => _valueSuffix, + _ => null + }; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupTagHelperDirectiveAttribute(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.MarkupTagHelperDirectiveAttributeSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupTagHelperDirectiveAttribute(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTagHelperDirectiveAttribute(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTagHelperDirectiveAttribute(this); public MarkupTagHelperDirectiveAttributeSyntax Update(MarkupTextLiteralSyntax namePrefix, RazorMetaCodeSyntax transition, MarkupTextLiteralSyntax name, RazorMetaCodeSyntax colon, MarkupTextLiteralSyntax parameterName, MarkupTextLiteralSyntax nameSuffix, SyntaxToken equalsToken, MarkupTextLiteralSyntax valuePrefix, MarkupTagHelperAttributeValueSyntax value, MarkupTextLiteralSyntax valueSuffix) { @@ -2575,10 +2111,10 @@ public MarkupTagHelperDirectiveAttributeSyntax Update(MarkupTextLiteralSyntax na var newNode = SyntaxFactory.MarkupTagHelperDirectiveAttribute(namePrefix, transition, name, colon, parameterName, nameSuffix, equalsToken, valuePrefix, value, valueSuffix); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -2586,18 +2122,14 @@ public MarkupTagHelperDirectiveAttributeSyntax Update(MarkupTextLiteralSyntax na } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new MarkupTagHelperDirectiveAttributeSyntax(Kind, _namePrefix, _transition, _name, _colon, _parameterName, _nameSuffix, _equalsToken, _valuePrefix, _value, _valueSuffix, diagnostics, GetAnnotations()); - } + => new MarkupTagHelperDirectiveAttributeSyntax(Kind, _namePrefix, _transition, _name, _colon, _parameterName, _nameSuffix, _equalsToken, _valuePrefix, _value, _valueSuffix, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new MarkupTagHelperDirectiveAttributeSyntax(Kind, _namePrefix, _transition, _name, _colon, _parameterName, _nameSuffix, _equalsToken, _valuePrefix, _value, _valueSuffix, GetDiagnostics(), annotations); - } - } + => new MarkupTagHelperDirectiveAttributeSyntax(Kind, _namePrefix, _transition, _name, _colon, _parameterName, _nameSuffix, _equalsToken, _valuePrefix, _value, _valueSuffix, GetDiagnostics(), annotations); +} - internal sealed partial class MarkupMinimizedTagHelperDirectiveAttributeSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupMinimizedTagHelperDirectiveAttributeSyntax : MarkupSyntaxNode +{ private readonly MarkupTextLiteralSyntax _namePrefix; private readonly RazorMetaCodeSyntax _transition; private readonly MarkupTextLiteralSyntax _name; @@ -2629,7 +2161,6 @@ internal MarkupMinimizedTagHelperDirectiveAttributeSyntax(SyntaxKind kind, Marku } } - internal MarkupMinimizedTagHelperDirectiveAttributeSyntax(SyntaxKind kind, MarkupTextLiteralSyntax namePrefix, RazorMetaCodeSyntax transition, MarkupTextLiteralSyntax name, RazorMetaCodeSyntax colon, MarkupTextLiteralSyntax parameterName) : base(kind) { @@ -2655,39 +2186,27 @@ internal MarkupMinimizedTagHelperDirectiveAttributeSyntax(SyntaxKind kind, Marku } } - public MarkupTextLiteralSyntax NamePrefix { get { return _namePrefix; } } - public RazorMetaCodeSyntax Transition { get { return _transition; } } - public MarkupTextLiteralSyntax Name { get { return _name; } } - public RazorMetaCodeSyntax Colon { get { return _colon; } } - public MarkupTextLiteralSyntax ParameterName { get { return _parameterName; } } + public MarkupTextLiteralSyntax NamePrefix => _namePrefix; + public RazorMetaCodeSyntax Transition => _transition; + public MarkupTextLiteralSyntax Name => _name; + public RazorMetaCodeSyntax Colon => _colon; + public MarkupTextLiteralSyntax ParameterName => _parameterName; internal override GreenNode GetSlot(int index) - { - switch (index) - { - case 0: return _namePrefix; - case 1: return _transition; - case 2: return _name; - case 3: return _colon; - case 4: return _parameterName; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.MarkupMinimizedTagHelperDirectiveAttributeSyntax(this, parent, position); - } + => index switch + { + 0 => _namePrefix, + 1 => _transition, + 2 => _name, + 3 => _colon, + 4 => _parameterName, + _ => null + }; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupMinimizedTagHelperDirectiveAttribute(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.MarkupMinimizedTagHelperDirectiveAttributeSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupMinimizedTagHelperDirectiveAttribute(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupMinimizedTagHelperDirectiveAttribute(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupMinimizedTagHelperDirectiveAttribute(this); public MarkupMinimizedTagHelperDirectiveAttributeSyntax Update(MarkupTextLiteralSyntax namePrefix, RazorMetaCodeSyntax transition, MarkupTextLiteralSyntax name, RazorMetaCodeSyntax colon, MarkupTextLiteralSyntax parameterName) { @@ -2696,10 +2215,10 @@ public MarkupMinimizedTagHelperDirectiveAttributeSyntax Update(MarkupTextLiteral var newNode = SyntaxFactory.MarkupMinimizedTagHelperDirectiveAttribute(namePrefix, transition, name, colon, parameterName); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -2707,30 +2226,27 @@ public MarkupMinimizedTagHelperDirectiveAttributeSyntax Update(MarkupTextLiteral } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new MarkupMinimizedTagHelperDirectiveAttributeSyntax(Kind, _namePrefix, _transition, _name, _colon, _parameterName, diagnostics, GetAnnotations()); - } + => new MarkupMinimizedTagHelperDirectiveAttributeSyntax(Kind, _namePrefix, _transition, _name, _colon, _parameterName, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new MarkupMinimizedTagHelperDirectiveAttributeSyntax(Kind, _namePrefix, _transition, _name, _colon, _parameterName, GetDiagnostics(), annotations); - } - } + => new MarkupMinimizedTagHelperDirectiveAttributeSyntax(Kind, _namePrefix, _transition, _name, _colon, _parameterName, GetDiagnostics(), annotations); +} - internal abstract partial class CSharpSyntaxNode : RazorSyntaxNode - { +internal abstract partial class CSharpSyntaxNode : RazorSyntaxNode +{ internal CSharpSyntaxNode(SyntaxKind kind, RazorDiagnostic[] diagnostics, SyntaxAnnotation[] annotations) - : base(kind, diagnostics, annotations) + : base(kind, diagnostics, annotations) { } + internal CSharpSyntaxNode(SyntaxKind kind) - : base(kind) + : base(kind) { } - } +} - internal sealed partial class CSharpCodeBlockSyntax : RazorBlockSyntax - { +internal sealed partial class CSharpCodeBlockSyntax : RazorBlockSyntax +{ private readonly GreenNode _children; internal CSharpCodeBlockSyntax(SyntaxKind kind, GreenNode children, RazorDiagnostic[] diagnostics, SyntaxAnnotation[] annotations) @@ -2744,7 +2260,6 @@ internal CSharpCodeBlockSyntax(SyntaxKind kind, GreenNode children, RazorDiagnos } } - internal CSharpCodeBlockSyntax(SyntaxKind kind, GreenNode children) : base(kind) { @@ -2756,43 +2271,27 @@ internal CSharpCodeBlockSyntax(SyntaxKind kind, GreenNode children) } } - public override SyntaxList Children { get { return new SyntaxList(_children); } } + public override SyntaxList Children => new SyntaxList(_children); internal override GreenNode GetSlot(int index) - { - switch (index) - { - case 0: return _children; - default: return null; - } - } + => index == 0 ? this._children : null; - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.CSharpCodeBlockSyntax(this, parent, position); - } - - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitCSharpCodeBlock(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.CSharpCodeBlockSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitCSharpCodeBlock(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitCSharpCodeBlock(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitCSharpCodeBlock(this); - public CSharpCodeBlockSyntax Update(Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList children) + public CSharpCodeBlockSyntax Update(InternalSyntax.SyntaxList children) { if (children != Children) { var newNode = SyntaxFactory.CSharpCodeBlock(children); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -2800,18 +2299,14 @@ public CSharpCodeBlockSyntax Update(Microsoft.AspNetCore.Razor.Language.Syntax.I } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new CSharpCodeBlockSyntax(Kind, _children, diagnostics, GetAnnotations()); - } + => new CSharpCodeBlockSyntax(Kind, _children, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new CSharpCodeBlockSyntax(Kind, _children, GetDiagnostics(), annotations); - } - } + => new CSharpCodeBlockSyntax(Kind, _children, GetDiagnostics(), annotations); +} - internal sealed partial class CSharpTransitionSyntax : CSharpSyntaxNode - { +internal sealed partial class CSharpTransitionSyntax : CSharpSyntaxNode +{ private readonly SyntaxToken _transition; private readonly ISpanChunkGenerator _chunkGenerator; @@ -2824,7 +2319,6 @@ internal CSharpTransitionSyntax(SyntaxKind kind, SyntaxToken transition, ISpanCh _chunkGenerator = chunkGenerator; } - internal CSharpTransitionSyntax(SyntaxKind kind, SyntaxToken transition, ISpanChunkGenerator chunkGenerator) : base(kind) { @@ -2834,32 +2328,16 @@ internal CSharpTransitionSyntax(SyntaxKind kind, SyntaxToken transition, ISpanCh _chunkGenerator = chunkGenerator; } - public SyntaxToken Transition { get { return _transition; } } - public ISpanChunkGenerator ChunkGenerator { get { return _chunkGenerator; } } + public SyntaxToken Transition => _transition; + public ISpanChunkGenerator ChunkGenerator => _chunkGenerator; internal override GreenNode GetSlot(int index) - { - switch (index) - { - case 0: return _transition; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.CSharpTransitionSyntax(this, parent, position); - } + => index == 0 ? this._transition : null; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitCSharpTransition(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.CSharpTransitionSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitCSharpTransition(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitCSharpTransition(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitCSharpTransition(this); public CSharpTransitionSyntax Update(SyntaxToken transition, ISpanChunkGenerator chunkGenerator) { @@ -2868,10 +2346,10 @@ public CSharpTransitionSyntax Update(SyntaxToken transition, ISpanChunkGenerator var newNode = SyntaxFactory.CSharpTransition(transition, chunkGenerator); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -2879,18 +2357,14 @@ public CSharpTransitionSyntax Update(SyntaxToken transition, ISpanChunkGenerator } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new CSharpTransitionSyntax(Kind, _transition, _chunkGenerator, diagnostics, GetAnnotations()); - } + => new CSharpTransitionSyntax(Kind, _transition, _chunkGenerator, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new CSharpTransitionSyntax(Kind, _transition, _chunkGenerator, GetDiagnostics(), annotations); - } - } + => new CSharpTransitionSyntax(Kind, _transition, _chunkGenerator, GetDiagnostics(), annotations); +} - internal sealed partial class CSharpStatementLiteralSyntax : CSharpSyntaxNode - { +internal sealed partial class CSharpStatementLiteralSyntax : CSharpSyntaxNode +{ private readonly GreenNode _literalTokens; private readonly ISpanChunkGenerator _chunkGenerator; @@ -2906,7 +2380,6 @@ internal CSharpStatementLiteralSyntax(SyntaxKind kind, GreenNode literalTokens, _chunkGenerator = chunkGenerator; } - internal CSharpStatementLiteralSyntax(SyntaxKind kind, GreenNode literalTokens, ISpanChunkGenerator chunkGenerator) : base(kind) { @@ -2919,44 +2392,28 @@ internal CSharpStatementLiteralSyntax(SyntaxKind kind, GreenNode literalTokens, _chunkGenerator = chunkGenerator; } - public SyntaxList LiteralTokens { get { return new SyntaxList(_literalTokens); } } - public ISpanChunkGenerator ChunkGenerator { get { return _chunkGenerator; } } + public SyntaxList LiteralTokens => new SyntaxList(_literalTokens); + public ISpanChunkGenerator ChunkGenerator => _chunkGenerator; internal override GreenNode GetSlot(int index) - { - switch (index) - { - case 0: return _literalTokens; - default: return null; - } - } + => index == 0 ? this._literalTokens : null; - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.CSharpStatementLiteralSyntax(this, parent, position); - } - - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitCSharpStatementLiteral(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.CSharpStatementLiteralSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitCSharpStatementLiteral(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitCSharpStatementLiteral(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitCSharpStatementLiteral(this); - public CSharpStatementLiteralSyntax Update(Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) + public CSharpStatementLiteralSyntax Update(InternalSyntax.SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) { if (literalTokens != LiteralTokens) { var newNode = SyntaxFactory.CSharpStatementLiteral(literalTokens, chunkGenerator); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -2964,18 +2421,14 @@ public CSharpStatementLiteralSyntax Update(Microsoft.AspNetCore.Razor.Language.S } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new CSharpStatementLiteralSyntax(Kind, _literalTokens, _chunkGenerator, diagnostics, GetAnnotations()); - } + => new CSharpStatementLiteralSyntax(Kind, _literalTokens, _chunkGenerator, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new CSharpStatementLiteralSyntax(Kind, _literalTokens, _chunkGenerator, GetDiagnostics(), annotations); - } - } + => new CSharpStatementLiteralSyntax(Kind, _literalTokens, _chunkGenerator, GetDiagnostics(), annotations); +} - internal sealed partial class CSharpExpressionLiteralSyntax : CSharpSyntaxNode - { +internal sealed partial class CSharpExpressionLiteralSyntax : CSharpSyntaxNode +{ private readonly GreenNode _literalTokens; private readonly ISpanChunkGenerator _chunkGenerator; @@ -2991,7 +2444,6 @@ internal CSharpExpressionLiteralSyntax(SyntaxKind kind, GreenNode literalTokens, _chunkGenerator = chunkGenerator; } - internal CSharpExpressionLiteralSyntax(SyntaxKind kind, GreenNode literalTokens, ISpanChunkGenerator chunkGenerator) : base(kind) { @@ -3004,44 +2456,28 @@ internal CSharpExpressionLiteralSyntax(SyntaxKind kind, GreenNode literalTokens, _chunkGenerator = chunkGenerator; } - public SyntaxList LiteralTokens { get { return new SyntaxList(_literalTokens); } } - public ISpanChunkGenerator ChunkGenerator { get { return _chunkGenerator; } } + public SyntaxList LiteralTokens => new SyntaxList(_literalTokens); + public ISpanChunkGenerator ChunkGenerator => _chunkGenerator; internal override GreenNode GetSlot(int index) - { - switch (index) - { - case 0: return _literalTokens; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.CSharpExpressionLiteralSyntax(this, parent, position); - } + => index == 0 ? this._literalTokens : null; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitCSharpExpressionLiteral(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.CSharpExpressionLiteralSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitCSharpExpressionLiteral(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitCSharpExpressionLiteral(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitCSharpExpressionLiteral(this); - public CSharpExpressionLiteralSyntax Update(Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) + public CSharpExpressionLiteralSyntax Update(InternalSyntax.SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) { if (literalTokens != LiteralTokens) { var newNode = SyntaxFactory.CSharpExpressionLiteral(literalTokens, chunkGenerator); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -3049,18 +2485,14 @@ public CSharpExpressionLiteralSyntax Update(Microsoft.AspNetCore.Razor.Language. } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new CSharpExpressionLiteralSyntax(Kind, _literalTokens, _chunkGenerator, diagnostics, GetAnnotations()); - } + => new CSharpExpressionLiteralSyntax(Kind, _literalTokens, _chunkGenerator, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new CSharpExpressionLiteralSyntax(Kind, _literalTokens, _chunkGenerator, GetDiagnostics(), annotations); - } - } + => new CSharpExpressionLiteralSyntax(Kind, _literalTokens, _chunkGenerator, GetDiagnostics(), annotations); +} - internal sealed partial class CSharpEphemeralTextLiteralSyntax : CSharpSyntaxNode - { +internal sealed partial class CSharpEphemeralTextLiteralSyntax : CSharpSyntaxNode +{ private readonly GreenNode _literalTokens; private readonly ISpanChunkGenerator _chunkGenerator; @@ -3076,7 +2508,6 @@ internal CSharpEphemeralTextLiteralSyntax(SyntaxKind kind, GreenNode literalToke _chunkGenerator = chunkGenerator; } - internal CSharpEphemeralTextLiteralSyntax(SyntaxKind kind, GreenNode literalTokens, ISpanChunkGenerator chunkGenerator) : base(kind) { @@ -3089,44 +2520,28 @@ internal CSharpEphemeralTextLiteralSyntax(SyntaxKind kind, GreenNode literalToke _chunkGenerator = chunkGenerator; } - public SyntaxList LiteralTokens { get { return new SyntaxList(_literalTokens); } } - public ISpanChunkGenerator ChunkGenerator { get { return _chunkGenerator; } } + public SyntaxList LiteralTokens => new SyntaxList(_literalTokens); + public ISpanChunkGenerator ChunkGenerator => _chunkGenerator; internal override GreenNode GetSlot(int index) - { - switch (index) - { - case 0: return _literalTokens; - default: return null; - } - } + => index == 0 ? this._literalTokens : null; - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.CSharpEphemeralTextLiteralSyntax(this, parent, position); - } - - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitCSharpEphemeralTextLiteral(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.CSharpEphemeralTextLiteralSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitCSharpEphemeralTextLiteral(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitCSharpEphemeralTextLiteral(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitCSharpEphemeralTextLiteral(this); - public CSharpEphemeralTextLiteralSyntax Update(Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) + public CSharpEphemeralTextLiteralSyntax Update(InternalSyntax.SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) { if (literalTokens != LiteralTokens) { var newNode = SyntaxFactory.CSharpEphemeralTextLiteral(literalTokens, chunkGenerator); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -3134,18 +2549,14 @@ public CSharpEphemeralTextLiteralSyntax Update(Microsoft.AspNetCore.Razor.Langua } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new CSharpEphemeralTextLiteralSyntax(Kind, _literalTokens, _chunkGenerator, diagnostics, GetAnnotations()); - } + => new CSharpEphemeralTextLiteralSyntax(Kind, _literalTokens, _chunkGenerator, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new CSharpEphemeralTextLiteralSyntax(Kind, _literalTokens, _chunkGenerator, GetDiagnostics(), annotations); - } - } + => new CSharpEphemeralTextLiteralSyntax(Kind, _literalTokens, _chunkGenerator, GetDiagnostics(), annotations); +} - internal sealed partial class CSharpTemplateBlockSyntax : RazorBlockSyntax - { +internal sealed partial class CSharpTemplateBlockSyntax : RazorBlockSyntax +{ private readonly GreenNode _children; internal CSharpTemplateBlockSyntax(SyntaxKind kind, GreenNode children, RazorDiagnostic[] diagnostics, SyntaxAnnotation[] annotations) @@ -3159,7 +2570,6 @@ internal CSharpTemplateBlockSyntax(SyntaxKind kind, GreenNode children, RazorDia } } - internal CSharpTemplateBlockSyntax(SyntaxKind kind, GreenNode children) : base(kind) { @@ -3171,43 +2581,27 @@ internal CSharpTemplateBlockSyntax(SyntaxKind kind, GreenNode children) } } - public override SyntaxList Children { get { return new SyntaxList(_children); } } + public override SyntaxList Children => new SyntaxList(_children); internal override GreenNode GetSlot(int index) - { - switch (index) - { - case 0: return _children; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.CSharpTemplateBlockSyntax(this, parent, position); - } + => index == 0 ? this._children : null; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitCSharpTemplateBlock(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.CSharpTemplateBlockSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitCSharpTemplateBlock(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitCSharpTemplateBlock(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitCSharpTemplateBlock(this); - public CSharpTemplateBlockSyntax Update(Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList children) + public CSharpTemplateBlockSyntax Update(InternalSyntax.SyntaxList children) { if (children != Children) { var newNode = SyntaxFactory.CSharpTemplateBlock(children); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -3215,34 +2609,31 @@ public CSharpTemplateBlockSyntax Update(Microsoft.AspNetCore.Razor.Language.Synt } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new CSharpTemplateBlockSyntax(Kind, _children, diagnostics, GetAnnotations()); - } + => new CSharpTemplateBlockSyntax(Kind, _children, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new CSharpTemplateBlockSyntax(Kind, _children, GetDiagnostics(), annotations); - } - } + => new CSharpTemplateBlockSyntax(Kind, _children, GetDiagnostics(), annotations); +} - internal abstract partial class CSharpRazorBlockSyntax : CSharpSyntaxNode - { +internal abstract partial class CSharpRazorBlockSyntax : CSharpSyntaxNode +{ internal CSharpRazorBlockSyntax(SyntaxKind kind, RazorDiagnostic[] diagnostics, SyntaxAnnotation[] annotations) - : base(kind, diagnostics, annotations) + : base(kind, diagnostics, annotations) { } + internal CSharpRazorBlockSyntax(SyntaxKind kind) - : base(kind) + : base(kind) { } public abstract CSharpTransitionSyntax Transition { get; } public abstract CSharpSyntaxNode Body { get; } - } +} - internal sealed partial class CSharpStatementSyntax : CSharpRazorBlockSyntax - { +internal sealed partial class CSharpStatementSyntax : CSharpRazorBlockSyntax +{ private readonly CSharpTransitionSyntax _transition; private readonly CSharpSyntaxNode _body; @@ -3256,7 +2647,6 @@ internal CSharpStatementSyntax(SyntaxKind kind, CSharpTransitionSyntax transitio _body = body; } - internal CSharpStatementSyntax(SyntaxKind kind, CSharpTransitionSyntax transition, CSharpSyntaxNode body) : base(kind) { @@ -3267,33 +2657,21 @@ internal CSharpStatementSyntax(SyntaxKind kind, CSharpTransitionSyntax transitio _body = body; } - public override CSharpTransitionSyntax Transition { get { return _transition; } } - public override CSharpSyntaxNode Body { get { return _body; } } + public override CSharpTransitionSyntax Transition => _transition; + public override CSharpSyntaxNode Body => _body; internal override GreenNode GetSlot(int index) - { - switch (index) + => index switch { - case 0: return _transition; - case 1: return _body; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.CSharpStatementSyntax(this, parent, position); - } + 0 => _transition, + 1 => _body, + _ => null + }; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitCSharpStatement(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.CSharpStatementSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitCSharpStatement(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitCSharpStatement(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitCSharpStatement(this); public CSharpStatementSyntax Update(CSharpTransitionSyntax transition, CSharpSyntaxNode body) { @@ -3302,10 +2680,10 @@ public CSharpStatementSyntax Update(CSharpTransitionSyntax transition, CSharpSyn var newNode = SyntaxFactory.CSharpStatement(transition, body); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -3313,88 +2691,71 @@ public CSharpStatementSyntax Update(CSharpTransitionSyntax transition, CSharpSyn } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new CSharpStatementSyntax(Kind, _transition, _body, diagnostics, GetAnnotations()); - } + => new CSharpStatementSyntax(Kind, _transition, _body, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new CSharpStatementSyntax(Kind, _transition, _body, GetDiagnostics(), annotations); - } - } + => new CSharpStatementSyntax(Kind, _transition, _body, GetDiagnostics(), annotations); +} - internal sealed partial class CSharpStatementBodySyntax : CSharpSyntaxNode - { +internal sealed partial class CSharpStatementBodySyntax : CSharpSyntaxNode +{ private readonly RazorMetaCodeSyntax _openBrace; - private readonly CSharpCodeBlockSyntax _cSharpCode; + private readonly CSharpCodeBlockSyntax _csharpCode; private readonly RazorMetaCodeSyntax _closeBrace; - internal CSharpStatementBodySyntax(SyntaxKind kind, RazorMetaCodeSyntax openBrace, CSharpCodeBlockSyntax cSharpCode, RazorMetaCodeSyntax closeBrace, RazorDiagnostic[] diagnostics, SyntaxAnnotation[] annotations) + internal CSharpStatementBodySyntax(SyntaxKind kind, RazorMetaCodeSyntax openBrace, CSharpCodeBlockSyntax csharpCode, RazorMetaCodeSyntax closeBrace, RazorDiagnostic[] diagnostics, SyntaxAnnotation[] annotations) : base(kind, diagnostics, annotations) { SlotCount = 3; AdjustFlagsAndWidth(openBrace); _openBrace = openBrace; - AdjustFlagsAndWidth(cSharpCode); - _cSharpCode = cSharpCode; + AdjustFlagsAndWidth(csharpCode); + _csharpCode = csharpCode; AdjustFlagsAndWidth(closeBrace); _closeBrace = closeBrace; } - - internal CSharpStatementBodySyntax(SyntaxKind kind, RazorMetaCodeSyntax openBrace, CSharpCodeBlockSyntax cSharpCode, RazorMetaCodeSyntax closeBrace) + internal CSharpStatementBodySyntax(SyntaxKind kind, RazorMetaCodeSyntax openBrace, CSharpCodeBlockSyntax csharpCode, RazorMetaCodeSyntax closeBrace) : base(kind) { SlotCount = 3; AdjustFlagsAndWidth(openBrace); _openBrace = openBrace; - AdjustFlagsAndWidth(cSharpCode); - _cSharpCode = cSharpCode; + AdjustFlagsAndWidth(csharpCode); + _csharpCode = csharpCode; AdjustFlagsAndWidth(closeBrace); _closeBrace = closeBrace; } - public RazorMetaCodeSyntax OpenBrace { get { return _openBrace; } } - public CSharpCodeBlockSyntax CSharpCode { get { return _cSharpCode; } } - public RazorMetaCodeSyntax CloseBrace { get { return _closeBrace; } } + public RazorMetaCodeSyntax OpenBrace => _openBrace; + public CSharpCodeBlockSyntax CSharpCode => _csharpCode; + public RazorMetaCodeSyntax CloseBrace => _closeBrace; internal override GreenNode GetSlot(int index) - { - switch (index) + => index switch { - case 0: return _openBrace; - case 1: return _cSharpCode; - case 2: return _closeBrace; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.CSharpStatementBodySyntax(this, parent, position); - } + 0 => _openBrace, + 1 => _csharpCode, + 2 => _closeBrace, + _ => null + }; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitCSharpStatementBody(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.CSharpStatementBodySyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitCSharpStatementBody(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitCSharpStatementBody(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitCSharpStatementBody(this); - public CSharpStatementBodySyntax Update(RazorMetaCodeSyntax openBrace, CSharpCodeBlockSyntax cSharpCode, RazorMetaCodeSyntax closeBrace) + public CSharpStatementBodySyntax Update(RazorMetaCodeSyntax openBrace, CSharpCodeBlockSyntax csharpCode, RazorMetaCodeSyntax closeBrace) { - if (openBrace != OpenBrace || cSharpCode != CSharpCode || closeBrace != CloseBrace) + if (openBrace != OpenBrace || csharpCode != CSharpCode || closeBrace != CloseBrace) { - var newNode = SyntaxFactory.CSharpStatementBody(openBrace, cSharpCode, closeBrace); + var newNode = SyntaxFactory.CSharpStatementBody(openBrace, csharpCode, closeBrace); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -3402,18 +2763,14 @@ public CSharpStatementBodySyntax Update(RazorMetaCodeSyntax openBrace, CSharpCod } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new CSharpStatementBodySyntax(Kind, _openBrace, _cSharpCode, _closeBrace, diagnostics, GetAnnotations()); - } + => new CSharpStatementBodySyntax(Kind, _openBrace, _csharpCode, _closeBrace, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new CSharpStatementBodySyntax(Kind, _openBrace, _cSharpCode, _closeBrace, GetDiagnostics(), annotations); - } - } + => new CSharpStatementBodySyntax(Kind, _openBrace, _csharpCode, _closeBrace, GetDiagnostics(), annotations); +} - internal sealed partial class CSharpExplicitExpressionSyntax : CSharpRazorBlockSyntax - { +internal sealed partial class CSharpExplicitExpressionSyntax : CSharpRazorBlockSyntax +{ private readonly CSharpTransitionSyntax _transition; private readonly CSharpSyntaxNode _body; @@ -3427,7 +2784,6 @@ internal CSharpExplicitExpressionSyntax(SyntaxKind kind, CSharpTransitionSyntax _body = body; } - internal CSharpExplicitExpressionSyntax(SyntaxKind kind, CSharpTransitionSyntax transition, CSharpSyntaxNode body) : base(kind) { @@ -3438,33 +2794,21 @@ internal CSharpExplicitExpressionSyntax(SyntaxKind kind, CSharpTransitionSyntax _body = body; } - public override CSharpTransitionSyntax Transition { get { return _transition; } } - public override CSharpSyntaxNode Body { get { return _body; } } + public override CSharpTransitionSyntax Transition => _transition; + public override CSharpSyntaxNode Body => _body; internal override GreenNode GetSlot(int index) - { - switch (index) + => index switch { - case 0: return _transition; - case 1: return _body; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.CSharpExplicitExpressionSyntax(this, parent, position); - } + 0 => _transition, + 1 => _body, + _ => null + }; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitCSharpExplicitExpression(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.CSharpExplicitExpressionSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitCSharpExplicitExpression(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitCSharpExplicitExpression(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitCSharpExplicitExpression(this); public CSharpExplicitExpressionSyntax Update(CSharpTransitionSyntax transition, CSharpSyntaxNode body) { @@ -3473,10 +2817,10 @@ public CSharpExplicitExpressionSyntax Update(CSharpTransitionSyntax transition, var newNode = SyntaxFactory.CSharpExplicitExpression(transition, body); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -3484,88 +2828,71 @@ public CSharpExplicitExpressionSyntax Update(CSharpTransitionSyntax transition, } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new CSharpExplicitExpressionSyntax(Kind, _transition, _body, diagnostics, GetAnnotations()); - } + => new CSharpExplicitExpressionSyntax(Kind, _transition, _body, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new CSharpExplicitExpressionSyntax(Kind, _transition, _body, GetDiagnostics(), annotations); - } - } + => new CSharpExplicitExpressionSyntax(Kind, _transition, _body, GetDiagnostics(), annotations); +} - internal sealed partial class CSharpExplicitExpressionBodySyntax : CSharpSyntaxNode - { +internal sealed partial class CSharpExplicitExpressionBodySyntax : CSharpSyntaxNode +{ private readonly RazorMetaCodeSyntax _openParen; - private readonly CSharpCodeBlockSyntax _cSharpCode; + private readonly CSharpCodeBlockSyntax _csharpCode; private readonly RazorMetaCodeSyntax _closeParen; - internal CSharpExplicitExpressionBodySyntax(SyntaxKind kind, RazorMetaCodeSyntax openParen, CSharpCodeBlockSyntax cSharpCode, RazorMetaCodeSyntax closeParen, RazorDiagnostic[] diagnostics, SyntaxAnnotation[] annotations) + internal CSharpExplicitExpressionBodySyntax(SyntaxKind kind, RazorMetaCodeSyntax openParen, CSharpCodeBlockSyntax csharpCode, RazorMetaCodeSyntax closeParen, RazorDiagnostic[] diagnostics, SyntaxAnnotation[] annotations) : base(kind, diagnostics, annotations) { SlotCount = 3; AdjustFlagsAndWidth(openParen); _openParen = openParen; - AdjustFlagsAndWidth(cSharpCode); - _cSharpCode = cSharpCode; + AdjustFlagsAndWidth(csharpCode); + _csharpCode = csharpCode; AdjustFlagsAndWidth(closeParen); _closeParen = closeParen; } - - internal CSharpExplicitExpressionBodySyntax(SyntaxKind kind, RazorMetaCodeSyntax openParen, CSharpCodeBlockSyntax cSharpCode, RazorMetaCodeSyntax closeParen) + internal CSharpExplicitExpressionBodySyntax(SyntaxKind kind, RazorMetaCodeSyntax openParen, CSharpCodeBlockSyntax csharpCode, RazorMetaCodeSyntax closeParen) : base(kind) { SlotCount = 3; AdjustFlagsAndWidth(openParen); _openParen = openParen; - AdjustFlagsAndWidth(cSharpCode); - _cSharpCode = cSharpCode; + AdjustFlagsAndWidth(csharpCode); + _csharpCode = csharpCode; AdjustFlagsAndWidth(closeParen); _closeParen = closeParen; } - public RazorMetaCodeSyntax OpenParen { get { return _openParen; } } - public CSharpCodeBlockSyntax CSharpCode { get { return _cSharpCode; } } - public RazorMetaCodeSyntax CloseParen { get { return _closeParen; } } + public RazorMetaCodeSyntax OpenParen => _openParen; + public CSharpCodeBlockSyntax CSharpCode => _csharpCode; + public RazorMetaCodeSyntax CloseParen => _closeParen; internal override GreenNode GetSlot(int index) - { - switch (index) + => index switch { - case 0: return _openParen; - case 1: return _cSharpCode; - case 2: return _closeParen; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.CSharpExplicitExpressionBodySyntax(this, parent, position); - } + 0 => _openParen, + 1 => _csharpCode, + 2 => _closeParen, + _ => null + }; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitCSharpExplicitExpressionBody(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.CSharpExplicitExpressionBodySyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitCSharpExplicitExpressionBody(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitCSharpExplicitExpressionBody(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitCSharpExplicitExpressionBody(this); - public CSharpExplicitExpressionBodySyntax Update(RazorMetaCodeSyntax openParen, CSharpCodeBlockSyntax cSharpCode, RazorMetaCodeSyntax closeParen) + public CSharpExplicitExpressionBodySyntax Update(RazorMetaCodeSyntax openParen, CSharpCodeBlockSyntax csharpCode, RazorMetaCodeSyntax closeParen) { - if (openParen != OpenParen || cSharpCode != CSharpCode || closeParen != CloseParen) + if (openParen != OpenParen || csharpCode != CSharpCode || closeParen != CloseParen) { - var newNode = SyntaxFactory.CSharpExplicitExpressionBody(openParen, cSharpCode, closeParen); + var newNode = SyntaxFactory.CSharpExplicitExpressionBody(openParen, csharpCode, closeParen); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -3573,18 +2900,14 @@ public CSharpExplicitExpressionBodySyntax Update(RazorMetaCodeSyntax openParen, } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new CSharpExplicitExpressionBodySyntax(Kind, _openParen, _cSharpCode, _closeParen, diagnostics, GetAnnotations()); - } + => new CSharpExplicitExpressionBodySyntax(Kind, _openParen, _csharpCode, _closeParen, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new CSharpExplicitExpressionBodySyntax(Kind, _openParen, _cSharpCode, _closeParen, GetDiagnostics(), annotations); - } - } + => new CSharpExplicitExpressionBodySyntax(Kind, _openParen, _csharpCode, _closeParen, GetDiagnostics(), annotations); +} - internal sealed partial class CSharpImplicitExpressionSyntax : CSharpRazorBlockSyntax - { +internal sealed partial class CSharpImplicitExpressionSyntax : CSharpRazorBlockSyntax +{ private readonly CSharpTransitionSyntax _transition; private readonly CSharpSyntaxNode _body; @@ -3598,7 +2921,6 @@ internal CSharpImplicitExpressionSyntax(SyntaxKind kind, CSharpTransitionSyntax _body = body; } - internal CSharpImplicitExpressionSyntax(SyntaxKind kind, CSharpTransitionSyntax transition, CSharpSyntaxNode body) : base(kind) { @@ -3609,33 +2931,21 @@ internal CSharpImplicitExpressionSyntax(SyntaxKind kind, CSharpTransitionSyntax _body = body; } - public override CSharpTransitionSyntax Transition { get { return _transition; } } - public override CSharpSyntaxNode Body { get { return _body; } } + public override CSharpTransitionSyntax Transition => _transition; + public override CSharpSyntaxNode Body => _body; internal override GreenNode GetSlot(int index) - { - switch (index) + => index switch { - case 0: return _transition; - case 1: return _body; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.CSharpImplicitExpressionSyntax(this, parent, position); - } + 0 => _transition, + 1 => _body, + _ => null + }; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitCSharpImplicitExpression(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.CSharpImplicitExpressionSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitCSharpImplicitExpression(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitCSharpImplicitExpression(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitCSharpImplicitExpression(this); public CSharpImplicitExpressionSyntax Update(CSharpTransitionSyntax transition, CSharpSyntaxNode body) { @@ -3644,10 +2954,10 @@ public CSharpImplicitExpressionSyntax Update(CSharpTransitionSyntax transition, var newNode = SyntaxFactory.CSharpImplicitExpression(transition, body); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -3655,74 +2965,53 @@ public CSharpImplicitExpressionSyntax Update(CSharpTransitionSyntax transition, } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new CSharpImplicitExpressionSyntax(Kind, _transition, _body, diagnostics, GetAnnotations()); - } + => new CSharpImplicitExpressionSyntax(Kind, _transition, _body, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new CSharpImplicitExpressionSyntax(Kind, _transition, _body, GetDiagnostics(), annotations); - } - } + => new CSharpImplicitExpressionSyntax(Kind, _transition, _body, GetDiagnostics(), annotations); +} - internal sealed partial class CSharpImplicitExpressionBodySyntax : CSharpSyntaxNode - { - private readonly CSharpCodeBlockSyntax _cSharpCode; +internal sealed partial class CSharpImplicitExpressionBodySyntax : CSharpSyntaxNode +{ + private readonly CSharpCodeBlockSyntax _csharpCode; - internal CSharpImplicitExpressionBodySyntax(SyntaxKind kind, CSharpCodeBlockSyntax cSharpCode, RazorDiagnostic[] diagnostics, SyntaxAnnotation[] annotations) + internal CSharpImplicitExpressionBodySyntax(SyntaxKind kind, CSharpCodeBlockSyntax csharpCode, RazorDiagnostic[] diagnostics, SyntaxAnnotation[] annotations) : base(kind, diagnostics, annotations) { SlotCount = 1; - AdjustFlagsAndWidth(cSharpCode); - _cSharpCode = cSharpCode; + AdjustFlagsAndWidth(csharpCode); + _csharpCode = csharpCode; } - - internal CSharpImplicitExpressionBodySyntax(SyntaxKind kind, CSharpCodeBlockSyntax cSharpCode) + internal CSharpImplicitExpressionBodySyntax(SyntaxKind kind, CSharpCodeBlockSyntax csharpCode) : base(kind) { SlotCount = 1; - AdjustFlagsAndWidth(cSharpCode); - _cSharpCode = cSharpCode; + AdjustFlagsAndWidth(csharpCode); + _csharpCode = csharpCode; } - public CSharpCodeBlockSyntax CSharpCode { get { return _cSharpCode; } } + public CSharpCodeBlockSyntax CSharpCode => _csharpCode; internal override GreenNode GetSlot(int index) - { - switch (index) - { - case 0: return _cSharpCode; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.CSharpImplicitExpressionBodySyntax(this, parent, position); - } + => index == 0 ? this._csharpCode : null; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitCSharpImplicitExpressionBody(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.CSharpImplicitExpressionBodySyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitCSharpImplicitExpressionBody(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitCSharpImplicitExpressionBody(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitCSharpImplicitExpressionBody(this); - public CSharpImplicitExpressionBodySyntax Update(CSharpCodeBlockSyntax cSharpCode) + public CSharpImplicitExpressionBodySyntax Update(CSharpCodeBlockSyntax csharpCode) { - if (cSharpCode != CSharpCode) + if (csharpCode != CSharpCode) { - var newNode = SyntaxFactory.CSharpImplicitExpressionBody(cSharpCode); + var newNode = SyntaxFactory.CSharpImplicitExpressionBody(csharpCode); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -3730,18 +3019,14 @@ public CSharpImplicitExpressionBodySyntax Update(CSharpCodeBlockSyntax cSharpCod } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new CSharpImplicitExpressionBodySyntax(Kind, _cSharpCode, diagnostics, GetAnnotations()); - } + => new CSharpImplicitExpressionBodySyntax(Kind, _csharpCode, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new CSharpImplicitExpressionBodySyntax(Kind, _cSharpCode, GetDiagnostics(), annotations); - } - } + => new CSharpImplicitExpressionBodySyntax(Kind, _csharpCode, GetDiagnostics(), annotations); +} - internal sealed partial class RazorDirectiveSyntax : CSharpRazorBlockSyntax - { +internal sealed partial class RazorDirectiveSyntax : CSharpRazorBlockSyntax +{ private readonly CSharpTransitionSyntax _transition; private readonly CSharpSyntaxNode _body; @@ -3755,7 +3040,6 @@ internal RazorDirectiveSyntax(SyntaxKind kind, CSharpTransitionSyntax transition _body = body; } - internal RazorDirectiveSyntax(SyntaxKind kind, CSharpTransitionSyntax transition, CSharpSyntaxNode body) : base(kind) { @@ -3766,33 +3050,21 @@ internal RazorDirectiveSyntax(SyntaxKind kind, CSharpTransitionSyntax transition _body = body; } - public override CSharpTransitionSyntax Transition { get { return _transition; } } - public override CSharpSyntaxNode Body { get { return _body; } } + public override CSharpTransitionSyntax Transition => _transition; + public override CSharpSyntaxNode Body => _body; internal override GreenNode GetSlot(int index) - { - switch (index) + => index switch { - case 0: return _transition; - case 1: return _body; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.RazorDirectiveSyntax(this, parent, position); - } + 0 => _transition, + 1 => _body, + _ => null + }; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitRazorDirective(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.RazorDirectiveSyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitRazorDirective(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitRazorDirective(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitRazorDirective(this); public RazorDirectiveSyntax Update(CSharpTransitionSyntax transition, CSharpSyntaxNode body) { @@ -3801,10 +3073,10 @@ public RazorDirectiveSyntax Update(CSharpTransitionSyntax transition, CSharpSynt var newNode = SyntaxFactory.RazorDirective(transition, body); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -3812,87 +3084,70 @@ public RazorDirectiveSyntax Update(CSharpTransitionSyntax transition, CSharpSynt } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new RazorDirectiveSyntax(Kind, _transition, _body, diagnostics, GetAnnotations()); - } + => new RazorDirectiveSyntax(Kind, _transition, _body, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new RazorDirectiveSyntax(Kind, _transition, _body, GetDiagnostics(), annotations); - } - } + => new RazorDirectiveSyntax(Kind, _transition, _body, GetDiagnostics(), annotations); +} - internal sealed partial class RazorDirectiveBodySyntax : CSharpSyntaxNode - { +internal sealed partial class RazorDirectiveBodySyntax : CSharpSyntaxNode +{ private readonly RazorSyntaxNode _keyword; - private readonly CSharpCodeBlockSyntax _cSharpCode; + private readonly CSharpCodeBlockSyntax _csharpCode; - internal RazorDirectiveBodySyntax(SyntaxKind kind, RazorSyntaxNode keyword, CSharpCodeBlockSyntax cSharpCode, RazorDiagnostic[] diagnostics, SyntaxAnnotation[] annotations) + internal RazorDirectiveBodySyntax(SyntaxKind kind, RazorSyntaxNode keyword, CSharpCodeBlockSyntax csharpCode, RazorDiagnostic[] diagnostics, SyntaxAnnotation[] annotations) : base(kind, diagnostics, annotations) { SlotCount = 2; AdjustFlagsAndWidth(keyword); _keyword = keyword; - if (cSharpCode != null) + if (csharpCode != null) { - AdjustFlagsAndWidth(cSharpCode); - _cSharpCode = cSharpCode; + AdjustFlagsAndWidth(csharpCode); + _csharpCode = csharpCode; } } - - internal RazorDirectiveBodySyntax(SyntaxKind kind, RazorSyntaxNode keyword, CSharpCodeBlockSyntax cSharpCode) + internal RazorDirectiveBodySyntax(SyntaxKind kind, RazorSyntaxNode keyword, CSharpCodeBlockSyntax csharpCode) : base(kind) { SlotCount = 2; AdjustFlagsAndWidth(keyword); _keyword = keyword; - if (cSharpCode != null) + if (csharpCode != null) { - AdjustFlagsAndWidth(cSharpCode); - _cSharpCode = cSharpCode; + AdjustFlagsAndWidth(csharpCode); + _csharpCode = csharpCode; } } - public RazorSyntaxNode Keyword { get { return _keyword; } } - public CSharpCodeBlockSyntax CSharpCode { get { return _cSharpCode; } } + public RazorSyntaxNode Keyword => _keyword; + public CSharpCodeBlockSyntax CSharpCode => _csharpCode; internal override GreenNode GetSlot(int index) - { - switch (index) + => index switch { - case 0: return _keyword; - case 1: return _cSharpCode; - default: return null; - } - } - - internal override SyntaxNode CreateRed(SyntaxNode parent, int position) - { - return new Syntax.RazorDirectiveBodySyntax(this, parent, position); - } + 0 => _keyword, + 1 => _csharpCode, + _ => null + }; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitRazorDirectiveBody(this); - } + internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.RazorDirectiveBodySyntax(this, parent, position); - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitRazorDirectiveBody(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitRazorDirectiveBody(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitRazorDirectiveBody(this); - public RazorDirectiveBodySyntax Update(RazorSyntaxNode keyword, CSharpCodeBlockSyntax cSharpCode) + public RazorDirectiveBodySyntax Update(RazorSyntaxNode keyword, CSharpCodeBlockSyntax csharpCode) { - if (keyword != Keyword || cSharpCode != CSharpCode) + if (keyword != Keyword || csharpCode != CSharpCode) { - var newNode = SyntaxFactory.RazorDirectiveBody(keyword, cSharpCode); + var newNode = SyntaxFactory.RazorDirectiveBody(keyword, csharpCode); var diags = GetDiagnostics(); if (diags != null && diags.Length > 0) - newNode = newNode.WithDiagnosticsGreen(diags); + newNode = newNode.WithDiagnosticsGreen(diags); var annotations = GetAnnotations(); if (annotations != null && annotations.Length > 0) - newNode = newNode.WithAnnotationsGreen(annotations); + newNode = newNode.WithAnnotationsGreen(annotations); return newNode; } @@ -3900,1421 +3155,667 @@ public RazorDirectiveBodySyntax Update(RazorSyntaxNode keyword, CSharpCodeBlockS } internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics) - { - return new RazorDirectiveBodySyntax(Kind, _keyword, _cSharpCode, diagnostics, GetAnnotations()); - } + => new RazorDirectiveBodySyntax(Kind, _keyword, _csharpCode, diagnostics, GetAnnotations()); internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations) - { - return new RazorDirectiveBodySyntax(Kind, _keyword, _cSharpCode, GetDiagnostics(), annotations); - } - } + => new RazorDirectiveBodySyntax(Kind, _keyword, _csharpCode, GetDiagnostics(), annotations); +} - internal partial class SyntaxVisitor - { - public virtual TResult VisitRazorDocument(RazorDocumentSyntax node) - { - return DefaultVisit(node); - } +internal partial class SyntaxVisitor +{ + public virtual TResult VisitRazorDocument(RazorDocumentSyntax node) => DefaultVisit(node); + public virtual TResult VisitRazorCommentBlock(RazorCommentBlockSyntax node) => DefaultVisit(node); + public virtual TResult VisitRazorMetaCode(RazorMetaCodeSyntax node) => DefaultVisit(node); + public virtual TResult VisitGenericBlock(GenericBlockSyntax node) => DefaultVisit(node); + public virtual TResult VisitUnclassifiedTextLiteral(UnclassifiedTextLiteralSyntax node) => DefaultVisit(node); + public virtual TResult VisitMarkupBlock(MarkupBlockSyntax node) => DefaultVisit(node); + public virtual TResult VisitMarkupTransition(MarkupTransitionSyntax node) => DefaultVisit(node); + public virtual TResult VisitMarkupTextLiteral(MarkupTextLiteralSyntax node) => DefaultVisit(node); + public virtual TResult VisitMarkupEphemeralTextLiteral(MarkupEphemeralTextLiteralSyntax node) => DefaultVisit(node); + public virtual TResult VisitMarkupCommentBlock(MarkupCommentBlockSyntax node) => DefaultVisit(node); + public virtual TResult VisitMarkupMinimizedAttributeBlock(MarkupMinimizedAttributeBlockSyntax node) => DefaultVisit(node); + public virtual TResult VisitMarkupAttributeBlock(MarkupAttributeBlockSyntax node) => DefaultVisit(node); + public virtual TResult VisitMarkupMiscAttributeContent(MarkupMiscAttributeContentSyntax node) => DefaultVisit(node); + public virtual TResult VisitMarkupLiteralAttributeValue(MarkupLiteralAttributeValueSyntax node) => DefaultVisit(node); + public virtual TResult VisitMarkupDynamicAttributeValue(MarkupDynamicAttributeValueSyntax node) => DefaultVisit(node); + public virtual TResult VisitMarkupElement(MarkupElementSyntax node) => DefaultVisit(node); + public virtual TResult VisitMarkupStartTag(MarkupStartTagSyntax node) => DefaultVisit(node); + public virtual TResult VisitMarkupEndTag(MarkupEndTagSyntax node) => DefaultVisit(node); + public virtual TResult VisitMarkupTagHelperElement(MarkupTagHelperElementSyntax node) => DefaultVisit(node); + public virtual TResult VisitMarkupTagHelperStartTag(MarkupTagHelperStartTagSyntax node) => DefaultVisit(node); + public virtual TResult VisitMarkupTagHelperEndTag(MarkupTagHelperEndTagSyntax node) => DefaultVisit(node); + public virtual TResult VisitMarkupTagHelperAttribute(MarkupTagHelperAttributeSyntax node) => DefaultVisit(node); + public virtual TResult VisitMarkupMinimizedTagHelperAttribute(MarkupMinimizedTagHelperAttributeSyntax node) => DefaultVisit(node); + public virtual TResult VisitMarkupTagHelperAttributeValue(MarkupTagHelperAttributeValueSyntax node) => DefaultVisit(node); + public virtual TResult VisitMarkupTagHelperDirectiveAttribute(MarkupTagHelperDirectiveAttributeSyntax node) => DefaultVisit(node); + public virtual TResult VisitMarkupMinimizedTagHelperDirectiveAttribute(MarkupMinimizedTagHelperDirectiveAttributeSyntax node) => DefaultVisit(node); + public virtual TResult VisitCSharpCodeBlock(CSharpCodeBlockSyntax node) => DefaultVisit(node); + public virtual TResult VisitCSharpTransition(CSharpTransitionSyntax node) => DefaultVisit(node); + public virtual TResult VisitCSharpStatementLiteral(CSharpStatementLiteralSyntax node) => DefaultVisit(node); + public virtual TResult VisitCSharpExpressionLiteral(CSharpExpressionLiteralSyntax node) => DefaultVisit(node); + public virtual TResult VisitCSharpEphemeralTextLiteral(CSharpEphemeralTextLiteralSyntax node) => DefaultVisit(node); + public virtual TResult VisitCSharpTemplateBlock(CSharpTemplateBlockSyntax node) => DefaultVisit(node); + public virtual TResult VisitCSharpStatement(CSharpStatementSyntax node) => DefaultVisit(node); + public virtual TResult VisitCSharpStatementBody(CSharpStatementBodySyntax node) => DefaultVisit(node); + public virtual TResult VisitCSharpExplicitExpression(CSharpExplicitExpressionSyntax node) => DefaultVisit(node); + public virtual TResult VisitCSharpExplicitExpressionBody(CSharpExplicitExpressionBodySyntax node) => DefaultVisit(node); + public virtual TResult VisitCSharpImplicitExpression(CSharpImplicitExpressionSyntax node) => DefaultVisit(node); + public virtual TResult VisitCSharpImplicitExpressionBody(CSharpImplicitExpressionBodySyntax node) => DefaultVisit(node); + public virtual TResult VisitRazorDirective(RazorDirectiveSyntax node) => DefaultVisit(node); + public virtual TResult VisitRazorDirectiveBody(RazorDirectiveBodySyntax node) => DefaultVisit(node); +} - public virtual TResult VisitRazorCommentBlock(RazorCommentBlockSyntax node) - { - return DefaultVisit(node); - } +internal partial class SyntaxVisitor +{ + public virtual void VisitRazorDocument(RazorDocumentSyntax node) => DefaultVisit(node); + public virtual void VisitRazorCommentBlock(RazorCommentBlockSyntax node) => DefaultVisit(node); + public virtual void VisitRazorMetaCode(RazorMetaCodeSyntax node) => DefaultVisit(node); + public virtual void VisitGenericBlock(GenericBlockSyntax node) => DefaultVisit(node); + public virtual void VisitUnclassifiedTextLiteral(UnclassifiedTextLiteralSyntax node) => DefaultVisit(node); + public virtual void VisitMarkupBlock(MarkupBlockSyntax node) => DefaultVisit(node); + public virtual void VisitMarkupTransition(MarkupTransitionSyntax node) => DefaultVisit(node); + public virtual void VisitMarkupTextLiteral(MarkupTextLiteralSyntax node) => DefaultVisit(node); + public virtual void VisitMarkupEphemeralTextLiteral(MarkupEphemeralTextLiteralSyntax node) => DefaultVisit(node); + public virtual void VisitMarkupCommentBlock(MarkupCommentBlockSyntax node) => DefaultVisit(node); + public virtual void VisitMarkupMinimizedAttributeBlock(MarkupMinimizedAttributeBlockSyntax node) => DefaultVisit(node); + public virtual void VisitMarkupAttributeBlock(MarkupAttributeBlockSyntax node) => DefaultVisit(node); + public virtual void VisitMarkupMiscAttributeContent(MarkupMiscAttributeContentSyntax node) => DefaultVisit(node); + public virtual void VisitMarkupLiteralAttributeValue(MarkupLiteralAttributeValueSyntax node) => DefaultVisit(node); + public virtual void VisitMarkupDynamicAttributeValue(MarkupDynamicAttributeValueSyntax node) => DefaultVisit(node); + public virtual void VisitMarkupElement(MarkupElementSyntax node) => DefaultVisit(node); + public virtual void VisitMarkupStartTag(MarkupStartTagSyntax node) => DefaultVisit(node); + public virtual void VisitMarkupEndTag(MarkupEndTagSyntax node) => DefaultVisit(node); + public virtual void VisitMarkupTagHelperElement(MarkupTagHelperElementSyntax node) => DefaultVisit(node); + public virtual void VisitMarkupTagHelperStartTag(MarkupTagHelperStartTagSyntax node) => DefaultVisit(node); + public virtual void VisitMarkupTagHelperEndTag(MarkupTagHelperEndTagSyntax node) => DefaultVisit(node); + public virtual void VisitMarkupTagHelperAttribute(MarkupTagHelperAttributeSyntax node) => DefaultVisit(node); + public virtual void VisitMarkupMinimizedTagHelperAttribute(MarkupMinimizedTagHelperAttributeSyntax node) => DefaultVisit(node); + public virtual void VisitMarkupTagHelperAttributeValue(MarkupTagHelperAttributeValueSyntax node) => DefaultVisit(node); + public virtual void VisitMarkupTagHelperDirectiveAttribute(MarkupTagHelperDirectiveAttributeSyntax node) => DefaultVisit(node); + public virtual void VisitMarkupMinimizedTagHelperDirectiveAttribute(MarkupMinimizedTagHelperDirectiveAttributeSyntax node) => DefaultVisit(node); + public virtual void VisitCSharpCodeBlock(CSharpCodeBlockSyntax node) => DefaultVisit(node); + public virtual void VisitCSharpTransition(CSharpTransitionSyntax node) => DefaultVisit(node); + public virtual void VisitCSharpStatementLiteral(CSharpStatementLiteralSyntax node) => DefaultVisit(node); + public virtual void VisitCSharpExpressionLiteral(CSharpExpressionLiteralSyntax node) => DefaultVisit(node); + public virtual void VisitCSharpEphemeralTextLiteral(CSharpEphemeralTextLiteralSyntax node) => DefaultVisit(node); + public virtual void VisitCSharpTemplateBlock(CSharpTemplateBlockSyntax node) => DefaultVisit(node); + public virtual void VisitCSharpStatement(CSharpStatementSyntax node) => DefaultVisit(node); + public virtual void VisitCSharpStatementBody(CSharpStatementBodySyntax node) => DefaultVisit(node); + public virtual void VisitCSharpExplicitExpression(CSharpExplicitExpressionSyntax node) => DefaultVisit(node); + public virtual void VisitCSharpExplicitExpressionBody(CSharpExplicitExpressionBodySyntax node) => DefaultVisit(node); + public virtual void VisitCSharpImplicitExpression(CSharpImplicitExpressionSyntax node) => DefaultVisit(node); + public virtual void VisitCSharpImplicitExpressionBody(CSharpImplicitExpressionBodySyntax node) => DefaultVisit(node); + public virtual void VisitRazorDirective(RazorDirectiveSyntax node) => DefaultVisit(node); + public virtual void VisitRazorDirectiveBody(RazorDirectiveBodySyntax node) => DefaultVisit(node); +} - public virtual TResult VisitRazorMetaCode(RazorMetaCodeSyntax node) - { - return DefaultVisit(node); - } +internal partial class SyntaxRewriter : SyntaxVisitor +{ + public override GreenNode VisitRazorDocument(RazorDocumentSyntax node) + => node.Update((RazorBlockSyntax)Visit(node.Document), (SyntaxToken)Visit(node.EndOfFile)); - public virtual TResult VisitGenericBlock(GenericBlockSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitUnclassifiedTextLiteral(UnclassifiedTextLiteralSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitMarkupBlock(MarkupBlockSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitMarkupTransition(MarkupTransitionSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitMarkupTextLiteral(MarkupTextLiteralSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitMarkupEphemeralTextLiteral(MarkupEphemeralTextLiteralSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitMarkupCommentBlock(MarkupCommentBlockSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitMarkupMinimizedAttributeBlock(MarkupMinimizedAttributeBlockSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitMarkupAttributeBlock(MarkupAttributeBlockSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitMarkupMiscAttributeContent(MarkupMiscAttributeContentSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitMarkupLiteralAttributeValue(MarkupLiteralAttributeValueSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitMarkupDynamicAttributeValue(MarkupDynamicAttributeValueSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitMarkupElement(MarkupElementSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitMarkupStartTag(MarkupStartTagSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitMarkupEndTag(MarkupEndTagSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitMarkupTagHelperElement(MarkupTagHelperElementSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitMarkupTagHelperStartTag(MarkupTagHelperStartTagSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitMarkupTagHelperEndTag(MarkupTagHelperEndTagSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitMarkupTagHelperAttribute(MarkupTagHelperAttributeSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitMarkupMinimizedTagHelperAttribute(MarkupMinimizedTagHelperAttributeSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitMarkupTagHelperAttributeValue(MarkupTagHelperAttributeValueSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitMarkupTagHelperDirectiveAttribute(MarkupTagHelperDirectiveAttributeSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitMarkupMinimizedTagHelperDirectiveAttribute(MarkupMinimizedTagHelperDirectiveAttributeSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitCSharpCodeBlock(CSharpCodeBlockSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitCSharpTransition(CSharpTransitionSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitCSharpStatementLiteral(CSharpStatementLiteralSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitCSharpExpressionLiteral(CSharpExpressionLiteralSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitCSharpEphemeralTextLiteral(CSharpEphemeralTextLiteralSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitCSharpTemplateBlock(CSharpTemplateBlockSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitCSharpStatement(CSharpStatementSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitCSharpStatementBody(CSharpStatementBodySyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitCSharpExplicitExpression(CSharpExplicitExpressionSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitCSharpExplicitExpressionBody(CSharpExplicitExpressionBodySyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitCSharpImplicitExpression(CSharpImplicitExpressionSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitCSharpImplicitExpressionBody(CSharpImplicitExpressionBodySyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitRazorDirective(RazorDirectiveSyntax node) - { - return DefaultVisit(node); - } - - public virtual TResult VisitRazorDirectiveBody(RazorDirectiveBodySyntax node) - { - return DefaultVisit(node); - } - } - - - internal partial class SyntaxVisitor - { - public virtual void VisitRazorDocument(RazorDocumentSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitRazorCommentBlock(RazorCommentBlockSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitRazorMetaCode(RazorMetaCodeSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitGenericBlock(GenericBlockSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitUnclassifiedTextLiteral(UnclassifiedTextLiteralSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitMarkupBlock(MarkupBlockSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitMarkupTransition(MarkupTransitionSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitMarkupTextLiteral(MarkupTextLiteralSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitMarkupEphemeralTextLiteral(MarkupEphemeralTextLiteralSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitMarkupCommentBlock(MarkupCommentBlockSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitMarkupMinimizedAttributeBlock(MarkupMinimizedAttributeBlockSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitMarkupAttributeBlock(MarkupAttributeBlockSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitMarkupMiscAttributeContent(MarkupMiscAttributeContentSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitMarkupLiteralAttributeValue(MarkupLiteralAttributeValueSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitMarkupDynamicAttributeValue(MarkupDynamicAttributeValueSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitMarkupElement(MarkupElementSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitMarkupStartTag(MarkupStartTagSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitMarkupEndTag(MarkupEndTagSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitMarkupTagHelperElement(MarkupTagHelperElementSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitMarkupTagHelperStartTag(MarkupTagHelperStartTagSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitMarkupTagHelperEndTag(MarkupTagHelperEndTagSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitMarkupTagHelperAttribute(MarkupTagHelperAttributeSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitMarkupMinimizedTagHelperAttribute(MarkupMinimizedTagHelperAttributeSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitMarkupTagHelperAttributeValue(MarkupTagHelperAttributeValueSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitMarkupTagHelperDirectiveAttribute(MarkupTagHelperDirectiveAttributeSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitMarkupMinimizedTagHelperDirectiveAttribute(MarkupMinimizedTagHelperDirectiveAttributeSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitCSharpCodeBlock(CSharpCodeBlockSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitCSharpTransition(CSharpTransitionSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitCSharpStatementLiteral(CSharpStatementLiteralSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitCSharpExpressionLiteral(CSharpExpressionLiteralSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitCSharpEphemeralTextLiteral(CSharpEphemeralTextLiteralSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitCSharpTemplateBlock(CSharpTemplateBlockSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitCSharpStatement(CSharpStatementSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitCSharpStatementBody(CSharpStatementBodySyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitCSharpExplicitExpression(CSharpExplicitExpressionSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitCSharpExplicitExpressionBody(CSharpExplicitExpressionBodySyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitCSharpImplicitExpression(CSharpImplicitExpressionSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitCSharpImplicitExpressionBody(CSharpImplicitExpressionBodySyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitRazorDirective(RazorDirectiveSyntax node) - { - DefaultVisit(node); - } - - public virtual void VisitRazorDirectiveBody(RazorDirectiveBodySyntax node) - { - DefaultVisit(node); - } - } - - internal partial class SyntaxRewriter : SyntaxVisitor - { - public override GreenNode VisitRazorDocument(RazorDocumentSyntax node) - { - var document = (RazorBlockSyntax)Visit(node.Document); - var endOfFile = (SyntaxToken)Visit(node.EndOfFile); - return node.Update(document, endOfFile); - } - - public override GreenNode VisitRazorCommentBlock(RazorCommentBlockSyntax node) - { - var startCommentTransition = (SyntaxToken)Visit(node.StartCommentTransition); - var startCommentStar = (SyntaxToken)Visit(node.StartCommentStar); - var comment = (SyntaxToken)Visit(node.Comment); - var endCommentStar = (SyntaxToken)Visit(node.EndCommentStar); - var endCommentTransition = (SyntaxToken)Visit(node.EndCommentTransition); - return node.Update(startCommentTransition, startCommentStar, comment, endCommentStar, endCommentTransition); - } + public override GreenNode VisitRazorCommentBlock(RazorCommentBlockSyntax node) + => node.Update((SyntaxToken)Visit(node.StartCommentTransition), (SyntaxToken)Visit(node.StartCommentStar), (SyntaxToken)Visit(node.Comment), (SyntaxToken)Visit(node.EndCommentStar), (SyntaxToken)Visit(node.EndCommentTransition)); public override GreenNode VisitRazorMetaCode(RazorMetaCodeSyntax node) - { - var metaCode = VisitList(node.MetaCode); - return node.Update(metaCode, node.ChunkGenerator); - } + => node.Update(VisitList(node.MetaCode), node.ChunkGenerator); public override GreenNode VisitGenericBlock(GenericBlockSyntax node) - { - var children = VisitList(node.Children); - return node.Update(children); - } + => node.Update(VisitList(node.Children)); public override GreenNode VisitUnclassifiedTextLiteral(UnclassifiedTextLiteralSyntax node) - { - var literalTokens = VisitList(node.LiteralTokens); - return node.Update(literalTokens, node.ChunkGenerator); - } + => node.Update(VisitList(node.LiteralTokens), node.ChunkGenerator); public override GreenNode VisitMarkupBlock(MarkupBlockSyntax node) - { - var children = VisitList(node.Children); - return node.Update(children); - } + => node.Update(VisitList(node.Children)); public override GreenNode VisitMarkupTransition(MarkupTransitionSyntax node) - { - var transitionTokens = VisitList(node.TransitionTokens); - return node.Update(transitionTokens, node.ChunkGenerator); - } + => node.Update(VisitList(node.TransitionTokens), node.ChunkGenerator); public override GreenNode VisitMarkupTextLiteral(MarkupTextLiteralSyntax node) - { - var literalTokens = VisitList(node.LiteralTokens); - return node.Update(literalTokens, node.ChunkGenerator); - } + => node.Update(VisitList(node.LiteralTokens), node.ChunkGenerator); public override GreenNode VisitMarkupEphemeralTextLiteral(MarkupEphemeralTextLiteralSyntax node) - { - var literalTokens = VisitList(node.LiteralTokens); - return node.Update(literalTokens, node.ChunkGenerator); - } + => node.Update(VisitList(node.LiteralTokens), node.ChunkGenerator); public override GreenNode VisitMarkupCommentBlock(MarkupCommentBlockSyntax node) - { - var children = VisitList(node.Children); - return node.Update(children); - } + => node.Update(VisitList(node.Children)); public override GreenNode VisitMarkupMinimizedAttributeBlock(MarkupMinimizedAttributeBlockSyntax node) - { - var namePrefix = (MarkupTextLiteralSyntax)Visit(node.NamePrefix); - var name = (MarkupTextLiteralSyntax)Visit(node.Name); - return node.Update(namePrefix, name); - } + => node.Update((MarkupTextLiteralSyntax)Visit(node.NamePrefix), (MarkupTextLiteralSyntax)Visit(node.Name)); public override GreenNode VisitMarkupAttributeBlock(MarkupAttributeBlockSyntax node) - { - var namePrefix = (MarkupTextLiteralSyntax)Visit(node.NamePrefix); - var name = (MarkupTextLiteralSyntax)Visit(node.Name); - var nameSuffix = (MarkupTextLiteralSyntax)Visit(node.NameSuffix); - var equalsToken = (SyntaxToken)Visit(node.EqualsToken); - var valuePrefix = (MarkupTextLiteralSyntax)Visit(node.ValuePrefix); - var value = (RazorBlockSyntax)Visit(node.Value); - var valueSuffix = (MarkupTextLiteralSyntax)Visit(node.ValueSuffix); - return node.Update(namePrefix, name, nameSuffix, equalsToken, valuePrefix, value, valueSuffix); - } + => node.Update((MarkupTextLiteralSyntax)Visit(node.NamePrefix), (MarkupTextLiteralSyntax)Visit(node.Name), (MarkupTextLiteralSyntax)Visit(node.NameSuffix), (SyntaxToken)Visit(node.EqualsToken), (MarkupTextLiteralSyntax)Visit(node.ValuePrefix), (RazorBlockSyntax)Visit(node.Value), (MarkupTextLiteralSyntax)Visit(node.ValueSuffix)); public override GreenNode VisitMarkupMiscAttributeContent(MarkupMiscAttributeContentSyntax node) - { - var children = VisitList(node.Children); - return node.Update(children); - } + => node.Update(VisitList(node.Children)); public override GreenNode VisitMarkupLiteralAttributeValue(MarkupLiteralAttributeValueSyntax node) - { - var prefix = (MarkupTextLiteralSyntax)Visit(node.Prefix); - var value = (MarkupTextLiteralSyntax)Visit(node.Value); - return node.Update(prefix, value); - } + => node.Update((MarkupTextLiteralSyntax)Visit(node.Prefix), (MarkupTextLiteralSyntax)Visit(node.Value)); public override GreenNode VisitMarkupDynamicAttributeValue(MarkupDynamicAttributeValueSyntax node) - { - var prefix = (MarkupTextLiteralSyntax)Visit(node.Prefix); - var value = (RazorBlockSyntax)Visit(node.Value); - return node.Update(prefix, value); - } + => node.Update((MarkupTextLiteralSyntax)Visit(node.Prefix), (RazorBlockSyntax)Visit(node.Value)); public override GreenNode VisitMarkupElement(MarkupElementSyntax node) - { - var startTag = (MarkupStartTagSyntax)Visit(node.StartTag); - var body = VisitList(node.Body); - var endTag = (MarkupEndTagSyntax)Visit(node.EndTag); - return node.Update(startTag, body, endTag); - } + => node.Update((MarkupStartTagSyntax)Visit(node.StartTag), VisitList(node.Body), (MarkupEndTagSyntax)Visit(node.EndTag)); public override GreenNode VisitMarkupStartTag(MarkupStartTagSyntax node) - { - var openAngle = (SyntaxToken)Visit(node.OpenAngle); - var bang = (SyntaxToken)Visit(node.Bang); - var name = (SyntaxToken)Visit(node.Name); - var attributes = VisitList(node.Attributes); - var forwardSlash = (SyntaxToken)Visit(node.ForwardSlash); - var closeAngle = (SyntaxToken)Visit(node.CloseAngle); - return node.Update(openAngle, bang, name, attributes, forwardSlash, closeAngle, node.ChunkGenerator); - } + => node.Update((SyntaxToken)Visit(node.OpenAngle), (SyntaxToken)Visit(node.Bang), (SyntaxToken)Visit(node.Name), VisitList(node.Attributes), (SyntaxToken)Visit(node.ForwardSlash), (SyntaxToken)Visit(node.CloseAngle), node.ChunkGenerator); public override GreenNode VisitMarkupEndTag(MarkupEndTagSyntax node) - { - var openAngle = (SyntaxToken)Visit(node.OpenAngle); - var forwardSlash = (SyntaxToken)Visit(node.ForwardSlash); - var bang = (SyntaxToken)Visit(node.Bang); - var name = (SyntaxToken)Visit(node.Name); - var miscAttributeContent = (MarkupMiscAttributeContentSyntax)Visit(node.MiscAttributeContent); - var closeAngle = (SyntaxToken)Visit(node.CloseAngle); - return node.Update(openAngle, forwardSlash, bang, name, miscAttributeContent, closeAngle, node.ChunkGenerator); - } + => node.Update((SyntaxToken)Visit(node.OpenAngle), (SyntaxToken)Visit(node.ForwardSlash), (SyntaxToken)Visit(node.Bang), (SyntaxToken)Visit(node.Name), (MarkupMiscAttributeContentSyntax)Visit(node.MiscAttributeContent), (SyntaxToken)Visit(node.CloseAngle), node.ChunkGenerator); public override GreenNode VisitMarkupTagHelperElement(MarkupTagHelperElementSyntax node) - { - var startTag = (MarkupTagHelperStartTagSyntax)Visit(node.StartTag); - var body = VisitList(node.Body); - var endTag = (MarkupTagHelperEndTagSyntax)Visit(node.EndTag); - return node.Update(startTag, body, endTag); - } + => node.Update((MarkupTagHelperStartTagSyntax)Visit(node.StartTag), VisitList(node.Body), (MarkupTagHelperEndTagSyntax)Visit(node.EndTag)); public override GreenNode VisitMarkupTagHelperStartTag(MarkupTagHelperStartTagSyntax node) - { - var openAngle = (SyntaxToken)Visit(node.OpenAngle); - var bang = (SyntaxToken)Visit(node.Bang); - var name = (SyntaxToken)Visit(node.Name); - var attributes = VisitList(node.Attributes); - var forwardSlash = (SyntaxToken)Visit(node.ForwardSlash); - var closeAngle = (SyntaxToken)Visit(node.CloseAngle); - return node.Update(openAngle, bang, name, attributes, forwardSlash, closeAngle, node.ChunkGenerator); - } + => node.Update((SyntaxToken)Visit(node.OpenAngle), (SyntaxToken)Visit(node.Bang), (SyntaxToken)Visit(node.Name), VisitList(node.Attributes), (SyntaxToken)Visit(node.ForwardSlash), (SyntaxToken)Visit(node.CloseAngle), node.ChunkGenerator); public override GreenNode VisitMarkupTagHelperEndTag(MarkupTagHelperEndTagSyntax node) - { - var openAngle = (SyntaxToken)Visit(node.OpenAngle); - var forwardSlash = (SyntaxToken)Visit(node.ForwardSlash); - var bang = (SyntaxToken)Visit(node.Bang); - var name = (SyntaxToken)Visit(node.Name); - var miscAttributeContent = (MarkupMiscAttributeContentSyntax)Visit(node.MiscAttributeContent); - var closeAngle = (SyntaxToken)Visit(node.CloseAngle); - return node.Update(openAngle, forwardSlash, bang, name, miscAttributeContent, closeAngle, node.ChunkGenerator); - } + => node.Update((SyntaxToken)Visit(node.OpenAngle), (SyntaxToken)Visit(node.ForwardSlash), (SyntaxToken)Visit(node.Bang), (SyntaxToken)Visit(node.Name), (MarkupMiscAttributeContentSyntax)Visit(node.MiscAttributeContent), (SyntaxToken)Visit(node.CloseAngle), node.ChunkGenerator); public override GreenNode VisitMarkupTagHelperAttribute(MarkupTagHelperAttributeSyntax node) - { - var namePrefix = (MarkupTextLiteralSyntax)Visit(node.NamePrefix); - var name = (MarkupTextLiteralSyntax)Visit(node.Name); - var nameSuffix = (MarkupTextLiteralSyntax)Visit(node.NameSuffix); - var equalsToken = (SyntaxToken)Visit(node.EqualsToken); - var valuePrefix = (MarkupTextLiteralSyntax)Visit(node.ValuePrefix); - var value = (MarkupTagHelperAttributeValueSyntax)Visit(node.Value); - var valueSuffix = (MarkupTextLiteralSyntax)Visit(node.ValueSuffix); - return node.Update(namePrefix, name, nameSuffix, equalsToken, valuePrefix, value, valueSuffix); - } + => node.Update((MarkupTextLiteralSyntax)Visit(node.NamePrefix), (MarkupTextLiteralSyntax)Visit(node.Name), (MarkupTextLiteralSyntax)Visit(node.NameSuffix), (SyntaxToken)Visit(node.EqualsToken), (MarkupTextLiteralSyntax)Visit(node.ValuePrefix), (MarkupTagHelperAttributeValueSyntax)Visit(node.Value), (MarkupTextLiteralSyntax)Visit(node.ValueSuffix)); public override GreenNode VisitMarkupMinimizedTagHelperAttribute(MarkupMinimizedTagHelperAttributeSyntax node) - { - var namePrefix = (MarkupTextLiteralSyntax)Visit(node.NamePrefix); - var name = (MarkupTextLiteralSyntax)Visit(node.Name); - return node.Update(namePrefix, name); - } + => node.Update((MarkupTextLiteralSyntax)Visit(node.NamePrefix), (MarkupTextLiteralSyntax)Visit(node.Name)); public override GreenNode VisitMarkupTagHelperAttributeValue(MarkupTagHelperAttributeValueSyntax node) - { - var children = VisitList(node.Children); - return node.Update(children); - } + => node.Update(VisitList(node.Children)); public override GreenNode VisitMarkupTagHelperDirectiveAttribute(MarkupTagHelperDirectiveAttributeSyntax node) - { - var namePrefix = (MarkupTextLiteralSyntax)Visit(node.NamePrefix); - var transition = (RazorMetaCodeSyntax)Visit(node.Transition); - var name = (MarkupTextLiteralSyntax)Visit(node.Name); - var colon = (RazorMetaCodeSyntax)Visit(node.Colon); - var parameterName = (MarkupTextLiteralSyntax)Visit(node.ParameterName); - var nameSuffix = (MarkupTextLiteralSyntax)Visit(node.NameSuffix); - var equalsToken = (SyntaxToken)Visit(node.EqualsToken); - var valuePrefix = (MarkupTextLiteralSyntax)Visit(node.ValuePrefix); - var value = (MarkupTagHelperAttributeValueSyntax)Visit(node.Value); - var valueSuffix = (MarkupTextLiteralSyntax)Visit(node.ValueSuffix); - return node.Update(namePrefix, transition, name, colon, parameterName, nameSuffix, equalsToken, valuePrefix, value, valueSuffix); - } + => node.Update((MarkupTextLiteralSyntax)Visit(node.NamePrefix), (RazorMetaCodeSyntax)Visit(node.Transition), (MarkupTextLiteralSyntax)Visit(node.Name), (RazorMetaCodeSyntax)Visit(node.Colon), (MarkupTextLiteralSyntax)Visit(node.ParameterName), (MarkupTextLiteralSyntax)Visit(node.NameSuffix), (SyntaxToken)Visit(node.EqualsToken), (MarkupTextLiteralSyntax)Visit(node.ValuePrefix), (MarkupTagHelperAttributeValueSyntax)Visit(node.Value), (MarkupTextLiteralSyntax)Visit(node.ValueSuffix)); public override GreenNode VisitMarkupMinimizedTagHelperDirectiveAttribute(MarkupMinimizedTagHelperDirectiveAttributeSyntax node) - { - var namePrefix = (MarkupTextLiteralSyntax)Visit(node.NamePrefix); - var transition = (RazorMetaCodeSyntax)Visit(node.Transition); - var name = (MarkupTextLiteralSyntax)Visit(node.Name); - var colon = (RazorMetaCodeSyntax)Visit(node.Colon); - var parameterName = (MarkupTextLiteralSyntax)Visit(node.ParameterName); - return node.Update(namePrefix, transition, name, colon, parameterName); - } + => node.Update((MarkupTextLiteralSyntax)Visit(node.NamePrefix), (RazorMetaCodeSyntax)Visit(node.Transition), (MarkupTextLiteralSyntax)Visit(node.Name), (RazorMetaCodeSyntax)Visit(node.Colon), (MarkupTextLiteralSyntax)Visit(node.ParameterName)); public override GreenNode VisitCSharpCodeBlock(CSharpCodeBlockSyntax node) - { - var children = VisitList(node.Children); - return node.Update(children); - } + => node.Update(VisitList(node.Children)); public override GreenNode VisitCSharpTransition(CSharpTransitionSyntax node) - { - var transition = (SyntaxToken)Visit(node.Transition); - return node.Update(transition, node.ChunkGenerator); - } + => node.Update((SyntaxToken)Visit(node.Transition), node.ChunkGenerator); public override GreenNode VisitCSharpStatementLiteral(CSharpStatementLiteralSyntax node) - { - var literalTokens = VisitList(node.LiteralTokens); - return node.Update(literalTokens, node.ChunkGenerator); - } + => node.Update(VisitList(node.LiteralTokens), node.ChunkGenerator); public override GreenNode VisitCSharpExpressionLiteral(CSharpExpressionLiteralSyntax node) - { - var literalTokens = VisitList(node.LiteralTokens); - return node.Update(literalTokens, node.ChunkGenerator); - } + => node.Update(VisitList(node.LiteralTokens), node.ChunkGenerator); public override GreenNode VisitCSharpEphemeralTextLiteral(CSharpEphemeralTextLiteralSyntax node) - { - var literalTokens = VisitList(node.LiteralTokens); - return node.Update(literalTokens, node.ChunkGenerator); - } + => node.Update(VisitList(node.LiteralTokens), node.ChunkGenerator); public override GreenNode VisitCSharpTemplateBlock(CSharpTemplateBlockSyntax node) - { - var children = VisitList(node.Children); - return node.Update(children); - } + => node.Update(VisitList(node.Children)); public override GreenNode VisitCSharpStatement(CSharpStatementSyntax node) - { - var transition = (CSharpTransitionSyntax)Visit(node.Transition); - var body = (CSharpSyntaxNode)Visit(node.Body); - return node.Update(transition, body); - } + => node.Update((CSharpTransitionSyntax)Visit(node.Transition), (CSharpSyntaxNode)Visit(node.Body)); public override GreenNode VisitCSharpStatementBody(CSharpStatementBodySyntax node) - { - var openBrace = (RazorMetaCodeSyntax)Visit(node.OpenBrace); - var cSharpCode = (CSharpCodeBlockSyntax)Visit(node.CSharpCode); - var closeBrace = (RazorMetaCodeSyntax)Visit(node.CloseBrace); - return node.Update(openBrace, cSharpCode, closeBrace); - } + => node.Update((RazorMetaCodeSyntax)Visit(node.OpenBrace), (CSharpCodeBlockSyntax)Visit(node.CSharpCode), (RazorMetaCodeSyntax)Visit(node.CloseBrace)); public override GreenNode VisitCSharpExplicitExpression(CSharpExplicitExpressionSyntax node) - { - var transition = (CSharpTransitionSyntax)Visit(node.Transition); - var body = (CSharpSyntaxNode)Visit(node.Body); - return node.Update(transition, body); - } + => node.Update((CSharpTransitionSyntax)Visit(node.Transition), (CSharpSyntaxNode)Visit(node.Body)); public override GreenNode VisitCSharpExplicitExpressionBody(CSharpExplicitExpressionBodySyntax node) - { - var openParen = (RazorMetaCodeSyntax)Visit(node.OpenParen); - var cSharpCode = (CSharpCodeBlockSyntax)Visit(node.CSharpCode); - var closeParen = (RazorMetaCodeSyntax)Visit(node.CloseParen); - return node.Update(openParen, cSharpCode, closeParen); - } + => node.Update((RazorMetaCodeSyntax)Visit(node.OpenParen), (CSharpCodeBlockSyntax)Visit(node.CSharpCode), (RazorMetaCodeSyntax)Visit(node.CloseParen)); public override GreenNode VisitCSharpImplicitExpression(CSharpImplicitExpressionSyntax node) - { - var transition = (CSharpTransitionSyntax)Visit(node.Transition); - var body = (CSharpSyntaxNode)Visit(node.Body); - return node.Update(transition, body); - } + => node.Update((CSharpTransitionSyntax)Visit(node.Transition), (CSharpSyntaxNode)Visit(node.Body)); public override GreenNode VisitCSharpImplicitExpressionBody(CSharpImplicitExpressionBodySyntax node) - { - var cSharpCode = (CSharpCodeBlockSyntax)Visit(node.CSharpCode); - return node.Update(cSharpCode); - } + => node.Update((CSharpCodeBlockSyntax)Visit(node.CSharpCode)); public override GreenNode VisitRazorDirective(RazorDirectiveSyntax node) - { - var transition = (CSharpTransitionSyntax)Visit(node.Transition); - var body = (CSharpSyntaxNode)Visit(node.Body); - return node.Update(transition, body); - } + => node.Update((CSharpTransitionSyntax)Visit(node.Transition), (CSharpSyntaxNode)Visit(node.Body)); public override GreenNode VisitRazorDirectiveBody(RazorDirectiveBodySyntax node) - { - var keyword = (RazorSyntaxNode)Visit(node.Keyword); - var cSharpCode = (CSharpCodeBlockSyntax)Visit(node.CSharpCode); - return node.Update(keyword, cSharpCode); - } - } + => node.Update((RazorSyntaxNode)Visit(node.Keyword), (CSharpCodeBlockSyntax)Visit(node.CSharpCode)); +} - internal static partial class SyntaxFactory - { +internal static partial class SyntaxFactory +{ public static RazorDocumentSyntax RazorDocument(RazorBlockSyntax document, SyntaxToken endOfFile) { - if (document == null) - throw new ArgumentNullException(nameof(document)); - if (endOfFile == null) - throw new ArgumentNullException(nameof(endOfFile)); - switch (endOfFile.Kind) - { - case SyntaxKind.EndOfFile: - break; - default: - throw new ArgumentException("endOfFile"); - } + ArgHelper.ThrowIfNull(document); + ArgHelper.ThrowIfNull(endOfFile); + if (endOfFile.Kind != SyntaxKind.EndOfFile) + ThrowHelper.ThrowArgumentException(nameof(endOfFile), $"Invalid SyntaxKind. Expected 'SyntaxKind.EndOfFile', but it was {endOfFile.Kind}"); - var result = new RazorDocumentSyntax(SyntaxKind.RazorDocument, document, endOfFile); + var result = new RazorDocumentSyntax(SyntaxKind.RazorDocument, document, endOfFile); - return result; + return result; } public static RazorCommentBlockSyntax RazorCommentBlock(SyntaxToken startCommentTransition, SyntaxToken startCommentStar, SyntaxToken comment, SyntaxToken endCommentStar, SyntaxToken endCommentTransition) { - if (startCommentTransition == null) - throw new ArgumentNullException(nameof(startCommentTransition)); - switch (startCommentTransition.Kind) - { - case SyntaxKind.RazorCommentTransition: - break; - default: - throw new ArgumentException("startCommentTransition"); - } - if (startCommentStar == null) - throw new ArgumentNullException(nameof(startCommentStar)); - switch (startCommentStar.Kind) - { - case SyntaxKind.RazorCommentStar: - break; - default: - throw new ArgumentException("startCommentStar"); - } - if (comment == null) - throw new ArgumentNullException(nameof(comment)); - switch (comment.Kind) - { - case SyntaxKind.RazorCommentLiteral: - break; - default: - throw new ArgumentException("comment"); - } - if (endCommentStar == null) - throw new ArgumentNullException(nameof(endCommentStar)); - switch (endCommentStar.Kind) - { - case SyntaxKind.RazorCommentStar: - break; - default: - throw new ArgumentException("endCommentStar"); - } - if (endCommentTransition == null) - throw new ArgumentNullException(nameof(endCommentTransition)); - switch (endCommentTransition.Kind) - { - case SyntaxKind.RazorCommentTransition: - break; - default: - throw new ArgumentException("endCommentTransition"); - } - - return new RazorCommentBlockSyntax(SyntaxKind.RazorComment, startCommentTransition, startCommentStar, comment, endCommentStar, endCommentTransition); + ArgHelper.ThrowIfNull(startCommentTransition); + if (startCommentTransition.Kind != SyntaxKind.RazorCommentTransition) + ThrowHelper.ThrowArgumentException(nameof(startCommentTransition), $"Invalid SyntaxKind. Expected 'SyntaxKind.RazorCommentTransition', but it was {startCommentTransition.Kind}"); + ArgHelper.ThrowIfNull(startCommentStar); + if (startCommentStar.Kind != SyntaxKind.RazorCommentStar) + ThrowHelper.ThrowArgumentException(nameof(startCommentStar), $"Invalid SyntaxKind. Expected 'SyntaxKind.RazorCommentStar', but it was {startCommentStar.Kind}"); + ArgHelper.ThrowIfNull(comment); + if (comment.Kind != SyntaxKind.RazorCommentLiteral) + ThrowHelper.ThrowArgumentException(nameof(comment), $"Invalid SyntaxKind. Expected 'SyntaxKind.RazorCommentLiteral', but it was {comment.Kind}"); + ArgHelper.ThrowIfNull(endCommentStar); + if (endCommentStar.Kind != SyntaxKind.RazorCommentStar) + ThrowHelper.ThrowArgumentException(nameof(endCommentStar), $"Invalid SyntaxKind. Expected 'SyntaxKind.RazorCommentStar', but it was {endCommentStar.Kind}"); + ArgHelper.ThrowIfNull(endCommentTransition); + if (endCommentTransition.Kind != SyntaxKind.RazorCommentTransition) + ThrowHelper.ThrowArgumentException(nameof(endCommentTransition), $"Invalid SyntaxKind. Expected 'SyntaxKind.RazorCommentTransition', but it was {endCommentTransition.Kind}"); + + return new RazorCommentBlockSyntax(SyntaxKind.RazorComment, startCommentTransition, startCommentStar, comment, endCommentStar, endCommentTransition); } public static RazorMetaCodeSyntax RazorMetaCode(Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList metaCode, ISpanChunkGenerator chunkGenerator) { + var result = new RazorMetaCodeSyntax(SyntaxKind.RazorMetaCode, metaCode.Node, chunkGenerator); - var result = new RazorMetaCodeSyntax(SyntaxKind.RazorMetaCode, metaCode.Node, chunkGenerator); - - return result; + return result; } public static GenericBlockSyntax GenericBlock(Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList children) { + var result = new GenericBlockSyntax(SyntaxKind.GenericBlock, children.Node); - var result = new GenericBlockSyntax(SyntaxKind.GenericBlock, children.Node); - - return result; + return result; } public static UnclassifiedTextLiteralSyntax UnclassifiedTextLiteral(Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) { + var result = new UnclassifiedTextLiteralSyntax(SyntaxKind.UnclassifiedTextLiteral, literalTokens.Node, chunkGenerator); - var result = new UnclassifiedTextLiteralSyntax(SyntaxKind.UnclassifiedTextLiteral, literalTokens.Node, chunkGenerator); - - return result; + return result; } public static MarkupBlockSyntax MarkupBlock(Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList children) { + var result = new MarkupBlockSyntax(SyntaxKind.MarkupBlock, children.Node); - var result = new MarkupBlockSyntax(SyntaxKind.MarkupBlock, children.Node); - - return result; + return result; } public static MarkupTransitionSyntax MarkupTransition(Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList transitionTokens, ISpanChunkGenerator chunkGenerator) { + var result = new MarkupTransitionSyntax(SyntaxKind.MarkupTransition, transitionTokens.Node, chunkGenerator); - var result = new MarkupTransitionSyntax(SyntaxKind.MarkupTransition, transitionTokens.Node, chunkGenerator); - - return result; + return result; } public static MarkupTextLiteralSyntax MarkupTextLiteral(Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) { + var result = new MarkupTextLiteralSyntax(SyntaxKind.MarkupTextLiteral, literalTokens.Node, chunkGenerator); - var result = new MarkupTextLiteralSyntax(SyntaxKind.MarkupTextLiteral, literalTokens.Node, chunkGenerator); - - return result; + return result; } public static MarkupEphemeralTextLiteralSyntax MarkupEphemeralTextLiteral(Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) { + var result = new MarkupEphemeralTextLiteralSyntax(SyntaxKind.MarkupEphemeralTextLiteral, literalTokens.Node, chunkGenerator); - var result = new MarkupEphemeralTextLiteralSyntax(SyntaxKind.MarkupEphemeralTextLiteral, literalTokens.Node, chunkGenerator); - - return result; + return result; } public static MarkupCommentBlockSyntax MarkupCommentBlock(Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList children) { + var result = new MarkupCommentBlockSyntax(SyntaxKind.MarkupCommentBlock, children.Node); - var result = new MarkupCommentBlockSyntax(SyntaxKind.MarkupCommentBlock, children.Node); - - return result; + return result; } public static MarkupMinimizedAttributeBlockSyntax MarkupMinimizedAttributeBlock(MarkupTextLiteralSyntax namePrefix, MarkupTextLiteralSyntax name) { - if (name == null) - throw new ArgumentNullException(nameof(name)); + ArgHelper.ThrowIfNull(name); - var result = new MarkupMinimizedAttributeBlockSyntax(SyntaxKind.MarkupMinimizedAttributeBlock, namePrefix, name); + var result = new MarkupMinimizedAttributeBlockSyntax(SyntaxKind.MarkupMinimizedAttributeBlock, namePrefix, name); - return result; + return result; } public static MarkupAttributeBlockSyntax MarkupAttributeBlock(MarkupTextLiteralSyntax namePrefix, MarkupTextLiteralSyntax name, MarkupTextLiteralSyntax nameSuffix, SyntaxToken equalsToken, MarkupTextLiteralSyntax valuePrefix, RazorBlockSyntax value, MarkupTextLiteralSyntax valueSuffix) { - if (name == null) - throw new ArgumentNullException(nameof(name)); - if (equalsToken == null) - throw new ArgumentNullException(nameof(equalsToken)); - switch (equalsToken.Kind) - { - case SyntaxKind.Equals: - break; - default: - throw new ArgumentException("equalsToken"); - } + ArgHelper.ThrowIfNull(name); + ArgHelper.ThrowIfNull(equalsToken); + if (equalsToken.Kind != SyntaxKind.Equals) + ThrowHelper.ThrowArgumentException(nameof(equalsToken), $"Invalid SyntaxKind. Expected 'SyntaxKind.Equals', but it was {equalsToken.Kind}"); - return new MarkupAttributeBlockSyntax(SyntaxKind.MarkupAttributeBlock, namePrefix, name, nameSuffix, equalsToken, valuePrefix, value, valueSuffix); + return new MarkupAttributeBlockSyntax(SyntaxKind.MarkupAttributeBlock, namePrefix, name, nameSuffix, equalsToken, valuePrefix, value, valueSuffix); } public static MarkupMiscAttributeContentSyntax MarkupMiscAttributeContent(Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList children) { + var result = new MarkupMiscAttributeContentSyntax(SyntaxKind.MarkupMiscAttributeContent, children.Node); - var result = new MarkupMiscAttributeContentSyntax(SyntaxKind.MarkupMiscAttributeContent, children.Node); - - return result; + return result; } public static MarkupLiteralAttributeValueSyntax MarkupLiteralAttributeValue(MarkupTextLiteralSyntax prefix, MarkupTextLiteralSyntax value) { + var result = new MarkupLiteralAttributeValueSyntax(SyntaxKind.MarkupLiteralAttributeValue, prefix, value); - var result = new MarkupLiteralAttributeValueSyntax(SyntaxKind.MarkupLiteralAttributeValue, prefix, value); - - return result; + return result; } public static MarkupDynamicAttributeValueSyntax MarkupDynamicAttributeValue(MarkupTextLiteralSyntax prefix, RazorBlockSyntax value) { - if (value == null) - throw new ArgumentNullException(nameof(value)); + ArgHelper.ThrowIfNull(value); - var result = new MarkupDynamicAttributeValueSyntax(SyntaxKind.MarkupDynamicAttributeValue, prefix, value); + var result = new MarkupDynamicAttributeValueSyntax(SyntaxKind.MarkupDynamicAttributeValue, prefix, value); - return result; + return result; } public static MarkupElementSyntax MarkupElement(MarkupStartTagSyntax startTag, Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList body, MarkupEndTagSyntax endTag) { + var result = new MarkupElementSyntax(SyntaxKind.MarkupElement, startTag, body.Node, endTag); - var result = new MarkupElementSyntax(SyntaxKind.MarkupElement, startTag, body.Node, endTag); - - return result; + return result; } public static MarkupStartTagSyntax MarkupStartTag(SyntaxToken openAngle, SyntaxToken bang, SyntaxToken name, Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList attributes, SyntaxToken forwardSlash, SyntaxToken closeAngle, ISpanChunkGenerator chunkGenerator) { - if (openAngle == null) - throw new ArgumentNullException(nameof(openAngle)); - switch (openAngle.Kind) - { - case SyntaxKind.OpenAngle: - break; - default: - throw new ArgumentException("openAngle"); - } - if (bang != null) - { - switch (bang.Kind) - { - case SyntaxKind.Bang: - case SyntaxKind.None: - break; - default: - throw new ArgumentException("bang"); - } - } - if (name == null) - throw new ArgumentNullException(nameof(name)); - switch (name.Kind) - { - case SyntaxKind.Text: - break; - default: - throw new ArgumentException("name"); - } - if (forwardSlash != null) - { - switch (forwardSlash.Kind) - { - case SyntaxKind.ForwardSlash: - case SyntaxKind.None: - break; - default: - throw new ArgumentException("forwardSlash"); - } - } - if (closeAngle == null) - throw new ArgumentNullException(nameof(closeAngle)); - switch (closeAngle.Kind) - { - case SyntaxKind.CloseAngle: - break; - default: - throw new ArgumentException("closeAngle"); - } - - return new MarkupStartTagSyntax(SyntaxKind.MarkupStartTag, openAngle, bang, name, attributes.Node, forwardSlash, closeAngle, chunkGenerator); + ArgHelper.ThrowIfNull(openAngle); + if (openAngle.Kind != SyntaxKind.OpenAngle) + ThrowHelper.ThrowArgumentException(nameof(openAngle), $"Invalid SyntaxKind. Expected 'SyntaxKind.OpenAngle', but it was {openAngle.Kind}"); + if (bang is not null && bang.Kind is not (SyntaxKind.Bang or SyntaxKind.None)) + ThrowHelper.ThrowArgumentException(nameof(bang), $"Invalid SyntaxKind. Expected 'SyntaxKind.Bang' or 'SyntaxKind.None', but it was {bang.Kind}"); + ArgHelper.ThrowIfNull(name); + if (name.Kind != SyntaxKind.Text) + ThrowHelper.ThrowArgumentException(nameof(name), $"Invalid SyntaxKind. Expected 'SyntaxKind.Text', but it was {name.Kind}"); + if (forwardSlash is not null && forwardSlash.Kind is not (SyntaxKind.ForwardSlash or SyntaxKind.None)) + ThrowHelper.ThrowArgumentException(nameof(forwardSlash), $"Invalid SyntaxKind. Expected 'SyntaxKind.ForwardSlash' or 'SyntaxKind.None', but it was {forwardSlash.Kind}"); + ArgHelper.ThrowIfNull(closeAngle); + if (closeAngle.Kind != SyntaxKind.CloseAngle) + ThrowHelper.ThrowArgumentException(nameof(closeAngle), $"Invalid SyntaxKind. Expected 'SyntaxKind.CloseAngle', but it was {closeAngle.Kind}"); + + return new MarkupStartTagSyntax(SyntaxKind.MarkupStartTag, openAngle, bang, name, attributes.Node, forwardSlash, closeAngle, chunkGenerator); } public static MarkupEndTagSyntax MarkupEndTag(SyntaxToken openAngle, SyntaxToken forwardSlash, SyntaxToken bang, SyntaxToken name, MarkupMiscAttributeContentSyntax miscAttributeContent, SyntaxToken closeAngle, ISpanChunkGenerator chunkGenerator) { - if (openAngle == null) - throw new ArgumentNullException(nameof(openAngle)); - switch (openAngle.Kind) - { - case SyntaxKind.OpenAngle: - break; - default: - throw new ArgumentException("openAngle"); - } - if (forwardSlash == null) - throw new ArgumentNullException(nameof(forwardSlash)); - switch (forwardSlash.Kind) - { - case SyntaxKind.ForwardSlash: - break; - default: - throw new ArgumentException("forwardSlash"); - } - if (bang != null) - { - switch (bang.Kind) - { - case SyntaxKind.Bang: - case SyntaxKind.None: - break; - default: - throw new ArgumentException("bang"); - } - } - if (name == null) - throw new ArgumentNullException(nameof(name)); - switch (name.Kind) - { - case SyntaxKind.Text: - break; - default: - throw new ArgumentException("name"); - } - if (closeAngle == null) - throw new ArgumentNullException(nameof(closeAngle)); - switch (closeAngle.Kind) - { - case SyntaxKind.CloseAngle: - break; - default: - throw new ArgumentException("closeAngle"); - } - - return new MarkupEndTagSyntax(SyntaxKind.MarkupEndTag, openAngle, forwardSlash, bang, name, miscAttributeContent, closeAngle, chunkGenerator); + ArgHelper.ThrowIfNull(openAngle); + if (openAngle.Kind != SyntaxKind.OpenAngle) + ThrowHelper.ThrowArgumentException(nameof(openAngle), $"Invalid SyntaxKind. Expected 'SyntaxKind.OpenAngle', but it was {openAngle.Kind}"); + ArgHelper.ThrowIfNull(forwardSlash); + if (forwardSlash.Kind != SyntaxKind.ForwardSlash) + ThrowHelper.ThrowArgumentException(nameof(forwardSlash), $"Invalid SyntaxKind. Expected 'SyntaxKind.ForwardSlash', but it was {forwardSlash.Kind}"); + if (bang is not null && bang.Kind is not (SyntaxKind.Bang or SyntaxKind.None)) + ThrowHelper.ThrowArgumentException(nameof(bang), $"Invalid SyntaxKind. Expected 'SyntaxKind.Bang' or 'SyntaxKind.None', but it was {bang.Kind}"); + ArgHelper.ThrowIfNull(name); + if (name.Kind != SyntaxKind.Text) + ThrowHelper.ThrowArgumentException(nameof(name), $"Invalid SyntaxKind. Expected 'SyntaxKind.Text', but it was {name.Kind}"); + ArgHelper.ThrowIfNull(closeAngle); + if (closeAngle.Kind != SyntaxKind.CloseAngle) + ThrowHelper.ThrowArgumentException(nameof(closeAngle), $"Invalid SyntaxKind. Expected 'SyntaxKind.CloseAngle', but it was {closeAngle.Kind}"); + + return new MarkupEndTagSyntax(SyntaxKind.MarkupEndTag, openAngle, forwardSlash, bang, name, miscAttributeContent, closeAngle, chunkGenerator); } public static MarkupTagHelperElementSyntax MarkupTagHelperElement(MarkupTagHelperStartTagSyntax startTag, Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList body, MarkupTagHelperEndTagSyntax endTag) { - if (startTag == null) - throw new ArgumentNullException(nameof(startTag)); + ArgHelper.ThrowIfNull(startTag); - var result = new MarkupTagHelperElementSyntax(SyntaxKind.MarkupTagHelperElement, startTag, body.Node, endTag); + var result = new MarkupTagHelperElementSyntax(SyntaxKind.MarkupTagHelperElement, startTag, body.Node, endTag); - return result; + return result; } public static MarkupTagHelperStartTagSyntax MarkupTagHelperStartTag(SyntaxToken openAngle, SyntaxToken bang, SyntaxToken name, Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList attributes, SyntaxToken forwardSlash, SyntaxToken closeAngle, ISpanChunkGenerator chunkGenerator) { - if (openAngle == null) - throw new ArgumentNullException(nameof(openAngle)); - switch (openAngle.Kind) - { - case SyntaxKind.OpenAngle: - break; - default: - throw new ArgumentException("openAngle"); - } - if (bang != null) - { - switch (bang.Kind) - { - case SyntaxKind.Bang: - case SyntaxKind.None: - break; - default: - throw new ArgumentException("bang"); - } - } - if (name == null) - throw new ArgumentNullException(nameof(name)); - switch (name.Kind) - { - case SyntaxKind.Text: - break; - default: - throw new ArgumentException("name"); - } - if (forwardSlash != null) - { - switch (forwardSlash.Kind) - { - case SyntaxKind.ForwardSlash: - case SyntaxKind.None: - break; - default: - throw new ArgumentException("forwardSlash"); - } - } - if (closeAngle == null) - throw new ArgumentNullException(nameof(closeAngle)); - switch (closeAngle.Kind) - { - case SyntaxKind.CloseAngle: - break; - default: - throw new ArgumentException("closeAngle"); - } - - return new MarkupTagHelperStartTagSyntax(SyntaxKind.MarkupTagHelperStartTag, openAngle, bang, name, attributes.Node, forwardSlash, closeAngle, chunkGenerator); + ArgHelper.ThrowIfNull(openAngle); + if (openAngle.Kind != SyntaxKind.OpenAngle) + ThrowHelper.ThrowArgumentException(nameof(openAngle), $"Invalid SyntaxKind. Expected 'SyntaxKind.OpenAngle', but it was {openAngle.Kind}"); + if (bang is not null && bang.Kind is not (SyntaxKind.Bang or SyntaxKind.None)) + ThrowHelper.ThrowArgumentException(nameof(bang), $"Invalid SyntaxKind. Expected 'SyntaxKind.Bang' or 'SyntaxKind.None', but it was {bang.Kind}"); + ArgHelper.ThrowIfNull(name); + if (name.Kind != SyntaxKind.Text) + ThrowHelper.ThrowArgumentException(nameof(name), $"Invalid SyntaxKind. Expected 'SyntaxKind.Text', but it was {name.Kind}"); + if (forwardSlash is not null && forwardSlash.Kind is not (SyntaxKind.ForwardSlash or SyntaxKind.None)) + ThrowHelper.ThrowArgumentException(nameof(forwardSlash), $"Invalid SyntaxKind. Expected 'SyntaxKind.ForwardSlash' or 'SyntaxKind.None', but it was {forwardSlash.Kind}"); + ArgHelper.ThrowIfNull(closeAngle); + if (closeAngle.Kind != SyntaxKind.CloseAngle) + ThrowHelper.ThrowArgumentException(nameof(closeAngle), $"Invalid SyntaxKind. Expected 'SyntaxKind.CloseAngle', but it was {closeAngle.Kind}"); + + return new MarkupTagHelperStartTagSyntax(SyntaxKind.MarkupTagHelperStartTag, openAngle, bang, name, attributes.Node, forwardSlash, closeAngle, chunkGenerator); } public static MarkupTagHelperEndTagSyntax MarkupTagHelperEndTag(SyntaxToken openAngle, SyntaxToken forwardSlash, SyntaxToken bang, SyntaxToken name, MarkupMiscAttributeContentSyntax miscAttributeContent, SyntaxToken closeAngle, ISpanChunkGenerator chunkGenerator) { - if (openAngle == null) - throw new ArgumentNullException(nameof(openAngle)); - switch (openAngle.Kind) - { - case SyntaxKind.OpenAngle: - break; - default: - throw new ArgumentException("openAngle"); - } - if (forwardSlash == null) - throw new ArgumentNullException(nameof(forwardSlash)); - switch (forwardSlash.Kind) - { - case SyntaxKind.ForwardSlash: - break; - default: - throw new ArgumentException("forwardSlash"); - } - if (bang != null) - { - switch (bang.Kind) - { - case SyntaxKind.Bang: - case SyntaxKind.None: - break; - default: - throw new ArgumentException("bang"); - } - } - if (name == null) - throw new ArgumentNullException(nameof(name)); - switch (name.Kind) - { - case SyntaxKind.Text: - break; - default: - throw new ArgumentException("name"); - } - if (closeAngle == null) - throw new ArgumentNullException(nameof(closeAngle)); - switch (closeAngle.Kind) - { - case SyntaxKind.CloseAngle: - break; - default: - throw new ArgumentException("closeAngle"); - } - - return new MarkupTagHelperEndTagSyntax(SyntaxKind.MarkupTagHelperEndTag, openAngle, forwardSlash, bang, name, miscAttributeContent, closeAngle, chunkGenerator); + ArgHelper.ThrowIfNull(openAngle); + if (openAngle.Kind != SyntaxKind.OpenAngle) + ThrowHelper.ThrowArgumentException(nameof(openAngle), $"Invalid SyntaxKind. Expected 'SyntaxKind.OpenAngle', but it was {openAngle.Kind}"); + ArgHelper.ThrowIfNull(forwardSlash); + if (forwardSlash.Kind != SyntaxKind.ForwardSlash) + ThrowHelper.ThrowArgumentException(nameof(forwardSlash), $"Invalid SyntaxKind. Expected 'SyntaxKind.ForwardSlash', but it was {forwardSlash.Kind}"); + if (bang is not null && bang.Kind is not (SyntaxKind.Bang or SyntaxKind.None)) + ThrowHelper.ThrowArgumentException(nameof(bang), $"Invalid SyntaxKind. Expected 'SyntaxKind.Bang' or 'SyntaxKind.None', but it was {bang.Kind}"); + ArgHelper.ThrowIfNull(name); + if (name.Kind != SyntaxKind.Text) + ThrowHelper.ThrowArgumentException(nameof(name), $"Invalid SyntaxKind. Expected 'SyntaxKind.Text', but it was {name.Kind}"); + ArgHelper.ThrowIfNull(closeAngle); + if (closeAngle.Kind != SyntaxKind.CloseAngle) + ThrowHelper.ThrowArgumentException(nameof(closeAngle), $"Invalid SyntaxKind. Expected 'SyntaxKind.CloseAngle', but it was {closeAngle.Kind}"); + + return new MarkupTagHelperEndTagSyntax(SyntaxKind.MarkupTagHelperEndTag, openAngle, forwardSlash, bang, name, miscAttributeContent, closeAngle, chunkGenerator); } public static MarkupTagHelperAttributeSyntax MarkupTagHelperAttribute(MarkupTextLiteralSyntax namePrefix, MarkupTextLiteralSyntax name, MarkupTextLiteralSyntax nameSuffix, SyntaxToken equalsToken, MarkupTextLiteralSyntax valuePrefix, MarkupTagHelperAttributeValueSyntax value, MarkupTextLiteralSyntax valueSuffix) { - if (name == null) - throw new ArgumentNullException(nameof(name)); - if (equalsToken == null) - throw new ArgumentNullException(nameof(equalsToken)); - switch (equalsToken.Kind) - { - case SyntaxKind.Equals: - break; - default: - throw new ArgumentException("equalsToken"); - } - if (value == null) - throw new ArgumentNullException(nameof(value)); + ArgHelper.ThrowIfNull(name); + ArgHelper.ThrowIfNull(equalsToken); + if (equalsToken.Kind != SyntaxKind.Equals) + ThrowHelper.ThrowArgumentException(nameof(equalsToken), $"Invalid SyntaxKind. Expected 'SyntaxKind.Equals', but it was {equalsToken.Kind}"); + ArgHelper.ThrowIfNull(value); - return new MarkupTagHelperAttributeSyntax(SyntaxKind.MarkupTagHelperAttribute, namePrefix, name, nameSuffix, equalsToken, valuePrefix, value, valueSuffix); + return new MarkupTagHelperAttributeSyntax(SyntaxKind.MarkupTagHelperAttribute, namePrefix, name, nameSuffix, equalsToken, valuePrefix, value, valueSuffix); } public static MarkupMinimizedTagHelperAttributeSyntax MarkupMinimizedTagHelperAttribute(MarkupTextLiteralSyntax namePrefix, MarkupTextLiteralSyntax name) { - if (name == null) - throw new ArgumentNullException(nameof(name)); + ArgHelper.ThrowIfNull(name); - var result = new MarkupMinimizedTagHelperAttributeSyntax(SyntaxKind.MarkupMinimizedTagHelperAttribute, namePrefix, name); + var result = new MarkupMinimizedTagHelperAttributeSyntax(SyntaxKind.MarkupMinimizedTagHelperAttribute, namePrefix, name); - return result; + return result; } public static MarkupTagHelperAttributeValueSyntax MarkupTagHelperAttributeValue(Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList children) { + var result = new MarkupTagHelperAttributeValueSyntax(SyntaxKind.MarkupTagHelperAttributeValue, children.Node); - var result = new MarkupTagHelperAttributeValueSyntax(SyntaxKind.MarkupTagHelperAttributeValue, children.Node); - - return result; + return result; } public static MarkupTagHelperDirectiveAttributeSyntax MarkupTagHelperDirectiveAttribute(MarkupTextLiteralSyntax namePrefix, RazorMetaCodeSyntax transition, MarkupTextLiteralSyntax name, RazorMetaCodeSyntax colon, MarkupTextLiteralSyntax parameterName, MarkupTextLiteralSyntax nameSuffix, SyntaxToken equalsToken, MarkupTextLiteralSyntax valuePrefix, MarkupTagHelperAttributeValueSyntax value, MarkupTextLiteralSyntax valueSuffix) { - if (transition == null) - throw new ArgumentNullException(nameof(transition)); - if (name == null) - throw new ArgumentNullException(nameof(name)); - if (equalsToken == null) - throw new ArgumentNullException(nameof(equalsToken)); - switch (equalsToken.Kind) - { - case SyntaxKind.Equals: - break; - default: - throw new ArgumentException("equalsToken"); - } - if (value == null) - throw new ArgumentNullException(nameof(value)); - - return new MarkupTagHelperDirectiveAttributeSyntax(SyntaxKind.MarkupTagHelperDirectiveAttribute, namePrefix, transition, name, colon, parameterName, nameSuffix, equalsToken, valuePrefix, value, valueSuffix); + ArgHelper.ThrowIfNull(transition); + ArgHelper.ThrowIfNull(name); + ArgHelper.ThrowIfNull(equalsToken); + if (equalsToken.Kind != SyntaxKind.Equals) + ThrowHelper.ThrowArgumentException(nameof(equalsToken), $"Invalid SyntaxKind. Expected 'SyntaxKind.Equals', but it was {equalsToken.Kind}"); + ArgHelper.ThrowIfNull(value); + + return new MarkupTagHelperDirectiveAttributeSyntax(SyntaxKind.MarkupTagHelperDirectiveAttribute, namePrefix, transition, name, colon, parameterName, nameSuffix, equalsToken, valuePrefix, value, valueSuffix); } public static MarkupMinimizedTagHelperDirectiveAttributeSyntax MarkupMinimizedTagHelperDirectiveAttribute(MarkupTextLiteralSyntax namePrefix, RazorMetaCodeSyntax transition, MarkupTextLiteralSyntax name, RazorMetaCodeSyntax colon, MarkupTextLiteralSyntax parameterName) { - if (transition == null) - throw new ArgumentNullException(nameof(transition)); - if (name == null) - throw new ArgumentNullException(nameof(name)); + ArgHelper.ThrowIfNull(transition); + ArgHelper.ThrowIfNull(name); - return new MarkupMinimizedTagHelperDirectiveAttributeSyntax(SyntaxKind.MarkupMinimizedTagHelperDirectiveAttribute, namePrefix, transition, name, colon, parameterName); + return new MarkupMinimizedTagHelperDirectiveAttributeSyntax(SyntaxKind.MarkupMinimizedTagHelperDirectiveAttribute, namePrefix, transition, name, colon, parameterName); } public static CSharpCodeBlockSyntax CSharpCodeBlock(Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList children) { + var result = new CSharpCodeBlockSyntax(SyntaxKind.CSharpCodeBlock, children.Node); - var result = new CSharpCodeBlockSyntax(SyntaxKind.CSharpCodeBlock, children.Node); - - return result; + return result; } public static CSharpTransitionSyntax CSharpTransition(SyntaxToken transition, ISpanChunkGenerator chunkGenerator) { - if (transition == null) - throw new ArgumentNullException(nameof(transition)); - switch (transition.Kind) - { - case SyntaxKind.Transition: - break; - default: - throw new ArgumentException("transition"); - } + ArgHelper.ThrowIfNull(transition); + if (transition.Kind != SyntaxKind.Transition) + ThrowHelper.ThrowArgumentException(nameof(transition), $"Invalid SyntaxKind. Expected 'SyntaxKind.Transition', but it was {transition.Kind}"); - var result = new CSharpTransitionSyntax(SyntaxKind.CSharpTransition, transition, chunkGenerator); + var result = new CSharpTransitionSyntax(SyntaxKind.CSharpTransition, transition, chunkGenerator); - return result; + return result; } public static CSharpStatementLiteralSyntax CSharpStatementLiteral(Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) { + var result = new CSharpStatementLiteralSyntax(SyntaxKind.CSharpStatementLiteral, literalTokens.Node, chunkGenerator); - var result = new CSharpStatementLiteralSyntax(SyntaxKind.CSharpStatementLiteral, literalTokens.Node, chunkGenerator); - - return result; + return result; } public static CSharpExpressionLiteralSyntax CSharpExpressionLiteral(Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) { + var result = new CSharpExpressionLiteralSyntax(SyntaxKind.CSharpExpressionLiteral, literalTokens.Node, chunkGenerator); - var result = new CSharpExpressionLiteralSyntax(SyntaxKind.CSharpExpressionLiteral, literalTokens.Node, chunkGenerator); - - return result; + return result; } public static CSharpEphemeralTextLiteralSyntax CSharpEphemeralTextLiteral(Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) { + var result = new CSharpEphemeralTextLiteralSyntax(SyntaxKind.CSharpEphemeralTextLiteral, literalTokens.Node, chunkGenerator); - var result = new CSharpEphemeralTextLiteralSyntax(SyntaxKind.CSharpEphemeralTextLiteral, literalTokens.Node, chunkGenerator); - - return result; + return result; } public static CSharpTemplateBlockSyntax CSharpTemplateBlock(Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList children) { + var result = new CSharpTemplateBlockSyntax(SyntaxKind.CSharpTemplateBlock, children.Node); - var result = new CSharpTemplateBlockSyntax(SyntaxKind.CSharpTemplateBlock, children.Node); - - return result; + return result; } public static CSharpStatementSyntax CSharpStatement(CSharpTransitionSyntax transition, CSharpSyntaxNode body) { - if (transition == null) - throw new ArgumentNullException(nameof(transition)); - if (body == null) - throw new ArgumentNullException(nameof(body)); + ArgHelper.ThrowIfNull(transition); + ArgHelper.ThrowIfNull(body); - var result = new CSharpStatementSyntax(SyntaxKind.CSharpStatement, transition, body); + var result = new CSharpStatementSyntax(SyntaxKind.CSharpStatement, transition, body); - return result; + return result; } - public static CSharpStatementBodySyntax CSharpStatementBody(RazorMetaCodeSyntax openBrace, CSharpCodeBlockSyntax cSharpCode, RazorMetaCodeSyntax closeBrace) + public static CSharpStatementBodySyntax CSharpStatementBody(RazorMetaCodeSyntax openBrace, CSharpCodeBlockSyntax csharpCode, RazorMetaCodeSyntax closeBrace) { - if (openBrace == null) - throw new ArgumentNullException(nameof(openBrace)); - if (cSharpCode == null) - throw new ArgumentNullException(nameof(cSharpCode)); - if (closeBrace == null) - throw new ArgumentNullException(nameof(closeBrace)); + ArgHelper.ThrowIfNull(openBrace); + ArgHelper.ThrowIfNull(csharpCode); + ArgHelper.ThrowIfNull(closeBrace); - var result = new CSharpStatementBodySyntax(SyntaxKind.CSharpStatementBody, openBrace, cSharpCode, closeBrace); + var result = new CSharpStatementBodySyntax(SyntaxKind.CSharpStatementBody, openBrace, csharpCode, closeBrace); - return result; + return result; } public static CSharpExplicitExpressionSyntax CSharpExplicitExpression(CSharpTransitionSyntax transition, CSharpSyntaxNode body) { - if (transition == null) - throw new ArgumentNullException(nameof(transition)); - if (body == null) - throw new ArgumentNullException(nameof(body)); + ArgHelper.ThrowIfNull(transition); + ArgHelper.ThrowIfNull(body); - var result = new CSharpExplicitExpressionSyntax(SyntaxKind.CSharpExplicitExpression, transition, body); + var result = new CSharpExplicitExpressionSyntax(SyntaxKind.CSharpExplicitExpression, transition, body); - return result; + return result; } - public static CSharpExplicitExpressionBodySyntax CSharpExplicitExpressionBody(RazorMetaCodeSyntax openParen, CSharpCodeBlockSyntax cSharpCode, RazorMetaCodeSyntax closeParen) + public static CSharpExplicitExpressionBodySyntax CSharpExplicitExpressionBody(RazorMetaCodeSyntax openParen, CSharpCodeBlockSyntax csharpCode, RazorMetaCodeSyntax closeParen) { - if (openParen == null) - throw new ArgumentNullException(nameof(openParen)); - if (cSharpCode == null) - throw new ArgumentNullException(nameof(cSharpCode)); - if (closeParen == null) - throw new ArgumentNullException(nameof(closeParen)); + ArgHelper.ThrowIfNull(openParen); + ArgHelper.ThrowIfNull(csharpCode); + ArgHelper.ThrowIfNull(closeParen); - var result = new CSharpExplicitExpressionBodySyntax(SyntaxKind.CSharpExplicitExpressionBody, openParen, cSharpCode, closeParen); + var result = new CSharpExplicitExpressionBodySyntax(SyntaxKind.CSharpExplicitExpressionBody, openParen, csharpCode, closeParen); - return result; + return result; } public static CSharpImplicitExpressionSyntax CSharpImplicitExpression(CSharpTransitionSyntax transition, CSharpSyntaxNode body) { - if (transition == null) - throw new ArgumentNullException(nameof(transition)); - if (body == null) - throw new ArgumentNullException(nameof(body)); + ArgHelper.ThrowIfNull(transition); + ArgHelper.ThrowIfNull(body); - var result = new CSharpImplicitExpressionSyntax(SyntaxKind.CSharpImplicitExpression, transition, body); + var result = new CSharpImplicitExpressionSyntax(SyntaxKind.CSharpImplicitExpression, transition, body); - return result; + return result; } - public static CSharpImplicitExpressionBodySyntax CSharpImplicitExpressionBody(CSharpCodeBlockSyntax cSharpCode) + public static CSharpImplicitExpressionBodySyntax CSharpImplicitExpressionBody(CSharpCodeBlockSyntax csharpCode) { - if (cSharpCode == null) - throw new ArgumentNullException(nameof(cSharpCode)); + ArgHelper.ThrowIfNull(csharpCode); - var result = new CSharpImplicitExpressionBodySyntax(SyntaxKind.CSharpImplicitExpressionBody, cSharpCode); + var result = new CSharpImplicitExpressionBodySyntax(SyntaxKind.CSharpImplicitExpressionBody, csharpCode); - return result; + return result; } public static RazorDirectiveSyntax RazorDirective(CSharpTransitionSyntax transition, CSharpSyntaxNode body) { - if (transition == null) - throw new ArgumentNullException(nameof(transition)); - if (body == null) - throw new ArgumentNullException(nameof(body)); + ArgHelper.ThrowIfNull(transition); + ArgHelper.ThrowIfNull(body); - var result = new RazorDirectiveSyntax(SyntaxKind.RazorDirective, transition, body); + var result = new RazorDirectiveSyntax(SyntaxKind.RazorDirective, transition, body); - return result; + return result; } - public static RazorDirectiveBodySyntax RazorDirectiveBody(RazorSyntaxNode keyword, CSharpCodeBlockSyntax cSharpCode) + public static RazorDirectiveBodySyntax RazorDirectiveBody(RazorSyntaxNode keyword, CSharpCodeBlockSyntax csharpCode) { - if (keyword == null) - throw new ArgumentNullException(nameof(keyword)); + ArgHelper.ThrowIfNull(keyword); - var result = new RazorDirectiveBodySyntax(SyntaxKind.RazorDirectiveBody, keyword, cSharpCode); + var result = new RazorDirectiveBodySyntax(SyntaxKind.RazorDirectiveBody, keyword, csharpCode); - return result; + return result; } internal static IEnumerable GetNodeTypes() { - return new Type[] { - typeof(RazorDocumentSyntax), - typeof(RazorCommentBlockSyntax), - typeof(RazorMetaCodeSyntax), - typeof(GenericBlockSyntax), - typeof(UnclassifiedTextLiteralSyntax), - typeof(MarkupBlockSyntax), - typeof(MarkupTransitionSyntax), - typeof(MarkupTextLiteralSyntax), - typeof(MarkupEphemeralTextLiteralSyntax), - typeof(MarkupCommentBlockSyntax), - typeof(MarkupMinimizedAttributeBlockSyntax), - typeof(MarkupAttributeBlockSyntax), - typeof(MarkupMiscAttributeContentSyntax), - typeof(MarkupLiteralAttributeValueSyntax), - typeof(MarkupDynamicAttributeValueSyntax), - typeof(MarkupElementSyntax), - typeof(MarkupStartTagSyntax), - typeof(MarkupEndTagSyntax), - typeof(MarkupTagHelperElementSyntax), - typeof(MarkupTagHelperStartTagSyntax), - typeof(MarkupTagHelperEndTagSyntax), - typeof(MarkupTagHelperAttributeSyntax), - typeof(MarkupMinimizedTagHelperAttributeSyntax), - typeof(MarkupTagHelperAttributeValueSyntax), - typeof(MarkupTagHelperDirectiveAttributeSyntax), - typeof(MarkupMinimizedTagHelperDirectiveAttributeSyntax), - typeof(CSharpCodeBlockSyntax), - typeof(CSharpTransitionSyntax), - typeof(CSharpStatementLiteralSyntax), - typeof(CSharpExpressionLiteralSyntax), - typeof(CSharpEphemeralTextLiteralSyntax), - typeof(CSharpTemplateBlockSyntax), - typeof(CSharpStatementSyntax), - typeof(CSharpStatementBodySyntax), - typeof(CSharpExplicitExpressionSyntax), - typeof(CSharpExplicitExpressionBodySyntax), - typeof(CSharpImplicitExpressionSyntax), - typeof(CSharpImplicitExpressionBodySyntax), - typeof(RazorDirectiveSyntax), - typeof(RazorDirectiveBodySyntax) + return new Type[] + { + typeof(RazorDocumentSyntax), + typeof(RazorCommentBlockSyntax), + typeof(RazorMetaCodeSyntax), + typeof(GenericBlockSyntax), + typeof(UnclassifiedTextLiteralSyntax), + typeof(MarkupBlockSyntax), + typeof(MarkupTransitionSyntax), + typeof(MarkupTextLiteralSyntax), + typeof(MarkupEphemeralTextLiteralSyntax), + typeof(MarkupCommentBlockSyntax), + typeof(MarkupMinimizedAttributeBlockSyntax), + typeof(MarkupAttributeBlockSyntax), + typeof(MarkupMiscAttributeContentSyntax), + typeof(MarkupLiteralAttributeValueSyntax), + typeof(MarkupDynamicAttributeValueSyntax), + typeof(MarkupElementSyntax), + typeof(MarkupStartTagSyntax), + typeof(MarkupEndTagSyntax), + typeof(MarkupTagHelperElementSyntax), + typeof(MarkupTagHelperStartTagSyntax), + typeof(MarkupTagHelperEndTagSyntax), + typeof(MarkupTagHelperAttributeSyntax), + typeof(MarkupMinimizedTagHelperAttributeSyntax), + typeof(MarkupTagHelperAttributeValueSyntax), + typeof(MarkupTagHelperDirectiveAttributeSyntax), + typeof(MarkupMinimizedTagHelperDirectiveAttributeSyntax), + typeof(CSharpCodeBlockSyntax), + typeof(CSharpTransitionSyntax), + typeof(CSharpStatementLiteralSyntax), + typeof(CSharpExpressionLiteralSyntax), + typeof(CSharpEphemeralTextLiteralSyntax), + typeof(CSharpTemplateBlockSyntax), + typeof(CSharpStatementSyntax), + typeof(CSharpStatementBodySyntax), + typeof(CSharpExplicitExpressionSyntax), + typeof(CSharpExplicitExpressionBodySyntax), + typeof(CSharpImplicitExpressionSyntax), + typeof(CSharpImplicitExpressionBodySyntax), + typeof(RazorDirectiveSyntax), + typeof(RazorDirectiveBodySyntax) }; } - } } diff --git a/src/razor/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Syntax/Generated/Syntax.xml.Main.Generated.cs b/src/razor/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Syntax/Generated/Syntax.xml.Main.Generated.cs index 01984b4c305..c403670dcc6 100644 --- a/src/razor/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Syntax/Generated/Syntax.xml.Main.Generated.cs +++ b/src/razor/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Syntax/Generated/Syntax.xml.Main.Generated.cs @@ -1,1603 +1,870 @@ // using System; -using System.Collections; using System.Collections.Generic; -using System.Linq; -using System.Threading; using Microsoft.AspNetCore.Razor.Language.Legacy; +namespace Microsoft.AspNetCore.Razor.Language.Syntax; -namespace Microsoft.AspNetCore.Razor.Language.Syntax +internal partial class SyntaxVisitor { - - internal partial class SyntaxVisitor - { /// Called when the visitor visits a RazorDocumentSyntax node. - public virtual TResult VisitRazorDocument(RazorDocumentSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitRazorDocument(RazorDocumentSyntax node) => DefaultVisit(node); /// Called when the visitor visits a RazorCommentBlockSyntax node. - public virtual TResult VisitRazorCommentBlock(RazorCommentBlockSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitRazorCommentBlock(RazorCommentBlockSyntax node) => DefaultVisit(node); /// Called when the visitor visits a RazorMetaCodeSyntax node. - public virtual TResult VisitRazorMetaCode(RazorMetaCodeSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitRazorMetaCode(RazorMetaCodeSyntax node) => DefaultVisit(node); /// Called when the visitor visits a GenericBlockSyntax node. - public virtual TResult VisitGenericBlock(GenericBlockSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitGenericBlock(GenericBlockSyntax node) => DefaultVisit(node); /// Called when the visitor visits a UnclassifiedTextLiteralSyntax node. - public virtual TResult VisitUnclassifiedTextLiteral(UnclassifiedTextLiteralSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitUnclassifiedTextLiteral(UnclassifiedTextLiteralSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupBlockSyntax node. - public virtual TResult VisitMarkupBlock(MarkupBlockSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitMarkupBlock(MarkupBlockSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupTransitionSyntax node. - public virtual TResult VisitMarkupTransition(MarkupTransitionSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitMarkupTransition(MarkupTransitionSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupTextLiteralSyntax node. - public virtual TResult VisitMarkupTextLiteral(MarkupTextLiteralSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitMarkupTextLiteral(MarkupTextLiteralSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupEphemeralTextLiteralSyntax node. - public virtual TResult VisitMarkupEphemeralTextLiteral(MarkupEphemeralTextLiteralSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitMarkupEphemeralTextLiteral(MarkupEphemeralTextLiteralSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupCommentBlockSyntax node. - public virtual TResult VisitMarkupCommentBlock(MarkupCommentBlockSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitMarkupCommentBlock(MarkupCommentBlockSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupMinimizedAttributeBlockSyntax node. - public virtual TResult VisitMarkupMinimizedAttributeBlock(MarkupMinimizedAttributeBlockSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitMarkupMinimizedAttributeBlock(MarkupMinimizedAttributeBlockSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupAttributeBlockSyntax node. - public virtual TResult VisitMarkupAttributeBlock(MarkupAttributeBlockSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitMarkupAttributeBlock(MarkupAttributeBlockSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupMiscAttributeContentSyntax node. - public virtual TResult VisitMarkupMiscAttributeContent(MarkupMiscAttributeContentSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitMarkupMiscAttributeContent(MarkupMiscAttributeContentSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupLiteralAttributeValueSyntax node. - public virtual TResult VisitMarkupLiteralAttributeValue(MarkupLiteralAttributeValueSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitMarkupLiteralAttributeValue(MarkupLiteralAttributeValueSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupDynamicAttributeValueSyntax node. - public virtual TResult VisitMarkupDynamicAttributeValue(MarkupDynamicAttributeValueSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitMarkupDynamicAttributeValue(MarkupDynamicAttributeValueSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupElementSyntax node. - public virtual TResult VisitMarkupElement(MarkupElementSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitMarkupElement(MarkupElementSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupStartTagSyntax node. - public virtual TResult VisitMarkupStartTag(MarkupStartTagSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitMarkupStartTag(MarkupStartTagSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupEndTagSyntax node. - public virtual TResult VisitMarkupEndTag(MarkupEndTagSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitMarkupEndTag(MarkupEndTagSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupTagHelperElementSyntax node. - public virtual TResult VisitMarkupTagHelperElement(MarkupTagHelperElementSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitMarkupTagHelperElement(MarkupTagHelperElementSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupTagHelperStartTagSyntax node. - public virtual TResult VisitMarkupTagHelperStartTag(MarkupTagHelperStartTagSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitMarkupTagHelperStartTag(MarkupTagHelperStartTagSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupTagHelperEndTagSyntax node. - public virtual TResult VisitMarkupTagHelperEndTag(MarkupTagHelperEndTagSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitMarkupTagHelperEndTag(MarkupTagHelperEndTagSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupTagHelperAttributeSyntax node. - public virtual TResult VisitMarkupTagHelperAttribute(MarkupTagHelperAttributeSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitMarkupTagHelperAttribute(MarkupTagHelperAttributeSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupMinimizedTagHelperAttributeSyntax node. - public virtual TResult VisitMarkupMinimizedTagHelperAttribute(MarkupMinimizedTagHelperAttributeSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitMarkupMinimizedTagHelperAttribute(MarkupMinimizedTagHelperAttributeSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupTagHelperAttributeValueSyntax node. - public virtual TResult VisitMarkupTagHelperAttributeValue(MarkupTagHelperAttributeValueSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitMarkupTagHelperAttributeValue(MarkupTagHelperAttributeValueSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupTagHelperDirectiveAttributeSyntax node. - public virtual TResult VisitMarkupTagHelperDirectiveAttribute(MarkupTagHelperDirectiveAttributeSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitMarkupTagHelperDirectiveAttribute(MarkupTagHelperDirectiveAttributeSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupMinimizedTagHelperDirectiveAttributeSyntax node. - public virtual TResult VisitMarkupMinimizedTagHelperDirectiveAttribute(MarkupMinimizedTagHelperDirectiveAttributeSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitMarkupMinimizedTagHelperDirectiveAttribute(MarkupMinimizedTagHelperDirectiveAttributeSyntax node) => DefaultVisit(node); /// Called when the visitor visits a CSharpCodeBlockSyntax node. - public virtual TResult VisitCSharpCodeBlock(CSharpCodeBlockSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitCSharpCodeBlock(CSharpCodeBlockSyntax node) => DefaultVisit(node); /// Called when the visitor visits a CSharpTransitionSyntax node. - public virtual TResult VisitCSharpTransition(CSharpTransitionSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitCSharpTransition(CSharpTransitionSyntax node) => DefaultVisit(node); /// Called when the visitor visits a CSharpStatementLiteralSyntax node. - public virtual TResult VisitCSharpStatementLiteral(CSharpStatementLiteralSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitCSharpStatementLiteral(CSharpStatementLiteralSyntax node) => DefaultVisit(node); /// Called when the visitor visits a CSharpExpressionLiteralSyntax node. - public virtual TResult VisitCSharpExpressionLiteral(CSharpExpressionLiteralSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitCSharpExpressionLiteral(CSharpExpressionLiteralSyntax node) => DefaultVisit(node); /// Called when the visitor visits a CSharpEphemeralTextLiteralSyntax node. - public virtual TResult VisitCSharpEphemeralTextLiteral(CSharpEphemeralTextLiteralSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitCSharpEphemeralTextLiteral(CSharpEphemeralTextLiteralSyntax node) => DefaultVisit(node); /// Called when the visitor visits a CSharpTemplateBlockSyntax node. - public virtual TResult VisitCSharpTemplateBlock(CSharpTemplateBlockSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitCSharpTemplateBlock(CSharpTemplateBlockSyntax node) => DefaultVisit(node); /// Called when the visitor visits a CSharpStatementSyntax node. - public virtual TResult VisitCSharpStatement(CSharpStatementSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitCSharpStatement(CSharpStatementSyntax node) => DefaultVisit(node); /// Called when the visitor visits a CSharpStatementBodySyntax node. - public virtual TResult VisitCSharpStatementBody(CSharpStatementBodySyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitCSharpStatementBody(CSharpStatementBodySyntax node) => DefaultVisit(node); /// Called when the visitor visits a CSharpExplicitExpressionSyntax node. - public virtual TResult VisitCSharpExplicitExpression(CSharpExplicitExpressionSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitCSharpExplicitExpression(CSharpExplicitExpressionSyntax node) => DefaultVisit(node); /// Called when the visitor visits a CSharpExplicitExpressionBodySyntax node. - public virtual TResult VisitCSharpExplicitExpressionBody(CSharpExplicitExpressionBodySyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitCSharpExplicitExpressionBody(CSharpExplicitExpressionBodySyntax node) => DefaultVisit(node); /// Called when the visitor visits a CSharpImplicitExpressionSyntax node. - public virtual TResult VisitCSharpImplicitExpression(CSharpImplicitExpressionSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitCSharpImplicitExpression(CSharpImplicitExpressionSyntax node) => DefaultVisit(node); /// Called when the visitor visits a CSharpImplicitExpressionBodySyntax node. - public virtual TResult VisitCSharpImplicitExpressionBody(CSharpImplicitExpressionBodySyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitCSharpImplicitExpressionBody(CSharpImplicitExpressionBodySyntax node) => DefaultVisit(node); /// Called when the visitor visits a RazorDirectiveSyntax node. - public virtual TResult VisitRazorDirective(RazorDirectiveSyntax node) - { - return DefaultVisit(node); - } + public virtual TResult VisitRazorDirective(RazorDirectiveSyntax node) => DefaultVisit(node); /// Called when the visitor visits a RazorDirectiveBodySyntax node. - public virtual TResult VisitRazorDirectiveBody(RazorDirectiveBodySyntax node) - { - return DefaultVisit(node); - } - } + public virtual TResult VisitRazorDirectiveBody(RazorDirectiveBodySyntax node) => DefaultVisit(node); +} - internal partial class SyntaxVisitor - { +internal partial class SyntaxVisitor +{ /// Called when the visitor visits a RazorDocumentSyntax node. - public virtual void VisitRazorDocument(RazorDocumentSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitRazorDocument(RazorDocumentSyntax node) => DefaultVisit(node); /// Called when the visitor visits a RazorCommentBlockSyntax node. - public virtual void VisitRazorCommentBlock(RazorCommentBlockSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitRazorCommentBlock(RazorCommentBlockSyntax node) => DefaultVisit(node); /// Called when the visitor visits a RazorMetaCodeSyntax node. - public virtual void VisitRazorMetaCode(RazorMetaCodeSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitRazorMetaCode(RazorMetaCodeSyntax node) => DefaultVisit(node); /// Called when the visitor visits a GenericBlockSyntax node. - public virtual void VisitGenericBlock(GenericBlockSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitGenericBlock(GenericBlockSyntax node) => DefaultVisit(node); /// Called when the visitor visits a UnclassifiedTextLiteralSyntax node. - public virtual void VisitUnclassifiedTextLiteral(UnclassifiedTextLiteralSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitUnclassifiedTextLiteral(UnclassifiedTextLiteralSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupBlockSyntax node. - public virtual void VisitMarkupBlock(MarkupBlockSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitMarkupBlock(MarkupBlockSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupTransitionSyntax node. - public virtual void VisitMarkupTransition(MarkupTransitionSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitMarkupTransition(MarkupTransitionSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupTextLiteralSyntax node. - public virtual void VisitMarkupTextLiteral(MarkupTextLiteralSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitMarkupTextLiteral(MarkupTextLiteralSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupEphemeralTextLiteralSyntax node. - public virtual void VisitMarkupEphemeralTextLiteral(MarkupEphemeralTextLiteralSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitMarkupEphemeralTextLiteral(MarkupEphemeralTextLiteralSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupCommentBlockSyntax node. - public virtual void VisitMarkupCommentBlock(MarkupCommentBlockSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitMarkupCommentBlock(MarkupCommentBlockSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupMinimizedAttributeBlockSyntax node. - public virtual void VisitMarkupMinimizedAttributeBlock(MarkupMinimizedAttributeBlockSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitMarkupMinimizedAttributeBlock(MarkupMinimizedAttributeBlockSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupAttributeBlockSyntax node. - public virtual void VisitMarkupAttributeBlock(MarkupAttributeBlockSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitMarkupAttributeBlock(MarkupAttributeBlockSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupMiscAttributeContentSyntax node. - public virtual void VisitMarkupMiscAttributeContent(MarkupMiscAttributeContentSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitMarkupMiscAttributeContent(MarkupMiscAttributeContentSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupLiteralAttributeValueSyntax node. - public virtual void VisitMarkupLiteralAttributeValue(MarkupLiteralAttributeValueSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitMarkupLiteralAttributeValue(MarkupLiteralAttributeValueSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupDynamicAttributeValueSyntax node. - public virtual void VisitMarkupDynamicAttributeValue(MarkupDynamicAttributeValueSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitMarkupDynamicAttributeValue(MarkupDynamicAttributeValueSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupElementSyntax node. - public virtual void VisitMarkupElement(MarkupElementSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitMarkupElement(MarkupElementSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupStartTagSyntax node. - public virtual void VisitMarkupStartTag(MarkupStartTagSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitMarkupStartTag(MarkupStartTagSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupEndTagSyntax node. - public virtual void VisitMarkupEndTag(MarkupEndTagSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitMarkupEndTag(MarkupEndTagSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupTagHelperElementSyntax node. - public virtual void VisitMarkupTagHelperElement(MarkupTagHelperElementSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitMarkupTagHelperElement(MarkupTagHelperElementSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupTagHelperStartTagSyntax node. - public virtual void VisitMarkupTagHelperStartTag(MarkupTagHelperStartTagSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitMarkupTagHelperStartTag(MarkupTagHelperStartTagSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupTagHelperEndTagSyntax node. - public virtual void VisitMarkupTagHelperEndTag(MarkupTagHelperEndTagSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitMarkupTagHelperEndTag(MarkupTagHelperEndTagSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupTagHelperAttributeSyntax node. - public virtual void VisitMarkupTagHelperAttribute(MarkupTagHelperAttributeSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitMarkupTagHelperAttribute(MarkupTagHelperAttributeSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupMinimizedTagHelperAttributeSyntax node. - public virtual void VisitMarkupMinimizedTagHelperAttribute(MarkupMinimizedTagHelperAttributeSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitMarkupMinimizedTagHelperAttribute(MarkupMinimizedTagHelperAttributeSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupTagHelperAttributeValueSyntax node. - public virtual void VisitMarkupTagHelperAttributeValue(MarkupTagHelperAttributeValueSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitMarkupTagHelperAttributeValue(MarkupTagHelperAttributeValueSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupTagHelperDirectiveAttributeSyntax node. - public virtual void VisitMarkupTagHelperDirectiveAttribute(MarkupTagHelperDirectiveAttributeSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitMarkupTagHelperDirectiveAttribute(MarkupTagHelperDirectiveAttributeSyntax node) => DefaultVisit(node); /// Called when the visitor visits a MarkupMinimizedTagHelperDirectiveAttributeSyntax node. - public virtual void VisitMarkupMinimizedTagHelperDirectiveAttribute(MarkupMinimizedTagHelperDirectiveAttributeSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitMarkupMinimizedTagHelperDirectiveAttribute(MarkupMinimizedTagHelperDirectiveAttributeSyntax node) => DefaultVisit(node); /// Called when the visitor visits a CSharpCodeBlockSyntax node. - public virtual void VisitCSharpCodeBlock(CSharpCodeBlockSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitCSharpCodeBlock(CSharpCodeBlockSyntax node) => DefaultVisit(node); /// Called when the visitor visits a CSharpTransitionSyntax node. - public virtual void VisitCSharpTransition(CSharpTransitionSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitCSharpTransition(CSharpTransitionSyntax node) => DefaultVisit(node); /// Called when the visitor visits a CSharpStatementLiteralSyntax node. - public virtual void VisitCSharpStatementLiteral(CSharpStatementLiteralSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitCSharpStatementLiteral(CSharpStatementLiteralSyntax node) => DefaultVisit(node); /// Called when the visitor visits a CSharpExpressionLiteralSyntax node. - public virtual void VisitCSharpExpressionLiteral(CSharpExpressionLiteralSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitCSharpExpressionLiteral(CSharpExpressionLiteralSyntax node) => DefaultVisit(node); /// Called when the visitor visits a CSharpEphemeralTextLiteralSyntax node. - public virtual void VisitCSharpEphemeralTextLiteral(CSharpEphemeralTextLiteralSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitCSharpEphemeralTextLiteral(CSharpEphemeralTextLiteralSyntax node) => DefaultVisit(node); /// Called when the visitor visits a CSharpTemplateBlockSyntax node. - public virtual void VisitCSharpTemplateBlock(CSharpTemplateBlockSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitCSharpTemplateBlock(CSharpTemplateBlockSyntax node) => DefaultVisit(node); /// Called when the visitor visits a CSharpStatementSyntax node. - public virtual void VisitCSharpStatement(CSharpStatementSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitCSharpStatement(CSharpStatementSyntax node) => DefaultVisit(node); /// Called when the visitor visits a CSharpStatementBodySyntax node. - public virtual void VisitCSharpStatementBody(CSharpStatementBodySyntax node) - { - DefaultVisit(node); - } + public virtual void VisitCSharpStatementBody(CSharpStatementBodySyntax node) => DefaultVisit(node); /// Called when the visitor visits a CSharpExplicitExpressionSyntax node. - public virtual void VisitCSharpExplicitExpression(CSharpExplicitExpressionSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitCSharpExplicitExpression(CSharpExplicitExpressionSyntax node) => DefaultVisit(node); /// Called when the visitor visits a CSharpExplicitExpressionBodySyntax node. - public virtual void VisitCSharpExplicitExpressionBody(CSharpExplicitExpressionBodySyntax node) - { - DefaultVisit(node); - } + public virtual void VisitCSharpExplicitExpressionBody(CSharpExplicitExpressionBodySyntax node) => DefaultVisit(node); /// Called when the visitor visits a CSharpImplicitExpressionSyntax node. - public virtual void VisitCSharpImplicitExpression(CSharpImplicitExpressionSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitCSharpImplicitExpression(CSharpImplicitExpressionSyntax node) => DefaultVisit(node); /// Called when the visitor visits a CSharpImplicitExpressionBodySyntax node. - public virtual void VisitCSharpImplicitExpressionBody(CSharpImplicitExpressionBodySyntax node) - { - DefaultVisit(node); - } + public virtual void VisitCSharpImplicitExpressionBody(CSharpImplicitExpressionBodySyntax node) => DefaultVisit(node); /// Called when the visitor visits a RazorDirectiveSyntax node. - public virtual void VisitRazorDirective(RazorDirectiveSyntax node) - { - DefaultVisit(node); - } + public virtual void VisitRazorDirective(RazorDirectiveSyntax node) => DefaultVisit(node); /// Called when the visitor visits a RazorDirectiveBodySyntax node. - public virtual void VisitRazorDirectiveBody(RazorDirectiveBodySyntax node) - { - DefaultVisit(node); - } - } + public virtual void VisitRazorDirectiveBody(RazorDirectiveBodySyntax node) => DefaultVisit(node); +} - internal partial class SyntaxRewriter : SyntaxVisitor - { +internal partial class SyntaxRewriter : SyntaxVisitor +{ public override SyntaxNode VisitRazorDocument(RazorDocumentSyntax node) - { - var document = (RazorBlockSyntax)Visit(node.Document); - var endOfFile = (SyntaxToken)VisitToken(node.EndOfFile); - return node.Update(document, endOfFile); - } + => node.Update((RazorBlockSyntax)Visit(node.Document), (SyntaxToken)VisitToken(node.EndOfFile)); public override SyntaxNode VisitRazorCommentBlock(RazorCommentBlockSyntax node) - { - var startCommentTransition = (SyntaxToken)VisitToken(node.StartCommentTransition); - var startCommentStar = (SyntaxToken)VisitToken(node.StartCommentStar); - var comment = (SyntaxToken)VisitToken(node.Comment); - var endCommentStar = (SyntaxToken)VisitToken(node.EndCommentStar); - var endCommentTransition = (SyntaxToken)VisitToken(node.EndCommentTransition); - return node.Update(startCommentTransition, startCommentStar, comment, endCommentStar, endCommentTransition); - } + => node.Update((SyntaxToken)VisitToken(node.StartCommentTransition), (SyntaxToken)VisitToken(node.StartCommentStar), (SyntaxToken)VisitToken(node.Comment), (SyntaxToken)VisitToken(node.EndCommentStar), (SyntaxToken)VisitToken(node.EndCommentTransition)); public override SyntaxNode VisitRazorMetaCode(RazorMetaCodeSyntax node) - { - var metaCode = VisitList(node.MetaCode); - return node.Update(metaCode, node.ChunkGenerator); - } + => node.Update(VisitList(node.MetaCode), node.ChunkGenerator); public override SyntaxNode VisitGenericBlock(GenericBlockSyntax node) - { - var children = VisitList(node.Children); - return node.Update(children); - } + => node.Update(VisitList(node.Children)); public override SyntaxNode VisitUnclassifiedTextLiteral(UnclassifiedTextLiteralSyntax node) - { - var literalTokens = VisitList(node.LiteralTokens); - return node.Update(literalTokens, node.ChunkGenerator); - } + => node.Update(VisitList(node.LiteralTokens), node.ChunkGenerator); public override SyntaxNode VisitMarkupBlock(MarkupBlockSyntax node) - { - var children = VisitList(node.Children); - return node.Update(children); - } + => node.Update(VisitList(node.Children)); public override SyntaxNode VisitMarkupTransition(MarkupTransitionSyntax node) - { - var transitionTokens = VisitList(node.TransitionTokens); - return node.Update(transitionTokens, node.ChunkGenerator); - } + => node.Update(VisitList(node.TransitionTokens), node.ChunkGenerator); public override SyntaxNode VisitMarkupTextLiteral(MarkupTextLiteralSyntax node) - { - var literalTokens = VisitList(node.LiteralTokens); - return node.Update(literalTokens, node.ChunkGenerator); - } + => node.Update(VisitList(node.LiteralTokens), node.ChunkGenerator); public override SyntaxNode VisitMarkupEphemeralTextLiteral(MarkupEphemeralTextLiteralSyntax node) - { - var literalTokens = VisitList(node.LiteralTokens); - return node.Update(literalTokens, node.ChunkGenerator); - } + => node.Update(VisitList(node.LiteralTokens), node.ChunkGenerator); public override SyntaxNode VisitMarkupCommentBlock(MarkupCommentBlockSyntax node) - { - var children = VisitList(node.Children); - return node.Update(children); - } + => node.Update(VisitList(node.Children)); public override SyntaxNode VisitMarkupMinimizedAttributeBlock(MarkupMinimizedAttributeBlockSyntax node) - { - var namePrefix = (MarkupTextLiteralSyntax)Visit(node.NamePrefix); - var name = (MarkupTextLiteralSyntax)Visit(node.Name); - return node.Update(namePrefix, name); - } + => node.Update((MarkupTextLiteralSyntax)Visit(node.NamePrefix), (MarkupTextLiteralSyntax)Visit(node.Name)); public override SyntaxNode VisitMarkupAttributeBlock(MarkupAttributeBlockSyntax node) - { - var namePrefix = (MarkupTextLiteralSyntax)Visit(node.NamePrefix); - var name = (MarkupTextLiteralSyntax)Visit(node.Name); - var nameSuffix = (MarkupTextLiteralSyntax)Visit(node.NameSuffix); - var equalsToken = (SyntaxToken)VisitToken(node.EqualsToken); - var valuePrefix = (MarkupTextLiteralSyntax)Visit(node.ValuePrefix); - var value = (RazorBlockSyntax)Visit(node.Value); - var valueSuffix = (MarkupTextLiteralSyntax)Visit(node.ValueSuffix); - return node.Update(namePrefix, name, nameSuffix, equalsToken, valuePrefix, value, valueSuffix); - } + => node.Update((MarkupTextLiteralSyntax)Visit(node.NamePrefix), (MarkupTextLiteralSyntax)Visit(node.Name), (MarkupTextLiteralSyntax)Visit(node.NameSuffix), (SyntaxToken)VisitToken(node.EqualsToken), (MarkupTextLiteralSyntax)Visit(node.ValuePrefix), (RazorBlockSyntax)Visit(node.Value), (MarkupTextLiteralSyntax)Visit(node.ValueSuffix)); public override SyntaxNode VisitMarkupMiscAttributeContent(MarkupMiscAttributeContentSyntax node) - { - var children = VisitList(node.Children); - return node.Update(children); - } + => node.Update(VisitList(node.Children)); public override SyntaxNode VisitMarkupLiteralAttributeValue(MarkupLiteralAttributeValueSyntax node) - { - var prefix = (MarkupTextLiteralSyntax)Visit(node.Prefix); - var value = (MarkupTextLiteralSyntax)Visit(node.Value); - return node.Update(prefix, value); - } + => node.Update((MarkupTextLiteralSyntax)Visit(node.Prefix), (MarkupTextLiteralSyntax)Visit(node.Value)); public override SyntaxNode VisitMarkupDynamicAttributeValue(MarkupDynamicAttributeValueSyntax node) - { - var prefix = (MarkupTextLiteralSyntax)Visit(node.Prefix); - var value = (RazorBlockSyntax)Visit(node.Value); - return node.Update(prefix, value); - } + => node.Update((MarkupTextLiteralSyntax)Visit(node.Prefix), (RazorBlockSyntax)Visit(node.Value)); public override SyntaxNode VisitMarkupElement(MarkupElementSyntax node) - { - var startTag = (MarkupStartTagSyntax)Visit(node.StartTag); - var body = VisitList(node.Body); - var endTag = (MarkupEndTagSyntax)Visit(node.EndTag); - return node.Update(startTag, body, endTag); - } + => node.Update((MarkupStartTagSyntax)Visit(node.StartTag), VisitList(node.Body), (MarkupEndTagSyntax)Visit(node.EndTag)); public override SyntaxNode VisitMarkupStartTag(MarkupStartTagSyntax node) - { - var openAngle = (SyntaxToken)VisitToken(node.OpenAngle); - var bang = (SyntaxToken)VisitToken(node.Bang); - var name = (SyntaxToken)VisitToken(node.Name); - var attributes = VisitList(node.Attributes); - var forwardSlash = (SyntaxToken)VisitToken(node.ForwardSlash); - var closeAngle = (SyntaxToken)VisitToken(node.CloseAngle); - return node.Update(openAngle, bang, name, attributes, forwardSlash, closeAngle, node.ChunkGenerator); - } + => node.Update((SyntaxToken)VisitToken(node.OpenAngle), (SyntaxToken)VisitToken(node.Bang), (SyntaxToken)VisitToken(node.Name), VisitList(node.Attributes), (SyntaxToken)VisitToken(node.ForwardSlash), (SyntaxToken)VisitToken(node.CloseAngle), node.ChunkGenerator); public override SyntaxNode VisitMarkupEndTag(MarkupEndTagSyntax node) - { - var openAngle = (SyntaxToken)VisitToken(node.OpenAngle); - var forwardSlash = (SyntaxToken)VisitToken(node.ForwardSlash); - var bang = (SyntaxToken)VisitToken(node.Bang); - var name = (SyntaxToken)VisitToken(node.Name); - var miscAttributeContent = (MarkupMiscAttributeContentSyntax)Visit(node.MiscAttributeContent); - var closeAngle = (SyntaxToken)VisitToken(node.CloseAngle); - return node.Update(openAngle, forwardSlash, bang, name, miscAttributeContent, closeAngle, node.ChunkGenerator); - } + => node.Update((SyntaxToken)VisitToken(node.OpenAngle), (SyntaxToken)VisitToken(node.ForwardSlash), (SyntaxToken)VisitToken(node.Bang), (SyntaxToken)VisitToken(node.Name), (MarkupMiscAttributeContentSyntax)Visit(node.MiscAttributeContent), (SyntaxToken)VisitToken(node.CloseAngle), node.ChunkGenerator); public override SyntaxNode VisitMarkupTagHelperElement(MarkupTagHelperElementSyntax node) - { - var startTag = (MarkupTagHelperStartTagSyntax)Visit(node.StartTag); - var body = VisitList(node.Body); - var endTag = (MarkupTagHelperEndTagSyntax)Visit(node.EndTag); - return node.Update(startTag, body, endTag); - } + => node.Update((MarkupTagHelperStartTagSyntax)Visit(node.StartTag), VisitList(node.Body), (MarkupTagHelperEndTagSyntax)Visit(node.EndTag)); public override SyntaxNode VisitMarkupTagHelperStartTag(MarkupTagHelperStartTagSyntax node) - { - var openAngle = (SyntaxToken)VisitToken(node.OpenAngle); - var bang = (SyntaxToken)VisitToken(node.Bang); - var name = (SyntaxToken)VisitToken(node.Name); - var attributes = VisitList(node.Attributes); - var forwardSlash = (SyntaxToken)VisitToken(node.ForwardSlash); - var closeAngle = (SyntaxToken)VisitToken(node.CloseAngle); - return node.Update(openAngle, bang, name, attributes, forwardSlash, closeAngle, node.ChunkGenerator); - } + => node.Update((SyntaxToken)VisitToken(node.OpenAngle), (SyntaxToken)VisitToken(node.Bang), (SyntaxToken)VisitToken(node.Name), VisitList(node.Attributes), (SyntaxToken)VisitToken(node.ForwardSlash), (SyntaxToken)VisitToken(node.CloseAngle), node.ChunkGenerator); public override SyntaxNode VisitMarkupTagHelperEndTag(MarkupTagHelperEndTagSyntax node) - { - var openAngle = (SyntaxToken)VisitToken(node.OpenAngle); - var forwardSlash = (SyntaxToken)VisitToken(node.ForwardSlash); - var bang = (SyntaxToken)VisitToken(node.Bang); - var name = (SyntaxToken)VisitToken(node.Name); - var miscAttributeContent = (MarkupMiscAttributeContentSyntax)Visit(node.MiscAttributeContent); - var closeAngle = (SyntaxToken)VisitToken(node.CloseAngle); - return node.Update(openAngle, forwardSlash, bang, name, miscAttributeContent, closeAngle, node.ChunkGenerator); - } + => node.Update((SyntaxToken)VisitToken(node.OpenAngle), (SyntaxToken)VisitToken(node.ForwardSlash), (SyntaxToken)VisitToken(node.Bang), (SyntaxToken)VisitToken(node.Name), (MarkupMiscAttributeContentSyntax)Visit(node.MiscAttributeContent), (SyntaxToken)VisitToken(node.CloseAngle), node.ChunkGenerator); public override SyntaxNode VisitMarkupTagHelperAttribute(MarkupTagHelperAttributeSyntax node) - { - var namePrefix = (MarkupTextLiteralSyntax)Visit(node.NamePrefix); - var name = (MarkupTextLiteralSyntax)Visit(node.Name); - var nameSuffix = (MarkupTextLiteralSyntax)Visit(node.NameSuffix); - var equalsToken = (SyntaxToken)VisitToken(node.EqualsToken); - var valuePrefix = (MarkupTextLiteralSyntax)Visit(node.ValuePrefix); - var value = (MarkupTagHelperAttributeValueSyntax)Visit(node.Value); - var valueSuffix = (MarkupTextLiteralSyntax)Visit(node.ValueSuffix); - return node.Update(namePrefix, name, nameSuffix, equalsToken, valuePrefix, value, valueSuffix); - } + => node.Update((MarkupTextLiteralSyntax)Visit(node.NamePrefix), (MarkupTextLiteralSyntax)Visit(node.Name), (MarkupTextLiteralSyntax)Visit(node.NameSuffix), (SyntaxToken)VisitToken(node.EqualsToken), (MarkupTextLiteralSyntax)Visit(node.ValuePrefix), (MarkupTagHelperAttributeValueSyntax)Visit(node.Value), (MarkupTextLiteralSyntax)Visit(node.ValueSuffix)); public override SyntaxNode VisitMarkupMinimizedTagHelperAttribute(MarkupMinimizedTagHelperAttributeSyntax node) - { - var namePrefix = (MarkupTextLiteralSyntax)Visit(node.NamePrefix); - var name = (MarkupTextLiteralSyntax)Visit(node.Name); - return node.Update(namePrefix, name); - } + => node.Update((MarkupTextLiteralSyntax)Visit(node.NamePrefix), (MarkupTextLiteralSyntax)Visit(node.Name)); public override SyntaxNode VisitMarkupTagHelperAttributeValue(MarkupTagHelperAttributeValueSyntax node) - { - var children = VisitList(node.Children); - return node.Update(children); - } + => node.Update(VisitList(node.Children)); public override SyntaxNode VisitMarkupTagHelperDirectiveAttribute(MarkupTagHelperDirectiveAttributeSyntax node) - { - var namePrefix = (MarkupTextLiteralSyntax)Visit(node.NamePrefix); - var transition = (RazorMetaCodeSyntax)Visit(node.Transition); - var name = (MarkupTextLiteralSyntax)Visit(node.Name); - var colon = (RazorMetaCodeSyntax)Visit(node.Colon); - var parameterName = (MarkupTextLiteralSyntax)Visit(node.ParameterName); - var nameSuffix = (MarkupTextLiteralSyntax)Visit(node.NameSuffix); - var equalsToken = (SyntaxToken)VisitToken(node.EqualsToken); - var valuePrefix = (MarkupTextLiteralSyntax)Visit(node.ValuePrefix); - var value = (MarkupTagHelperAttributeValueSyntax)Visit(node.Value); - var valueSuffix = (MarkupTextLiteralSyntax)Visit(node.ValueSuffix); - return node.Update(namePrefix, transition, name, colon, parameterName, nameSuffix, equalsToken, valuePrefix, value, valueSuffix); - } + => node.Update((MarkupTextLiteralSyntax)Visit(node.NamePrefix), (RazorMetaCodeSyntax)Visit(node.Transition), (MarkupTextLiteralSyntax)Visit(node.Name), (RazorMetaCodeSyntax)Visit(node.Colon), (MarkupTextLiteralSyntax)Visit(node.ParameterName), (MarkupTextLiteralSyntax)Visit(node.NameSuffix), (SyntaxToken)VisitToken(node.EqualsToken), (MarkupTextLiteralSyntax)Visit(node.ValuePrefix), (MarkupTagHelperAttributeValueSyntax)Visit(node.Value), (MarkupTextLiteralSyntax)Visit(node.ValueSuffix)); public override SyntaxNode VisitMarkupMinimizedTagHelperDirectiveAttribute(MarkupMinimizedTagHelperDirectiveAttributeSyntax node) - { - var namePrefix = (MarkupTextLiteralSyntax)Visit(node.NamePrefix); - var transition = (RazorMetaCodeSyntax)Visit(node.Transition); - var name = (MarkupTextLiteralSyntax)Visit(node.Name); - var colon = (RazorMetaCodeSyntax)Visit(node.Colon); - var parameterName = (MarkupTextLiteralSyntax)Visit(node.ParameterName); - return node.Update(namePrefix, transition, name, colon, parameterName); - } + => node.Update((MarkupTextLiteralSyntax)Visit(node.NamePrefix), (RazorMetaCodeSyntax)Visit(node.Transition), (MarkupTextLiteralSyntax)Visit(node.Name), (RazorMetaCodeSyntax)Visit(node.Colon), (MarkupTextLiteralSyntax)Visit(node.ParameterName)); public override SyntaxNode VisitCSharpCodeBlock(CSharpCodeBlockSyntax node) - { - var children = VisitList(node.Children); - return node.Update(children); - } + => node.Update(VisitList(node.Children)); public override SyntaxNode VisitCSharpTransition(CSharpTransitionSyntax node) - { - var transition = (SyntaxToken)VisitToken(node.Transition); - return node.Update(transition, node.ChunkGenerator); - } + => node.Update((SyntaxToken)VisitToken(node.Transition), node.ChunkGenerator); public override SyntaxNode VisitCSharpStatementLiteral(CSharpStatementLiteralSyntax node) - { - var literalTokens = VisitList(node.LiteralTokens); - return node.Update(literalTokens, node.ChunkGenerator); - } + => node.Update(VisitList(node.LiteralTokens), node.ChunkGenerator); public override SyntaxNode VisitCSharpExpressionLiteral(CSharpExpressionLiteralSyntax node) - { - var literalTokens = VisitList(node.LiteralTokens); - return node.Update(literalTokens, node.ChunkGenerator); - } + => node.Update(VisitList(node.LiteralTokens), node.ChunkGenerator); public override SyntaxNode VisitCSharpEphemeralTextLiteral(CSharpEphemeralTextLiteralSyntax node) - { - var literalTokens = VisitList(node.LiteralTokens); - return node.Update(literalTokens, node.ChunkGenerator); - } + => node.Update(VisitList(node.LiteralTokens), node.ChunkGenerator); public override SyntaxNode VisitCSharpTemplateBlock(CSharpTemplateBlockSyntax node) - { - var children = VisitList(node.Children); - return node.Update(children); - } + => node.Update(VisitList(node.Children)); public override SyntaxNode VisitCSharpStatement(CSharpStatementSyntax node) - { - var transition = (CSharpTransitionSyntax)Visit(node.Transition); - var body = (CSharpSyntaxNode)Visit(node.Body); - return node.Update(transition, body); - } + => node.Update((CSharpTransitionSyntax)Visit(node.Transition), (CSharpSyntaxNode)Visit(node.Body)); public override SyntaxNode VisitCSharpStatementBody(CSharpStatementBodySyntax node) - { - var openBrace = (RazorMetaCodeSyntax)Visit(node.OpenBrace); - var cSharpCode = (CSharpCodeBlockSyntax)Visit(node.CSharpCode); - var closeBrace = (RazorMetaCodeSyntax)Visit(node.CloseBrace); - return node.Update(openBrace, cSharpCode, closeBrace); - } + => node.Update((RazorMetaCodeSyntax)Visit(node.OpenBrace), (CSharpCodeBlockSyntax)Visit(node.CSharpCode), (RazorMetaCodeSyntax)Visit(node.CloseBrace)); public override SyntaxNode VisitCSharpExplicitExpression(CSharpExplicitExpressionSyntax node) - { - var transition = (CSharpTransitionSyntax)Visit(node.Transition); - var body = (CSharpSyntaxNode)Visit(node.Body); - return node.Update(transition, body); - } + => node.Update((CSharpTransitionSyntax)Visit(node.Transition), (CSharpSyntaxNode)Visit(node.Body)); public override SyntaxNode VisitCSharpExplicitExpressionBody(CSharpExplicitExpressionBodySyntax node) - { - var openParen = (RazorMetaCodeSyntax)Visit(node.OpenParen); - var cSharpCode = (CSharpCodeBlockSyntax)Visit(node.CSharpCode); - var closeParen = (RazorMetaCodeSyntax)Visit(node.CloseParen); - return node.Update(openParen, cSharpCode, closeParen); - } + => node.Update((RazorMetaCodeSyntax)Visit(node.OpenParen), (CSharpCodeBlockSyntax)Visit(node.CSharpCode), (RazorMetaCodeSyntax)Visit(node.CloseParen)); public override SyntaxNode VisitCSharpImplicitExpression(CSharpImplicitExpressionSyntax node) - { - var transition = (CSharpTransitionSyntax)Visit(node.Transition); - var body = (CSharpSyntaxNode)Visit(node.Body); - return node.Update(transition, body); - } + => node.Update((CSharpTransitionSyntax)Visit(node.Transition), (CSharpSyntaxNode)Visit(node.Body)); public override SyntaxNode VisitCSharpImplicitExpressionBody(CSharpImplicitExpressionBodySyntax node) - { - var cSharpCode = (CSharpCodeBlockSyntax)Visit(node.CSharpCode); - return node.Update(cSharpCode); - } + => node.Update((CSharpCodeBlockSyntax)Visit(node.CSharpCode)); public override SyntaxNode VisitRazorDirective(RazorDirectiveSyntax node) - { - var transition = (CSharpTransitionSyntax)Visit(node.Transition); - var body = (CSharpSyntaxNode)Visit(node.Body); - return node.Update(transition, body); - } + => node.Update((CSharpTransitionSyntax)Visit(node.Transition), (CSharpSyntaxNode)Visit(node.Body)); public override SyntaxNode VisitRazorDirectiveBody(RazorDirectiveBodySyntax node) - { - var keyword = (RazorSyntaxNode)Visit(node.Keyword); - var cSharpCode = (CSharpCodeBlockSyntax)Visit(node.CSharpCode); - return node.Update(keyword, cSharpCode); - } - } - - internal static partial class SyntaxFactory - { + => node.Update((RazorSyntaxNode)Visit(node.Keyword), (CSharpCodeBlockSyntax)Visit(node.CSharpCode)); +} +internal static partial class SyntaxFactory +{ /// Creates a new RazorDocumentSyntax instance. public static RazorDocumentSyntax RazorDocument(RazorBlockSyntax document, SyntaxToken endOfFile) { - if (document == null) - throw new ArgumentNullException(nameof(document)); - switch (endOfFile.Kind) - { - case SyntaxKind.EndOfFile: - break; - default: - throw new ArgumentException("endOfFile"); - } - return (RazorDocumentSyntax)InternalSyntax.SyntaxFactory.RazorDocument(document == null ? null : (InternalSyntax.RazorBlockSyntax)document.Green, (Syntax.InternalSyntax.SyntaxToken)endOfFile.Green).CreateRed(); + ArgHelper.ThrowIfNull(document); + ArgHelper.ThrowIfNull(endOfFile); + if (endOfFile.Kind != SyntaxKind.EndOfFile) + ThrowHelper.ThrowArgumentException(nameof(endOfFile), $"Invalid SyntaxKind. Expected 'SyntaxKind.EndOfFile', but it was {endOfFile.Kind}"); + return (RazorDocumentSyntax)InternalSyntax.SyntaxFactory.RazorDocument(document == null ? null : (InternalSyntax.RazorBlockSyntax)document.Green, (Syntax.InternalSyntax.SyntaxToken)endOfFile.Green).CreateRed(); } /// Creates a new RazorDocumentSyntax instance. public static RazorDocumentSyntax RazorDocument(RazorBlockSyntax document) - { - return SyntaxFactory.RazorDocument(document, SyntaxFactory.Token(SyntaxKind.EndOfFile)); - } + => SyntaxFactory.RazorDocument(document, SyntaxFactory.Token(SyntaxKind.EndOfFile)); /// Creates a new RazorCommentBlockSyntax instance. public static RazorCommentBlockSyntax RazorCommentBlock(SyntaxToken startCommentTransition, SyntaxToken startCommentStar, SyntaxToken comment, SyntaxToken endCommentStar, SyntaxToken endCommentTransition) { - switch (startCommentTransition.Kind) - { - case SyntaxKind.RazorCommentTransition: - break; - default: - throw new ArgumentException("startCommentTransition"); - } - switch (startCommentStar.Kind) - { - case SyntaxKind.RazorCommentStar: - break; - default: - throw new ArgumentException("startCommentStar"); - } - switch (comment.Kind) - { - case SyntaxKind.RazorCommentLiteral: - break; - default: - throw new ArgumentException("comment"); - } - switch (endCommentStar.Kind) - { - case SyntaxKind.RazorCommentStar: - break; - default: - throw new ArgumentException("endCommentStar"); - } - switch (endCommentTransition.Kind) - { - case SyntaxKind.RazorCommentTransition: - break; - default: - throw new ArgumentException("endCommentTransition"); - } - return (RazorCommentBlockSyntax)InternalSyntax.SyntaxFactory.RazorCommentBlock((Syntax.InternalSyntax.SyntaxToken)startCommentTransition.Green, (Syntax.InternalSyntax.SyntaxToken)startCommentStar.Green, (Syntax.InternalSyntax.SyntaxToken)comment.Green, (Syntax.InternalSyntax.SyntaxToken)endCommentStar.Green, (Syntax.InternalSyntax.SyntaxToken)endCommentTransition.Green).CreateRed(); + ArgHelper.ThrowIfNull(startCommentTransition); + if (startCommentTransition.Kind != SyntaxKind.RazorCommentTransition) + ThrowHelper.ThrowArgumentException(nameof(startCommentTransition), $"Invalid SyntaxKind. Expected 'SyntaxKind.RazorCommentTransition', but it was {startCommentTransition.Kind}"); + ArgHelper.ThrowIfNull(startCommentStar); + if (startCommentStar.Kind != SyntaxKind.RazorCommentStar) + ThrowHelper.ThrowArgumentException(nameof(startCommentStar), $"Invalid SyntaxKind. Expected 'SyntaxKind.RazorCommentStar', but it was {startCommentStar.Kind}"); + ArgHelper.ThrowIfNull(comment); + if (comment.Kind != SyntaxKind.RazorCommentLiteral) + ThrowHelper.ThrowArgumentException(nameof(comment), $"Invalid SyntaxKind. Expected 'SyntaxKind.RazorCommentLiteral', but it was {comment.Kind}"); + ArgHelper.ThrowIfNull(endCommentStar); + if (endCommentStar.Kind != SyntaxKind.RazorCommentStar) + ThrowHelper.ThrowArgumentException(nameof(endCommentStar), $"Invalid SyntaxKind. Expected 'SyntaxKind.RazorCommentStar', but it was {endCommentStar.Kind}"); + ArgHelper.ThrowIfNull(endCommentTransition); + if (endCommentTransition.Kind != SyntaxKind.RazorCommentTransition) + ThrowHelper.ThrowArgumentException(nameof(endCommentTransition), $"Invalid SyntaxKind. Expected 'SyntaxKind.RazorCommentTransition', but it was {endCommentTransition.Kind}"); + return (RazorCommentBlockSyntax)InternalSyntax.SyntaxFactory.RazorCommentBlock((Syntax.InternalSyntax.SyntaxToken)startCommentTransition.Green, (Syntax.InternalSyntax.SyntaxToken)startCommentStar.Green, (Syntax.InternalSyntax.SyntaxToken)comment.Green, (Syntax.InternalSyntax.SyntaxToken)endCommentStar.Green, (Syntax.InternalSyntax.SyntaxToken)endCommentTransition.Green).CreateRed(); } /// Creates a new RazorCommentBlockSyntax instance. public static RazorCommentBlockSyntax RazorCommentBlock() - { - return SyntaxFactory.RazorCommentBlock(SyntaxFactory.Token(SyntaxKind.RazorCommentTransition), SyntaxFactory.Token(SyntaxKind.RazorCommentStar), SyntaxFactory.Token(SyntaxKind.RazorCommentLiteral), SyntaxFactory.Token(SyntaxKind.RazorCommentStar), SyntaxFactory.Token(SyntaxKind.RazorCommentTransition)); - } + => SyntaxFactory.RazorCommentBlock(SyntaxFactory.Token(SyntaxKind.RazorCommentTransition), SyntaxFactory.Token(SyntaxKind.RazorCommentStar), SyntaxFactory.Token(SyntaxKind.RazorCommentLiteral), SyntaxFactory.Token(SyntaxKind.RazorCommentStar), SyntaxFactory.Token(SyntaxKind.RazorCommentTransition)); /// Creates a new RazorMetaCodeSyntax instance. public static RazorMetaCodeSyntax RazorMetaCode(SyntaxList metaCode, ISpanChunkGenerator chunkGenerator) - { - return (RazorMetaCodeSyntax)InternalSyntax.SyntaxFactory.RazorMetaCode(metaCode.Node.ToGreenList(), chunkGenerator).CreateRed(); - } + => (RazorMetaCodeSyntax)InternalSyntax.SyntaxFactory.RazorMetaCode(metaCode.Node.ToGreenList(), chunkGenerator).CreateRed(); /// Creates a new RazorMetaCodeSyntax instance. public static RazorMetaCodeSyntax RazorMetaCode(ISpanChunkGenerator chunkGenerator) - { - return SyntaxFactory.RazorMetaCode(default(SyntaxList), chunkGenerator); - } + => SyntaxFactory.RazorMetaCode(default(SyntaxList), chunkGenerator); /// Creates a new GenericBlockSyntax instance. public static GenericBlockSyntax GenericBlock(SyntaxList children) - { - return (GenericBlockSyntax)InternalSyntax.SyntaxFactory.GenericBlock(children.Node.ToGreenList()).CreateRed(); - } + => (GenericBlockSyntax)InternalSyntax.SyntaxFactory.GenericBlock(children.Node.ToGreenList()).CreateRed(); /// Creates a new GenericBlockSyntax instance. public static GenericBlockSyntax GenericBlock() - { - return SyntaxFactory.GenericBlock(default(SyntaxList)); - } + => SyntaxFactory.GenericBlock(default(SyntaxList)); /// Creates a new UnclassifiedTextLiteralSyntax instance. public static UnclassifiedTextLiteralSyntax UnclassifiedTextLiteral(SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) - { - return (UnclassifiedTextLiteralSyntax)InternalSyntax.SyntaxFactory.UnclassifiedTextLiteral(literalTokens.Node.ToGreenList(), chunkGenerator).CreateRed(); - } + => (UnclassifiedTextLiteralSyntax)InternalSyntax.SyntaxFactory.UnclassifiedTextLiteral(literalTokens.Node.ToGreenList(), chunkGenerator).CreateRed(); /// Creates a new UnclassifiedTextLiteralSyntax instance. public static UnclassifiedTextLiteralSyntax UnclassifiedTextLiteral(ISpanChunkGenerator chunkGenerator) - { - return SyntaxFactory.UnclassifiedTextLiteral(default(SyntaxList), chunkGenerator); - } + => SyntaxFactory.UnclassifiedTextLiteral(default(SyntaxList), chunkGenerator); /// Creates a new MarkupBlockSyntax instance. public static MarkupBlockSyntax MarkupBlock(SyntaxList children) - { - return (MarkupBlockSyntax)InternalSyntax.SyntaxFactory.MarkupBlock(children.Node.ToGreenList()).CreateRed(); - } + => (MarkupBlockSyntax)InternalSyntax.SyntaxFactory.MarkupBlock(children.Node.ToGreenList()).CreateRed(); /// Creates a new MarkupBlockSyntax instance. public static MarkupBlockSyntax MarkupBlock() - { - return SyntaxFactory.MarkupBlock(default(SyntaxList)); - } + => SyntaxFactory.MarkupBlock(default(SyntaxList)); /// Creates a new MarkupTransitionSyntax instance. public static MarkupTransitionSyntax MarkupTransition(SyntaxList transitionTokens, ISpanChunkGenerator chunkGenerator) - { - return (MarkupTransitionSyntax)InternalSyntax.SyntaxFactory.MarkupTransition(transitionTokens.Node.ToGreenList(), chunkGenerator).CreateRed(); - } + => (MarkupTransitionSyntax)InternalSyntax.SyntaxFactory.MarkupTransition(transitionTokens.Node.ToGreenList(), chunkGenerator).CreateRed(); /// Creates a new MarkupTransitionSyntax instance. public static MarkupTransitionSyntax MarkupTransition(ISpanChunkGenerator chunkGenerator) - { - return SyntaxFactory.MarkupTransition(default(SyntaxList), chunkGenerator); - } + => SyntaxFactory.MarkupTransition(default(SyntaxList), chunkGenerator); /// Creates a new MarkupTextLiteralSyntax instance. public static MarkupTextLiteralSyntax MarkupTextLiteral(SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) - { - return (MarkupTextLiteralSyntax)InternalSyntax.SyntaxFactory.MarkupTextLiteral(literalTokens.Node.ToGreenList(), chunkGenerator).CreateRed(); - } + => (MarkupTextLiteralSyntax)InternalSyntax.SyntaxFactory.MarkupTextLiteral(literalTokens.Node.ToGreenList(), chunkGenerator).CreateRed(); /// Creates a new MarkupTextLiteralSyntax instance. public static MarkupTextLiteralSyntax MarkupTextLiteral(ISpanChunkGenerator chunkGenerator) - { - return SyntaxFactory.MarkupTextLiteral(default(SyntaxList), chunkGenerator); - } + => SyntaxFactory.MarkupTextLiteral(default(SyntaxList), chunkGenerator); /// Creates a new MarkupEphemeralTextLiteralSyntax instance. public static MarkupEphemeralTextLiteralSyntax MarkupEphemeralTextLiteral(SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) - { - return (MarkupEphemeralTextLiteralSyntax)InternalSyntax.SyntaxFactory.MarkupEphemeralTextLiteral(literalTokens.Node.ToGreenList(), chunkGenerator).CreateRed(); - } + => (MarkupEphemeralTextLiteralSyntax)InternalSyntax.SyntaxFactory.MarkupEphemeralTextLiteral(literalTokens.Node.ToGreenList(), chunkGenerator).CreateRed(); /// Creates a new MarkupEphemeralTextLiteralSyntax instance. public static MarkupEphemeralTextLiteralSyntax MarkupEphemeralTextLiteral(ISpanChunkGenerator chunkGenerator) - { - return SyntaxFactory.MarkupEphemeralTextLiteral(default(SyntaxList), chunkGenerator); - } + => SyntaxFactory.MarkupEphemeralTextLiteral(default(SyntaxList), chunkGenerator); /// Creates a new MarkupCommentBlockSyntax instance. public static MarkupCommentBlockSyntax MarkupCommentBlock(SyntaxList children) - { - return (MarkupCommentBlockSyntax)InternalSyntax.SyntaxFactory.MarkupCommentBlock(children.Node.ToGreenList()).CreateRed(); - } + => (MarkupCommentBlockSyntax)InternalSyntax.SyntaxFactory.MarkupCommentBlock(children.Node.ToGreenList()).CreateRed(); /// Creates a new MarkupCommentBlockSyntax instance. public static MarkupCommentBlockSyntax MarkupCommentBlock() - { - return SyntaxFactory.MarkupCommentBlock(default(SyntaxList)); - } + => SyntaxFactory.MarkupCommentBlock(default(SyntaxList)); /// Creates a new MarkupMinimizedAttributeBlockSyntax instance. public static MarkupMinimizedAttributeBlockSyntax MarkupMinimizedAttributeBlock(MarkupTextLiteralSyntax namePrefix, MarkupTextLiteralSyntax name) { - if (name == null) - throw new ArgumentNullException(nameof(name)); - return (MarkupMinimizedAttributeBlockSyntax)InternalSyntax.SyntaxFactory.MarkupMinimizedAttributeBlock(namePrefix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)namePrefix.Green, name == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)name.Green).CreateRed(); + ArgHelper.ThrowIfNull(name); + return (MarkupMinimizedAttributeBlockSyntax)InternalSyntax.SyntaxFactory.MarkupMinimizedAttributeBlock(namePrefix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)namePrefix.Green, name == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)name.Green).CreateRed(); } /// Creates a new MarkupMinimizedAttributeBlockSyntax instance. public static MarkupMinimizedAttributeBlockSyntax MarkupMinimizedAttributeBlock(MarkupTextLiteralSyntax name) - { - return SyntaxFactory.MarkupMinimizedAttributeBlock(default(MarkupTextLiteralSyntax), name); - } + => SyntaxFactory.MarkupMinimizedAttributeBlock(default(MarkupTextLiteralSyntax), name); /// Creates a new MarkupAttributeBlockSyntax instance. public static MarkupAttributeBlockSyntax MarkupAttributeBlock(MarkupTextLiteralSyntax namePrefix, MarkupTextLiteralSyntax name, MarkupTextLiteralSyntax nameSuffix, SyntaxToken equalsToken, MarkupTextLiteralSyntax valuePrefix, RazorBlockSyntax value, MarkupTextLiteralSyntax valueSuffix) { - if (name == null) - throw new ArgumentNullException(nameof(name)); - switch (equalsToken.Kind) - { - case SyntaxKind.Equals: - break; - default: - throw new ArgumentException("equalsToken"); - } - return (MarkupAttributeBlockSyntax)InternalSyntax.SyntaxFactory.MarkupAttributeBlock(namePrefix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)namePrefix.Green, name == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)name.Green, nameSuffix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)nameSuffix.Green, (Syntax.InternalSyntax.SyntaxToken)equalsToken.Green, valuePrefix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)valuePrefix.Green, value == null ? null : (InternalSyntax.RazorBlockSyntax)value.Green, valueSuffix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)valueSuffix.Green).CreateRed(); + ArgHelper.ThrowIfNull(name); + ArgHelper.ThrowIfNull(equalsToken); + if (equalsToken.Kind != SyntaxKind.Equals) + ThrowHelper.ThrowArgumentException(nameof(equalsToken), $"Invalid SyntaxKind. Expected 'SyntaxKind.Equals', but it was {equalsToken.Kind}"); + return (MarkupAttributeBlockSyntax)InternalSyntax.SyntaxFactory.MarkupAttributeBlock(namePrefix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)namePrefix.Green, name == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)name.Green, nameSuffix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)nameSuffix.Green, (Syntax.InternalSyntax.SyntaxToken)equalsToken.Green, valuePrefix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)valuePrefix.Green, value == null ? null : (InternalSyntax.RazorBlockSyntax)value.Green, valueSuffix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)valueSuffix.Green).CreateRed(); } /// Creates a new MarkupAttributeBlockSyntax instance. public static MarkupAttributeBlockSyntax MarkupAttributeBlock(MarkupTextLiteralSyntax namePrefix, MarkupTextLiteralSyntax name, MarkupTextLiteralSyntax nameSuffix, MarkupTextLiteralSyntax valuePrefix, RazorBlockSyntax value, MarkupTextLiteralSyntax valueSuffix) - { - return SyntaxFactory.MarkupAttributeBlock(namePrefix, name, nameSuffix, SyntaxFactory.Token(SyntaxKind.Equals), valuePrefix, value, valueSuffix); - } + => SyntaxFactory.MarkupAttributeBlock(namePrefix, name, nameSuffix, SyntaxFactory.Token(SyntaxKind.Equals), valuePrefix, value, valueSuffix); /// Creates a new MarkupAttributeBlockSyntax instance. public static MarkupAttributeBlockSyntax MarkupAttributeBlock(MarkupTextLiteralSyntax name) - { - return SyntaxFactory.MarkupAttributeBlock(default(MarkupTextLiteralSyntax), name, default(MarkupTextLiteralSyntax), SyntaxFactory.Token(SyntaxKind.Equals), default(MarkupTextLiteralSyntax), default(RazorBlockSyntax), default(MarkupTextLiteralSyntax)); - } + => SyntaxFactory.MarkupAttributeBlock(default(MarkupTextLiteralSyntax), name, default(MarkupTextLiteralSyntax), SyntaxFactory.Token(SyntaxKind.Equals), default(MarkupTextLiteralSyntax), default(RazorBlockSyntax), default(MarkupTextLiteralSyntax)); /// Creates a new MarkupMiscAttributeContentSyntax instance. public static MarkupMiscAttributeContentSyntax MarkupMiscAttributeContent(SyntaxList children) - { - return (MarkupMiscAttributeContentSyntax)InternalSyntax.SyntaxFactory.MarkupMiscAttributeContent(children.Node.ToGreenList()).CreateRed(); - } + => (MarkupMiscAttributeContentSyntax)InternalSyntax.SyntaxFactory.MarkupMiscAttributeContent(children.Node.ToGreenList()).CreateRed(); /// Creates a new MarkupMiscAttributeContentSyntax instance. public static MarkupMiscAttributeContentSyntax MarkupMiscAttributeContent() - { - return SyntaxFactory.MarkupMiscAttributeContent(default(SyntaxList)); - } + => SyntaxFactory.MarkupMiscAttributeContent(default(SyntaxList)); /// Creates a new MarkupLiteralAttributeValueSyntax instance. public static MarkupLiteralAttributeValueSyntax MarkupLiteralAttributeValue(MarkupTextLiteralSyntax prefix, MarkupTextLiteralSyntax value) - { - return (MarkupLiteralAttributeValueSyntax)InternalSyntax.SyntaxFactory.MarkupLiteralAttributeValue(prefix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)prefix.Green, value == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)value.Green).CreateRed(); - } + => (MarkupLiteralAttributeValueSyntax)InternalSyntax.SyntaxFactory.MarkupLiteralAttributeValue(prefix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)prefix.Green, value == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)value.Green).CreateRed(); /// Creates a new MarkupLiteralAttributeValueSyntax instance. public static MarkupLiteralAttributeValueSyntax MarkupLiteralAttributeValue() - { - return SyntaxFactory.MarkupLiteralAttributeValue(default(MarkupTextLiteralSyntax), default(MarkupTextLiteralSyntax)); - } + => SyntaxFactory.MarkupLiteralAttributeValue(default(MarkupTextLiteralSyntax), default(MarkupTextLiteralSyntax)); /// Creates a new MarkupDynamicAttributeValueSyntax instance. public static MarkupDynamicAttributeValueSyntax MarkupDynamicAttributeValue(MarkupTextLiteralSyntax prefix, RazorBlockSyntax value) { - if (value == null) - throw new ArgumentNullException(nameof(value)); - return (MarkupDynamicAttributeValueSyntax)InternalSyntax.SyntaxFactory.MarkupDynamicAttributeValue(prefix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)prefix.Green, value == null ? null : (InternalSyntax.RazorBlockSyntax)value.Green).CreateRed(); + ArgHelper.ThrowIfNull(value); + return (MarkupDynamicAttributeValueSyntax)InternalSyntax.SyntaxFactory.MarkupDynamicAttributeValue(prefix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)prefix.Green, value == null ? null : (InternalSyntax.RazorBlockSyntax)value.Green).CreateRed(); } /// Creates a new MarkupDynamicAttributeValueSyntax instance. public static MarkupDynamicAttributeValueSyntax MarkupDynamicAttributeValue(RazorBlockSyntax value) - { - return SyntaxFactory.MarkupDynamicAttributeValue(default(MarkupTextLiteralSyntax), value); - } + => SyntaxFactory.MarkupDynamicAttributeValue(default(MarkupTextLiteralSyntax), value); /// Creates a new MarkupElementSyntax instance. public static MarkupElementSyntax MarkupElement(MarkupStartTagSyntax startTag, SyntaxList body, MarkupEndTagSyntax endTag) - { - return (MarkupElementSyntax)InternalSyntax.SyntaxFactory.MarkupElement(startTag == null ? null : (InternalSyntax.MarkupStartTagSyntax)startTag.Green, body.Node.ToGreenList(), endTag == null ? null : (InternalSyntax.MarkupEndTagSyntax)endTag.Green).CreateRed(); - } + => (MarkupElementSyntax)InternalSyntax.SyntaxFactory.MarkupElement(startTag == null ? null : (InternalSyntax.MarkupStartTagSyntax)startTag.Green, body.Node.ToGreenList(), endTag == null ? null : (InternalSyntax.MarkupEndTagSyntax)endTag.Green).CreateRed(); /// Creates a new MarkupElementSyntax instance. public static MarkupElementSyntax MarkupElement(SyntaxList body = default(SyntaxList)) - { - return SyntaxFactory.MarkupElement(default(MarkupStartTagSyntax), body, default(MarkupEndTagSyntax)); - } + => SyntaxFactory.MarkupElement(default(MarkupStartTagSyntax), body, default(MarkupEndTagSyntax)); /// Creates a new MarkupStartTagSyntax instance. public static MarkupStartTagSyntax MarkupStartTag(SyntaxToken openAngle, SyntaxToken bang, SyntaxToken name, SyntaxList attributes, SyntaxToken forwardSlash, SyntaxToken closeAngle, ISpanChunkGenerator chunkGenerator) { - switch (openAngle.Kind) - { - case SyntaxKind.OpenAngle: - break; - default: - throw new ArgumentException("openAngle"); - } - if (bang != null) - { - switch (bang.Kind) - { - case SyntaxKind.Bang: - case SyntaxKind.None: - break; - default: - throw new ArgumentException("bang"); - } - } - switch (name.Kind) - { - case SyntaxKind.Text: - break; - default: - throw new ArgumentException("name"); - } - if (forwardSlash != null) - { - switch (forwardSlash.Kind) - { - case SyntaxKind.ForwardSlash: - case SyntaxKind.None: - break; - default: - throw new ArgumentException("forwardSlash"); - } - } - switch (closeAngle.Kind) - { - case SyntaxKind.CloseAngle: - break; - default: - throw new ArgumentException("closeAngle"); - } - return (MarkupStartTagSyntax)InternalSyntax.SyntaxFactory.MarkupStartTag((Syntax.InternalSyntax.SyntaxToken)openAngle.Green, (Syntax.InternalSyntax.SyntaxToken)bang?.Green, (Syntax.InternalSyntax.SyntaxToken)name.Green, attributes.Node.ToGreenList(), (Syntax.InternalSyntax.SyntaxToken)forwardSlash?.Green, (Syntax.InternalSyntax.SyntaxToken)closeAngle.Green, chunkGenerator).CreateRed(); + ArgHelper.ThrowIfNull(openAngle); + if (openAngle.Kind != SyntaxKind.OpenAngle) + ThrowHelper.ThrowArgumentException(nameof(openAngle), $"Invalid SyntaxKind. Expected 'SyntaxKind.OpenAngle', but it was {openAngle.Kind}"); + if (bang is not null && bang.Kind is not (SyntaxKind.Bang or SyntaxKind.None)) + ThrowHelper.ThrowArgumentException(nameof(bang), $"Invalid SyntaxKind. Expected 'SyntaxKind.Bang' or 'SyntaxKind.None', but it was {bang.Kind}"); + ArgHelper.ThrowIfNull(name); + if (name.Kind != SyntaxKind.Text) + ThrowHelper.ThrowArgumentException(nameof(name), $"Invalid SyntaxKind. Expected 'SyntaxKind.Text', but it was {name.Kind}"); + if (forwardSlash is not null && forwardSlash.Kind is not (SyntaxKind.ForwardSlash or SyntaxKind.None)) + ThrowHelper.ThrowArgumentException(nameof(forwardSlash), $"Invalid SyntaxKind. Expected 'SyntaxKind.ForwardSlash' or 'SyntaxKind.None', but it was {forwardSlash.Kind}"); + ArgHelper.ThrowIfNull(closeAngle); + if (closeAngle.Kind != SyntaxKind.CloseAngle) + ThrowHelper.ThrowArgumentException(nameof(closeAngle), $"Invalid SyntaxKind. Expected 'SyntaxKind.CloseAngle', but it was {closeAngle.Kind}"); + return (MarkupStartTagSyntax)InternalSyntax.SyntaxFactory.MarkupStartTag((Syntax.InternalSyntax.SyntaxToken)openAngle.Green, (Syntax.InternalSyntax.SyntaxToken)bang?.Green, (Syntax.InternalSyntax.SyntaxToken)name.Green, attributes.Node.ToGreenList(), (Syntax.InternalSyntax.SyntaxToken)forwardSlash?.Green, (Syntax.InternalSyntax.SyntaxToken)closeAngle.Green, chunkGenerator).CreateRed(); } /// Creates a new MarkupStartTagSyntax instance. public static MarkupStartTagSyntax MarkupStartTag(SyntaxList attributes, ISpanChunkGenerator chunkGenerator) - { - return SyntaxFactory.MarkupStartTag(SyntaxFactory.Token(SyntaxKind.OpenAngle), default(SyntaxToken), SyntaxFactory.Token(SyntaxKind.Text), attributes, default(SyntaxToken), SyntaxFactory.Token(SyntaxKind.CloseAngle), chunkGenerator); - } + => SyntaxFactory.MarkupStartTag(SyntaxFactory.Token(SyntaxKind.OpenAngle), default(SyntaxToken), SyntaxFactory.Token(SyntaxKind.Text), attributes, default(SyntaxToken), SyntaxFactory.Token(SyntaxKind.CloseAngle), chunkGenerator); /// Creates a new MarkupStartTagSyntax instance. public static MarkupStartTagSyntax MarkupStartTag(ISpanChunkGenerator chunkGenerator) - { - return SyntaxFactory.MarkupStartTag(SyntaxFactory.Token(SyntaxKind.OpenAngle), default(SyntaxToken), SyntaxFactory.Token(SyntaxKind.Text), default(SyntaxList), default(SyntaxToken), SyntaxFactory.Token(SyntaxKind.CloseAngle), chunkGenerator); - } + => SyntaxFactory.MarkupStartTag(SyntaxFactory.Token(SyntaxKind.OpenAngle), default(SyntaxToken), SyntaxFactory.Token(SyntaxKind.Text), default(SyntaxList), default(SyntaxToken), SyntaxFactory.Token(SyntaxKind.CloseAngle), chunkGenerator); /// Creates a new MarkupEndTagSyntax instance. public static MarkupEndTagSyntax MarkupEndTag(SyntaxToken openAngle, SyntaxToken forwardSlash, SyntaxToken bang, SyntaxToken name, MarkupMiscAttributeContentSyntax miscAttributeContent, SyntaxToken closeAngle, ISpanChunkGenerator chunkGenerator) { - switch (openAngle.Kind) - { - case SyntaxKind.OpenAngle: - break; - default: - throw new ArgumentException("openAngle"); - } - switch (forwardSlash.Kind) - { - case SyntaxKind.ForwardSlash: - break; - default: - throw new ArgumentException("forwardSlash"); - } - if (bang != null) - { - switch (bang.Kind) - { - case SyntaxKind.Bang: - case SyntaxKind.None: - break; - default: - throw new ArgumentException("bang"); - } - } - switch (name.Kind) - { - case SyntaxKind.Text: - break; - default: - throw new ArgumentException("name"); - } - switch (closeAngle.Kind) - { - case SyntaxKind.CloseAngle: - break; - default: - throw new ArgumentException("closeAngle"); - } - return (MarkupEndTagSyntax)InternalSyntax.SyntaxFactory.MarkupEndTag((Syntax.InternalSyntax.SyntaxToken)openAngle.Green, (Syntax.InternalSyntax.SyntaxToken)forwardSlash.Green, (Syntax.InternalSyntax.SyntaxToken)bang?.Green, (Syntax.InternalSyntax.SyntaxToken)name.Green, miscAttributeContent == null ? null : (InternalSyntax.MarkupMiscAttributeContentSyntax)miscAttributeContent.Green, (Syntax.InternalSyntax.SyntaxToken)closeAngle.Green, chunkGenerator).CreateRed(); + ArgHelper.ThrowIfNull(openAngle); + if (openAngle.Kind != SyntaxKind.OpenAngle) + ThrowHelper.ThrowArgumentException(nameof(openAngle), $"Invalid SyntaxKind. Expected 'SyntaxKind.OpenAngle', but it was {openAngle.Kind}"); + ArgHelper.ThrowIfNull(forwardSlash); + if (forwardSlash.Kind != SyntaxKind.ForwardSlash) + ThrowHelper.ThrowArgumentException(nameof(forwardSlash), $"Invalid SyntaxKind. Expected 'SyntaxKind.ForwardSlash', but it was {forwardSlash.Kind}"); + if (bang is not null && bang.Kind is not (SyntaxKind.Bang or SyntaxKind.None)) + ThrowHelper.ThrowArgumentException(nameof(bang), $"Invalid SyntaxKind. Expected 'SyntaxKind.Bang' or 'SyntaxKind.None', but it was {bang.Kind}"); + ArgHelper.ThrowIfNull(name); + if (name.Kind != SyntaxKind.Text) + ThrowHelper.ThrowArgumentException(nameof(name), $"Invalid SyntaxKind. Expected 'SyntaxKind.Text', but it was {name.Kind}"); + ArgHelper.ThrowIfNull(closeAngle); + if (closeAngle.Kind != SyntaxKind.CloseAngle) + ThrowHelper.ThrowArgumentException(nameof(closeAngle), $"Invalid SyntaxKind. Expected 'SyntaxKind.CloseAngle', but it was {closeAngle.Kind}"); + return (MarkupEndTagSyntax)InternalSyntax.SyntaxFactory.MarkupEndTag((Syntax.InternalSyntax.SyntaxToken)openAngle.Green, (Syntax.InternalSyntax.SyntaxToken)forwardSlash.Green, (Syntax.InternalSyntax.SyntaxToken)bang?.Green, (Syntax.InternalSyntax.SyntaxToken)name.Green, miscAttributeContent == null ? null : (InternalSyntax.MarkupMiscAttributeContentSyntax)miscAttributeContent.Green, (Syntax.InternalSyntax.SyntaxToken)closeAngle.Green, chunkGenerator).CreateRed(); } /// Creates a new MarkupEndTagSyntax instance. public static MarkupEndTagSyntax MarkupEndTag(MarkupMiscAttributeContentSyntax miscAttributeContent, ISpanChunkGenerator chunkGenerator) - { - return SyntaxFactory.MarkupEndTag(SyntaxFactory.Token(SyntaxKind.OpenAngle), SyntaxFactory.Token(SyntaxKind.ForwardSlash), default(SyntaxToken), SyntaxFactory.Token(SyntaxKind.Text), miscAttributeContent, SyntaxFactory.Token(SyntaxKind.CloseAngle), chunkGenerator); - } + => SyntaxFactory.MarkupEndTag(SyntaxFactory.Token(SyntaxKind.OpenAngle), SyntaxFactory.Token(SyntaxKind.ForwardSlash), default(SyntaxToken), SyntaxFactory.Token(SyntaxKind.Text), miscAttributeContent, SyntaxFactory.Token(SyntaxKind.CloseAngle), chunkGenerator); /// Creates a new MarkupEndTagSyntax instance. public static MarkupEndTagSyntax MarkupEndTag(ISpanChunkGenerator chunkGenerator) - { - return SyntaxFactory.MarkupEndTag(SyntaxFactory.Token(SyntaxKind.OpenAngle), SyntaxFactory.Token(SyntaxKind.ForwardSlash), default(SyntaxToken), SyntaxFactory.Token(SyntaxKind.Text), default(MarkupMiscAttributeContentSyntax), SyntaxFactory.Token(SyntaxKind.CloseAngle), chunkGenerator); - } + => SyntaxFactory.MarkupEndTag(SyntaxFactory.Token(SyntaxKind.OpenAngle), SyntaxFactory.Token(SyntaxKind.ForwardSlash), default(SyntaxToken), SyntaxFactory.Token(SyntaxKind.Text), default(MarkupMiscAttributeContentSyntax), SyntaxFactory.Token(SyntaxKind.CloseAngle), chunkGenerator); /// Creates a new MarkupTagHelperElementSyntax instance. public static MarkupTagHelperElementSyntax MarkupTagHelperElement(MarkupTagHelperStartTagSyntax startTag, SyntaxList body, MarkupTagHelperEndTagSyntax endTag) { - if (startTag == null) - throw new ArgumentNullException(nameof(startTag)); - return (MarkupTagHelperElementSyntax)InternalSyntax.SyntaxFactory.MarkupTagHelperElement(startTag == null ? null : (InternalSyntax.MarkupTagHelperStartTagSyntax)startTag.Green, body.Node.ToGreenList(), endTag == null ? null : (InternalSyntax.MarkupTagHelperEndTagSyntax)endTag.Green).CreateRed(); + ArgHelper.ThrowIfNull(startTag); + return (MarkupTagHelperElementSyntax)InternalSyntax.SyntaxFactory.MarkupTagHelperElement(startTag == null ? null : (InternalSyntax.MarkupTagHelperStartTagSyntax)startTag.Green, body.Node.ToGreenList(), endTag == null ? null : (InternalSyntax.MarkupTagHelperEndTagSyntax)endTag.Green).CreateRed(); } /// Creates a new MarkupTagHelperElementSyntax instance. public static MarkupTagHelperElementSyntax MarkupTagHelperElement(MarkupTagHelperStartTagSyntax startTag) - { - return SyntaxFactory.MarkupTagHelperElement(startTag, default(SyntaxList), default(MarkupTagHelperEndTagSyntax)); - } + => SyntaxFactory.MarkupTagHelperElement(startTag, default(SyntaxList), default(MarkupTagHelperEndTagSyntax)); /// Creates a new MarkupTagHelperStartTagSyntax instance. public static MarkupTagHelperStartTagSyntax MarkupTagHelperStartTag(SyntaxToken openAngle, SyntaxToken bang, SyntaxToken name, SyntaxList attributes, SyntaxToken forwardSlash, SyntaxToken closeAngle, ISpanChunkGenerator chunkGenerator) { - switch (openAngle.Kind) - { - case SyntaxKind.OpenAngle: - break; - default: - throw new ArgumentException("openAngle"); - } - if (bang != null) - { - switch (bang.Kind) - { - case SyntaxKind.Bang: - case SyntaxKind.None: - break; - default: - throw new ArgumentException("bang"); - } - } - switch (name.Kind) - { - case SyntaxKind.Text: - break; - default: - throw new ArgumentException("name"); - } - if (forwardSlash != null) - { - switch (forwardSlash.Kind) - { - case SyntaxKind.ForwardSlash: - case SyntaxKind.None: - break; - default: - throw new ArgumentException("forwardSlash"); - } - } - switch (closeAngle.Kind) - { - case SyntaxKind.CloseAngle: - break; - default: - throw new ArgumentException("closeAngle"); - } - return (MarkupTagHelperStartTagSyntax)InternalSyntax.SyntaxFactory.MarkupTagHelperStartTag((Syntax.InternalSyntax.SyntaxToken)openAngle.Green, (Syntax.InternalSyntax.SyntaxToken)bang?.Green, (Syntax.InternalSyntax.SyntaxToken)name.Green, attributes.Node.ToGreenList(), (Syntax.InternalSyntax.SyntaxToken)forwardSlash?.Green, (Syntax.InternalSyntax.SyntaxToken)closeAngle.Green, chunkGenerator).CreateRed(); + ArgHelper.ThrowIfNull(openAngle); + if (openAngle.Kind != SyntaxKind.OpenAngle) + ThrowHelper.ThrowArgumentException(nameof(openAngle), $"Invalid SyntaxKind. Expected 'SyntaxKind.OpenAngle', but it was {openAngle.Kind}"); + if (bang is not null && bang.Kind is not (SyntaxKind.Bang or SyntaxKind.None)) + ThrowHelper.ThrowArgumentException(nameof(bang), $"Invalid SyntaxKind. Expected 'SyntaxKind.Bang' or 'SyntaxKind.None', but it was {bang.Kind}"); + ArgHelper.ThrowIfNull(name); + if (name.Kind != SyntaxKind.Text) + ThrowHelper.ThrowArgumentException(nameof(name), $"Invalid SyntaxKind. Expected 'SyntaxKind.Text', but it was {name.Kind}"); + if (forwardSlash is not null && forwardSlash.Kind is not (SyntaxKind.ForwardSlash or SyntaxKind.None)) + ThrowHelper.ThrowArgumentException(nameof(forwardSlash), $"Invalid SyntaxKind. Expected 'SyntaxKind.ForwardSlash' or 'SyntaxKind.None', but it was {forwardSlash.Kind}"); + ArgHelper.ThrowIfNull(closeAngle); + if (closeAngle.Kind != SyntaxKind.CloseAngle) + ThrowHelper.ThrowArgumentException(nameof(closeAngle), $"Invalid SyntaxKind. Expected 'SyntaxKind.CloseAngle', but it was {closeAngle.Kind}"); + return (MarkupTagHelperStartTagSyntax)InternalSyntax.SyntaxFactory.MarkupTagHelperStartTag((Syntax.InternalSyntax.SyntaxToken)openAngle.Green, (Syntax.InternalSyntax.SyntaxToken)bang?.Green, (Syntax.InternalSyntax.SyntaxToken)name.Green, attributes.Node.ToGreenList(), (Syntax.InternalSyntax.SyntaxToken)forwardSlash?.Green, (Syntax.InternalSyntax.SyntaxToken)closeAngle.Green, chunkGenerator).CreateRed(); } /// Creates a new MarkupTagHelperStartTagSyntax instance. public static MarkupTagHelperStartTagSyntax MarkupTagHelperStartTag(SyntaxList attributes, ISpanChunkGenerator chunkGenerator) - { - return SyntaxFactory.MarkupTagHelperStartTag(SyntaxFactory.Token(SyntaxKind.OpenAngle), default(SyntaxToken), SyntaxFactory.Token(SyntaxKind.Text), attributes, default(SyntaxToken), SyntaxFactory.Token(SyntaxKind.CloseAngle), chunkGenerator); - } + => SyntaxFactory.MarkupTagHelperStartTag(SyntaxFactory.Token(SyntaxKind.OpenAngle), default(SyntaxToken), SyntaxFactory.Token(SyntaxKind.Text), attributes, default(SyntaxToken), SyntaxFactory.Token(SyntaxKind.CloseAngle), chunkGenerator); /// Creates a new MarkupTagHelperStartTagSyntax instance. public static MarkupTagHelperStartTagSyntax MarkupTagHelperStartTag(ISpanChunkGenerator chunkGenerator) - { - return SyntaxFactory.MarkupTagHelperStartTag(SyntaxFactory.Token(SyntaxKind.OpenAngle), default(SyntaxToken), SyntaxFactory.Token(SyntaxKind.Text), default(SyntaxList), default(SyntaxToken), SyntaxFactory.Token(SyntaxKind.CloseAngle), chunkGenerator); - } + => SyntaxFactory.MarkupTagHelperStartTag(SyntaxFactory.Token(SyntaxKind.OpenAngle), default(SyntaxToken), SyntaxFactory.Token(SyntaxKind.Text), default(SyntaxList), default(SyntaxToken), SyntaxFactory.Token(SyntaxKind.CloseAngle), chunkGenerator); /// Creates a new MarkupTagHelperEndTagSyntax instance. public static MarkupTagHelperEndTagSyntax MarkupTagHelperEndTag(SyntaxToken openAngle, SyntaxToken forwardSlash, SyntaxToken bang, SyntaxToken name, MarkupMiscAttributeContentSyntax miscAttributeContent, SyntaxToken closeAngle, ISpanChunkGenerator chunkGenerator) { - switch (openAngle.Kind) - { - case SyntaxKind.OpenAngle: - break; - default: - throw new ArgumentException("openAngle"); - } - switch (forwardSlash.Kind) - { - case SyntaxKind.ForwardSlash: - break; - default: - throw new ArgumentException("forwardSlash"); - } - if (bang != null) - { - switch (bang.Kind) - { - case SyntaxKind.Bang: - case SyntaxKind.None: - break; - default: - throw new ArgumentException("bang"); - } - } - switch (name.Kind) - { - case SyntaxKind.Text: - break; - default: - throw new ArgumentException("name"); - } - switch (closeAngle.Kind) - { - case SyntaxKind.CloseAngle: - break; - default: - throw new ArgumentException("closeAngle"); - } - return (MarkupTagHelperEndTagSyntax)InternalSyntax.SyntaxFactory.MarkupTagHelperEndTag((Syntax.InternalSyntax.SyntaxToken)openAngle.Green, (Syntax.InternalSyntax.SyntaxToken)forwardSlash.Green, (Syntax.InternalSyntax.SyntaxToken)bang?.Green, (Syntax.InternalSyntax.SyntaxToken)name.Green, miscAttributeContent == null ? null : (InternalSyntax.MarkupMiscAttributeContentSyntax)miscAttributeContent.Green, (Syntax.InternalSyntax.SyntaxToken)closeAngle.Green, chunkGenerator).CreateRed(); + ArgHelper.ThrowIfNull(openAngle); + if (openAngle.Kind != SyntaxKind.OpenAngle) + ThrowHelper.ThrowArgumentException(nameof(openAngle), $"Invalid SyntaxKind. Expected 'SyntaxKind.OpenAngle', but it was {openAngle.Kind}"); + ArgHelper.ThrowIfNull(forwardSlash); + if (forwardSlash.Kind != SyntaxKind.ForwardSlash) + ThrowHelper.ThrowArgumentException(nameof(forwardSlash), $"Invalid SyntaxKind. Expected 'SyntaxKind.ForwardSlash', but it was {forwardSlash.Kind}"); + if (bang is not null && bang.Kind is not (SyntaxKind.Bang or SyntaxKind.None)) + ThrowHelper.ThrowArgumentException(nameof(bang), $"Invalid SyntaxKind. Expected 'SyntaxKind.Bang' or 'SyntaxKind.None', but it was {bang.Kind}"); + ArgHelper.ThrowIfNull(name); + if (name.Kind != SyntaxKind.Text) + ThrowHelper.ThrowArgumentException(nameof(name), $"Invalid SyntaxKind. Expected 'SyntaxKind.Text', but it was {name.Kind}"); + ArgHelper.ThrowIfNull(closeAngle); + if (closeAngle.Kind != SyntaxKind.CloseAngle) + ThrowHelper.ThrowArgumentException(nameof(closeAngle), $"Invalid SyntaxKind. Expected 'SyntaxKind.CloseAngle', but it was {closeAngle.Kind}"); + return (MarkupTagHelperEndTagSyntax)InternalSyntax.SyntaxFactory.MarkupTagHelperEndTag((Syntax.InternalSyntax.SyntaxToken)openAngle.Green, (Syntax.InternalSyntax.SyntaxToken)forwardSlash.Green, (Syntax.InternalSyntax.SyntaxToken)bang?.Green, (Syntax.InternalSyntax.SyntaxToken)name.Green, miscAttributeContent == null ? null : (InternalSyntax.MarkupMiscAttributeContentSyntax)miscAttributeContent.Green, (Syntax.InternalSyntax.SyntaxToken)closeAngle.Green, chunkGenerator).CreateRed(); } /// Creates a new MarkupTagHelperEndTagSyntax instance. public static MarkupTagHelperEndTagSyntax MarkupTagHelperEndTag(MarkupMiscAttributeContentSyntax miscAttributeContent, ISpanChunkGenerator chunkGenerator) - { - return SyntaxFactory.MarkupTagHelperEndTag(SyntaxFactory.Token(SyntaxKind.OpenAngle), SyntaxFactory.Token(SyntaxKind.ForwardSlash), default(SyntaxToken), SyntaxFactory.Token(SyntaxKind.Text), miscAttributeContent, SyntaxFactory.Token(SyntaxKind.CloseAngle), chunkGenerator); - } + => SyntaxFactory.MarkupTagHelperEndTag(SyntaxFactory.Token(SyntaxKind.OpenAngle), SyntaxFactory.Token(SyntaxKind.ForwardSlash), default(SyntaxToken), SyntaxFactory.Token(SyntaxKind.Text), miscAttributeContent, SyntaxFactory.Token(SyntaxKind.CloseAngle), chunkGenerator); /// Creates a new MarkupTagHelperEndTagSyntax instance. public static MarkupTagHelperEndTagSyntax MarkupTagHelperEndTag(ISpanChunkGenerator chunkGenerator) - { - return SyntaxFactory.MarkupTagHelperEndTag(SyntaxFactory.Token(SyntaxKind.OpenAngle), SyntaxFactory.Token(SyntaxKind.ForwardSlash), default(SyntaxToken), SyntaxFactory.Token(SyntaxKind.Text), default(MarkupMiscAttributeContentSyntax), SyntaxFactory.Token(SyntaxKind.CloseAngle), chunkGenerator); - } + => SyntaxFactory.MarkupTagHelperEndTag(SyntaxFactory.Token(SyntaxKind.OpenAngle), SyntaxFactory.Token(SyntaxKind.ForwardSlash), default(SyntaxToken), SyntaxFactory.Token(SyntaxKind.Text), default(MarkupMiscAttributeContentSyntax), SyntaxFactory.Token(SyntaxKind.CloseAngle), chunkGenerator); /// Creates a new MarkupTagHelperAttributeSyntax instance. public static MarkupTagHelperAttributeSyntax MarkupTagHelperAttribute(MarkupTextLiteralSyntax namePrefix, MarkupTextLiteralSyntax name, MarkupTextLiteralSyntax nameSuffix, SyntaxToken equalsToken, MarkupTextLiteralSyntax valuePrefix, MarkupTagHelperAttributeValueSyntax value, MarkupTextLiteralSyntax valueSuffix) { - if (name == null) - throw new ArgumentNullException(nameof(name)); - switch (equalsToken.Kind) - { - case SyntaxKind.Equals: - break; - default: - throw new ArgumentException("equalsToken"); - } - if (value == null) - throw new ArgumentNullException(nameof(value)); - return (MarkupTagHelperAttributeSyntax)InternalSyntax.SyntaxFactory.MarkupTagHelperAttribute(namePrefix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)namePrefix.Green, name == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)name.Green, nameSuffix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)nameSuffix.Green, (Syntax.InternalSyntax.SyntaxToken)equalsToken.Green, valuePrefix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)valuePrefix.Green, value == null ? null : (InternalSyntax.MarkupTagHelperAttributeValueSyntax)value.Green, valueSuffix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)valueSuffix.Green).CreateRed(); + ArgHelper.ThrowIfNull(name); + ArgHelper.ThrowIfNull(equalsToken); + if (equalsToken.Kind != SyntaxKind.Equals) + ThrowHelper.ThrowArgumentException(nameof(equalsToken), $"Invalid SyntaxKind. Expected 'SyntaxKind.Equals', but it was {equalsToken.Kind}"); + ArgHelper.ThrowIfNull(value); + return (MarkupTagHelperAttributeSyntax)InternalSyntax.SyntaxFactory.MarkupTagHelperAttribute(namePrefix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)namePrefix.Green, name == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)name.Green, nameSuffix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)nameSuffix.Green, (Syntax.InternalSyntax.SyntaxToken)equalsToken.Green, valuePrefix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)valuePrefix.Green, value == null ? null : (InternalSyntax.MarkupTagHelperAttributeValueSyntax)value.Green, valueSuffix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)valueSuffix.Green).CreateRed(); } /// Creates a new MarkupTagHelperAttributeSyntax instance. public static MarkupTagHelperAttributeSyntax MarkupTagHelperAttribute(MarkupTextLiteralSyntax namePrefix, MarkupTextLiteralSyntax name, MarkupTextLiteralSyntax nameSuffix, MarkupTextLiteralSyntax valuePrefix, MarkupTagHelperAttributeValueSyntax value, MarkupTextLiteralSyntax valueSuffix) - { - return SyntaxFactory.MarkupTagHelperAttribute(namePrefix, name, nameSuffix, SyntaxFactory.Token(SyntaxKind.Equals), valuePrefix, value, valueSuffix); - } + => SyntaxFactory.MarkupTagHelperAttribute(namePrefix, name, nameSuffix, SyntaxFactory.Token(SyntaxKind.Equals), valuePrefix, value, valueSuffix); /// Creates a new MarkupTagHelperAttributeSyntax instance. public static MarkupTagHelperAttributeSyntax MarkupTagHelperAttribute(MarkupTextLiteralSyntax name) - { - return SyntaxFactory.MarkupTagHelperAttribute(default(MarkupTextLiteralSyntax), name, default(MarkupTextLiteralSyntax), SyntaxFactory.Token(SyntaxKind.Equals), default(MarkupTextLiteralSyntax), SyntaxFactory.MarkupTagHelperAttributeValue(), default(MarkupTextLiteralSyntax)); - } + => SyntaxFactory.MarkupTagHelperAttribute(default(MarkupTextLiteralSyntax), name, default(MarkupTextLiteralSyntax), SyntaxFactory.Token(SyntaxKind.Equals), default(MarkupTextLiteralSyntax), SyntaxFactory.MarkupTagHelperAttributeValue(), default(MarkupTextLiteralSyntax)); /// Creates a new MarkupMinimizedTagHelperAttributeSyntax instance. public static MarkupMinimizedTagHelperAttributeSyntax MarkupMinimizedTagHelperAttribute(MarkupTextLiteralSyntax namePrefix, MarkupTextLiteralSyntax name) { - if (name == null) - throw new ArgumentNullException(nameof(name)); - return (MarkupMinimizedTagHelperAttributeSyntax)InternalSyntax.SyntaxFactory.MarkupMinimizedTagHelperAttribute(namePrefix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)namePrefix.Green, name == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)name.Green).CreateRed(); + ArgHelper.ThrowIfNull(name); + return (MarkupMinimizedTagHelperAttributeSyntax)InternalSyntax.SyntaxFactory.MarkupMinimizedTagHelperAttribute(namePrefix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)namePrefix.Green, name == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)name.Green).CreateRed(); } /// Creates a new MarkupMinimizedTagHelperAttributeSyntax instance. public static MarkupMinimizedTagHelperAttributeSyntax MarkupMinimizedTagHelperAttribute(MarkupTextLiteralSyntax name) - { - return SyntaxFactory.MarkupMinimizedTagHelperAttribute(default(MarkupTextLiteralSyntax), name); - } + => SyntaxFactory.MarkupMinimizedTagHelperAttribute(default(MarkupTextLiteralSyntax), name); /// Creates a new MarkupTagHelperAttributeValueSyntax instance. public static MarkupTagHelperAttributeValueSyntax MarkupTagHelperAttributeValue(SyntaxList children) - { - return (MarkupTagHelperAttributeValueSyntax)InternalSyntax.SyntaxFactory.MarkupTagHelperAttributeValue(children.Node.ToGreenList()).CreateRed(); - } + => (MarkupTagHelperAttributeValueSyntax)InternalSyntax.SyntaxFactory.MarkupTagHelperAttributeValue(children.Node.ToGreenList()).CreateRed(); /// Creates a new MarkupTagHelperAttributeValueSyntax instance. public static MarkupTagHelperAttributeValueSyntax MarkupTagHelperAttributeValue() - { - return SyntaxFactory.MarkupTagHelperAttributeValue(default(SyntaxList)); - } + => SyntaxFactory.MarkupTagHelperAttributeValue(default(SyntaxList)); /// Creates a new MarkupTagHelperDirectiveAttributeSyntax instance. public static MarkupTagHelperDirectiveAttributeSyntax MarkupTagHelperDirectiveAttribute(MarkupTextLiteralSyntax namePrefix, RazorMetaCodeSyntax transition, MarkupTextLiteralSyntax name, RazorMetaCodeSyntax colon, MarkupTextLiteralSyntax parameterName, MarkupTextLiteralSyntax nameSuffix, SyntaxToken equalsToken, MarkupTextLiteralSyntax valuePrefix, MarkupTagHelperAttributeValueSyntax value, MarkupTextLiteralSyntax valueSuffix) { - if (transition == null) - throw new ArgumentNullException(nameof(transition)); - if (name == null) - throw new ArgumentNullException(nameof(name)); - switch (equalsToken.Kind) - { - case SyntaxKind.Equals: - break; - default: - throw new ArgumentException("equalsToken"); - } - if (value == null) - throw new ArgumentNullException(nameof(value)); - return (MarkupTagHelperDirectiveAttributeSyntax)InternalSyntax.SyntaxFactory.MarkupTagHelperDirectiveAttribute(namePrefix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)namePrefix.Green, transition == null ? null : (InternalSyntax.RazorMetaCodeSyntax)transition.Green, name == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)name.Green, colon == null ? null : (InternalSyntax.RazorMetaCodeSyntax)colon.Green, parameterName == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)parameterName.Green, nameSuffix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)nameSuffix.Green, (Syntax.InternalSyntax.SyntaxToken)equalsToken.Green, valuePrefix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)valuePrefix.Green, value == null ? null : (InternalSyntax.MarkupTagHelperAttributeValueSyntax)value.Green, valueSuffix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)valueSuffix.Green).CreateRed(); + ArgHelper.ThrowIfNull(transition); + ArgHelper.ThrowIfNull(name); + ArgHelper.ThrowIfNull(equalsToken); + if (equalsToken.Kind != SyntaxKind.Equals) + ThrowHelper.ThrowArgumentException(nameof(equalsToken), $"Invalid SyntaxKind. Expected 'SyntaxKind.Equals', but it was {equalsToken.Kind}"); + ArgHelper.ThrowIfNull(value); + return (MarkupTagHelperDirectiveAttributeSyntax)InternalSyntax.SyntaxFactory.MarkupTagHelperDirectiveAttribute(namePrefix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)namePrefix.Green, transition == null ? null : (InternalSyntax.RazorMetaCodeSyntax)transition.Green, name == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)name.Green, colon == null ? null : (InternalSyntax.RazorMetaCodeSyntax)colon.Green, parameterName == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)parameterName.Green, nameSuffix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)nameSuffix.Green, (Syntax.InternalSyntax.SyntaxToken)equalsToken.Green, valuePrefix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)valuePrefix.Green, value == null ? null : (InternalSyntax.MarkupTagHelperAttributeValueSyntax)value.Green, valueSuffix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)valueSuffix.Green).CreateRed(); } /// Creates a new MarkupTagHelperDirectiveAttributeSyntax instance. public static MarkupTagHelperDirectiveAttributeSyntax MarkupTagHelperDirectiveAttribute(MarkupTextLiteralSyntax namePrefix, RazorMetaCodeSyntax transition, MarkupTextLiteralSyntax name, RazorMetaCodeSyntax colon, MarkupTextLiteralSyntax parameterName, MarkupTextLiteralSyntax nameSuffix, MarkupTextLiteralSyntax valuePrefix, MarkupTagHelperAttributeValueSyntax value, MarkupTextLiteralSyntax valueSuffix) - { - return SyntaxFactory.MarkupTagHelperDirectiveAttribute(namePrefix, transition, name, colon, parameterName, nameSuffix, SyntaxFactory.Token(SyntaxKind.Equals), valuePrefix, value, valueSuffix); - } + => SyntaxFactory.MarkupTagHelperDirectiveAttribute(namePrefix, transition, name, colon, parameterName, nameSuffix, SyntaxFactory.Token(SyntaxKind.Equals), valuePrefix, value, valueSuffix); /// Creates a new MarkupTagHelperDirectiveAttributeSyntax instance. public static MarkupTagHelperDirectiveAttributeSyntax MarkupTagHelperDirectiveAttribute(RazorMetaCodeSyntax transition, MarkupTextLiteralSyntax name) - { - return SyntaxFactory.MarkupTagHelperDirectiveAttribute(default(MarkupTextLiteralSyntax), transition, name, default(RazorMetaCodeSyntax), default(MarkupTextLiteralSyntax), default(MarkupTextLiteralSyntax), SyntaxFactory.Token(SyntaxKind.Equals), default(MarkupTextLiteralSyntax), SyntaxFactory.MarkupTagHelperAttributeValue(), default(MarkupTextLiteralSyntax)); - } + => SyntaxFactory.MarkupTagHelperDirectiveAttribute(default(MarkupTextLiteralSyntax), transition, name, default(RazorMetaCodeSyntax), default(MarkupTextLiteralSyntax), default(MarkupTextLiteralSyntax), SyntaxFactory.Token(SyntaxKind.Equals), default(MarkupTextLiteralSyntax), SyntaxFactory.MarkupTagHelperAttributeValue(), default(MarkupTextLiteralSyntax)); /// Creates a new MarkupMinimizedTagHelperDirectiveAttributeSyntax instance. public static MarkupMinimizedTagHelperDirectiveAttributeSyntax MarkupMinimizedTagHelperDirectiveAttribute(MarkupTextLiteralSyntax namePrefix, RazorMetaCodeSyntax transition, MarkupTextLiteralSyntax name, RazorMetaCodeSyntax colon, MarkupTextLiteralSyntax parameterName) { - if (transition == null) - throw new ArgumentNullException(nameof(transition)); - if (name == null) - throw new ArgumentNullException(nameof(name)); - return (MarkupMinimizedTagHelperDirectiveAttributeSyntax)InternalSyntax.SyntaxFactory.MarkupMinimizedTagHelperDirectiveAttribute(namePrefix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)namePrefix.Green, transition == null ? null : (InternalSyntax.RazorMetaCodeSyntax)transition.Green, name == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)name.Green, colon == null ? null : (InternalSyntax.RazorMetaCodeSyntax)colon.Green, parameterName == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)parameterName.Green).CreateRed(); + ArgHelper.ThrowIfNull(transition); + ArgHelper.ThrowIfNull(name); + return (MarkupMinimizedTagHelperDirectiveAttributeSyntax)InternalSyntax.SyntaxFactory.MarkupMinimizedTagHelperDirectiveAttribute(namePrefix == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)namePrefix.Green, transition == null ? null : (InternalSyntax.RazorMetaCodeSyntax)transition.Green, name == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)name.Green, colon == null ? null : (InternalSyntax.RazorMetaCodeSyntax)colon.Green, parameterName == null ? null : (InternalSyntax.MarkupTextLiteralSyntax)parameterName.Green).CreateRed(); } /// Creates a new MarkupMinimizedTagHelperDirectiveAttributeSyntax instance. public static MarkupMinimizedTagHelperDirectiveAttributeSyntax MarkupMinimizedTagHelperDirectiveAttribute(RazorMetaCodeSyntax transition, MarkupTextLiteralSyntax name) - { - return SyntaxFactory.MarkupMinimizedTagHelperDirectiveAttribute(default(MarkupTextLiteralSyntax), transition, name, default(RazorMetaCodeSyntax), default(MarkupTextLiteralSyntax)); - } + => SyntaxFactory.MarkupMinimizedTagHelperDirectiveAttribute(default(MarkupTextLiteralSyntax), transition, name, default(RazorMetaCodeSyntax), default(MarkupTextLiteralSyntax)); /// Creates a new CSharpCodeBlockSyntax instance. public static CSharpCodeBlockSyntax CSharpCodeBlock(SyntaxList children) - { - return (CSharpCodeBlockSyntax)InternalSyntax.SyntaxFactory.CSharpCodeBlock(children.Node.ToGreenList()).CreateRed(); - } + => (CSharpCodeBlockSyntax)InternalSyntax.SyntaxFactory.CSharpCodeBlock(children.Node.ToGreenList()).CreateRed(); /// Creates a new CSharpCodeBlockSyntax instance. public static CSharpCodeBlockSyntax CSharpCodeBlock() - { - return SyntaxFactory.CSharpCodeBlock(default(SyntaxList)); - } + => SyntaxFactory.CSharpCodeBlock(default(SyntaxList)); /// Creates a new CSharpTransitionSyntax instance. public static CSharpTransitionSyntax CSharpTransition(SyntaxToken transition, ISpanChunkGenerator chunkGenerator) { - switch (transition.Kind) - { - case SyntaxKind.Transition: - break; - default: - throw new ArgumentException("transition"); - } - return (CSharpTransitionSyntax)InternalSyntax.SyntaxFactory.CSharpTransition((Syntax.InternalSyntax.SyntaxToken)transition.Green, chunkGenerator).CreateRed(); + ArgHelper.ThrowIfNull(transition); + if (transition.Kind != SyntaxKind.Transition) + ThrowHelper.ThrowArgumentException(nameof(transition), $"Invalid SyntaxKind. Expected 'SyntaxKind.Transition', but it was {transition.Kind}"); + return (CSharpTransitionSyntax)InternalSyntax.SyntaxFactory.CSharpTransition((Syntax.InternalSyntax.SyntaxToken)transition.Green, chunkGenerator).CreateRed(); } /// Creates a new CSharpTransitionSyntax instance. public static CSharpTransitionSyntax CSharpTransition(ISpanChunkGenerator chunkGenerator) - { - return SyntaxFactory.CSharpTransition(SyntaxFactory.Token(SyntaxKind.Transition), chunkGenerator); - } + => SyntaxFactory.CSharpTransition(SyntaxFactory.Token(SyntaxKind.Transition), chunkGenerator); /// Creates a new CSharpStatementLiteralSyntax instance. public static CSharpStatementLiteralSyntax CSharpStatementLiteral(SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) - { - return (CSharpStatementLiteralSyntax)InternalSyntax.SyntaxFactory.CSharpStatementLiteral(literalTokens.Node.ToGreenList(), chunkGenerator).CreateRed(); - } + => (CSharpStatementLiteralSyntax)InternalSyntax.SyntaxFactory.CSharpStatementLiteral(literalTokens.Node.ToGreenList(), chunkGenerator).CreateRed(); /// Creates a new CSharpStatementLiteralSyntax instance. public static CSharpStatementLiteralSyntax CSharpStatementLiteral(ISpanChunkGenerator chunkGenerator) - { - return SyntaxFactory.CSharpStatementLiteral(default(SyntaxList), chunkGenerator); - } + => SyntaxFactory.CSharpStatementLiteral(default(SyntaxList), chunkGenerator); /// Creates a new CSharpExpressionLiteralSyntax instance. public static CSharpExpressionLiteralSyntax CSharpExpressionLiteral(SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) - { - return (CSharpExpressionLiteralSyntax)InternalSyntax.SyntaxFactory.CSharpExpressionLiteral(literalTokens.Node.ToGreenList(), chunkGenerator).CreateRed(); - } + => (CSharpExpressionLiteralSyntax)InternalSyntax.SyntaxFactory.CSharpExpressionLiteral(literalTokens.Node.ToGreenList(), chunkGenerator).CreateRed(); /// Creates a new CSharpExpressionLiteralSyntax instance. public static CSharpExpressionLiteralSyntax CSharpExpressionLiteral(ISpanChunkGenerator chunkGenerator) - { - return SyntaxFactory.CSharpExpressionLiteral(default(SyntaxList), chunkGenerator); - } + => SyntaxFactory.CSharpExpressionLiteral(default(SyntaxList), chunkGenerator); /// Creates a new CSharpEphemeralTextLiteralSyntax instance. public static CSharpEphemeralTextLiteralSyntax CSharpEphemeralTextLiteral(SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) - { - return (CSharpEphemeralTextLiteralSyntax)InternalSyntax.SyntaxFactory.CSharpEphemeralTextLiteral(literalTokens.Node.ToGreenList(), chunkGenerator).CreateRed(); - } + => (CSharpEphemeralTextLiteralSyntax)InternalSyntax.SyntaxFactory.CSharpEphemeralTextLiteral(literalTokens.Node.ToGreenList(), chunkGenerator).CreateRed(); /// Creates a new CSharpEphemeralTextLiteralSyntax instance. public static CSharpEphemeralTextLiteralSyntax CSharpEphemeralTextLiteral(ISpanChunkGenerator chunkGenerator) - { - return SyntaxFactory.CSharpEphemeralTextLiteral(default(SyntaxList), chunkGenerator); - } + => SyntaxFactory.CSharpEphemeralTextLiteral(default(SyntaxList), chunkGenerator); /// Creates a new CSharpTemplateBlockSyntax instance. public static CSharpTemplateBlockSyntax CSharpTemplateBlock(SyntaxList children) - { - return (CSharpTemplateBlockSyntax)InternalSyntax.SyntaxFactory.CSharpTemplateBlock(children.Node.ToGreenList()).CreateRed(); - } + => (CSharpTemplateBlockSyntax)InternalSyntax.SyntaxFactory.CSharpTemplateBlock(children.Node.ToGreenList()).CreateRed(); /// Creates a new CSharpTemplateBlockSyntax instance. public static CSharpTemplateBlockSyntax CSharpTemplateBlock() - { - return SyntaxFactory.CSharpTemplateBlock(default(SyntaxList)); - } + => SyntaxFactory.CSharpTemplateBlock(default(SyntaxList)); /// Creates a new CSharpStatementSyntax instance. public static CSharpStatementSyntax CSharpStatement(CSharpTransitionSyntax transition, CSharpSyntaxNode body) { - if (transition == null) - throw new ArgumentNullException(nameof(transition)); - if (body == null) - throw new ArgumentNullException(nameof(body)); - return (CSharpStatementSyntax)InternalSyntax.SyntaxFactory.CSharpStatement(transition == null ? null : (InternalSyntax.CSharpTransitionSyntax)transition.Green, body == null ? null : (InternalSyntax.CSharpSyntaxNode)body.Green).CreateRed(); + ArgHelper.ThrowIfNull(transition); + ArgHelper.ThrowIfNull(body); + return (CSharpStatementSyntax)InternalSyntax.SyntaxFactory.CSharpStatement(transition == null ? null : (InternalSyntax.CSharpTransitionSyntax)transition.Green, body == null ? null : (InternalSyntax.CSharpSyntaxNode)body.Green).CreateRed(); } /// Creates a new CSharpStatementBodySyntax instance. - public static CSharpStatementBodySyntax CSharpStatementBody(RazorMetaCodeSyntax openBrace, CSharpCodeBlockSyntax cSharpCode, RazorMetaCodeSyntax closeBrace) + public static CSharpStatementBodySyntax CSharpStatementBody(RazorMetaCodeSyntax openBrace, CSharpCodeBlockSyntax csharpCode, RazorMetaCodeSyntax closeBrace) { - if (openBrace == null) - throw new ArgumentNullException(nameof(openBrace)); - if (cSharpCode == null) - throw new ArgumentNullException(nameof(cSharpCode)); - if (closeBrace == null) - throw new ArgumentNullException(nameof(closeBrace)); - return (CSharpStatementBodySyntax)InternalSyntax.SyntaxFactory.CSharpStatementBody(openBrace == null ? null : (InternalSyntax.RazorMetaCodeSyntax)openBrace.Green, cSharpCode == null ? null : (InternalSyntax.CSharpCodeBlockSyntax)cSharpCode.Green, closeBrace == null ? null : (InternalSyntax.RazorMetaCodeSyntax)closeBrace.Green).CreateRed(); + ArgHelper.ThrowIfNull(openBrace); + ArgHelper.ThrowIfNull(csharpCode); + ArgHelper.ThrowIfNull(closeBrace); + return (CSharpStatementBodySyntax)InternalSyntax.SyntaxFactory.CSharpStatementBody(openBrace == null ? null : (InternalSyntax.RazorMetaCodeSyntax)openBrace.Green, csharpCode == null ? null : (InternalSyntax.CSharpCodeBlockSyntax)csharpCode.Green, closeBrace == null ? null : (InternalSyntax.RazorMetaCodeSyntax)closeBrace.Green).CreateRed(); } /// Creates a new CSharpStatementBodySyntax instance. public static CSharpStatementBodySyntax CSharpStatementBody(RazorMetaCodeSyntax openBrace, RazorMetaCodeSyntax closeBrace) - { - return SyntaxFactory.CSharpStatementBody(openBrace, SyntaxFactory.CSharpCodeBlock(), closeBrace); - } + => SyntaxFactory.CSharpStatementBody(openBrace, SyntaxFactory.CSharpCodeBlock(), closeBrace); /// Creates a new CSharpExplicitExpressionSyntax instance. public static CSharpExplicitExpressionSyntax CSharpExplicitExpression(CSharpTransitionSyntax transition, CSharpSyntaxNode body) { - if (transition == null) - throw new ArgumentNullException(nameof(transition)); - if (body == null) - throw new ArgumentNullException(nameof(body)); - return (CSharpExplicitExpressionSyntax)InternalSyntax.SyntaxFactory.CSharpExplicitExpression(transition == null ? null : (InternalSyntax.CSharpTransitionSyntax)transition.Green, body == null ? null : (InternalSyntax.CSharpSyntaxNode)body.Green).CreateRed(); + ArgHelper.ThrowIfNull(transition); + ArgHelper.ThrowIfNull(body); + return (CSharpExplicitExpressionSyntax)InternalSyntax.SyntaxFactory.CSharpExplicitExpression(transition == null ? null : (InternalSyntax.CSharpTransitionSyntax)transition.Green, body == null ? null : (InternalSyntax.CSharpSyntaxNode)body.Green).CreateRed(); } /// Creates a new CSharpExplicitExpressionBodySyntax instance. - public static CSharpExplicitExpressionBodySyntax CSharpExplicitExpressionBody(RazorMetaCodeSyntax openParen, CSharpCodeBlockSyntax cSharpCode, RazorMetaCodeSyntax closeParen) + public static CSharpExplicitExpressionBodySyntax CSharpExplicitExpressionBody(RazorMetaCodeSyntax openParen, CSharpCodeBlockSyntax csharpCode, RazorMetaCodeSyntax closeParen) { - if (openParen == null) - throw new ArgumentNullException(nameof(openParen)); - if (cSharpCode == null) - throw new ArgumentNullException(nameof(cSharpCode)); - if (closeParen == null) - throw new ArgumentNullException(nameof(closeParen)); - return (CSharpExplicitExpressionBodySyntax)InternalSyntax.SyntaxFactory.CSharpExplicitExpressionBody(openParen == null ? null : (InternalSyntax.RazorMetaCodeSyntax)openParen.Green, cSharpCode == null ? null : (InternalSyntax.CSharpCodeBlockSyntax)cSharpCode.Green, closeParen == null ? null : (InternalSyntax.RazorMetaCodeSyntax)closeParen.Green).CreateRed(); + ArgHelper.ThrowIfNull(openParen); + ArgHelper.ThrowIfNull(csharpCode); + ArgHelper.ThrowIfNull(closeParen); + return (CSharpExplicitExpressionBodySyntax)InternalSyntax.SyntaxFactory.CSharpExplicitExpressionBody(openParen == null ? null : (InternalSyntax.RazorMetaCodeSyntax)openParen.Green, csharpCode == null ? null : (InternalSyntax.CSharpCodeBlockSyntax)csharpCode.Green, closeParen == null ? null : (InternalSyntax.RazorMetaCodeSyntax)closeParen.Green).CreateRed(); } /// Creates a new CSharpExplicitExpressionBodySyntax instance. public static CSharpExplicitExpressionBodySyntax CSharpExplicitExpressionBody(RazorMetaCodeSyntax openParen, RazorMetaCodeSyntax closeParen) - { - return SyntaxFactory.CSharpExplicitExpressionBody(openParen, SyntaxFactory.CSharpCodeBlock(), closeParen); - } + => SyntaxFactory.CSharpExplicitExpressionBody(openParen, SyntaxFactory.CSharpCodeBlock(), closeParen); /// Creates a new CSharpImplicitExpressionSyntax instance. public static CSharpImplicitExpressionSyntax CSharpImplicitExpression(CSharpTransitionSyntax transition, CSharpSyntaxNode body) { - if (transition == null) - throw new ArgumentNullException(nameof(transition)); - if (body == null) - throw new ArgumentNullException(nameof(body)); - return (CSharpImplicitExpressionSyntax)InternalSyntax.SyntaxFactory.CSharpImplicitExpression(transition == null ? null : (InternalSyntax.CSharpTransitionSyntax)transition.Green, body == null ? null : (InternalSyntax.CSharpSyntaxNode)body.Green).CreateRed(); + ArgHelper.ThrowIfNull(transition); + ArgHelper.ThrowIfNull(body); + return (CSharpImplicitExpressionSyntax)InternalSyntax.SyntaxFactory.CSharpImplicitExpression(transition == null ? null : (InternalSyntax.CSharpTransitionSyntax)transition.Green, body == null ? null : (InternalSyntax.CSharpSyntaxNode)body.Green).CreateRed(); } /// Creates a new CSharpImplicitExpressionBodySyntax instance. - public static CSharpImplicitExpressionBodySyntax CSharpImplicitExpressionBody(CSharpCodeBlockSyntax cSharpCode) + public static CSharpImplicitExpressionBodySyntax CSharpImplicitExpressionBody(CSharpCodeBlockSyntax csharpCode) { - if (cSharpCode == null) - throw new ArgumentNullException(nameof(cSharpCode)); - return (CSharpImplicitExpressionBodySyntax)InternalSyntax.SyntaxFactory.CSharpImplicitExpressionBody(cSharpCode == null ? null : (InternalSyntax.CSharpCodeBlockSyntax)cSharpCode.Green).CreateRed(); + ArgHelper.ThrowIfNull(csharpCode); + return (CSharpImplicitExpressionBodySyntax)InternalSyntax.SyntaxFactory.CSharpImplicitExpressionBody(csharpCode == null ? null : (InternalSyntax.CSharpCodeBlockSyntax)csharpCode.Green).CreateRed(); } /// Creates a new CSharpImplicitExpressionBodySyntax instance. public static CSharpImplicitExpressionBodySyntax CSharpImplicitExpressionBody() - { - return SyntaxFactory.CSharpImplicitExpressionBody(SyntaxFactory.CSharpCodeBlock()); - } + => SyntaxFactory.CSharpImplicitExpressionBody(SyntaxFactory.CSharpCodeBlock()); /// Creates a new RazorDirectiveSyntax instance. public static RazorDirectiveSyntax RazorDirective(CSharpTransitionSyntax transition, CSharpSyntaxNode body) { - if (transition == null) - throw new ArgumentNullException(nameof(transition)); - if (body == null) - throw new ArgumentNullException(nameof(body)); - return (RazorDirectiveSyntax)InternalSyntax.SyntaxFactory.RazorDirective(transition == null ? null : (InternalSyntax.CSharpTransitionSyntax)transition.Green, body == null ? null : (InternalSyntax.CSharpSyntaxNode)body.Green).CreateRed(); + ArgHelper.ThrowIfNull(transition); + ArgHelper.ThrowIfNull(body); + return (RazorDirectiveSyntax)InternalSyntax.SyntaxFactory.RazorDirective(transition == null ? null : (InternalSyntax.CSharpTransitionSyntax)transition.Green, body == null ? null : (InternalSyntax.CSharpSyntaxNode)body.Green).CreateRed(); } /// Creates a new RazorDirectiveBodySyntax instance. - public static RazorDirectiveBodySyntax RazorDirectiveBody(RazorSyntaxNode keyword, CSharpCodeBlockSyntax cSharpCode) + public static RazorDirectiveBodySyntax RazorDirectiveBody(RazorSyntaxNode keyword, CSharpCodeBlockSyntax csharpCode) { - if (keyword == null) - throw new ArgumentNullException(nameof(keyword)); - return (RazorDirectiveBodySyntax)InternalSyntax.SyntaxFactory.RazorDirectiveBody(keyword == null ? null : (InternalSyntax.RazorSyntaxNode)keyword.Green, cSharpCode == null ? null : (InternalSyntax.CSharpCodeBlockSyntax)cSharpCode.Green).CreateRed(); + ArgHelper.ThrowIfNull(keyword); + return (RazorDirectiveBodySyntax)InternalSyntax.SyntaxFactory.RazorDirectiveBody(keyword == null ? null : (InternalSyntax.RazorSyntaxNode)keyword.Green, csharpCode == null ? null : (InternalSyntax.CSharpCodeBlockSyntax)csharpCode.Green).CreateRed(); } /// Creates a new RazorDirectiveBodySyntax instance. public static RazorDirectiveBodySyntax RazorDirectiveBody(RazorSyntaxNode keyword) - { - return SyntaxFactory.RazorDirectiveBody(keyword, default(CSharpCodeBlockSyntax)); - } - } + => SyntaxFactory.RazorDirectiveBody(keyword, default(CSharpCodeBlockSyntax)); } diff --git a/src/razor/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Syntax/Generated/Syntax.xml.Syntax.Generated.cs b/src/razor/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Syntax/Generated/Syntax.xml.Syntax.Generated.cs index 473fc02b820..6047d80bbbd 100644 --- a/src/razor/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Syntax/Generated/Syntax.xml.Syntax.Generated.cs +++ b/src/razor/src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Syntax/Generated/Syntax.xml.Syntax.Generated.cs @@ -1,21 +1,15 @@ // using System; -using System.Collections; using System.Collections.Generic; -using System.Linq; -using System.Threading; using Microsoft.AspNetCore.Razor.Language.Legacy; +namespace Microsoft.AspNetCore.Razor.Language.Syntax; -namespace Microsoft.AspNetCore.Razor.Language.Syntax +internal abstract partial class RazorBlockSyntax : RazorSyntaxNode { - - - internal abstract partial class RazorBlockSyntax : RazorSyntaxNode - { internal RazorBlockSyntax(GreenNode green, SyntaxNode parent, int position) - : base(green, parent, position) + : base(green, parent, position) { } @@ -25,10 +19,10 @@ internal RazorBlockSyntax(GreenNode green, SyntaxNode parent, int position) public RazorBlockSyntax AddChildren(params RazorSyntaxNode[] items) => AddChildrenCore(items); internal abstract RazorBlockSyntax AddChildrenCore(params RazorSyntaxNode[] items); - } +} - internal sealed partial class RazorDocumentSyntax : RazorSyntaxNode - { +internal sealed partial class RazorDocumentSyntax : RazorSyntaxNode +{ private RazorBlockSyntax _document; private SyntaxToken _endOfFile; @@ -37,50 +31,27 @@ internal RazorDocumentSyntax(GreenNode green, SyntaxNode parent, int position) { } - public RazorBlockSyntax Document - { - get - { - return GetRedAtZero(ref _document); - } - } - - public SyntaxToken EndOfFile - { - get - { - return GetRed(ref _endOfFile, 1); - } - } + public RazorBlockSyntax Document => GetRedAtZero(ref _document); + public SyntaxToken EndOfFile => GetRed(ref _endOfFile, 1); internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) + => index switch { - case 0: return GetRedAtZero(ref _document); - case 1: return GetRed(ref _endOfFile, 1); - default: return null; - } - } + 0 => GetRedAtZero(ref _document), + 1 => GetRed(ref _endOfFile, 1), + _ => null + }; + internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) + => index switch { - case 0: return _document; - case 1: return _endOfFile; - default: return null; - } - } - - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitRazorDocument(this); - } + 0 => this._document, + 1 => this._endOfFile, + _ => null + }; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitRazorDocument(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitRazorDocument(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitRazorDocument(this); public RazorDocumentSyntax Update(RazorBlockSyntax document, SyntaxToken endOfFile) { @@ -89,29 +60,20 @@ public RazorDocumentSyntax Update(RazorBlockSyntax document, SyntaxToken endOfFi var newNode = SyntaxFactory.RazorDocument(document, endOfFile); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } - public RazorDocumentSyntax WithDocument(RazorBlockSyntax document) - { - return Update(document, EndOfFile); - } - - public RazorDocumentSyntax WithEndOfFile(SyntaxToken endOfFile) - { - return Update(Document, endOfFile); - } - } + public RazorDocumentSyntax WithDocument(RazorBlockSyntax document) => Update(document, EndOfFile); + public RazorDocumentSyntax WithEndOfFile(SyntaxToken endOfFile) => Update(Document, endOfFile); +} - internal sealed partial class RazorCommentBlockSyntax : RazorSyntaxNode - { +internal sealed partial class RazorCommentBlockSyntax : RazorSyntaxNode +{ private SyntaxToken _startCommentTransition; private SyntaxToken _startCommentStar; private SyntaxToken _comment; @@ -123,80 +85,36 @@ internal RazorCommentBlockSyntax(GreenNode green, SyntaxNode parent, int positio { } - public SyntaxToken StartCommentTransition - { - get - { - return GetRedAtZero(ref _startCommentTransition); - } - } - - public SyntaxToken StartCommentStar - { - get - { - return GetRed(ref _startCommentStar, 1); - } - } - - public SyntaxToken Comment - { - get - { - return GetRed(ref _comment, 2); - } - } - - public SyntaxToken EndCommentStar - { - get - { - return GetRed(ref _endCommentStar, 3); - } - } - - public SyntaxToken EndCommentTransition - { - get - { - return GetRed(ref _endCommentTransition, 4); - } - } + public SyntaxToken StartCommentTransition => GetRedAtZero(ref _startCommentTransition); + public SyntaxToken StartCommentStar => GetRed(ref _startCommentStar, 1); + public SyntaxToken Comment => GetRed(ref _comment, 2); + public SyntaxToken EndCommentStar => GetRed(ref _endCommentStar, 3); + public SyntaxToken EndCommentTransition => GetRed(ref _endCommentTransition, 4); internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) + => index switch { - case 0: return GetRedAtZero(ref _startCommentTransition); - case 1: return GetRed(ref _startCommentStar, 1); - case 2: return GetRed(ref _comment, 2); - case 3: return GetRed(ref _endCommentStar, 3); - case 4: return GetRed(ref _endCommentTransition, 4); - default: return null; - } - } + 0 => GetRedAtZero(ref _startCommentTransition), + 1 => GetRed(ref _startCommentStar, 1), + 2 => GetRed(ref _comment, 2), + 3 => GetRed(ref _endCommentStar, 3), + 4 => GetRed(ref _endCommentTransition, 4), + _ => null + }; + internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) + => index switch { - case 0: return _startCommentTransition; - case 1: return _startCommentStar; - case 2: return _comment; - case 3: return _endCommentStar; - case 4: return _endCommentTransition; - default: return null; - } - } + 0 => this._startCommentTransition, + 1 => this._startCommentStar, + 2 => this._comment, + 3 => this._endCommentStar, + 4 => this._endCommentTransition, + _ => null + }; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitRazorCommentBlock(this); - } - - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitRazorCommentBlock(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitRazorCommentBlock(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitRazorCommentBlock(this); public RazorCommentBlockSyntax Update(SyntaxToken startCommentTransition, SyntaxToken startCommentStar, SyntaxToken comment, SyntaxToken endCommentStar, SyntaxToken endCommentTransition) { @@ -205,44 +123,23 @@ public RazorCommentBlockSyntax Update(SyntaxToken startCommentTransition, Syntax var newNode = SyntaxFactory.RazorCommentBlock(startCommentTransition, startCommentStar, comment, endCommentStar, endCommentTransition); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } - public RazorCommentBlockSyntax WithStartCommentTransition(SyntaxToken startCommentTransition) - { - return Update(startCommentTransition, StartCommentStar, Comment, EndCommentStar, EndCommentTransition); - } - - public RazorCommentBlockSyntax WithStartCommentStar(SyntaxToken startCommentStar) - { - return Update(StartCommentTransition, startCommentStar, Comment, EndCommentStar, EndCommentTransition); - } - - public RazorCommentBlockSyntax WithComment(SyntaxToken comment) - { - return Update(StartCommentTransition, StartCommentStar, comment, EndCommentStar, EndCommentTransition); - } - - public RazorCommentBlockSyntax WithEndCommentStar(SyntaxToken endCommentStar) - { - return Update(StartCommentTransition, StartCommentStar, Comment, endCommentStar, EndCommentTransition); - } - - public RazorCommentBlockSyntax WithEndCommentTransition(SyntaxToken endCommentTransition) - { - return Update(StartCommentTransition, StartCommentStar, Comment, EndCommentStar, endCommentTransition); - } - } + public RazorCommentBlockSyntax WithStartCommentTransition(SyntaxToken startCommentTransition) => Update(startCommentTransition, StartCommentStar, Comment, EndCommentStar, EndCommentTransition); + public RazorCommentBlockSyntax WithStartCommentStar(SyntaxToken startCommentStar) => Update(StartCommentTransition, startCommentStar, Comment, EndCommentStar, EndCommentTransition); + public RazorCommentBlockSyntax WithComment(SyntaxToken comment) => Update(StartCommentTransition, StartCommentStar, comment, EndCommentStar, EndCommentTransition); + public RazorCommentBlockSyntax WithEndCommentStar(SyntaxToken endCommentStar) => Update(StartCommentTransition, StartCommentStar, Comment, endCommentStar, EndCommentTransition); + public RazorCommentBlockSyntax WithEndCommentTransition(SyntaxToken endCommentTransition) => Update(StartCommentTransition, StartCommentStar, Comment, EndCommentStar, endCommentTransition); +} - internal sealed partial class RazorMetaCodeSyntax : RazorSyntaxNode - { +internal sealed partial class RazorMetaCodeSyntax : RazorSyntaxNode +{ private SyntaxNode _metaCode; internal RazorMetaCodeSyntax(GreenNode green, SyntaxNode parent, int position) @@ -250,42 +147,15 @@ internal RazorMetaCodeSyntax(GreenNode green, SyntaxNode parent, int position) { } - public SyntaxList MetaCode - { - get - { - return new SyntaxList(GetRed(ref _metaCode, 0)); - } - } - - public ISpanChunkGenerator ChunkGenerator { get { return ((InternalSyntax.RazorMetaCodeSyntax)Green).ChunkGenerator; } } + public SyntaxList MetaCode => new SyntaxList(GetRed(ref _metaCode, 0)); + public ISpanChunkGenerator ChunkGenerator => ((InternalSyntax.RazorMetaCodeSyntax)Green).ChunkGenerator; - internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) - { - case 0: return GetRedAtZero(ref _metaCode); - default: return null; - } - } - internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) - { - case 0: return _metaCode; - default: return null; - } - } + internal override SyntaxNode GetNodeSlot(int index) => index == 0 ? GetRedAtZero(ref this._metaCode) : null; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitRazorMetaCode(this); - } + internal override SyntaxNode GetCachedSlot(int index) => index == 0 ? this._metaCode : null; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitRazorMetaCode(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitRazorMetaCode(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitRazorMetaCode(this); public RazorMetaCodeSyntax Update(SyntaxList metaCode, ISpanChunkGenerator chunkGenerator) { @@ -294,34 +164,22 @@ public RazorMetaCodeSyntax Update(SyntaxList metaCode, ISpanChunkGe var newNode = SyntaxFactory.RazorMetaCode(metaCode, chunkGenerator); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } - public RazorMetaCodeSyntax WithMetaCode(SyntaxList metaCode) - { - return Update(metaCode, ChunkGenerator); - } - - public RazorMetaCodeSyntax WithChunkGenerator(ISpanChunkGenerator chunkGenerator) - { - return Update(MetaCode, chunkGenerator); - } + public RazorMetaCodeSyntax WithMetaCode(SyntaxList metaCode) => Update(metaCode, ChunkGenerator); + public RazorMetaCodeSyntax WithChunkGenerator(ISpanChunkGenerator chunkGenerator) => Update(MetaCode, chunkGenerator); - public RazorMetaCodeSyntax AddMetaCode(params SyntaxToken[] items) - { - return WithMetaCode(this.MetaCode.AddRange(items)); - } - } + public RazorMetaCodeSyntax AddMetaCode(params SyntaxToken[] items) => WithMetaCode(this.MetaCode.AddRange(items)); +} - internal sealed partial class GenericBlockSyntax : RazorBlockSyntax - { +internal sealed partial class GenericBlockSyntax : RazorBlockSyntax +{ private SyntaxNode _children; internal GenericBlockSyntax(GreenNode green, SyntaxNode parent, int position) @@ -329,40 +187,14 @@ internal GenericBlockSyntax(GreenNode green, SyntaxNode parent, int position) { } - public override SyntaxList Children - { - get - { - return new SyntaxList(GetRed(ref _children, 0)); - } - } + public override SyntaxList Children => new SyntaxList(GetRed(ref _children, 0)); - internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) - { - case 0: return GetRedAtZero(ref _children); - default: return null; - } - } - internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) - { - case 0: return _children; - default: return null; - } - } + internal override SyntaxNode GetNodeSlot(int index) => index == 0 ? GetRedAtZero(ref this._children) : null; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitGenericBlock(this); - } + internal override SyntaxNode GetCachedSlot(int index) => index == 0 ? this._children : null; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitGenericBlock(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitGenericBlock(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitGenericBlock(this); public GenericBlockSyntax Update(SyntaxList children) { @@ -371,31 +203,23 @@ public GenericBlockSyntax Update(SyntaxList children) var newNode = SyntaxFactory.GenericBlock(children); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } internal override RazorBlockSyntax WithChildrenCore(SyntaxList children) => WithChildren(children); - public new GenericBlockSyntax WithChildren(SyntaxList children) - { - return Update(children); - } + public new GenericBlockSyntax WithChildren(SyntaxList children) => Update(children); internal override RazorBlockSyntax AddChildrenCore(params RazorSyntaxNode[] items) => AddChildren(items); - public new GenericBlockSyntax AddChildren(params RazorSyntaxNode[] items) - { - return WithChildren(this.Children.AddRange(items)); - } - } + public new GenericBlockSyntax AddChildren(params RazorSyntaxNode[] items) => WithChildren(this.Children.AddRange(items)); +} - internal sealed partial class UnclassifiedTextLiteralSyntax : RazorSyntaxNode - { +internal sealed partial class UnclassifiedTextLiteralSyntax : RazorSyntaxNode +{ private SyntaxNode _literalTokens; internal UnclassifiedTextLiteralSyntax(GreenNode green, SyntaxNode parent, int position) @@ -403,42 +227,15 @@ internal UnclassifiedTextLiteralSyntax(GreenNode green, SyntaxNode parent, int p { } - public SyntaxList LiteralTokens - { - get - { - return new SyntaxList(GetRed(ref _literalTokens, 0)); - } - } - - public ISpanChunkGenerator ChunkGenerator { get { return ((InternalSyntax.UnclassifiedTextLiteralSyntax)Green).ChunkGenerator; } } + public SyntaxList LiteralTokens => new SyntaxList(GetRed(ref _literalTokens, 0)); + public ISpanChunkGenerator ChunkGenerator => ((InternalSyntax.UnclassifiedTextLiteralSyntax)Green).ChunkGenerator; - internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) - { - case 0: return GetRedAtZero(ref _literalTokens); - default: return null; - } - } - internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) - { - case 0: return _literalTokens; - default: return null; - } - } + internal override SyntaxNode GetNodeSlot(int index) => index == 0 ? GetRedAtZero(ref this._literalTokens) : null; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitUnclassifiedTextLiteral(this); - } + internal override SyntaxNode GetCachedSlot(int index) => index == 0 ? this._literalTokens : null; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitUnclassifiedTextLiteral(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitUnclassifiedTextLiteral(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitUnclassifiedTextLiteral(this); public UnclassifiedTextLiteralSyntax Update(SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) { @@ -447,42 +244,30 @@ public UnclassifiedTextLiteralSyntax Update(SyntaxList literalToken var newNode = SyntaxFactory.UnclassifiedTextLiteral(literalTokens, chunkGenerator); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } - public UnclassifiedTextLiteralSyntax WithLiteralTokens(SyntaxList literalTokens) - { - return Update(literalTokens, ChunkGenerator); - } - - public UnclassifiedTextLiteralSyntax WithChunkGenerator(ISpanChunkGenerator chunkGenerator) - { - return Update(LiteralTokens, chunkGenerator); - } + public UnclassifiedTextLiteralSyntax WithLiteralTokens(SyntaxList literalTokens) => Update(literalTokens, ChunkGenerator); + public UnclassifiedTextLiteralSyntax WithChunkGenerator(ISpanChunkGenerator chunkGenerator) => Update(LiteralTokens, chunkGenerator); - public UnclassifiedTextLiteralSyntax AddLiteralTokens(params SyntaxToken[] items) - { - return WithLiteralTokens(this.LiteralTokens.AddRange(items)); - } - } + public UnclassifiedTextLiteralSyntax AddLiteralTokens(params SyntaxToken[] items) => WithLiteralTokens(this.LiteralTokens.AddRange(items)); +} - internal abstract partial class MarkupSyntaxNode : RazorSyntaxNode - { +internal abstract partial class MarkupSyntaxNode : RazorSyntaxNode +{ internal MarkupSyntaxNode(GreenNode green, SyntaxNode parent, int position) - : base(green, parent, position) + : base(green, parent, position) { } - } +} - internal sealed partial class MarkupBlockSyntax : RazorBlockSyntax - { +internal sealed partial class MarkupBlockSyntax : RazorBlockSyntax +{ private SyntaxNode _children; internal MarkupBlockSyntax(GreenNode green, SyntaxNode parent, int position) @@ -490,40 +275,14 @@ internal MarkupBlockSyntax(GreenNode green, SyntaxNode parent, int position) { } - public override SyntaxList Children - { - get - { - return new SyntaxList(GetRed(ref _children, 0)); - } - } + public override SyntaxList Children => new SyntaxList(GetRed(ref _children, 0)); - internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) - { - case 0: return GetRedAtZero(ref _children); - default: return null; - } - } - internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) - { - case 0: return _children; - default: return null; - } - } + internal override SyntaxNode GetNodeSlot(int index) => index == 0 ? GetRedAtZero(ref this._children) : null; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupBlock(this); - } + internal override SyntaxNode GetCachedSlot(int index) => index == 0 ? this._children : null; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupBlock(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupBlock(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupBlock(this); public MarkupBlockSyntax Update(SyntaxList children) { @@ -532,31 +291,23 @@ public MarkupBlockSyntax Update(SyntaxList children) var newNode = SyntaxFactory.MarkupBlock(children); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } internal override RazorBlockSyntax WithChildrenCore(SyntaxList children) => WithChildren(children); - public new MarkupBlockSyntax WithChildren(SyntaxList children) - { - return Update(children); - } + public new MarkupBlockSyntax WithChildren(SyntaxList children) => Update(children); internal override RazorBlockSyntax AddChildrenCore(params RazorSyntaxNode[] items) => AddChildren(items); - public new MarkupBlockSyntax AddChildren(params RazorSyntaxNode[] items) - { - return WithChildren(this.Children.AddRange(items)); - } - } + public new MarkupBlockSyntax AddChildren(params RazorSyntaxNode[] items) => WithChildren(this.Children.AddRange(items)); +} - internal sealed partial class MarkupTransitionSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupTransitionSyntax : MarkupSyntaxNode +{ private SyntaxNode _transitionTokens; internal MarkupTransitionSyntax(GreenNode green, SyntaxNode parent, int position) @@ -564,42 +315,15 @@ internal MarkupTransitionSyntax(GreenNode green, SyntaxNode parent, int position { } - public SyntaxList TransitionTokens - { - get - { - return new SyntaxList(GetRed(ref _transitionTokens, 0)); - } - } + public SyntaxList TransitionTokens => new SyntaxList(GetRed(ref _transitionTokens, 0)); + public ISpanChunkGenerator ChunkGenerator => ((InternalSyntax.MarkupTransitionSyntax)Green).ChunkGenerator; - public ISpanChunkGenerator ChunkGenerator { get { return ((InternalSyntax.MarkupTransitionSyntax)Green).ChunkGenerator; } } - - internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) - { - case 0: return GetRedAtZero(ref _transitionTokens); - default: return null; - } - } - internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) - { - case 0: return _transitionTokens; - default: return null; - } - } + internal override SyntaxNode GetNodeSlot(int index) => index == 0 ? GetRedAtZero(ref this._transitionTokens) : null; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupTransition(this); - } + internal override SyntaxNode GetCachedSlot(int index) => index == 0 ? this._transitionTokens : null; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupTransition(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTransition(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTransition(this); public MarkupTransitionSyntax Update(SyntaxList transitionTokens, ISpanChunkGenerator chunkGenerator) { @@ -608,34 +332,22 @@ public MarkupTransitionSyntax Update(SyntaxList transitionTokens, I var newNode = SyntaxFactory.MarkupTransition(transitionTokens, chunkGenerator); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } - public MarkupTransitionSyntax WithTransitionTokens(SyntaxList transitionTokens) - { - return Update(transitionTokens, ChunkGenerator); - } - - public MarkupTransitionSyntax WithChunkGenerator(ISpanChunkGenerator chunkGenerator) - { - return Update(TransitionTokens, chunkGenerator); - } + public MarkupTransitionSyntax WithTransitionTokens(SyntaxList transitionTokens) => Update(transitionTokens, ChunkGenerator); + public MarkupTransitionSyntax WithChunkGenerator(ISpanChunkGenerator chunkGenerator) => Update(TransitionTokens, chunkGenerator); - public MarkupTransitionSyntax AddTransitionTokens(params SyntaxToken[] items) - { - return WithTransitionTokens(this.TransitionTokens.AddRange(items)); - } - } + public MarkupTransitionSyntax AddTransitionTokens(params SyntaxToken[] items) => WithTransitionTokens(this.TransitionTokens.AddRange(items)); +} - internal sealed partial class MarkupTextLiteralSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupTextLiteralSyntax : MarkupSyntaxNode +{ private SyntaxNode _literalTokens; internal MarkupTextLiteralSyntax(GreenNode green, SyntaxNode parent, int position) @@ -643,42 +355,15 @@ internal MarkupTextLiteralSyntax(GreenNode green, SyntaxNode parent, int positio { } - public SyntaxList LiteralTokens - { - get - { - return new SyntaxList(GetRed(ref _literalTokens, 0)); - } - } - - public ISpanChunkGenerator ChunkGenerator { get { return ((InternalSyntax.MarkupTextLiteralSyntax)Green).ChunkGenerator; } } + public SyntaxList LiteralTokens => new SyntaxList(GetRed(ref _literalTokens, 0)); + public ISpanChunkGenerator ChunkGenerator => ((InternalSyntax.MarkupTextLiteralSyntax)Green).ChunkGenerator; - internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) - { - case 0: return GetRedAtZero(ref _literalTokens); - default: return null; - } - } - internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) - { - case 0: return _literalTokens; - default: return null; - } - } + internal override SyntaxNode GetNodeSlot(int index) => index == 0 ? GetRedAtZero(ref this._literalTokens) : null; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupTextLiteral(this); - } + internal override SyntaxNode GetCachedSlot(int index) => index == 0 ? this._literalTokens : null; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupTextLiteral(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTextLiteral(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTextLiteral(this); public MarkupTextLiteralSyntax Update(SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) { @@ -687,34 +372,22 @@ public MarkupTextLiteralSyntax Update(SyntaxList literalTokens, ISp var newNode = SyntaxFactory.MarkupTextLiteral(literalTokens, chunkGenerator); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } - public MarkupTextLiteralSyntax WithLiteralTokens(SyntaxList literalTokens) - { - return Update(literalTokens, ChunkGenerator); - } - - public MarkupTextLiteralSyntax WithChunkGenerator(ISpanChunkGenerator chunkGenerator) - { - return Update(LiteralTokens, chunkGenerator); - } + public MarkupTextLiteralSyntax WithLiteralTokens(SyntaxList literalTokens) => Update(literalTokens, ChunkGenerator); + public MarkupTextLiteralSyntax WithChunkGenerator(ISpanChunkGenerator chunkGenerator) => Update(LiteralTokens, chunkGenerator); - public MarkupTextLiteralSyntax AddLiteralTokens(params SyntaxToken[] items) - { - return WithLiteralTokens(this.LiteralTokens.AddRange(items)); - } - } + public MarkupTextLiteralSyntax AddLiteralTokens(params SyntaxToken[] items) => WithLiteralTokens(this.LiteralTokens.AddRange(items)); +} - internal sealed partial class MarkupEphemeralTextLiteralSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupEphemeralTextLiteralSyntax : MarkupSyntaxNode +{ private SyntaxNode _literalTokens; internal MarkupEphemeralTextLiteralSyntax(GreenNode green, SyntaxNode parent, int position) @@ -722,78 +395,39 @@ internal MarkupEphemeralTextLiteralSyntax(GreenNode green, SyntaxNode parent, in { } - public SyntaxList LiteralTokens - { - get - { - return new SyntaxList(GetRed(ref _literalTokens, 0)); - } - } + public SyntaxList LiteralTokens => new SyntaxList(GetRed(ref _literalTokens, 0)); + public ISpanChunkGenerator ChunkGenerator => ((InternalSyntax.MarkupEphemeralTextLiteralSyntax)Green).ChunkGenerator; - public ISpanChunkGenerator ChunkGenerator { get { return ((InternalSyntax.MarkupEphemeralTextLiteralSyntax)Green).ChunkGenerator; } } + internal override SyntaxNode GetNodeSlot(int index) => index == 0 ? GetRedAtZero(ref this._literalTokens) : null; - internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) - { - case 0: return GetRedAtZero(ref _literalTokens); - default: return null; - } - } - internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) - { - case 0: return _literalTokens; - default: return null; - } - } - - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupEphemeralTextLiteral(this); - } - - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupEphemeralTextLiteral(this); - } - - public MarkupEphemeralTextLiteralSyntax Update(SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) + internal override SyntaxNode GetCachedSlot(int index) => index == 0 ? this._literalTokens : null; + + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupEphemeralTextLiteral(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupEphemeralTextLiteral(this); + + public MarkupEphemeralTextLiteralSyntax Update(SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) { if (literalTokens != LiteralTokens || chunkGenerator != ChunkGenerator) { var newNode = SyntaxFactory.MarkupEphemeralTextLiteral(literalTokens, chunkGenerator); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } - public MarkupEphemeralTextLiteralSyntax WithLiteralTokens(SyntaxList literalTokens) - { - return Update(literalTokens, ChunkGenerator); - } - - public MarkupEphemeralTextLiteralSyntax WithChunkGenerator(ISpanChunkGenerator chunkGenerator) - { - return Update(LiteralTokens, chunkGenerator); - } + public MarkupEphemeralTextLiteralSyntax WithLiteralTokens(SyntaxList literalTokens) => Update(literalTokens, ChunkGenerator); + public MarkupEphemeralTextLiteralSyntax WithChunkGenerator(ISpanChunkGenerator chunkGenerator) => Update(LiteralTokens, chunkGenerator); - public MarkupEphemeralTextLiteralSyntax AddLiteralTokens(params SyntaxToken[] items) - { - return WithLiteralTokens(this.LiteralTokens.AddRange(items)); - } - } + public MarkupEphemeralTextLiteralSyntax AddLiteralTokens(params SyntaxToken[] items) => WithLiteralTokens(this.LiteralTokens.AddRange(items)); +} - internal sealed partial class MarkupCommentBlockSyntax : RazorBlockSyntax - { +internal sealed partial class MarkupCommentBlockSyntax : RazorBlockSyntax +{ private SyntaxNode _children; internal MarkupCommentBlockSyntax(GreenNode green, SyntaxNode parent, int position) @@ -801,40 +435,14 @@ internal MarkupCommentBlockSyntax(GreenNode green, SyntaxNode parent, int positi { } - public override SyntaxList Children - { - get - { - return new SyntaxList(GetRed(ref _children, 0)); - } - } + public override SyntaxList Children => new SyntaxList(GetRed(ref _children, 0)); - internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) - { - case 0: return GetRedAtZero(ref _children); - default: return null; - } - } - internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) - { - case 0: return _children; - default: return null; - } - } + internal override SyntaxNode GetNodeSlot(int index) => index == 0 ? GetRedAtZero(ref this._children) : null; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupCommentBlock(this); - } + internal override SyntaxNode GetCachedSlot(int index) => index == 0 ? this._children : null; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupCommentBlock(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupCommentBlock(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupCommentBlock(this); public MarkupCommentBlockSyntax Update(SyntaxList children) { @@ -843,31 +451,23 @@ public MarkupCommentBlockSyntax Update(SyntaxList children) var newNode = SyntaxFactory.MarkupCommentBlock(children); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } internal override RazorBlockSyntax WithChildrenCore(SyntaxList children) => WithChildren(children); - public new MarkupCommentBlockSyntax WithChildren(SyntaxList children) - { - return Update(children); - } + public new MarkupCommentBlockSyntax WithChildren(SyntaxList children) => Update(children); internal override RazorBlockSyntax AddChildrenCore(params RazorSyntaxNode[] items) => AddChildren(items); - public new MarkupCommentBlockSyntax AddChildren(params RazorSyntaxNode[] items) - { - return WithChildren(this.Children.AddRange(items)); - } - } + public new MarkupCommentBlockSyntax AddChildren(params RazorSyntaxNode[] items) => WithChildren(this.Children.AddRange(items)); +} - internal sealed partial class MarkupMinimizedAttributeBlockSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupMinimizedAttributeBlockSyntax : MarkupSyntaxNode +{ private MarkupTextLiteralSyntax _namePrefix; private MarkupTextLiteralSyntax _name; @@ -876,50 +476,27 @@ internal MarkupMinimizedAttributeBlockSyntax(GreenNode green, SyntaxNode parent, { } - public MarkupTextLiteralSyntax NamePrefix - { - get - { - return GetRedAtZero(ref _namePrefix); - } - } - - public MarkupTextLiteralSyntax Name - { - get - { - return GetRed(ref _name, 1); - } - } + public MarkupTextLiteralSyntax NamePrefix => GetRedAtZero(ref _namePrefix); + public MarkupTextLiteralSyntax Name => GetRed(ref _name, 1); internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) + => index switch { - case 0: return GetRedAtZero(ref _namePrefix); - case 1: return GetRed(ref _name, 1); - default: return null; - } - } + 0 => GetRedAtZero(ref _namePrefix), + 1 => GetRed(ref _name, 1), + _ => null + }; + internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) + => index switch { - case 0: return _namePrefix; - case 1: return _name; - default: return null; - } - } - - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupMinimizedAttributeBlock(this); - } + 0 => this._namePrefix, + 1 => this._name, + _ => null + }; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupMinimizedAttributeBlock(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupMinimizedAttributeBlock(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupMinimizedAttributeBlock(this); public MarkupMinimizedAttributeBlockSyntax Update(MarkupTextLiteralSyntax namePrefix, MarkupTextLiteralSyntax name) { @@ -928,34 +505,22 @@ public MarkupMinimizedAttributeBlockSyntax Update(MarkupTextLiteralSyntax namePr var newNode = SyntaxFactory.MarkupMinimizedAttributeBlock(namePrefix, name); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } - public MarkupMinimizedAttributeBlockSyntax WithNamePrefix(MarkupTextLiteralSyntax namePrefix) - { - return Update(namePrefix, Name); - } - - public MarkupMinimizedAttributeBlockSyntax WithName(MarkupTextLiteralSyntax name) - { - return Update(NamePrefix, name); - } + public MarkupMinimizedAttributeBlockSyntax WithNamePrefix(MarkupTextLiteralSyntax namePrefix) => Update(namePrefix, Name); + public MarkupMinimizedAttributeBlockSyntax WithName(MarkupTextLiteralSyntax name) => Update(NamePrefix, name); - public MarkupMinimizedAttributeBlockSyntax AddNameLiteralTokens(params SyntaxToken[] items) - { - return this.WithName(this.Name.WithLiteralTokens(this.Name.LiteralTokens.AddRange(items))); - } - } + public MarkupMinimizedAttributeBlockSyntax AddNameLiteralTokens(params SyntaxToken[] items) => WithName(this.Name.WithLiteralTokens(this.Name.LiteralTokens.AddRange(items))); +} - internal sealed partial class MarkupAttributeBlockSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupAttributeBlockSyntax : MarkupSyntaxNode +{ private MarkupTextLiteralSyntax _namePrefix; private MarkupTextLiteralSyntax _name; private MarkupTextLiteralSyntax _nameSuffix; @@ -969,100 +534,42 @@ internal MarkupAttributeBlockSyntax(GreenNode green, SyntaxNode parent, int posi { } - public MarkupTextLiteralSyntax NamePrefix - { - get - { - return GetRedAtZero(ref _namePrefix); - } - } - - public MarkupTextLiteralSyntax Name - { - get - { - return GetRed(ref _name, 1); - } - } - - public MarkupTextLiteralSyntax NameSuffix - { - get - { - return GetRed(ref _nameSuffix, 2); - } - } - - public SyntaxToken EqualsToken - { - get - { - return GetRed(ref _equalsToken, 3); - } - } - - public MarkupTextLiteralSyntax ValuePrefix - { - get - { - return GetRed(ref _valuePrefix, 4); - } - } - - public RazorBlockSyntax Value - { - get - { - return GetRed(ref _value, 5); - } - } - - public MarkupTextLiteralSyntax ValueSuffix - { - get - { - return GetRed(ref _valueSuffix, 6); - } - } + public MarkupTextLiteralSyntax NamePrefix => GetRedAtZero(ref _namePrefix); + public MarkupTextLiteralSyntax Name => GetRed(ref _name, 1); + public MarkupTextLiteralSyntax NameSuffix => GetRed(ref _nameSuffix, 2); + public SyntaxToken EqualsToken => GetRed(ref _equalsToken, 3); + public MarkupTextLiteralSyntax ValuePrefix => GetRed(ref _valuePrefix, 4); + public RazorBlockSyntax Value => GetRed(ref _value, 5); + public MarkupTextLiteralSyntax ValueSuffix => GetRed(ref _valueSuffix, 6); internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) - { - case 0: return GetRedAtZero(ref _namePrefix); - case 1: return GetRed(ref _name, 1); - case 2: return GetRed(ref _nameSuffix, 2); - case 3: return GetRed(ref _equalsToken, 3); - case 4: return GetRed(ref _valuePrefix, 4); - case 5: return GetRed(ref _value, 5); - case 6: return GetRed(ref _valueSuffix, 6); - default: return null; - } - } + => index switch + { + 0 => GetRedAtZero(ref _namePrefix), + 1 => GetRed(ref _name, 1), + 2 => GetRed(ref _nameSuffix, 2), + 3 => GetRed(ref _equalsToken, 3), + 4 => GetRed(ref _valuePrefix, 4), + 5 => GetRed(ref _value, 5), + 6 => GetRed(ref _valueSuffix, 6), + _ => null + }; + internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) + => index switch { - case 0: return _namePrefix; - case 1: return _name; - case 2: return _nameSuffix; - case 3: return _equalsToken; - case 4: return _valuePrefix; - case 5: return _value; - case 6: return _valueSuffix; - default: return null; - } - } - - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupAttributeBlock(this); - } + 0 => this._namePrefix, + 1 => this._name, + 2 => this._nameSuffix, + 3 => this._equalsToken, + 4 => this._valuePrefix, + 5 => this._value, + 6 => this._valueSuffix, + _ => null + }; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupAttributeBlock(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupAttributeBlock(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupAttributeBlock(this); public MarkupAttributeBlockSyntax Update(MarkupTextLiteralSyntax namePrefix, MarkupTextLiteralSyntax name, MarkupTextLiteralSyntax nameSuffix, SyntaxToken equalsToken, MarkupTextLiteralSyntax valuePrefix, RazorBlockSyntax value, MarkupTextLiteralSyntax valueSuffix) { @@ -1071,59 +578,27 @@ public MarkupAttributeBlockSyntax Update(MarkupTextLiteralSyntax namePrefix, Mar var newNode = SyntaxFactory.MarkupAttributeBlock(namePrefix, name, nameSuffix, equalsToken, valuePrefix, value, valueSuffix); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } - public MarkupAttributeBlockSyntax WithNamePrefix(MarkupTextLiteralSyntax namePrefix) - { - return Update(namePrefix, Name, NameSuffix, EqualsToken, ValuePrefix, Value, ValueSuffix); - } - - public MarkupAttributeBlockSyntax WithName(MarkupTextLiteralSyntax name) - { - return Update(NamePrefix, name, NameSuffix, EqualsToken, ValuePrefix, Value, ValueSuffix); - } - - public MarkupAttributeBlockSyntax WithNameSuffix(MarkupTextLiteralSyntax nameSuffix) - { - return Update(NamePrefix, Name, nameSuffix, EqualsToken, ValuePrefix, Value, ValueSuffix); - } - - public MarkupAttributeBlockSyntax WithEqualsToken(SyntaxToken equalsToken) - { - return Update(NamePrefix, Name, NameSuffix, equalsToken, ValuePrefix, Value, ValueSuffix); - } - - public MarkupAttributeBlockSyntax WithValuePrefix(MarkupTextLiteralSyntax valuePrefix) - { - return Update(NamePrefix, Name, NameSuffix, EqualsToken, valuePrefix, Value, ValueSuffix); - } - - public MarkupAttributeBlockSyntax WithValue(RazorBlockSyntax value) - { - return Update(NamePrefix, Name, NameSuffix, EqualsToken, ValuePrefix, value, ValueSuffix); - } - - public MarkupAttributeBlockSyntax WithValueSuffix(MarkupTextLiteralSyntax valueSuffix) - { - return Update(NamePrefix, Name, NameSuffix, EqualsToken, ValuePrefix, Value, valueSuffix); - } + public MarkupAttributeBlockSyntax WithNamePrefix(MarkupTextLiteralSyntax namePrefix) => Update(namePrefix, Name, NameSuffix, EqualsToken, ValuePrefix, Value, ValueSuffix); + public MarkupAttributeBlockSyntax WithName(MarkupTextLiteralSyntax name) => Update(NamePrefix, name, NameSuffix, EqualsToken, ValuePrefix, Value, ValueSuffix); + public MarkupAttributeBlockSyntax WithNameSuffix(MarkupTextLiteralSyntax nameSuffix) => Update(NamePrefix, Name, nameSuffix, EqualsToken, ValuePrefix, Value, ValueSuffix); + public MarkupAttributeBlockSyntax WithEqualsToken(SyntaxToken equalsToken) => Update(NamePrefix, Name, NameSuffix, equalsToken, ValuePrefix, Value, ValueSuffix); + public MarkupAttributeBlockSyntax WithValuePrefix(MarkupTextLiteralSyntax valuePrefix) => Update(NamePrefix, Name, NameSuffix, EqualsToken, valuePrefix, Value, ValueSuffix); + public MarkupAttributeBlockSyntax WithValue(RazorBlockSyntax value) => Update(NamePrefix, Name, NameSuffix, EqualsToken, ValuePrefix, value, ValueSuffix); + public MarkupAttributeBlockSyntax WithValueSuffix(MarkupTextLiteralSyntax valueSuffix) => Update(NamePrefix, Name, NameSuffix, EqualsToken, ValuePrefix, Value, valueSuffix); - public MarkupAttributeBlockSyntax AddNameLiteralTokens(params SyntaxToken[] items) - { - return this.WithName(this.Name.WithLiteralTokens(this.Name.LiteralTokens.AddRange(items))); - } - } + public MarkupAttributeBlockSyntax AddNameLiteralTokens(params SyntaxToken[] items) => WithName(this.Name.WithLiteralTokens(this.Name.LiteralTokens.AddRange(items))); +} - internal sealed partial class MarkupMiscAttributeContentSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupMiscAttributeContentSyntax : MarkupSyntaxNode +{ private SyntaxNode _children; internal MarkupMiscAttributeContentSyntax(GreenNode green, SyntaxNode parent, int position) @@ -1131,40 +606,14 @@ internal MarkupMiscAttributeContentSyntax(GreenNode green, SyntaxNode parent, in { } - public SyntaxList Children - { - get - { - return new SyntaxList(GetRed(ref _children, 0)); - } - } + public SyntaxList Children => new SyntaxList(GetRed(ref _children, 0)); - internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) - { - case 0: return GetRedAtZero(ref _children); - default: return null; - } - } - internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) - { - case 0: return _children; - default: return null; - } - } + internal override SyntaxNode GetNodeSlot(int index) => index == 0 ? GetRedAtZero(ref this._children) : null; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupMiscAttributeContent(this); - } + internal override SyntaxNode GetCachedSlot(int index) => index == 0 ? this._children : null; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupMiscAttributeContent(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupMiscAttributeContent(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupMiscAttributeContent(this); public MarkupMiscAttributeContentSyntax Update(SyntaxList children) { @@ -1173,29 +622,21 @@ public MarkupMiscAttributeContentSyntax Update(SyntaxList child var newNode = SyntaxFactory.MarkupMiscAttributeContent(children); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } - public MarkupMiscAttributeContentSyntax WithChildren(SyntaxList children) - { - return Update(children); - } + public MarkupMiscAttributeContentSyntax WithChildren(SyntaxList children) => Update(children); - public MarkupMiscAttributeContentSyntax AddChildren(params RazorSyntaxNode[] items) - { - return WithChildren(this.Children.AddRange(items)); - } - } + public MarkupMiscAttributeContentSyntax AddChildren(params RazorSyntaxNode[] items) => WithChildren(this.Children.AddRange(items)); +} - internal sealed partial class MarkupLiteralAttributeValueSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupLiteralAttributeValueSyntax : MarkupSyntaxNode +{ private MarkupTextLiteralSyntax _prefix; private MarkupTextLiteralSyntax _value; @@ -1204,50 +645,27 @@ internal MarkupLiteralAttributeValueSyntax(GreenNode green, SyntaxNode parent, i { } - public MarkupTextLiteralSyntax Prefix - { - get - { - return GetRedAtZero(ref _prefix); - } - } - - public MarkupTextLiteralSyntax Value - { - get - { - return GetRed(ref _value, 1); - } - } + public MarkupTextLiteralSyntax Prefix => GetRedAtZero(ref _prefix); + public MarkupTextLiteralSyntax Value => GetRed(ref _value, 1); internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) + => index switch { - case 0: return GetRedAtZero(ref _prefix); - case 1: return GetRed(ref _value, 1); - default: return null; - } - } + 0 => GetRedAtZero(ref _prefix), + 1 => GetRed(ref _value, 1), + _ => null + }; + internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) + => index switch { - case 0: return _prefix; - case 1: return _value; - default: return null; - } - } - - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupLiteralAttributeValue(this); - } + 0 => this._prefix, + 1 => this._value, + _ => null + }; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupLiteralAttributeValue(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupLiteralAttributeValue(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupLiteralAttributeValue(this); public MarkupLiteralAttributeValueSyntax Update(MarkupTextLiteralSyntax prefix, MarkupTextLiteralSyntax value) { @@ -1256,29 +674,20 @@ public MarkupLiteralAttributeValueSyntax Update(MarkupTextLiteralSyntax prefix, var newNode = SyntaxFactory.MarkupLiteralAttributeValue(prefix, value); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } - public MarkupLiteralAttributeValueSyntax WithPrefix(MarkupTextLiteralSyntax prefix) - { - return Update(prefix, Value); - } - - public MarkupLiteralAttributeValueSyntax WithValue(MarkupTextLiteralSyntax value) - { - return Update(Prefix, value); - } - } + public MarkupLiteralAttributeValueSyntax WithPrefix(MarkupTextLiteralSyntax prefix) => Update(prefix, Value); + public MarkupLiteralAttributeValueSyntax WithValue(MarkupTextLiteralSyntax value) => Update(Prefix, value); +} - internal sealed partial class MarkupDynamicAttributeValueSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupDynamicAttributeValueSyntax : MarkupSyntaxNode +{ private MarkupTextLiteralSyntax _prefix; private RazorBlockSyntax _value; @@ -1287,50 +696,27 @@ internal MarkupDynamicAttributeValueSyntax(GreenNode green, SyntaxNode parent, i { } - public MarkupTextLiteralSyntax Prefix - { - get - { - return GetRedAtZero(ref _prefix); - } - } - - public RazorBlockSyntax Value - { - get - { - return GetRed(ref _value, 1); - } - } + public MarkupTextLiteralSyntax Prefix => GetRedAtZero(ref _prefix); + public RazorBlockSyntax Value => GetRed(ref _value, 1); internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) + => index switch { - case 0: return GetRedAtZero(ref _prefix); - case 1: return GetRed(ref _value, 1); - default: return null; - } - } + 0 => GetRedAtZero(ref _prefix), + 1 => GetRed(ref _value, 1), + _ => null + }; + internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) + => index switch { - case 0: return _prefix; - case 1: return _value; - default: return null; - } - } - - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupDynamicAttributeValue(this); - } + 0 => this._prefix, + 1 => this._value, + _ => null + }; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupDynamicAttributeValue(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupDynamicAttributeValue(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupDynamicAttributeValue(this); public MarkupDynamicAttributeValueSyntax Update(MarkupTextLiteralSyntax prefix, RazorBlockSyntax value) { @@ -1339,29 +725,20 @@ public MarkupDynamicAttributeValueSyntax Update(MarkupTextLiteralSyntax prefix, var newNode = SyntaxFactory.MarkupDynamicAttributeValue(prefix, value); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } - public MarkupDynamicAttributeValueSyntax WithPrefix(MarkupTextLiteralSyntax prefix) - { - return Update(prefix, Value); - } - - public MarkupDynamicAttributeValueSyntax WithValue(RazorBlockSyntax value) - { - return Update(Prefix, value); - } - } + public MarkupDynamicAttributeValueSyntax WithPrefix(MarkupTextLiteralSyntax prefix) => Update(prefix, Value); + public MarkupDynamicAttributeValueSyntax WithValue(RazorBlockSyntax value) => Update(Prefix, value); +} - internal sealed partial class MarkupElementSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupElementSyntax : MarkupSyntaxNode +{ private MarkupStartTagSyntax _startTag; private SyntaxNode _body; private MarkupEndTagSyntax _endTag; @@ -1371,101 +748,55 @@ internal MarkupElementSyntax(GreenNode green, SyntaxNode parent, int position) { } - public MarkupStartTagSyntax StartTag - { - get - { - return GetRedAtZero(ref _startTag); - } - } + public MarkupStartTagSyntax StartTag => GetRedAtZero(ref _startTag); + public SyntaxList Body => new SyntaxList(GetRed(ref _body, 1)); + public MarkupEndTagSyntax EndTag => GetRed(ref _endTag, 2); - public SyntaxList Body - { - get + internal override SyntaxNode GetNodeSlot(int index) + => index switch { - return new SyntaxList(GetRed(ref _body, 1)); - } - } + 0 => GetRedAtZero(ref _startTag), + 1 => GetRed(ref _body, 1), + 2 => GetRed(ref _endTag, 2), + _ => null + }; - public MarkupEndTagSyntax EndTag - { - get + internal override SyntaxNode GetCachedSlot(int index) + => index switch { - return GetRed(ref _endTag, 2); - } - } + 0 => this._startTag, + 1 => this._body, + 2 => this._endTag, + _ => null + }; - internal override SyntaxNode GetNodeSlot(int index) + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupElement(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupElement(this); + + public MarkupElementSyntax Update(MarkupStartTagSyntax startTag, SyntaxList body, MarkupEndTagSyntax endTag) { - switch (index) + if (startTag != StartTag || body != Body || endTag != EndTag) { - case 0: return GetRedAtZero(ref _startTag); - case 1: return GetRed(ref _body, 1); - case 2: return GetRed(ref _endTag, 2); - default: return null; + var newNode = SyntaxFactory.MarkupElement(startTag, body, endTag); + var diagnostics = GetDiagnostics(); + if (diagnostics != null && diagnostics.Length > 0) + newNode = newNode.WithDiagnostics(diagnostics); + var annotations = GetAnnotations(); + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } - } - internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) - { - case 0: return _startTag; - case 1: return _body; - case 2: return _endTag; - default: return null; - } - } - - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupElement(this); - } - - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupElement(this); - } - - public MarkupElementSyntax Update(MarkupStartTagSyntax startTag, SyntaxList body, MarkupEndTagSyntax endTag) - { - if (startTag != StartTag || body != Body || endTag != EndTag) - { - var newNode = SyntaxFactory.MarkupElement(startTag, body, endTag); - var diagnostics = GetDiagnostics(); - if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); - var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; - } - - return this; - } - - public MarkupElementSyntax WithStartTag(MarkupStartTagSyntax startTag) - { - return Update(startTag, Body, EndTag); + + return this; } - public MarkupElementSyntax WithBody(SyntaxList body) - { - return Update(StartTag, body, EndTag); - } - - public MarkupElementSyntax WithEndTag(MarkupEndTagSyntax endTag) - { - return Update(StartTag, Body, endTag); - } + public MarkupElementSyntax WithStartTag(MarkupStartTagSyntax startTag) => Update(startTag, Body, EndTag); + public MarkupElementSyntax WithBody(SyntaxList body) => Update(StartTag, body, EndTag); + public MarkupElementSyntax WithEndTag(MarkupEndTagSyntax endTag) => Update(StartTag, Body, endTag); - public MarkupElementSyntax AddBody(params RazorSyntaxNode[] items) - { - return WithBody(this.Body.AddRange(items)); - } - } + public MarkupElementSyntax AddBody(params RazorSyntaxNode[] items) => WithBody(this.Body.AddRange(items)); +} - internal sealed partial class MarkupStartTagSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupStartTagSyntax : MarkupSyntaxNode +{ private SyntaxToken _openAngle; private SyntaxToken _bang; private SyntaxToken _name; @@ -1478,92 +809,40 @@ internal MarkupStartTagSyntax(GreenNode green, SyntaxNode parent, int position) { } - public SyntaxToken OpenAngle - { - get - { - return GetRedAtZero(ref _openAngle); - } - } - - public SyntaxToken Bang - { - get - { - return GetRed(ref _bang, 1); - } - } - - public SyntaxToken Name - { - get - { - return GetRed(ref _name, 2); - } - } - - public SyntaxList Attributes - { - get - { - return new SyntaxList(GetRed(ref _attributes, 3)); - } - } - - public SyntaxToken ForwardSlash - { - get - { - return GetRed(ref _forwardSlash, 4); - } - } - - public SyntaxToken CloseAngle - { - get - { - return GetRed(ref _closeAngle, 5); - } - } - - public ISpanChunkGenerator ChunkGenerator { get { return ((InternalSyntax.MarkupStartTagSyntax)Green).ChunkGenerator; } } + public SyntaxToken OpenAngle => GetRedAtZero(ref _openAngle); + public SyntaxToken Bang => GetRed(ref _bang, 1); + public SyntaxToken Name => GetRed(ref _name, 2); + public SyntaxList Attributes => new SyntaxList(GetRed(ref _attributes, 3)); + public SyntaxToken ForwardSlash => GetRed(ref _forwardSlash, 4); + public SyntaxToken CloseAngle => GetRed(ref _closeAngle, 5); + public ISpanChunkGenerator ChunkGenerator => ((InternalSyntax.MarkupStartTagSyntax)Green).ChunkGenerator; internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) + => index switch { - case 0: return GetRedAtZero(ref _openAngle); - case 1: return GetRed(ref _bang, 1); - case 2: return GetRed(ref _name, 2); - case 3: return GetRed(ref _attributes, 3); - case 4: return GetRed(ref _forwardSlash, 4); - case 5: return GetRed(ref _closeAngle, 5); - default: return null; - } - } + 0 => GetRedAtZero(ref _openAngle), + 1 => GetRed(ref _bang, 1), + 2 => GetRed(ref _name, 2), + 3 => GetRed(ref _attributes, 3), + 4 => GetRed(ref _forwardSlash, 4), + 5 => GetRed(ref _closeAngle, 5), + _ => null + }; + internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) + => index switch { - case 0: return _openAngle; - case 1: return _bang; - case 2: return _name; - case 3: return _attributes; - case 4: return _forwardSlash; - case 5: return _closeAngle; - default: return null; - } - } - - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupStartTag(this); - } + 0 => this._openAngle, + 1 => this._bang, + 2 => this._name, + 3 => this._attributes, + 4 => this._forwardSlash, + 5 => this._closeAngle, + _ => null + }; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupStartTag(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupStartTag(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupStartTag(this); public MarkupStartTagSyntax Update(SyntaxToken openAngle, SyntaxToken bang, SyntaxToken name, SyntaxList attributes, SyntaxToken forwardSlash, SyntaxToken closeAngle, ISpanChunkGenerator chunkGenerator) { @@ -1572,59 +851,27 @@ public MarkupStartTagSyntax Update(SyntaxToken openAngle, SyntaxToken bang, Synt var newNode = SyntaxFactory.MarkupStartTag(openAngle, bang, name, attributes, forwardSlash, closeAngle, chunkGenerator); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } - public MarkupStartTagSyntax WithOpenAngle(SyntaxToken openAngle) - { - return Update(openAngle, Bang, Name, Attributes, ForwardSlash, CloseAngle, ChunkGenerator); - } - - public MarkupStartTagSyntax WithBang(SyntaxToken bang) - { - return Update(OpenAngle, bang, Name, Attributes, ForwardSlash, CloseAngle, ChunkGenerator); - } - - public MarkupStartTagSyntax WithName(SyntaxToken name) - { - return Update(OpenAngle, Bang, name, Attributes, ForwardSlash, CloseAngle, ChunkGenerator); - } - - public MarkupStartTagSyntax WithAttributes(SyntaxList attributes) - { - return Update(OpenAngle, Bang, Name, attributes, ForwardSlash, CloseAngle, ChunkGenerator); - } - - public MarkupStartTagSyntax WithForwardSlash(SyntaxToken forwardSlash) - { - return Update(OpenAngle, Bang, Name, Attributes, forwardSlash, CloseAngle, ChunkGenerator); - } - - public MarkupStartTagSyntax WithCloseAngle(SyntaxToken closeAngle) - { - return Update(OpenAngle, Bang, Name, Attributes, ForwardSlash, closeAngle, ChunkGenerator); - } - - public MarkupStartTagSyntax WithChunkGenerator(ISpanChunkGenerator chunkGenerator) - { - return Update(OpenAngle, Bang, Name, Attributes, ForwardSlash, CloseAngle, chunkGenerator); - } + public MarkupStartTagSyntax WithOpenAngle(SyntaxToken openAngle) => Update(openAngle, Bang, Name, Attributes, ForwardSlash, CloseAngle, ChunkGenerator); + public MarkupStartTagSyntax WithBang(SyntaxToken bang) => Update(OpenAngle, bang, Name, Attributes, ForwardSlash, CloseAngle, ChunkGenerator); + public MarkupStartTagSyntax WithName(SyntaxToken name) => Update(OpenAngle, Bang, name, Attributes, ForwardSlash, CloseAngle, ChunkGenerator); + public MarkupStartTagSyntax WithAttributes(SyntaxList attributes) => Update(OpenAngle, Bang, Name, attributes, ForwardSlash, CloseAngle, ChunkGenerator); + public MarkupStartTagSyntax WithForwardSlash(SyntaxToken forwardSlash) => Update(OpenAngle, Bang, Name, Attributes, forwardSlash, CloseAngle, ChunkGenerator); + public MarkupStartTagSyntax WithCloseAngle(SyntaxToken closeAngle) => Update(OpenAngle, Bang, Name, Attributes, ForwardSlash, closeAngle, ChunkGenerator); + public MarkupStartTagSyntax WithChunkGenerator(ISpanChunkGenerator chunkGenerator) => Update(OpenAngle, Bang, Name, Attributes, ForwardSlash, CloseAngle, chunkGenerator); - public MarkupStartTagSyntax AddAttributes(params RazorSyntaxNode[] items) - { - return WithAttributes(this.Attributes.AddRange(items)); - } - } + public MarkupStartTagSyntax AddAttributes(params RazorSyntaxNode[] items) => WithAttributes(this.Attributes.AddRange(items)); +} - internal sealed partial class MarkupEndTagSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupEndTagSyntax : MarkupSyntaxNode +{ private SyntaxToken _openAngle; private SyntaxToken _forwardSlash; private SyntaxToken _bang; @@ -1637,92 +884,40 @@ internal MarkupEndTagSyntax(GreenNode green, SyntaxNode parent, int position) { } - public SyntaxToken OpenAngle - { - get - { - return GetRedAtZero(ref _openAngle); - } - } - - public SyntaxToken ForwardSlash - { - get - { - return GetRed(ref _forwardSlash, 1); - } - } - - public SyntaxToken Bang - { - get - { - return GetRed(ref _bang, 2); - } - } - - public SyntaxToken Name - { - get - { - return GetRed(ref _name, 3); - } - } - - public MarkupMiscAttributeContentSyntax MiscAttributeContent - { - get - { - return GetRed(ref _miscAttributeContent, 4); - } - } - - public SyntaxToken CloseAngle - { - get - { - return GetRed(ref _closeAngle, 5); - } - } - - public ISpanChunkGenerator ChunkGenerator { get { return ((InternalSyntax.MarkupEndTagSyntax)Green).ChunkGenerator; } } + public SyntaxToken OpenAngle => GetRedAtZero(ref _openAngle); + public SyntaxToken ForwardSlash => GetRed(ref _forwardSlash, 1); + public SyntaxToken Bang => GetRed(ref _bang, 2); + public SyntaxToken Name => GetRed(ref _name, 3); + public MarkupMiscAttributeContentSyntax MiscAttributeContent => GetRed(ref _miscAttributeContent, 4); + public SyntaxToken CloseAngle => GetRed(ref _closeAngle, 5); + public ISpanChunkGenerator ChunkGenerator => ((InternalSyntax.MarkupEndTagSyntax)Green).ChunkGenerator; internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) + => index switch { - case 0: return GetRedAtZero(ref _openAngle); - case 1: return GetRed(ref _forwardSlash, 1); - case 2: return GetRed(ref _bang, 2); - case 3: return GetRed(ref _name, 3); - case 4: return GetRed(ref _miscAttributeContent, 4); - case 5: return GetRed(ref _closeAngle, 5); - default: return null; - } - } + 0 => GetRedAtZero(ref _openAngle), + 1 => GetRed(ref _forwardSlash, 1), + 2 => GetRed(ref _bang, 2), + 3 => GetRed(ref _name, 3), + 4 => GetRed(ref _miscAttributeContent, 4), + 5 => GetRed(ref _closeAngle, 5), + _ => null + }; + internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) + => index switch { - case 0: return _openAngle; - case 1: return _forwardSlash; - case 2: return _bang; - case 3: return _name; - case 4: return _miscAttributeContent; - case 5: return _closeAngle; - default: return null; - } - } + 0 => this._openAngle, + 1 => this._forwardSlash, + 2 => this._bang, + 3 => this._name, + 4 => this._miscAttributeContent, + 5 => this._closeAngle, + _ => null + }; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupEndTag(this); - } - - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupEndTag(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupEndTag(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupEndTag(this); public MarkupEndTagSyntax Update(SyntaxToken openAngle, SyntaxToken forwardSlash, SyntaxToken bang, SyntaxToken name, MarkupMiscAttributeContentSyntax miscAttributeContent, SyntaxToken closeAngle, ISpanChunkGenerator chunkGenerator) { @@ -1731,60 +926,31 @@ public MarkupEndTagSyntax Update(SyntaxToken openAngle, SyntaxToken forwardSlash var newNode = SyntaxFactory.MarkupEndTag(openAngle, forwardSlash, bang, name, miscAttributeContent, closeAngle, chunkGenerator); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } - public MarkupEndTagSyntax WithOpenAngle(SyntaxToken openAngle) - { - return Update(openAngle, ForwardSlash, Bang, Name, MiscAttributeContent, CloseAngle, ChunkGenerator); - } - - public MarkupEndTagSyntax WithForwardSlash(SyntaxToken forwardSlash) - { - return Update(OpenAngle, forwardSlash, Bang, Name, MiscAttributeContent, CloseAngle, ChunkGenerator); - } - - public MarkupEndTagSyntax WithBang(SyntaxToken bang) - { - return Update(OpenAngle, ForwardSlash, bang, Name, MiscAttributeContent, CloseAngle, ChunkGenerator); - } - - public MarkupEndTagSyntax WithName(SyntaxToken name) - { - return Update(OpenAngle, ForwardSlash, Bang, name, MiscAttributeContent, CloseAngle, ChunkGenerator); - } - - public MarkupEndTagSyntax WithMiscAttributeContent(MarkupMiscAttributeContentSyntax miscAttributeContent) - { - return Update(OpenAngle, ForwardSlash, Bang, Name, miscAttributeContent, CloseAngle, ChunkGenerator); - } - - public MarkupEndTagSyntax WithCloseAngle(SyntaxToken closeAngle) - { - return Update(OpenAngle, ForwardSlash, Bang, Name, MiscAttributeContent, closeAngle, ChunkGenerator); - } - - public MarkupEndTagSyntax WithChunkGenerator(ISpanChunkGenerator chunkGenerator) - { - return Update(OpenAngle, ForwardSlash, Bang, Name, MiscAttributeContent, CloseAngle, chunkGenerator); - } + public MarkupEndTagSyntax WithOpenAngle(SyntaxToken openAngle) => Update(openAngle, ForwardSlash, Bang, Name, MiscAttributeContent, CloseAngle, ChunkGenerator); + public MarkupEndTagSyntax WithForwardSlash(SyntaxToken forwardSlash) => Update(OpenAngle, forwardSlash, Bang, Name, MiscAttributeContent, CloseAngle, ChunkGenerator); + public MarkupEndTagSyntax WithBang(SyntaxToken bang) => Update(OpenAngle, ForwardSlash, bang, Name, MiscAttributeContent, CloseAngle, ChunkGenerator); + public MarkupEndTagSyntax WithName(SyntaxToken name) => Update(OpenAngle, ForwardSlash, Bang, name, MiscAttributeContent, CloseAngle, ChunkGenerator); + public MarkupEndTagSyntax WithMiscAttributeContent(MarkupMiscAttributeContentSyntax miscAttributeContent) => Update(OpenAngle, ForwardSlash, Bang, Name, miscAttributeContent, CloseAngle, ChunkGenerator); + public MarkupEndTagSyntax WithCloseAngle(SyntaxToken closeAngle) => Update(OpenAngle, ForwardSlash, Bang, Name, MiscAttributeContent, closeAngle, ChunkGenerator); + public MarkupEndTagSyntax WithChunkGenerator(ISpanChunkGenerator chunkGenerator) => Update(OpenAngle, ForwardSlash, Bang, Name, MiscAttributeContent, CloseAngle, chunkGenerator); public MarkupEndTagSyntax AddMiscAttributeContentChildren(params RazorSyntaxNode[] items) { var _miscAttributeContent = this.MiscAttributeContent ?? SyntaxFactory.MarkupMiscAttributeContent(); return this.WithMiscAttributeContent(_miscAttributeContent.WithChildren(_miscAttributeContent.Children.AddRange(items))); } - } +} - internal sealed partial class MarkupTagHelperElementSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupTagHelperElementSyntax : MarkupSyntaxNode +{ private MarkupTagHelperStartTagSyntax _startTag; private SyntaxNode _body; private MarkupTagHelperEndTagSyntax _endTag; @@ -1794,60 +960,30 @@ internal MarkupTagHelperElementSyntax(GreenNode green, SyntaxNode parent, int po { } - public MarkupTagHelperStartTagSyntax StartTag - { - get - { - return GetRedAtZero(ref _startTag); - } - } - - public SyntaxList Body - { - get - { - return new SyntaxList(GetRed(ref _body, 1)); - } - } - - public MarkupTagHelperEndTagSyntax EndTag - { - get - { - return GetRed(ref _endTag, 2); - } - } + public MarkupTagHelperStartTagSyntax StartTag => GetRedAtZero(ref _startTag); + public SyntaxList Body => new SyntaxList(GetRed(ref _body, 1)); + public MarkupTagHelperEndTagSyntax EndTag => GetRed(ref _endTag, 2); internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) + => index switch { - case 0: return GetRedAtZero(ref _startTag); - case 1: return GetRed(ref _body, 1); - case 2: return GetRed(ref _endTag, 2); - default: return null; - } - } + 0 => GetRedAtZero(ref _startTag), + 1 => GetRed(ref _body, 1), + 2 => GetRed(ref _endTag, 2), + _ => null + }; + internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) + => index switch { - case 0: return _startTag; - case 1: return _body; - case 2: return _endTag; - default: return null; - } - } + 0 => this._startTag, + 1 => this._body, + 2 => this._endTag, + _ => null + }; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupTagHelperElement(this); - } - - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupTagHelperElement(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTagHelperElement(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTagHelperElement(this); public MarkupTagHelperElementSyntax Update(MarkupTagHelperStartTagSyntax startTag, SyntaxList body, MarkupTagHelperEndTagSyntax endTag) { @@ -1856,44 +992,25 @@ public MarkupTagHelperElementSyntax Update(MarkupTagHelperStartTagSyntax startTa var newNode = SyntaxFactory.MarkupTagHelperElement(startTag, body, endTag); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } - public MarkupTagHelperElementSyntax WithStartTag(MarkupTagHelperStartTagSyntax startTag) - { - return Update(startTag, Body, EndTag); - } - - public MarkupTagHelperElementSyntax WithBody(SyntaxList body) - { - return Update(StartTag, body, EndTag); - } - - public MarkupTagHelperElementSyntax WithEndTag(MarkupTagHelperEndTagSyntax endTag) - { - return Update(StartTag, Body, endTag); - } + public MarkupTagHelperElementSyntax WithStartTag(MarkupTagHelperStartTagSyntax startTag) => Update(startTag, Body, EndTag); + public MarkupTagHelperElementSyntax WithBody(SyntaxList body) => Update(StartTag, body, EndTag); + public MarkupTagHelperElementSyntax WithEndTag(MarkupTagHelperEndTagSyntax endTag) => Update(StartTag, Body, endTag); - public MarkupTagHelperElementSyntax AddStartTagAttributes(params RazorSyntaxNode[] items) - { - return this.WithStartTag(this.StartTag.WithAttributes(this.StartTag.Attributes.AddRange(items))); - } + public MarkupTagHelperElementSyntax AddStartTagAttributes(params RazorSyntaxNode[] items) => WithStartTag(this.StartTag.WithAttributes(this.StartTag.Attributes.AddRange(items))); - public MarkupTagHelperElementSyntax AddBody(params RazorSyntaxNode[] items) - { - return WithBody(this.Body.AddRange(items)); - } - } + public MarkupTagHelperElementSyntax AddBody(params RazorSyntaxNode[] items) => WithBody(this.Body.AddRange(items)); +} - internal sealed partial class MarkupTagHelperStartTagSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupTagHelperStartTagSyntax : MarkupSyntaxNode +{ private SyntaxToken _openAngle; private SyntaxToken _bang; private SyntaxToken _name; @@ -1906,92 +1023,40 @@ internal MarkupTagHelperStartTagSyntax(GreenNode green, SyntaxNode parent, int p { } - public SyntaxToken OpenAngle - { - get - { - return GetRedAtZero(ref _openAngle); - } - } - - public SyntaxToken Bang - { - get - { - return GetRed(ref _bang, 1); - } - } - - public SyntaxToken Name - { - get - { - return GetRed(ref _name, 2); - } - } - - public SyntaxList Attributes - { - get - { - return new SyntaxList(GetRed(ref _attributes, 3)); - } - } - - public SyntaxToken ForwardSlash - { - get - { - return GetRed(ref _forwardSlash, 4); - } - } - - public SyntaxToken CloseAngle - { - get - { - return GetRed(ref _closeAngle, 5); - } - } - - public ISpanChunkGenerator ChunkGenerator { get { return ((InternalSyntax.MarkupTagHelperStartTagSyntax)Green).ChunkGenerator; } } + public SyntaxToken OpenAngle => GetRedAtZero(ref _openAngle); + public SyntaxToken Bang => GetRed(ref _bang, 1); + public SyntaxToken Name => GetRed(ref _name, 2); + public SyntaxList Attributes => new SyntaxList(GetRed(ref _attributes, 3)); + public SyntaxToken ForwardSlash => GetRed(ref _forwardSlash, 4); + public SyntaxToken CloseAngle => GetRed(ref _closeAngle, 5); + public ISpanChunkGenerator ChunkGenerator => ((InternalSyntax.MarkupTagHelperStartTagSyntax)Green).ChunkGenerator; internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) + => index switch { - case 0: return GetRedAtZero(ref _openAngle); - case 1: return GetRed(ref _bang, 1); - case 2: return GetRed(ref _name, 2); - case 3: return GetRed(ref _attributes, 3); - case 4: return GetRed(ref _forwardSlash, 4); - case 5: return GetRed(ref _closeAngle, 5); - default: return null; - } - } + 0 => GetRedAtZero(ref _openAngle), + 1 => GetRed(ref _bang, 1), + 2 => GetRed(ref _name, 2), + 3 => GetRed(ref _attributes, 3), + 4 => GetRed(ref _forwardSlash, 4), + 5 => GetRed(ref _closeAngle, 5), + _ => null + }; + internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) + => index switch { - case 0: return _openAngle; - case 1: return _bang; - case 2: return _name; - case 3: return _attributes; - case 4: return _forwardSlash; - case 5: return _closeAngle; - default: return null; - } - } + 0 => this._openAngle, + 1 => this._bang, + 2 => this._name, + 3 => this._attributes, + 4 => this._forwardSlash, + 5 => this._closeAngle, + _ => null + }; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupTagHelperStartTag(this); - } - - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupTagHelperStartTag(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTagHelperStartTag(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTagHelperStartTag(this); public MarkupTagHelperStartTagSyntax Update(SyntaxToken openAngle, SyntaxToken bang, SyntaxToken name, SyntaxList attributes, SyntaxToken forwardSlash, SyntaxToken closeAngle, ISpanChunkGenerator chunkGenerator) { @@ -2000,59 +1065,27 @@ public MarkupTagHelperStartTagSyntax Update(SyntaxToken openAngle, SyntaxToken b var newNode = SyntaxFactory.MarkupTagHelperStartTag(openAngle, bang, name, attributes, forwardSlash, closeAngle, chunkGenerator); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } - public MarkupTagHelperStartTagSyntax WithOpenAngle(SyntaxToken openAngle) - { - return Update(openAngle, Bang, Name, Attributes, ForwardSlash, CloseAngle, ChunkGenerator); - } - - public MarkupTagHelperStartTagSyntax WithBang(SyntaxToken bang) - { - return Update(OpenAngle, bang, Name, Attributes, ForwardSlash, CloseAngle, ChunkGenerator); - } - - public MarkupTagHelperStartTagSyntax WithName(SyntaxToken name) - { - return Update(OpenAngle, Bang, name, Attributes, ForwardSlash, CloseAngle, ChunkGenerator); - } + public MarkupTagHelperStartTagSyntax WithOpenAngle(SyntaxToken openAngle) => Update(openAngle, Bang, Name, Attributes, ForwardSlash, CloseAngle, ChunkGenerator); + public MarkupTagHelperStartTagSyntax WithBang(SyntaxToken bang) => Update(OpenAngle, bang, Name, Attributes, ForwardSlash, CloseAngle, ChunkGenerator); + public MarkupTagHelperStartTagSyntax WithName(SyntaxToken name) => Update(OpenAngle, Bang, name, Attributes, ForwardSlash, CloseAngle, ChunkGenerator); + public MarkupTagHelperStartTagSyntax WithAttributes(SyntaxList attributes) => Update(OpenAngle, Bang, Name, attributes, ForwardSlash, CloseAngle, ChunkGenerator); + public MarkupTagHelperStartTagSyntax WithForwardSlash(SyntaxToken forwardSlash) => Update(OpenAngle, Bang, Name, Attributes, forwardSlash, CloseAngle, ChunkGenerator); + public MarkupTagHelperStartTagSyntax WithCloseAngle(SyntaxToken closeAngle) => Update(OpenAngle, Bang, Name, Attributes, ForwardSlash, closeAngle, ChunkGenerator); + public MarkupTagHelperStartTagSyntax WithChunkGenerator(ISpanChunkGenerator chunkGenerator) => Update(OpenAngle, Bang, Name, Attributes, ForwardSlash, CloseAngle, chunkGenerator); - public MarkupTagHelperStartTagSyntax WithAttributes(SyntaxList attributes) - { - return Update(OpenAngle, Bang, Name, attributes, ForwardSlash, CloseAngle, ChunkGenerator); - } + public MarkupTagHelperStartTagSyntax AddAttributes(params RazorSyntaxNode[] items) => WithAttributes(this.Attributes.AddRange(items)); +} - public MarkupTagHelperStartTagSyntax WithForwardSlash(SyntaxToken forwardSlash) - { - return Update(OpenAngle, Bang, Name, Attributes, forwardSlash, CloseAngle, ChunkGenerator); - } - - public MarkupTagHelperStartTagSyntax WithCloseAngle(SyntaxToken closeAngle) - { - return Update(OpenAngle, Bang, Name, Attributes, ForwardSlash, closeAngle, ChunkGenerator); - } - - public MarkupTagHelperStartTagSyntax WithChunkGenerator(ISpanChunkGenerator chunkGenerator) - { - return Update(OpenAngle, Bang, Name, Attributes, ForwardSlash, CloseAngle, chunkGenerator); - } - - public MarkupTagHelperStartTagSyntax AddAttributes(params RazorSyntaxNode[] items) - { - return WithAttributes(this.Attributes.AddRange(items)); - } - } - - internal sealed partial class MarkupTagHelperEndTagSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupTagHelperEndTagSyntax : MarkupSyntaxNode +{ private SyntaxToken _openAngle; private SyntaxToken _forwardSlash; private SyntaxToken _bang; @@ -2065,92 +1098,40 @@ internal MarkupTagHelperEndTagSyntax(GreenNode green, SyntaxNode parent, int pos { } - public SyntaxToken OpenAngle - { - get - { - return GetRedAtZero(ref _openAngle); - } - } - - public SyntaxToken ForwardSlash - { - get - { - return GetRed(ref _forwardSlash, 1); - } - } - - public SyntaxToken Bang - { - get - { - return GetRed(ref _bang, 2); - } - } - - public SyntaxToken Name - { - get - { - return GetRed(ref _name, 3); - } - } - - public MarkupMiscAttributeContentSyntax MiscAttributeContent - { - get - { - return GetRed(ref _miscAttributeContent, 4); - } - } - - public SyntaxToken CloseAngle - { - get - { - return GetRed(ref _closeAngle, 5); - } - } - - public ISpanChunkGenerator ChunkGenerator { get { return ((InternalSyntax.MarkupTagHelperEndTagSyntax)Green).ChunkGenerator; } } + public SyntaxToken OpenAngle => GetRedAtZero(ref _openAngle); + public SyntaxToken ForwardSlash => GetRed(ref _forwardSlash, 1); + public SyntaxToken Bang => GetRed(ref _bang, 2); + public SyntaxToken Name => GetRed(ref _name, 3); + public MarkupMiscAttributeContentSyntax MiscAttributeContent => GetRed(ref _miscAttributeContent, 4); + public SyntaxToken CloseAngle => GetRed(ref _closeAngle, 5); + public ISpanChunkGenerator ChunkGenerator => ((InternalSyntax.MarkupTagHelperEndTagSyntax)Green).ChunkGenerator; internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) + => index switch { - case 0: return GetRedAtZero(ref _openAngle); - case 1: return GetRed(ref _forwardSlash, 1); - case 2: return GetRed(ref _bang, 2); - case 3: return GetRed(ref _name, 3); - case 4: return GetRed(ref _miscAttributeContent, 4); - case 5: return GetRed(ref _closeAngle, 5); - default: return null; - } - } + 0 => GetRedAtZero(ref _openAngle), + 1 => GetRed(ref _forwardSlash, 1), + 2 => GetRed(ref _bang, 2), + 3 => GetRed(ref _name, 3), + 4 => GetRed(ref _miscAttributeContent, 4), + 5 => GetRed(ref _closeAngle, 5), + _ => null + }; + internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) + => index switch { - case 0: return _openAngle; - case 1: return _forwardSlash; - case 2: return _bang; - case 3: return _name; - case 4: return _miscAttributeContent; - case 5: return _closeAngle; - default: return null; - } - } - - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupTagHelperEndTag(this); - } + 0 => this._openAngle, + 1 => this._forwardSlash, + 2 => this._bang, + 3 => this._name, + 4 => this._miscAttributeContent, + 5 => this._closeAngle, + _ => null + }; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupTagHelperEndTag(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTagHelperEndTag(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTagHelperEndTag(this); public MarkupTagHelperEndTagSyntax Update(SyntaxToken openAngle, SyntaxToken forwardSlash, SyntaxToken bang, SyntaxToken name, MarkupMiscAttributeContentSyntax miscAttributeContent, SyntaxToken closeAngle, ISpanChunkGenerator chunkGenerator) { @@ -2159,60 +1140,31 @@ public MarkupTagHelperEndTagSyntax Update(SyntaxToken openAngle, SyntaxToken for var newNode = SyntaxFactory.MarkupTagHelperEndTag(openAngle, forwardSlash, bang, name, miscAttributeContent, closeAngle, chunkGenerator); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } - public MarkupTagHelperEndTagSyntax WithOpenAngle(SyntaxToken openAngle) - { - return Update(openAngle, ForwardSlash, Bang, Name, MiscAttributeContent, CloseAngle, ChunkGenerator); - } - - public MarkupTagHelperEndTagSyntax WithForwardSlash(SyntaxToken forwardSlash) - { - return Update(OpenAngle, forwardSlash, Bang, Name, MiscAttributeContent, CloseAngle, ChunkGenerator); - } - - public MarkupTagHelperEndTagSyntax WithBang(SyntaxToken bang) - { - return Update(OpenAngle, ForwardSlash, bang, Name, MiscAttributeContent, CloseAngle, ChunkGenerator); - } - - public MarkupTagHelperEndTagSyntax WithName(SyntaxToken name) - { - return Update(OpenAngle, ForwardSlash, Bang, name, MiscAttributeContent, CloseAngle, ChunkGenerator); - } - - public MarkupTagHelperEndTagSyntax WithMiscAttributeContent(MarkupMiscAttributeContentSyntax miscAttributeContent) - { - return Update(OpenAngle, ForwardSlash, Bang, Name, miscAttributeContent, CloseAngle, ChunkGenerator); - } - - public MarkupTagHelperEndTagSyntax WithCloseAngle(SyntaxToken closeAngle) - { - return Update(OpenAngle, ForwardSlash, Bang, Name, MiscAttributeContent, closeAngle, ChunkGenerator); - } - - public MarkupTagHelperEndTagSyntax WithChunkGenerator(ISpanChunkGenerator chunkGenerator) - { - return Update(OpenAngle, ForwardSlash, Bang, Name, MiscAttributeContent, CloseAngle, chunkGenerator); - } + public MarkupTagHelperEndTagSyntax WithOpenAngle(SyntaxToken openAngle) => Update(openAngle, ForwardSlash, Bang, Name, MiscAttributeContent, CloseAngle, ChunkGenerator); + public MarkupTagHelperEndTagSyntax WithForwardSlash(SyntaxToken forwardSlash) => Update(OpenAngle, forwardSlash, Bang, Name, MiscAttributeContent, CloseAngle, ChunkGenerator); + public MarkupTagHelperEndTagSyntax WithBang(SyntaxToken bang) => Update(OpenAngle, ForwardSlash, bang, Name, MiscAttributeContent, CloseAngle, ChunkGenerator); + public MarkupTagHelperEndTagSyntax WithName(SyntaxToken name) => Update(OpenAngle, ForwardSlash, Bang, name, MiscAttributeContent, CloseAngle, ChunkGenerator); + public MarkupTagHelperEndTagSyntax WithMiscAttributeContent(MarkupMiscAttributeContentSyntax miscAttributeContent) => Update(OpenAngle, ForwardSlash, Bang, Name, miscAttributeContent, CloseAngle, ChunkGenerator); + public MarkupTagHelperEndTagSyntax WithCloseAngle(SyntaxToken closeAngle) => Update(OpenAngle, ForwardSlash, Bang, Name, MiscAttributeContent, closeAngle, ChunkGenerator); + public MarkupTagHelperEndTagSyntax WithChunkGenerator(ISpanChunkGenerator chunkGenerator) => Update(OpenAngle, ForwardSlash, Bang, Name, MiscAttributeContent, CloseAngle, chunkGenerator); public MarkupTagHelperEndTagSyntax AddMiscAttributeContentChildren(params RazorSyntaxNode[] items) { var _miscAttributeContent = this.MiscAttributeContent ?? SyntaxFactory.MarkupMiscAttributeContent(); return this.WithMiscAttributeContent(_miscAttributeContent.WithChildren(_miscAttributeContent.Children.AddRange(items))); } - } +} - internal sealed partial class MarkupTagHelperAttributeSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupTagHelperAttributeSyntax : MarkupSyntaxNode +{ private MarkupTextLiteralSyntax _namePrefix; private MarkupTextLiteralSyntax _name; private MarkupTextLiteralSyntax _nameSuffix; @@ -2226,100 +1178,42 @@ internal MarkupTagHelperAttributeSyntax(GreenNode green, SyntaxNode parent, int { } - public MarkupTextLiteralSyntax NamePrefix - { - get - { - return GetRedAtZero(ref _namePrefix); - } - } - - public MarkupTextLiteralSyntax Name - { - get - { - return GetRed(ref _name, 1); - } - } - - public MarkupTextLiteralSyntax NameSuffix - { - get - { - return GetRed(ref _nameSuffix, 2); - } - } - - public SyntaxToken EqualsToken - { - get - { - return GetRed(ref _equalsToken, 3); - } - } - - public MarkupTextLiteralSyntax ValuePrefix - { - get - { - return GetRed(ref _valuePrefix, 4); - } - } - - public MarkupTagHelperAttributeValueSyntax Value - { - get - { - return GetRed(ref _value, 5); - } - } - - public MarkupTextLiteralSyntax ValueSuffix - { - get - { - return GetRed(ref _valueSuffix, 6); - } - } + public MarkupTextLiteralSyntax NamePrefix => GetRedAtZero(ref _namePrefix); + public MarkupTextLiteralSyntax Name => GetRed(ref _name, 1); + public MarkupTextLiteralSyntax NameSuffix => GetRed(ref _nameSuffix, 2); + public SyntaxToken EqualsToken => GetRed(ref _equalsToken, 3); + public MarkupTextLiteralSyntax ValuePrefix => GetRed(ref _valuePrefix, 4); + public MarkupTagHelperAttributeValueSyntax Value => GetRed(ref _value, 5); + public MarkupTextLiteralSyntax ValueSuffix => GetRed(ref _valueSuffix, 6); internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) - { - case 0: return GetRedAtZero(ref _namePrefix); - case 1: return GetRed(ref _name, 1); - case 2: return GetRed(ref _nameSuffix, 2); - case 3: return GetRed(ref _equalsToken, 3); - case 4: return GetRed(ref _valuePrefix, 4); - case 5: return GetRed(ref _value, 5); - case 6: return GetRed(ref _valueSuffix, 6); - default: return null; - } - } + => index switch + { + 0 => GetRedAtZero(ref _namePrefix), + 1 => GetRed(ref _name, 1), + 2 => GetRed(ref _nameSuffix, 2), + 3 => GetRed(ref _equalsToken, 3), + 4 => GetRed(ref _valuePrefix, 4), + 5 => GetRed(ref _value, 5), + 6 => GetRed(ref _valueSuffix, 6), + _ => null + }; + internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) + => index switch { - case 0: return _namePrefix; - case 1: return _name; - case 2: return _nameSuffix; - case 3: return _equalsToken; - case 4: return _valuePrefix; - case 5: return _value; - case 6: return _valueSuffix; - default: return null; - } - } - - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupTagHelperAttribute(this); - } + 0 => this._namePrefix, + 1 => this._name, + 2 => this._nameSuffix, + 3 => this._equalsToken, + 4 => this._valuePrefix, + 5 => this._value, + 6 => this._valueSuffix, + _ => null + }; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupTagHelperAttribute(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTagHelperAttribute(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTagHelperAttribute(this); public MarkupTagHelperAttributeSyntax Update(MarkupTextLiteralSyntax namePrefix, MarkupTextLiteralSyntax name, MarkupTextLiteralSyntax nameSuffix, SyntaxToken equalsToken, MarkupTextLiteralSyntax valuePrefix, MarkupTagHelperAttributeValueSyntax value, MarkupTextLiteralSyntax valueSuffix) { @@ -2328,64 +1222,29 @@ public MarkupTagHelperAttributeSyntax Update(MarkupTextLiteralSyntax namePrefix, var newNode = SyntaxFactory.MarkupTagHelperAttribute(namePrefix, name, nameSuffix, equalsToken, valuePrefix, value, valueSuffix); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } - public MarkupTagHelperAttributeSyntax WithNamePrefix(MarkupTextLiteralSyntax namePrefix) - { - return Update(namePrefix, Name, NameSuffix, EqualsToken, ValuePrefix, Value, ValueSuffix); - } - - public MarkupTagHelperAttributeSyntax WithName(MarkupTextLiteralSyntax name) - { - return Update(NamePrefix, name, NameSuffix, EqualsToken, ValuePrefix, Value, ValueSuffix); - } + public MarkupTagHelperAttributeSyntax WithNamePrefix(MarkupTextLiteralSyntax namePrefix) => Update(namePrefix, Name, NameSuffix, EqualsToken, ValuePrefix, Value, ValueSuffix); + public MarkupTagHelperAttributeSyntax WithName(MarkupTextLiteralSyntax name) => Update(NamePrefix, name, NameSuffix, EqualsToken, ValuePrefix, Value, ValueSuffix); + public MarkupTagHelperAttributeSyntax WithNameSuffix(MarkupTextLiteralSyntax nameSuffix) => Update(NamePrefix, Name, nameSuffix, EqualsToken, ValuePrefix, Value, ValueSuffix); + public MarkupTagHelperAttributeSyntax WithEqualsToken(SyntaxToken equalsToken) => Update(NamePrefix, Name, NameSuffix, equalsToken, ValuePrefix, Value, ValueSuffix); + public MarkupTagHelperAttributeSyntax WithValuePrefix(MarkupTextLiteralSyntax valuePrefix) => Update(NamePrefix, Name, NameSuffix, EqualsToken, valuePrefix, Value, ValueSuffix); + public MarkupTagHelperAttributeSyntax WithValue(MarkupTagHelperAttributeValueSyntax value) => Update(NamePrefix, Name, NameSuffix, EqualsToken, ValuePrefix, value, ValueSuffix); + public MarkupTagHelperAttributeSyntax WithValueSuffix(MarkupTextLiteralSyntax valueSuffix) => Update(NamePrefix, Name, NameSuffix, EqualsToken, ValuePrefix, Value, valueSuffix); - public MarkupTagHelperAttributeSyntax WithNameSuffix(MarkupTextLiteralSyntax nameSuffix) - { - return Update(NamePrefix, Name, nameSuffix, EqualsToken, ValuePrefix, Value, ValueSuffix); - } - - public MarkupTagHelperAttributeSyntax WithEqualsToken(SyntaxToken equalsToken) - { - return Update(NamePrefix, Name, NameSuffix, equalsToken, ValuePrefix, Value, ValueSuffix); - } - - public MarkupTagHelperAttributeSyntax WithValuePrefix(MarkupTextLiteralSyntax valuePrefix) - { - return Update(NamePrefix, Name, NameSuffix, EqualsToken, valuePrefix, Value, ValueSuffix); - } + public MarkupTagHelperAttributeSyntax AddNameLiteralTokens(params SyntaxToken[] items) => WithName(this.Name.WithLiteralTokens(this.Name.LiteralTokens.AddRange(items))); - public MarkupTagHelperAttributeSyntax WithValue(MarkupTagHelperAttributeValueSyntax value) - { - return Update(NamePrefix, Name, NameSuffix, EqualsToken, ValuePrefix, value, ValueSuffix); - } - - public MarkupTagHelperAttributeSyntax WithValueSuffix(MarkupTextLiteralSyntax valueSuffix) - { - return Update(NamePrefix, Name, NameSuffix, EqualsToken, ValuePrefix, Value, valueSuffix); - } - - public MarkupTagHelperAttributeSyntax AddNameLiteralTokens(params SyntaxToken[] items) - { - return this.WithName(this.Name.WithLiteralTokens(this.Name.LiteralTokens.AddRange(items))); - } - - public MarkupTagHelperAttributeSyntax AddValueChildren(params RazorSyntaxNode[] items) - { - return this.WithValue(this.Value.WithChildren(this.Value.Children.AddRange(items))); - } - } + public MarkupTagHelperAttributeSyntax AddValueChildren(params RazorSyntaxNode[] items) => WithValue(this.Value.WithChildren(this.Value.Children.AddRange(items))); +} - internal sealed partial class MarkupMinimizedTagHelperAttributeSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupMinimizedTagHelperAttributeSyntax : MarkupSyntaxNode +{ private MarkupTextLiteralSyntax _namePrefix; private MarkupTextLiteralSyntax _name; @@ -2394,50 +1253,27 @@ internal MarkupMinimizedTagHelperAttributeSyntax(GreenNode green, SyntaxNode par { } - public MarkupTextLiteralSyntax NamePrefix - { - get - { - return GetRedAtZero(ref _namePrefix); - } - } - - public MarkupTextLiteralSyntax Name - { - get - { - return GetRed(ref _name, 1); - } - } + public MarkupTextLiteralSyntax NamePrefix => GetRedAtZero(ref _namePrefix); + public MarkupTextLiteralSyntax Name => GetRed(ref _name, 1); internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) + => index switch { - case 0: return GetRedAtZero(ref _namePrefix); - case 1: return GetRed(ref _name, 1); - default: return null; - } - } + 0 => GetRedAtZero(ref _namePrefix), + 1 => GetRed(ref _name, 1), + _ => null + }; + internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) + => index switch { - case 0: return _namePrefix; - case 1: return _name; - default: return null; - } - } - - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupMinimizedTagHelperAttribute(this); - } + 0 => this._namePrefix, + 1 => this._name, + _ => null + }; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupMinimizedTagHelperAttribute(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupMinimizedTagHelperAttribute(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupMinimizedTagHelperAttribute(this); public MarkupMinimizedTagHelperAttributeSyntax Update(MarkupTextLiteralSyntax namePrefix, MarkupTextLiteralSyntax name) { @@ -2446,34 +1282,22 @@ public MarkupMinimizedTagHelperAttributeSyntax Update(MarkupTextLiteralSyntax na var newNode = SyntaxFactory.MarkupMinimizedTagHelperAttribute(namePrefix, name); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } - public MarkupMinimizedTagHelperAttributeSyntax WithNamePrefix(MarkupTextLiteralSyntax namePrefix) - { - return Update(namePrefix, Name); - } - - public MarkupMinimizedTagHelperAttributeSyntax WithName(MarkupTextLiteralSyntax name) - { - return Update(NamePrefix, name); - } + public MarkupMinimizedTagHelperAttributeSyntax WithNamePrefix(MarkupTextLiteralSyntax namePrefix) => Update(namePrefix, Name); + public MarkupMinimizedTagHelperAttributeSyntax WithName(MarkupTextLiteralSyntax name) => Update(NamePrefix, name); - public MarkupMinimizedTagHelperAttributeSyntax AddNameLiteralTokens(params SyntaxToken[] items) - { - return this.WithName(this.Name.WithLiteralTokens(this.Name.LiteralTokens.AddRange(items))); - } - } + public MarkupMinimizedTagHelperAttributeSyntax AddNameLiteralTokens(params SyntaxToken[] items) => WithName(this.Name.WithLiteralTokens(this.Name.LiteralTokens.AddRange(items))); +} - internal sealed partial class MarkupTagHelperAttributeValueSyntax : RazorBlockSyntax - { +internal sealed partial class MarkupTagHelperAttributeValueSyntax : RazorBlockSyntax +{ private SyntaxNode _children; internal MarkupTagHelperAttributeValueSyntax(GreenNode green, SyntaxNode parent, int position) @@ -2481,40 +1305,14 @@ internal MarkupTagHelperAttributeValueSyntax(GreenNode green, SyntaxNode parent, { } - public override SyntaxList Children - { - get - { - return new SyntaxList(GetRed(ref _children, 0)); - } - } + public override SyntaxList Children => new SyntaxList(GetRed(ref _children, 0)); - internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) - { - case 0: return GetRedAtZero(ref _children); - default: return null; - } - } - internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) - { - case 0: return _children; - default: return null; - } - } + internal override SyntaxNode GetNodeSlot(int index) => index == 0 ? GetRedAtZero(ref this._children) : null; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupTagHelperAttributeValue(this); - } + internal override SyntaxNode GetCachedSlot(int index) => index == 0 ? this._children : null; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupTagHelperAttributeValue(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTagHelperAttributeValue(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTagHelperAttributeValue(this); public MarkupTagHelperAttributeValueSyntax Update(SyntaxList children) { @@ -2523,31 +1321,23 @@ public MarkupTagHelperAttributeValueSyntax Update(SyntaxList ch var newNode = SyntaxFactory.MarkupTagHelperAttributeValue(children); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } internal override RazorBlockSyntax WithChildrenCore(SyntaxList children) => WithChildren(children); - public new MarkupTagHelperAttributeValueSyntax WithChildren(SyntaxList children) - { - return Update(children); - } + public new MarkupTagHelperAttributeValueSyntax WithChildren(SyntaxList children) => Update(children); internal override RazorBlockSyntax AddChildrenCore(params RazorSyntaxNode[] items) => AddChildren(items); - public new MarkupTagHelperAttributeValueSyntax AddChildren(params RazorSyntaxNode[] items) - { - return WithChildren(this.Children.AddRange(items)); - } - } + public new MarkupTagHelperAttributeValueSyntax AddChildren(params RazorSyntaxNode[] items) => WithChildren(this.Children.AddRange(items)); +} - internal sealed partial class MarkupTagHelperDirectiveAttributeSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupTagHelperDirectiveAttributeSyntax : MarkupSyntaxNode +{ private MarkupTextLiteralSyntax _namePrefix; private RazorMetaCodeSyntax _transition; private MarkupTextLiteralSyntax _name; @@ -2559,136 +1349,57 @@ internal sealed partial class MarkupTagHelperDirectiveAttributeSyntax : MarkupSy private MarkupTagHelperAttributeValueSyntax _value; private MarkupTextLiteralSyntax _valueSuffix; - internal MarkupTagHelperDirectiveAttributeSyntax(GreenNode green, SyntaxNode parent, int position) - : base(green, parent, position) - { - } - - public MarkupTextLiteralSyntax NamePrefix - { - get - { - return GetRedAtZero(ref _namePrefix); - } - } - - public RazorMetaCodeSyntax Transition - { - get - { - return GetRed(ref _transition, 1); - } - } - - public MarkupTextLiteralSyntax Name - { - get - { - return GetRed(ref _name, 2); - } - } - - public RazorMetaCodeSyntax Colon - { - get - { - return GetRed(ref _colon, 3); - } - } - - public MarkupTextLiteralSyntax ParameterName - { - get - { - return GetRed(ref _parameterName, 4); - } - } - - public MarkupTextLiteralSyntax NameSuffix - { - get - { - return GetRed(ref _nameSuffix, 5); - } - } - - public SyntaxToken EqualsToken - { - get - { - return GetRed(ref _equalsToken, 6); - } - } - - public MarkupTextLiteralSyntax ValuePrefix - { - get - { - return GetRed(ref _valuePrefix, 7); - } - } - - public MarkupTagHelperAttributeValueSyntax Value - { - get - { - return GetRed(ref _value, 8); - } - } - - public MarkupTextLiteralSyntax ValueSuffix - { - get - { - return GetRed(ref _valueSuffix, 9); - } - } - - internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) - { - case 0: return GetRedAtZero(ref _namePrefix); - case 1: return GetRed(ref _transition, 1); - case 2: return GetRed(ref _name, 2); - case 3: return GetRed(ref _colon, 3); - case 4: return GetRed(ref _parameterName, 4); - case 5: return GetRed(ref _nameSuffix, 5); - case 6: return GetRed(ref _equalsToken, 6); - case 7: return GetRed(ref _valuePrefix, 7); - case 8: return GetRed(ref _value, 8); - case 9: return GetRed(ref _valueSuffix, 9); - default: return null; - } - } - internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) - { - case 0: return _namePrefix; - case 1: return _transition; - case 2: return _name; - case 3: return _colon; - case 4: return _parameterName; - case 5: return _nameSuffix; - case 6: return _equalsToken; - case 7: return _valuePrefix; - case 8: return _value; - case 9: return _valueSuffix; - default: return null; - } - } - - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupTagHelperDirectiveAttribute(this); - } - - public override void Accept(SyntaxVisitor visitor) + internal MarkupTagHelperDirectiveAttributeSyntax(GreenNode green, SyntaxNode parent, int position) + : base(green, parent, position) { - visitor.VisitMarkupTagHelperDirectiveAttribute(this); } + public MarkupTextLiteralSyntax NamePrefix => GetRedAtZero(ref _namePrefix); + public RazorMetaCodeSyntax Transition => GetRed(ref _transition, 1); + public MarkupTextLiteralSyntax Name => GetRed(ref _name, 2); + public RazorMetaCodeSyntax Colon => GetRed(ref _colon, 3); + public MarkupTextLiteralSyntax ParameterName => GetRed(ref _parameterName, 4); + public MarkupTextLiteralSyntax NameSuffix => GetRed(ref _nameSuffix, 5); + public SyntaxToken EqualsToken => GetRed(ref _equalsToken, 6); + public MarkupTextLiteralSyntax ValuePrefix => GetRed(ref _valuePrefix, 7); + public MarkupTagHelperAttributeValueSyntax Value => GetRed(ref _value, 8); + public MarkupTextLiteralSyntax ValueSuffix => GetRed(ref _valueSuffix, 9); + + internal override SyntaxNode GetNodeSlot(int index) + => index switch + { + 0 => GetRedAtZero(ref _namePrefix), + 1 => GetRed(ref _transition, 1), + 2 => GetRed(ref _name, 2), + 3 => GetRed(ref _colon, 3), + 4 => GetRed(ref _parameterName, 4), + 5 => GetRed(ref _nameSuffix, 5), + 6 => GetRed(ref _equalsToken, 6), + 7 => GetRed(ref _valuePrefix, 7), + 8 => GetRed(ref _value, 8), + 9 => GetRed(ref _valueSuffix, 9), + _ => null + }; + + internal override SyntaxNode GetCachedSlot(int index) + => index switch + { + 0 => this._namePrefix, + 1 => this._transition, + 2 => this._name, + 3 => this._colon, + 4 => this._parameterName, + 5 => this._nameSuffix, + 6 => this._equalsToken, + 7 => this._valuePrefix, + 8 => this._value, + 9 => this._valueSuffix, + _ => null + }; + + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTagHelperDirectiveAttribute(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupTagHelperDirectiveAttribute(this); + public MarkupTagHelperDirectiveAttributeSyntax Update(MarkupTextLiteralSyntax namePrefix, RazorMetaCodeSyntax transition, MarkupTextLiteralSyntax name, RazorMetaCodeSyntax colon, MarkupTextLiteralSyntax parameterName, MarkupTextLiteralSyntax nameSuffix, SyntaxToken equalsToken, MarkupTextLiteralSyntax valuePrefix, MarkupTagHelperAttributeValueSyntax value, MarkupTextLiteralSyntax valueSuffix) { if (namePrefix != NamePrefix || transition != Transition || name != Name || colon != Colon || parameterName != ParameterName || nameSuffix != NameSuffix || equalsToken != EqualsToken || valuePrefix != ValuePrefix || value != Value || valueSuffix != ValueSuffix) @@ -2696,84 +1407,34 @@ public MarkupTagHelperDirectiveAttributeSyntax Update(MarkupTextLiteralSyntax na var newNode = SyntaxFactory.MarkupTagHelperDirectiveAttribute(namePrefix, transition, name, colon, parameterName, nameSuffix, equalsToken, valuePrefix, value, valueSuffix); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } - public MarkupTagHelperDirectiveAttributeSyntax WithNamePrefix(MarkupTextLiteralSyntax namePrefix) - { - return Update(namePrefix, Transition, Name, Colon, ParameterName, NameSuffix, EqualsToken, ValuePrefix, Value, ValueSuffix); - } - - public MarkupTagHelperDirectiveAttributeSyntax WithTransition(RazorMetaCodeSyntax transition) - { - return Update(NamePrefix, transition, Name, Colon, ParameterName, NameSuffix, EqualsToken, ValuePrefix, Value, ValueSuffix); - } - - public MarkupTagHelperDirectiveAttributeSyntax WithName(MarkupTextLiteralSyntax name) - { - return Update(NamePrefix, Transition, name, Colon, ParameterName, NameSuffix, EqualsToken, ValuePrefix, Value, ValueSuffix); - } - - public MarkupTagHelperDirectiveAttributeSyntax WithColon(RazorMetaCodeSyntax colon) - { - return Update(NamePrefix, Transition, Name, colon, ParameterName, NameSuffix, EqualsToken, ValuePrefix, Value, ValueSuffix); - } - - public MarkupTagHelperDirectiveAttributeSyntax WithParameterName(MarkupTextLiteralSyntax parameterName) - { - return Update(NamePrefix, Transition, Name, Colon, parameterName, NameSuffix, EqualsToken, ValuePrefix, Value, ValueSuffix); - } - - public MarkupTagHelperDirectiveAttributeSyntax WithNameSuffix(MarkupTextLiteralSyntax nameSuffix) - { - return Update(NamePrefix, Transition, Name, Colon, ParameterName, nameSuffix, EqualsToken, ValuePrefix, Value, ValueSuffix); - } - - public MarkupTagHelperDirectiveAttributeSyntax WithEqualsToken(SyntaxToken equalsToken) - { - return Update(NamePrefix, Transition, Name, Colon, ParameterName, NameSuffix, equalsToken, ValuePrefix, Value, ValueSuffix); - } - - public MarkupTagHelperDirectiveAttributeSyntax WithValuePrefix(MarkupTextLiteralSyntax valuePrefix) - { - return Update(NamePrefix, Transition, Name, Colon, ParameterName, NameSuffix, EqualsToken, valuePrefix, Value, ValueSuffix); - } - - public MarkupTagHelperDirectiveAttributeSyntax WithValue(MarkupTagHelperAttributeValueSyntax value) - { - return Update(NamePrefix, Transition, Name, Colon, ParameterName, NameSuffix, EqualsToken, ValuePrefix, value, ValueSuffix); - } - - public MarkupTagHelperDirectiveAttributeSyntax WithValueSuffix(MarkupTextLiteralSyntax valueSuffix) - { - return Update(NamePrefix, Transition, Name, Colon, ParameterName, NameSuffix, EqualsToken, ValuePrefix, Value, valueSuffix); - } + public MarkupTagHelperDirectiveAttributeSyntax WithNamePrefix(MarkupTextLiteralSyntax namePrefix) => Update(namePrefix, Transition, Name, Colon, ParameterName, NameSuffix, EqualsToken, ValuePrefix, Value, ValueSuffix); + public MarkupTagHelperDirectiveAttributeSyntax WithTransition(RazorMetaCodeSyntax transition) => Update(NamePrefix, transition, Name, Colon, ParameterName, NameSuffix, EqualsToken, ValuePrefix, Value, ValueSuffix); + public MarkupTagHelperDirectiveAttributeSyntax WithName(MarkupTextLiteralSyntax name) => Update(NamePrefix, Transition, name, Colon, ParameterName, NameSuffix, EqualsToken, ValuePrefix, Value, ValueSuffix); + public MarkupTagHelperDirectiveAttributeSyntax WithColon(RazorMetaCodeSyntax colon) => Update(NamePrefix, Transition, Name, colon, ParameterName, NameSuffix, EqualsToken, ValuePrefix, Value, ValueSuffix); + public MarkupTagHelperDirectiveAttributeSyntax WithParameterName(MarkupTextLiteralSyntax parameterName) => Update(NamePrefix, Transition, Name, Colon, parameterName, NameSuffix, EqualsToken, ValuePrefix, Value, ValueSuffix); + public MarkupTagHelperDirectiveAttributeSyntax WithNameSuffix(MarkupTextLiteralSyntax nameSuffix) => Update(NamePrefix, Transition, Name, Colon, ParameterName, nameSuffix, EqualsToken, ValuePrefix, Value, ValueSuffix); + public MarkupTagHelperDirectiveAttributeSyntax WithEqualsToken(SyntaxToken equalsToken) => Update(NamePrefix, Transition, Name, Colon, ParameterName, NameSuffix, equalsToken, ValuePrefix, Value, ValueSuffix); + public MarkupTagHelperDirectiveAttributeSyntax WithValuePrefix(MarkupTextLiteralSyntax valuePrefix) => Update(NamePrefix, Transition, Name, Colon, ParameterName, NameSuffix, EqualsToken, valuePrefix, Value, ValueSuffix); + public MarkupTagHelperDirectiveAttributeSyntax WithValue(MarkupTagHelperAttributeValueSyntax value) => Update(NamePrefix, Transition, Name, Colon, ParameterName, NameSuffix, EqualsToken, ValuePrefix, value, ValueSuffix); + public MarkupTagHelperDirectiveAttributeSyntax WithValueSuffix(MarkupTextLiteralSyntax valueSuffix) => Update(NamePrefix, Transition, Name, Colon, ParameterName, NameSuffix, EqualsToken, ValuePrefix, Value, valueSuffix); - public MarkupTagHelperDirectiveAttributeSyntax AddTransitionMetaCode(params SyntaxToken[] items) - { - return this.WithTransition(this.Transition.WithMetaCode(this.Transition.MetaCode.AddRange(items))); - } + public MarkupTagHelperDirectiveAttributeSyntax AddTransitionMetaCode(params SyntaxToken[] items) => WithTransition(this.Transition.WithMetaCode(this.Transition.MetaCode.AddRange(items))); - public MarkupTagHelperDirectiveAttributeSyntax AddNameLiteralTokens(params SyntaxToken[] items) - { - return this.WithName(this.Name.WithLiteralTokens(this.Name.LiteralTokens.AddRange(items))); - } + public MarkupTagHelperDirectiveAttributeSyntax AddNameLiteralTokens(params SyntaxToken[] items) => WithName(this.Name.WithLiteralTokens(this.Name.LiteralTokens.AddRange(items))); - public MarkupTagHelperDirectiveAttributeSyntax AddValueChildren(params RazorSyntaxNode[] items) - { - return this.WithValue(this.Value.WithChildren(this.Value.Children.AddRange(items))); - } - } + public MarkupTagHelperDirectiveAttributeSyntax AddValueChildren(params RazorSyntaxNode[] items) => WithValue(this.Value.WithChildren(this.Value.Children.AddRange(items))); +} - internal sealed partial class MarkupMinimizedTagHelperDirectiveAttributeSyntax : MarkupSyntaxNode - { +internal sealed partial class MarkupMinimizedTagHelperDirectiveAttributeSyntax : MarkupSyntaxNode +{ private MarkupTextLiteralSyntax _namePrefix; private RazorMetaCodeSyntax _transition; private MarkupTextLiteralSyntax _name; @@ -2785,80 +1446,36 @@ internal MarkupMinimizedTagHelperDirectiveAttributeSyntax(GreenNode green, Synta { } - public MarkupTextLiteralSyntax NamePrefix - { - get - { - return GetRedAtZero(ref _namePrefix); - } - } - - public RazorMetaCodeSyntax Transition - { - get - { - return GetRed(ref _transition, 1); - } - } - - public MarkupTextLiteralSyntax Name - { - get - { - return GetRed(ref _name, 2); - } - } - - public RazorMetaCodeSyntax Colon - { - get - { - return GetRed(ref _colon, 3); - } - } - - public MarkupTextLiteralSyntax ParameterName - { - get - { - return GetRed(ref _parameterName, 4); - } - } + public MarkupTextLiteralSyntax NamePrefix => GetRedAtZero(ref _namePrefix); + public RazorMetaCodeSyntax Transition => GetRed(ref _transition, 1); + public MarkupTextLiteralSyntax Name => GetRed(ref _name, 2); + public RazorMetaCodeSyntax Colon => GetRed(ref _colon, 3); + public MarkupTextLiteralSyntax ParameterName => GetRed(ref _parameterName, 4); internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) + => index switch { - case 0: return GetRedAtZero(ref _namePrefix); - case 1: return GetRed(ref _transition, 1); - case 2: return GetRed(ref _name, 2); - case 3: return GetRed(ref _colon, 3); - case 4: return GetRed(ref _parameterName, 4); - default: return null; - } - } + 0 => GetRedAtZero(ref _namePrefix), + 1 => GetRed(ref _transition, 1), + 2 => GetRed(ref _name, 2), + 3 => GetRed(ref _colon, 3), + 4 => GetRed(ref _parameterName, 4), + _ => null + }; + internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) + => index switch { - case 0: return _namePrefix; - case 1: return _transition; - case 2: return _name; - case 3: return _colon; - case 4: return _parameterName; - default: return null; - } - } - - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitMarkupMinimizedTagHelperDirectiveAttribute(this); - } + 0 => this._namePrefix, + 1 => this._transition, + 2 => this._name, + 3 => this._colon, + 4 => this._parameterName, + _ => null + }; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitMarkupMinimizedTagHelperDirectiveAttribute(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitMarkupMinimizedTagHelperDirectiveAttribute(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitMarkupMinimizedTagHelperDirectiveAttribute(this); public MarkupMinimizedTagHelperDirectiveAttributeSyntax Update(MarkupTextLiteralSyntax namePrefix, RazorMetaCodeSyntax transition, MarkupTextLiteralSyntax name, RazorMetaCodeSyntax colon, MarkupTextLiteralSyntax parameterName) { @@ -2867,62 +1484,35 @@ public MarkupMinimizedTagHelperDirectiveAttributeSyntax Update(MarkupTextLiteral var newNode = SyntaxFactory.MarkupMinimizedTagHelperDirectiveAttribute(namePrefix, transition, name, colon, parameterName); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } - public MarkupMinimizedTagHelperDirectiveAttributeSyntax WithNamePrefix(MarkupTextLiteralSyntax namePrefix) - { - return Update(namePrefix, Transition, Name, Colon, ParameterName); - } - - public MarkupMinimizedTagHelperDirectiveAttributeSyntax WithTransition(RazorMetaCodeSyntax transition) - { - return Update(NamePrefix, transition, Name, Colon, ParameterName); - } - - public MarkupMinimizedTagHelperDirectiveAttributeSyntax WithName(MarkupTextLiteralSyntax name) - { - return Update(NamePrefix, Transition, name, Colon, ParameterName); - } + public MarkupMinimizedTagHelperDirectiveAttributeSyntax WithNamePrefix(MarkupTextLiteralSyntax namePrefix) => Update(namePrefix, Transition, Name, Colon, ParameterName); + public MarkupMinimizedTagHelperDirectiveAttributeSyntax WithTransition(RazorMetaCodeSyntax transition) => Update(NamePrefix, transition, Name, Colon, ParameterName); + public MarkupMinimizedTagHelperDirectiveAttributeSyntax WithName(MarkupTextLiteralSyntax name) => Update(NamePrefix, Transition, name, Colon, ParameterName); + public MarkupMinimizedTagHelperDirectiveAttributeSyntax WithColon(RazorMetaCodeSyntax colon) => Update(NamePrefix, Transition, Name, colon, ParameterName); + public MarkupMinimizedTagHelperDirectiveAttributeSyntax WithParameterName(MarkupTextLiteralSyntax parameterName) => Update(NamePrefix, Transition, Name, Colon, parameterName); - public MarkupMinimizedTagHelperDirectiveAttributeSyntax WithColon(RazorMetaCodeSyntax colon) - { - return Update(NamePrefix, Transition, Name, colon, ParameterName); - } - - public MarkupMinimizedTagHelperDirectiveAttributeSyntax WithParameterName(MarkupTextLiteralSyntax parameterName) - { - return Update(NamePrefix, Transition, Name, Colon, parameterName); - } - - public MarkupMinimizedTagHelperDirectiveAttributeSyntax AddTransitionMetaCode(params SyntaxToken[] items) - { - return this.WithTransition(this.Transition.WithMetaCode(this.Transition.MetaCode.AddRange(items))); - } + public MarkupMinimizedTagHelperDirectiveAttributeSyntax AddTransitionMetaCode(params SyntaxToken[] items) => WithTransition(this.Transition.WithMetaCode(this.Transition.MetaCode.AddRange(items))); - public MarkupMinimizedTagHelperDirectiveAttributeSyntax AddNameLiteralTokens(params SyntaxToken[] items) - { - return this.WithName(this.Name.WithLiteralTokens(this.Name.LiteralTokens.AddRange(items))); - } - } + public MarkupMinimizedTagHelperDirectiveAttributeSyntax AddNameLiteralTokens(params SyntaxToken[] items) => WithName(this.Name.WithLiteralTokens(this.Name.LiteralTokens.AddRange(items))); +} - internal abstract partial class CSharpSyntaxNode : RazorSyntaxNode - { +internal abstract partial class CSharpSyntaxNode : RazorSyntaxNode +{ internal CSharpSyntaxNode(GreenNode green, SyntaxNode parent, int position) - : base(green, parent, position) + : base(green, parent, position) { } - } +} - internal sealed partial class CSharpCodeBlockSyntax : RazorBlockSyntax - { +internal sealed partial class CSharpCodeBlockSyntax : RazorBlockSyntax +{ private SyntaxNode _children; internal CSharpCodeBlockSyntax(GreenNode green, SyntaxNode parent, int position) @@ -2930,40 +1520,14 @@ internal CSharpCodeBlockSyntax(GreenNode green, SyntaxNode parent, int position) { } - public override SyntaxList Children - { - get - { - return new SyntaxList(GetRed(ref _children, 0)); - } - } + public override SyntaxList Children => new SyntaxList(GetRed(ref _children, 0)); - internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) - { - case 0: return GetRedAtZero(ref _children); - default: return null; - } - } - internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) - { - case 0: return _children; - default: return null; - } - } + internal override SyntaxNode GetNodeSlot(int index) => index == 0 ? GetRedAtZero(ref this._children) : null; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitCSharpCodeBlock(this); - } + internal override SyntaxNode GetCachedSlot(int index) => index == 0 ? this._children : null; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitCSharpCodeBlock(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitCSharpCodeBlock(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitCSharpCodeBlock(this); public CSharpCodeBlockSyntax Update(SyntaxList children) { @@ -2972,31 +1536,23 @@ public CSharpCodeBlockSyntax Update(SyntaxList children) var newNode = SyntaxFactory.CSharpCodeBlock(children); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } internal override RazorBlockSyntax WithChildrenCore(SyntaxList children) => WithChildren(children); - public new CSharpCodeBlockSyntax WithChildren(SyntaxList children) - { - return Update(children); - } + public new CSharpCodeBlockSyntax WithChildren(SyntaxList children) => Update(children); internal override RazorBlockSyntax AddChildrenCore(params RazorSyntaxNode[] items) => AddChildren(items); - public new CSharpCodeBlockSyntax AddChildren(params RazorSyntaxNode[] items) - { - return WithChildren(this.Children.AddRange(items)); - } - } + public new CSharpCodeBlockSyntax AddChildren(params RazorSyntaxNode[] items) => WithChildren(this.Children.AddRange(items)); +} - internal sealed partial class CSharpTransitionSyntax : CSharpSyntaxNode - { +internal sealed partial class CSharpTransitionSyntax : CSharpSyntaxNode +{ private SyntaxToken _transition; internal CSharpTransitionSyntax(GreenNode green, SyntaxNode parent, int position) @@ -3004,42 +1560,15 @@ internal CSharpTransitionSyntax(GreenNode green, SyntaxNode parent, int position { } - public SyntaxToken Transition - { - get - { - return GetRedAtZero(ref _transition); - } - } - - public ISpanChunkGenerator ChunkGenerator { get { return ((InternalSyntax.CSharpTransitionSyntax)Green).ChunkGenerator; } } + public SyntaxToken Transition => GetRedAtZero(ref _transition); + public ISpanChunkGenerator ChunkGenerator => ((InternalSyntax.CSharpTransitionSyntax)Green).ChunkGenerator; - internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) - { - case 0: return GetRedAtZero(ref _transition); - default: return null; - } - } - internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) - { - case 0: return _transition; - default: return null; - } - } + internal override SyntaxNode GetNodeSlot(int index) => index == 0 ? GetRedAtZero(ref this._transition) : null; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitCSharpTransition(this); - } + internal override SyntaxNode GetCachedSlot(int index) => index == 0 ? this._transition : null; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitCSharpTransition(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitCSharpTransition(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitCSharpTransition(this); public CSharpTransitionSyntax Update(SyntaxToken transition, ISpanChunkGenerator chunkGenerator) { @@ -3048,29 +1577,20 @@ public CSharpTransitionSyntax Update(SyntaxToken transition, ISpanChunkGenerator var newNode = SyntaxFactory.CSharpTransition(transition, chunkGenerator); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } - public CSharpTransitionSyntax WithTransition(SyntaxToken transition) - { - return Update(transition, ChunkGenerator); - } - - public CSharpTransitionSyntax WithChunkGenerator(ISpanChunkGenerator chunkGenerator) - { - return Update(Transition, chunkGenerator); - } - } + public CSharpTransitionSyntax WithTransition(SyntaxToken transition) => Update(transition, ChunkGenerator); + public CSharpTransitionSyntax WithChunkGenerator(ISpanChunkGenerator chunkGenerator) => Update(Transition, chunkGenerator); +} - internal sealed partial class CSharpStatementLiteralSyntax : CSharpSyntaxNode - { +internal sealed partial class CSharpStatementLiteralSyntax : CSharpSyntaxNode +{ private SyntaxNode _literalTokens; internal CSharpStatementLiteralSyntax(GreenNode green, SyntaxNode parent, int position) @@ -3078,42 +1598,15 @@ internal CSharpStatementLiteralSyntax(GreenNode green, SyntaxNode parent, int po { } - public SyntaxList LiteralTokens - { - get - { - return new SyntaxList(GetRed(ref _literalTokens, 0)); - } - } - - public ISpanChunkGenerator ChunkGenerator { get { return ((InternalSyntax.CSharpStatementLiteralSyntax)Green).ChunkGenerator; } } + public SyntaxList LiteralTokens => new SyntaxList(GetRed(ref _literalTokens, 0)); + public ISpanChunkGenerator ChunkGenerator => ((InternalSyntax.CSharpStatementLiteralSyntax)Green).ChunkGenerator; - internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) - { - case 0: return GetRedAtZero(ref _literalTokens); - default: return null; - } - } - internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) - { - case 0: return _literalTokens; - default: return null; - } - } + internal override SyntaxNode GetNodeSlot(int index) => index == 0 ? GetRedAtZero(ref this._literalTokens) : null; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitCSharpStatementLiteral(this); - } + internal override SyntaxNode GetCachedSlot(int index) => index == 0 ? this._literalTokens : null; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitCSharpStatementLiteral(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitCSharpStatementLiteral(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitCSharpStatementLiteral(this); public CSharpStatementLiteralSyntax Update(SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) { @@ -3122,34 +1615,22 @@ public CSharpStatementLiteralSyntax Update(SyntaxList literalTokens var newNode = SyntaxFactory.CSharpStatementLiteral(literalTokens, chunkGenerator); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } - public CSharpStatementLiteralSyntax WithLiteralTokens(SyntaxList literalTokens) - { - return Update(literalTokens, ChunkGenerator); - } - - public CSharpStatementLiteralSyntax WithChunkGenerator(ISpanChunkGenerator chunkGenerator) - { - return Update(LiteralTokens, chunkGenerator); - } + public CSharpStatementLiteralSyntax WithLiteralTokens(SyntaxList literalTokens) => Update(literalTokens, ChunkGenerator); + public CSharpStatementLiteralSyntax WithChunkGenerator(ISpanChunkGenerator chunkGenerator) => Update(LiteralTokens, chunkGenerator); - public CSharpStatementLiteralSyntax AddLiteralTokens(params SyntaxToken[] items) - { - return WithLiteralTokens(this.LiteralTokens.AddRange(items)); - } - } + public CSharpStatementLiteralSyntax AddLiteralTokens(params SyntaxToken[] items) => WithLiteralTokens(this.LiteralTokens.AddRange(items)); +} - internal sealed partial class CSharpExpressionLiteralSyntax : CSharpSyntaxNode - { +internal sealed partial class CSharpExpressionLiteralSyntax : CSharpSyntaxNode +{ private SyntaxNode _literalTokens; internal CSharpExpressionLiteralSyntax(GreenNode green, SyntaxNode parent, int position) @@ -3157,42 +1638,15 @@ internal CSharpExpressionLiteralSyntax(GreenNode green, SyntaxNode parent, int p { } - public SyntaxList LiteralTokens - { - get - { - return new SyntaxList(GetRed(ref _literalTokens, 0)); - } - } - - public ISpanChunkGenerator ChunkGenerator { get { return ((InternalSyntax.CSharpExpressionLiteralSyntax)Green).ChunkGenerator; } } + public SyntaxList LiteralTokens => new SyntaxList(GetRed(ref _literalTokens, 0)); + public ISpanChunkGenerator ChunkGenerator => ((InternalSyntax.CSharpExpressionLiteralSyntax)Green).ChunkGenerator; - internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) - { - case 0: return GetRedAtZero(ref _literalTokens); - default: return null; - } - } - internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) - { - case 0: return _literalTokens; - default: return null; - } - } + internal override SyntaxNode GetNodeSlot(int index) => index == 0 ? GetRedAtZero(ref this._literalTokens) : null; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitCSharpExpressionLiteral(this); - } + internal override SyntaxNode GetCachedSlot(int index) => index == 0 ? this._literalTokens : null; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitCSharpExpressionLiteral(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitCSharpExpressionLiteral(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitCSharpExpressionLiteral(this); public CSharpExpressionLiteralSyntax Update(SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) { @@ -3201,34 +1655,22 @@ public CSharpExpressionLiteralSyntax Update(SyntaxList literalToken var newNode = SyntaxFactory.CSharpExpressionLiteral(literalTokens, chunkGenerator); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } - public CSharpExpressionLiteralSyntax WithLiteralTokens(SyntaxList literalTokens) - { - return Update(literalTokens, ChunkGenerator); - } - - public CSharpExpressionLiteralSyntax WithChunkGenerator(ISpanChunkGenerator chunkGenerator) - { - return Update(LiteralTokens, chunkGenerator); - } + public CSharpExpressionLiteralSyntax WithLiteralTokens(SyntaxList literalTokens) => Update(literalTokens, ChunkGenerator); + public CSharpExpressionLiteralSyntax WithChunkGenerator(ISpanChunkGenerator chunkGenerator) => Update(LiteralTokens, chunkGenerator); - public CSharpExpressionLiteralSyntax AddLiteralTokens(params SyntaxToken[] items) - { - return WithLiteralTokens(this.LiteralTokens.AddRange(items)); - } - } + public CSharpExpressionLiteralSyntax AddLiteralTokens(params SyntaxToken[] items) => WithLiteralTokens(this.LiteralTokens.AddRange(items)); +} - internal sealed partial class CSharpEphemeralTextLiteralSyntax : CSharpSyntaxNode - { +internal sealed partial class CSharpEphemeralTextLiteralSyntax : CSharpSyntaxNode +{ private SyntaxNode _literalTokens; internal CSharpEphemeralTextLiteralSyntax(GreenNode green, SyntaxNode parent, int position) @@ -3236,42 +1678,15 @@ internal CSharpEphemeralTextLiteralSyntax(GreenNode green, SyntaxNode parent, in { } - public SyntaxList LiteralTokens - { - get - { - return new SyntaxList(GetRed(ref _literalTokens, 0)); - } - } - - public ISpanChunkGenerator ChunkGenerator { get { return ((InternalSyntax.CSharpEphemeralTextLiteralSyntax)Green).ChunkGenerator; } } + public SyntaxList LiteralTokens => new SyntaxList(GetRed(ref _literalTokens, 0)); + public ISpanChunkGenerator ChunkGenerator => ((InternalSyntax.CSharpEphemeralTextLiteralSyntax)Green).ChunkGenerator; - internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) - { - case 0: return GetRedAtZero(ref _literalTokens); - default: return null; - } - } - internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) - { - case 0: return _literalTokens; - default: return null; - } - } + internal override SyntaxNode GetNodeSlot(int index) => index == 0 ? GetRedAtZero(ref this._literalTokens) : null; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitCSharpEphemeralTextLiteral(this); - } + internal override SyntaxNode GetCachedSlot(int index) => index == 0 ? this._literalTokens : null; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitCSharpEphemeralTextLiteral(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitCSharpEphemeralTextLiteral(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitCSharpEphemeralTextLiteral(this); public CSharpEphemeralTextLiteralSyntax Update(SyntaxList literalTokens, ISpanChunkGenerator chunkGenerator) { @@ -3280,34 +1695,22 @@ public CSharpEphemeralTextLiteralSyntax Update(SyntaxList literalTo var newNode = SyntaxFactory.CSharpEphemeralTextLiteral(literalTokens, chunkGenerator); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } - public CSharpEphemeralTextLiteralSyntax WithLiteralTokens(SyntaxList literalTokens) - { - return Update(literalTokens, ChunkGenerator); - } - - public CSharpEphemeralTextLiteralSyntax WithChunkGenerator(ISpanChunkGenerator chunkGenerator) - { - return Update(LiteralTokens, chunkGenerator); - } + public CSharpEphemeralTextLiteralSyntax WithLiteralTokens(SyntaxList literalTokens) => Update(literalTokens, ChunkGenerator); + public CSharpEphemeralTextLiteralSyntax WithChunkGenerator(ISpanChunkGenerator chunkGenerator) => Update(LiteralTokens, chunkGenerator); - public CSharpEphemeralTextLiteralSyntax AddLiteralTokens(params SyntaxToken[] items) - { - return WithLiteralTokens(this.LiteralTokens.AddRange(items)); - } - } + public CSharpEphemeralTextLiteralSyntax AddLiteralTokens(params SyntaxToken[] items) => WithLiteralTokens(this.LiteralTokens.AddRange(items)); +} - internal sealed partial class CSharpTemplateBlockSyntax : RazorBlockSyntax - { +internal sealed partial class CSharpTemplateBlockSyntax : RazorBlockSyntax +{ private SyntaxNode _children; internal CSharpTemplateBlockSyntax(GreenNode green, SyntaxNode parent, int position) @@ -3315,40 +1718,14 @@ internal CSharpTemplateBlockSyntax(GreenNode green, SyntaxNode parent, int posit { } - public override SyntaxList Children - { - get - { - return new SyntaxList(GetRed(ref _children, 0)); - } - } - - internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) - { - case 0: return GetRedAtZero(ref _children); - default: return null; - } - } - internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) - { - case 0: return _children; - default: return null; - } - } + public override SyntaxList Children => new SyntaxList(GetRed(ref _children, 0)); - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitCSharpTemplateBlock(this); - } + internal override SyntaxNode GetNodeSlot(int index) => index == 0 ? GetRedAtZero(ref this._children) : null; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitCSharpTemplateBlock(this); - } + internal override SyntaxNode GetCachedSlot(int index) => index == 0 ? this._children : null; + + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitCSharpTemplateBlock(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitCSharpTemplateBlock(this); public CSharpTemplateBlockSyntax Update(SyntaxList children) { @@ -3357,33 +1734,25 @@ public CSharpTemplateBlockSyntax Update(SyntaxList children) var newNode = SyntaxFactory.CSharpTemplateBlock(children); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } internal override RazorBlockSyntax WithChildrenCore(SyntaxList children) => WithChildren(children); - public new CSharpTemplateBlockSyntax WithChildren(SyntaxList children) - { - return Update(children); - } + public new CSharpTemplateBlockSyntax WithChildren(SyntaxList children) => Update(children); internal override RazorBlockSyntax AddChildrenCore(params RazorSyntaxNode[] items) => AddChildren(items); - public new CSharpTemplateBlockSyntax AddChildren(params RazorSyntaxNode[] items) - { - return WithChildren(this.Children.AddRange(items)); - } - } + public new CSharpTemplateBlockSyntax AddChildren(params RazorSyntaxNode[] items) => WithChildren(this.Children.AddRange(items)); +} - internal abstract partial class CSharpRazorBlockSyntax : CSharpSyntaxNode - { +internal abstract partial class CSharpRazorBlockSyntax : CSharpSyntaxNode +{ internal CSharpRazorBlockSyntax(GreenNode green, SyntaxNode parent, int position) - : base(green, parent, position) + : base(green, parent, position) { } @@ -3394,10 +1763,10 @@ internal CSharpRazorBlockSyntax(GreenNode green, SyntaxNode parent, int position public abstract CSharpSyntaxNode Body { get; } public CSharpRazorBlockSyntax WithBody(CSharpSyntaxNode body) => WithBodyCore(body); internal abstract CSharpRazorBlockSyntax WithBodyCore(CSharpSyntaxNode body); - } +} - internal sealed partial class CSharpStatementSyntax : CSharpRazorBlockSyntax - { +internal sealed partial class CSharpStatementSyntax : CSharpRazorBlockSyntax +{ private CSharpTransitionSyntax _transition; private CSharpSyntaxNode _body; @@ -3406,50 +1775,27 @@ internal CSharpStatementSyntax(GreenNode green, SyntaxNode parent, int position) { } - public override CSharpTransitionSyntax Transition - { - get - { - return GetRedAtZero(ref _transition); - } - } - - public override CSharpSyntaxNode Body - { - get - { - return GetRed(ref _body, 1); - } - } + public override CSharpTransitionSyntax Transition => GetRedAtZero(ref _transition); + public override CSharpSyntaxNode Body => GetRed(ref _body, 1); internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) + => index switch { - case 0: return GetRedAtZero(ref _transition); - case 1: return GetRed(ref _body, 1); - default: return null; - } - } + 0 => GetRedAtZero(ref _transition), + 1 => GetRed(ref _body, 1), + _ => null + }; + internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) + => index switch { - case 0: return _transition; - case 1: return _body; - default: return null; - } - } - - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitCSharpStatement(this); - } + 0 => this._transition, + 1 => this._body, + _ => null + }; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitCSharpStatement(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitCSharpStatement(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitCSharpStatement(this); public CSharpStatementSyntax Update(CSharpTransitionSyntax transition, CSharpSyntaxNode body) { @@ -3458,33 +1804,24 @@ public CSharpStatementSyntax Update(CSharpTransitionSyntax transition, CSharpSyn var newNode = SyntaxFactory.CSharpStatement(transition, body); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } internal override CSharpRazorBlockSyntax WithTransitionCore(CSharpTransitionSyntax transition) => WithTransition(transition); - public new CSharpStatementSyntax WithTransition(CSharpTransitionSyntax transition) - { - return Update(transition, Body); - } - + public new CSharpStatementSyntax WithTransition(CSharpTransitionSyntax transition) => Update(transition, Body); internal override CSharpRazorBlockSyntax WithBodyCore(CSharpSyntaxNode body) => WithBody(body); - public new CSharpStatementSyntax WithBody(CSharpSyntaxNode body) - { - return Update(Transition, body); - } - } + public new CSharpStatementSyntax WithBody(CSharpSyntaxNode body) => Update(Transition, body); +} - internal sealed partial class CSharpStatementBodySyntax : CSharpSyntaxNode - { +internal sealed partial class CSharpStatementBodySyntax : CSharpSyntaxNode +{ private RazorMetaCodeSyntax _openBrace; - private CSharpCodeBlockSyntax _cSharpCode; + private CSharpCodeBlockSyntax _csharpCode; private RazorMetaCodeSyntax _closeBrace; internal CSharpStatementBodySyntax(GreenNode green, SyntaxNode parent, int position) @@ -3492,111 +1829,59 @@ internal CSharpStatementBodySyntax(GreenNode green, SyntaxNode parent, int posit { } - public RazorMetaCodeSyntax OpenBrace - { - get - { - return GetRedAtZero(ref _openBrace); - } - } - - public CSharpCodeBlockSyntax CSharpCode - { - get - { - return GetRed(ref _cSharpCode, 1); - } - } - - public RazorMetaCodeSyntax CloseBrace - { - get - { - return GetRed(ref _closeBrace, 2); - } - } + public RazorMetaCodeSyntax OpenBrace => GetRedAtZero(ref _openBrace); + public CSharpCodeBlockSyntax CSharpCode => GetRed(ref _csharpCode, 1); + public RazorMetaCodeSyntax CloseBrace => GetRed(ref _closeBrace, 2); internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) + => index switch { - case 0: return GetRedAtZero(ref _openBrace); - case 1: return GetRed(ref _cSharpCode, 1); - case 2: return GetRed(ref _closeBrace, 2); - default: return null; - } - } + 0 => GetRedAtZero(ref _openBrace), + 1 => GetRed(ref _csharpCode, 1), + 2 => GetRed(ref _closeBrace, 2), + _ => null + }; + internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) + => index switch { - case 0: return _openBrace; - case 1: return _cSharpCode; - case 2: return _closeBrace; - default: return null; - } - } - - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitCSharpStatementBody(this); - } + 0 => this._openBrace, + 1 => this._csharpCode, + 2 => this._closeBrace, + _ => null + }; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitCSharpStatementBody(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitCSharpStatementBody(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitCSharpStatementBody(this); - public CSharpStatementBodySyntax Update(RazorMetaCodeSyntax openBrace, CSharpCodeBlockSyntax cSharpCode, RazorMetaCodeSyntax closeBrace) + public CSharpStatementBodySyntax Update(RazorMetaCodeSyntax openBrace, CSharpCodeBlockSyntax csharpCode, RazorMetaCodeSyntax closeBrace) { - if (openBrace != OpenBrace || cSharpCode != CSharpCode || closeBrace != CloseBrace) + if (openBrace != OpenBrace || csharpCode != CSharpCode || closeBrace != CloseBrace) { - var newNode = SyntaxFactory.CSharpStatementBody(openBrace, cSharpCode, closeBrace); + var newNode = SyntaxFactory.CSharpStatementBody(openBrace, csharpCode, closeBrace); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } - public CSharpStatementBodySyntax WithOpenBrace(RazorMetaCodeSyntax openBrace) - { - return Update(openBrace, CSharpCode, CloseBrace); - } - - public CSharpStatementBodySyntax WithCSharpCode(CSharpCodeBlockSyntax cSharpCode) - { - return Update(OpenBrace, cSharpCode, CloseBrace); - } - - public CSharpStatementBodySyntax WithCloseBrace(RazorMetaCodeSyntax closeBrace) - { - return Update(OpenBrace, CSharpCode, closeBrace); - } + public CSharpStatementBodySyntax WithOpenBrace(RazorMetaCodeSyntax openBrace) => Update(openBrace, CSharpCode, CloseBrace); + public CSharpStatementBodySyntax WithCSharpCode(CSharpCodeBlockSyntax csharpCode) => Update(OpenBrace, csharpCode, CloseBrace); + public CSharpStatementBodySyntax WithCloseBrace(RazorMetaCodeSyntax closeBrace) => Update(OpenBrace, CSharpCode, closeBrace); - public CSharpStatementBodySyntax AddOpenBraceMetaCode(params SyntaxToken[] items) - { - return this.WithOpenBrace(this.OpenBrace.WithMetaCode(this.OpenBrace.MetaCode.AddRange(items))); - } + public CSharpStatementBodySyntax AddOpenBraceMetaCode(params SyntaxToken[] items) => WithOpenBrace(this.OpenBrace.WithMetaCode(this.OpenBrace.MetaCode.AddRange(items))); - public CSharpStatementBodySyntax AddCSharpCodeChildren(params RazorSyntaxNode[] items) - { - return this.WithCSharpCode(this.CSharpCode.WithChildren(this.CSharpCode.Children.AddRange(items))); - } + public CSharpStatementBodySyntax AddCSharpCodeChildren(params RazorSyntaxNode[] items) => WithCSharpCode(this.CSharpCode.WithChildren(this.CSharpCode.Children.AddRange(items))); - public CSharpStatementBodySyntax AddCloseBraceMetaCode(params SyntaxToken[] items) - { - return this.WithCloseBrace(this.CloseBrace.WithMetaCode(this.CloseBrace.MetaCode.AddRange(items))); - } - } + public CSharpStatementBodySyntax AddCloseBraceMetaCode(params SyntaxToken[] items) => WithCloseBrace(this.CloseBrace.WithMetaCode(this.CloseBrace.MetaCode.AddRange(items))); +} - internal sealed partial class CSharpExplicitExpressionSyntax : CSharpRazorBlockSyntax - { +internal sealed partial class CSharpExplicitExpressionSyntax : CSharpRazorBlockSyntax +{ private CSharpTransitionSyntax _transition; private CSharpSyntaxNode _body; @@ -3605,50 +1890,27 @@ internal CSharpExplicitExpressionSyntax(GreenNode green, SyntaxNode parent, int { } - public override CSharpTransitionSyntax Transition - { - get - { - return GetRedAtZero(ref _transition); - } - } - - public override CSharpSyntaxNode Body - { - get - { - return GetRed(ref _body, 1); - } - } + public override CSharpTransitionSyntax Transition => GetRedAtZero(ref _transition); + public override CSharpSyntaxNode Body => GetRed(ref _body, 1); internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) + => index switch { - case 0: return GetRedAtZero(ref _transition); - case 1: return GetRed(ref _body, 1); - default: return null; - } - } + 0 => GetRedAtZero(ref _transition), + 1 => GetRed(ref _body, 1), + _ => null + }; + internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) + => index switch { - case 0: return _transition; - case 1: return _body; - default: return null; - } - } + 0 => this._transition, + 1 => this._body, + _ => null + }; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitCSharpExplicitExpression(this); - } - - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitCSharpExplicitExpression(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitCSharpExplicitExpression(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitCSharpExplicitExpression(this); public CSharpExplicitExpressionSyntax Update(CSharpTransitionSyntax transition, CSharpSyntaxNode body) { @@ -3657,33 +1919,24 @@ public CSharpExplicitExpressionSyntax Update(CSharpTransitionSyntax transition, var newNode = SyntaxFactory.CSharpExplicitExpression(transition, body); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } internal override CSharpRazorBlockSyntax WithTransitionCore(CSharpTransitionSyntax transition) => WithTransition(transition); - public new CSharpExplicitExpressionSyntax WithTransition(CSharpTransitionSyntax transition) - { - return Update(transition, Body); - } - + public new CSharpExplicitExpressionSyntax WithTransition(CSharpTransitionSyntax transition) => Update(transition, Body); internal override CSharpRazorBlockSyntax WithBodyCore(CSharpSyntaxNode body) => WithBody(body); - public new CSharpExplicitExpressionSyntax WithBody(CSharpSyntaxNode body) - { - return Update(Transition, body); - } - } + public new CSharpExplicitExpressionSyntax WithBody(CSharpSyntaxNode body) => Update(Transition, body); +} - internal sealed partial class CSharpExplicitExpressionBodySyntax : CSharpSyntaxNode - { +internal sealed partial class CSharpExplicitExpressionBodySyntax : CSharpSyntaxNode +{ private RazorMetaCodeSyntax _openParen; - private CSharpCodeBlockSyntax _cSharpCode; + private CSharpCodeBlockSyntax _csharpCode; private RazorMetaCodeSyntax _closeParen; internal CSharpExplicitExpressionBodySyntax(GreenNode green, SyntaxNode parent, int position) @@ -3691,111 +1944,59 @@ internal CSharpExplicitExpressionBodySyntax(GreenNode green, SyntaxNode parent, { } - public RazorMetaCodeSyntax OpenParen - { - get - { - return GetRedAtZero(ref _openParen); - } - } - - public CSharpCodeBlockSyntax CSharpCode - { - get - { - return GetRed(ref _cSharpCode, 1); - } - } - - public RazorMetaCodeSyntax CloseParen - { - get - { - return GetRed(ref _closeParen, 2); - } - } + public RazorMetaCodeSyntax OpenParen => GetRedAtZero(ref _openParen); + public CSharpCodeBlockSyntax CSharpCode => GetRed(ref _csharpCode, 1); + public RazorMetaCodeSyntax CloseParen => GetRed(ref _closeParen, 2); internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) + => index switch { - case 0: return GetRedAtZero(ref _openParen); - case 1: return GetRed(ref _cSharpCode, 1); - case 2: return GetRed(ref _closeParen, 2); - default: return null; - } - } + 0 => GetRedAtZero(ref _openParen), + 1 => GetRed(ref _csharpCode, 1), + 2 => GetRed(ref _closeParen, 2), + _ => null + }; + internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) + => index switch { - case 0: return _openParen; - case 1: return _cSharpCode; - case 2: return _closeParen; - default: return null; - } - } - - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitCSharpExplicitExpressionBody(this); - } + 0 => this._openParen, + 1 => this._csharpCode, + 2 => this._closeParen, + _ => null + }; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitCSharpExplicitExpressionBody(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitCSharpExplicitExpressionBody(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitCSharpExplicitExpressionBody(this); - public CSharpExplicitExpressionBodySyntax Update(RazorMetaCodeSyntax openParen, CSharpCodeBlockSyntax cSharpCode, RazorMetaCodeSyntax closeParen) + public CSharpExplicitExpressionBodySyntax Update(RazorMetaCodeSyntax openParen, CSharpCodeBlockSyntax csharpCode, RazorMetaCodeSyntax closeParen) { - if (openParen != OpenParen || cSharpCode != CSharpCode || closeParen != CloseParen) + if (openParen != OpenParen || csharpCode != CSharpCode || closeParen != CloseParen) { - var newNode = SyntaxFactory.CSharpExplicitExpressionBody(openParen, cSharpCode, closeParen); + var newNode = SyntaxFactory.CSharpExplicitExpressionBody(openParen, csharpCode, closeParen); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } - public CSharpExplicitExpressionBodySyntax WithOpenParen(RazorMetaCodeSyntax openParen) - { - return Update(openParen, CSharpCode, CloseParen); - } - - public CSharpExplicitExpressionBodySyntax WithCSharpCode(CSharpCodeBlockSyntax cSharpCode) - { - return Update(OpenParen, cSharpCode, CloseParen); - } - - public CSharpExplicitExpressionBodySyntax WithCloseParen(RazorMetaCodeSyntax closeParen) - { - return Update(OpenParen, CSharpCode, closeParen); - } + public CSharpExplicitExpressionBodySyntax WithOpenParen(RazorMetaCodeSyntax openParen) => Update(openParen, CSharpCode, CloseParen); + public CSharpExplicitExpressionBodySyntax WithCSharpCode(CSharpCodeBlockSyntax csharpCode) => Update(OpenParen, csharpCode, CloseParen); + public CSharpExplicitExpressionBodySyntax WithCloseParen(RazorMetaCodeSyntax closeParen) => Update(OpenParen, CSharpCode, closeParen); - public CSharpExplicitExpressionBodySyntax AddOpenParenMetaCode(params SyntaxToken[] items) - { - return this.WithOpenParen(this.OpenParen.WithMetaCode(this.OpenParen.MetaCode.AddRange(items))); - } + public CSharpExplicitExpressionBodySyntax AddOpenParenMetaCode(params SyntaxToken[] items) => WithOpenParen(this.OpenParen.WithMetaCode(this.OpenParen.MetaCode.AddRange(items))); - public CSharpExplicitExpressionBodySyntax AddCSharpCodeChildren(params RazorSyntaxNode[] items) - { - return this.WithCSharpCode(this.CSharpCode.WithChildren(this.CSharpCode.Children.AddRange(items))); - } + public CSharpExplicitExpressionBodySyntax AddCSharpCodeChildren(params RazorSyntaxNode[] items) => WithCSharpCode(this.CSharpCode.WithChildren(this.CSharpCode.Children.AddRange(items))); - public CSharpExplicitExpressionBodySyntax AddCloseParenMetaCode(params SyntaxToken[] items) - { - return this.WithCloseParen(this.CloseParen.WithMetaCode(this.CloseParen.MetaCode.AddRange(items))); - } - } + public CSharpExplicitExpressionBodySyntax AddCloseParenMetaCode(params SyntaxToken[] items) => WithCloseParen(this.CloseParen.WithMetaCode(this.CloseParen.MetaCode.AddRange(items))); +} - internal sealed partial class CSharpImplicitExpressionSyntax : CSharpRazorBlockSyntax - { +internal sealed partial class CSharpImplicitExpressionSyntax : CSharpRazorBlockSyntax +{ private CSharpTransitionSyntax _transition; private CSharpSyntaxNode _body; @@ -3804,50 +2005,27 @@ internal CSharpImplicitExpressionSyntax(GreenNode green, SyntaxNode parent, int { } - public override CSharpTransitionSyntax Transition - { - get - { - return GetRedAtZero(ref _transition); - } - } - - public override CSharpSyntaxNode Body - { - get - { - return GetRed(ref _body, 1); - } - } + public override CSharpTransitionSyntax Transition => GetRedAtZero(ref _transition); + public override CSharpSyntaxNode Body => GetRed(ref _body, 1); internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) + => index switch { - case 0: return GetRedAtZero(ref _transition); - case 1: return GetRed(ref _body, 1); - default: return null; - } - } + 0 => GetRedAtZero(ref _transition), + 1 => GetRed(ref _body, 1), + _ => null + }; + internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) + => index switch { - case 0: return _transition; - case 1: return _body; - default: return null; - } - } - - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitCSharpImplicitExpression(this); - } + 0 => this._transition, + 1 => this._body, + _ => null + }; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitCSharpImplicitExpression(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitCSharpImplicitExpression(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitCSharpImplicitExpression(this); public CSharpImplicitExpressionSyntax Update(CSharpTransitionSyntax transition, CSharpSyntaxNode body) { @@ -3856,103 +2034,60 @@ public CSharpImplicitExpressionSyntax Update(CSharpTransitionSyntax transition, var newNode = SyntaxFactory.CSharpImplicitExpression(transition, body); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } internal override CSharpRazorBlockSyntax WithTransitionCore(CSharpTransitionSyntax transition) => WithTransition(transition); - public new CSharpImplicitExpressionSyntax WithTransition(CSharpTransitionSyntax transition) - { - return Update(transition, Body); - } - + public new CSharpImplicitExpressionSyntax WithTransition(CSharpTransitionSyntax transition) => Update(transition, Body); internal override CSharpRazorBlockSyntax WithBodyCore(CSharpSyntaxNode body) => WithBody(body); - public new CSharpImplicitExpressionSyntax WithBody(CSharpSyntaxNode body) - { - return Update(Transition, body); - } - } + public new CSharpImplicitExpressionSyntax WithBody(CSharpSyntaxNode body) => Update(Transition, body); +} - internal sealed partial class CSharpImplicitExpressionBodySyntax : CSharpSyntaxNode - { - private CSharpCodeBlockSyntax _cSharpCode; +internal sealed partial class CSharpImplicitExpressionBodySyntax : CSharpSyntaxNode +{ + private CSharpCodeBlockSyntax _csharpCode; internal CSharpImplicitExpressionBodySyntax(GreenNode green, SyntaxNode parent, int position) : base(green, parent, position) { } - public CSharpCodeBlockSyntax CSharpCode - { - get - { - return GetRedAtZero(ref _cSharpCode); - } - } + public CSharpCodeBlockSyntax CSharpCode => GetRedAtZero(ref _csharpCode); - internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) - { - case 0: return GetRedAtZero(ref _cSharpCode); - default: return null; - } - } - internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) - { - case 0: return _cSharpCode; - default: return null; - } - } + internal override SyntaxNode GetNodeSlot(int index) => index == 0 ? GetRedAtZero(ref this._csharpCode) : null; - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitCSharpImplicitExpressionBody(this); - } + internal override SyntaxNode GetCachedSlot(int index) => index == 0 ? this._csharpCode : null; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitCSharpImplicitExpressionBody(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitCSharpImplicitExpressionBody(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitCSharpImplicitExpressionBody(this); - public CSharpImplicitExpressionBodySyntax Update(CSharpCodeBlockSyntax cSharpCode) + public CSharpImplicitExpressionBodySyntax Update(CSharpCodeBlockSyntax csharpCode) { - if (cSharpCode != CSharpCode) + if (csharpCode != CSharpCode) { - var newNode = SyntaxFactory.CSharpImplicitExpressionBody(cSharpCode); + var newNode = SyntaxFactory.CSharpImplicitExpressionBody(csharpCode); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } - public CSharpImplicitExpressionBodySyntax WithCSharpCode(CSharpCodeBlockSyntax cSharpCode) - { - return Update(cSharpCode); - } + public CSharpImplicitExpressionBodySyntax WithCSharpCode(CSharpCodeBlockSyntax csharpCode) => Update(csharpCode); - public CSharpImplicitExpressionBodySyntax AddCSharpCodeChildren(params RazorSyntaxNode[] items) - { - return this.WithCSharpCode(this.CSharpCode.WithChildren(this.CSharpCode.Children.AddRange(items))); - } - } + public CSharpImplicitExpressionBodySyntax AddCSharpCodeChildren(params RazorSyntaxNode[] items) => WithCSharpCode(this.CSharpCode.WithChildren(this.CSharpCode.Children.AddRange(items))); +} - internal sealed partial class RazorDirectiveSyntax : CSharpRazorBlockSyntax - { +internal sealed partial class RazorDirectiveSyntax : CSharpRazorBlockSyntax +{ private CSharpTransitionSyntax _transition; private CSharpSyntaxNode _body; @@ -3961,50 +2096,27 @@ internal RazorDirectiveSyntax(GreenNode green, SyntaxNode parent, int position) { } - public override CSharpTransitionSyntax Transition - { - get - { - return GetRedAtZero(ref _transition); - } - } - - public override CSharpSyntaxNode Body - { - get - { - return GetRed(ref _body, 1); - } - } + public override CSharpTransitionSyntax Transition => GetRedAtZero(ref _transition); + public override CSharpSyntaxNode Body => GetRed(ref _body, 1); internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) + => index switch { - case 0: return GetRedAtZero(ref _transition); - case 1: return GetRed(ref _body, 1); - default: return null; - } - } + 0 => GetRedAtZero(ref _transition), + 1 => GetRed(ref _body, 1), + _ => null + }; + internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) + => index switch { - case 0: return _transition; - case 1: return _body; - default: return null; - } - } - - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitRazorDirective(this); - } + 0 => this._transition, + 1 => this._body, + _ => null + }; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitRazorDirective(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitRazorDirective(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitRazorDirective(this); public RazorDirectiveSyntax Update(CSharpTransitionSyntax transition, CSharpSyntaxNode body) { @@ -4013,115 +2125,73 @@ public RazorDirectiveSyntax Update(CSharpTransitionSyntax transition, CSharpSynt var newNode = SyntaxFactory.RazorDirective(transition, body); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } internal override CSharpRazorBlockSyntax WithTransitionCore(CSharpTransitionSyntax transition) => WithTransition(transition); - public new RazorDirectiveSyntax WithTransition(CSharpTransitionSyntax transition) - { - return Update(transition, Body); - } - + public new RazorDirectiveSyntax WithTransition(CSharpTransitionSyntax transition) => Update(transition, Body); internal override CSharpRazorBlockSyntax WithBodyCore(CSharpSyntaxNode body) => WithBody(body); - public new RazorDirectiveSyntax WithBody(CSharpSyntaxNode body) - { - return Update(Transition, body); - } - } + public new RazorDirectiveSyntax WithBody(CSharpSyntaxNode body) => Update(Transition, body); +} - internal sealed partial class RazorDirectiveBodySyntax : CSharpSyntaxNode - { +internal sealed partial class RazorDirectiveBodySyntax : CSharpSyntaxNode +{ private RazorSyntaxNode _keyword; - private CSharpCodeBlockSyntax _cSharpCode; + private CSharpCodeBlockSyntax _csharpCode; internal RazorDirectiveBodySyntax(GreenNode green, SyntaxNode parent, int position) : base(green, parent, position) { } - public RazorSyntaxNode Keyword - { - get - { - return GetRedAtZero(ref _keyword); - } - } - - public CSharpCodeBlockSyntax CSharpCode - { - get - { - return GetRed(ref _cSharpCode, 1); - } - } + public RazorSyntaxNode Keyword => GetRedAtZero(ref _keyword); + public CSharpCodeBlockSyntax CSharpCode => GetRed(ref _csharpCode, 1); internal override SyntaxNode GetNodeSlot(int index) - { - switch (index) + => index switch { - case 0: return GetRedAtZero(ref _keyword); - case 1: return GetRed(ref _cSharpCode, 1); - default: return null; - } - } + 0 => GetRedAtZero(ref _keyword), + 1 => GetRed(ref _csharpCode, 1), + _ => null + }; + internal override SyntaxNode GetCachedSlot(int index) - { - switch (index) + => index switch { - case 0: return _keyword; - case 1: return _cSharpCode; - default: return null; - } - } - - public override TResult Accept(SyntaxVisitor visitor) - { - return visitor.VisitRazorDirectiveBody(this); - } + 0 => this._keyword, + 1 => this._csharpCode, + _ => null + }; - public override void Accept(SyntaxVisitor visitor) - { - visitor.VisitRazorDirectiveBody(this); - } + public override TResult Accept(SyntaxVisitor visitor) => visitor.VisitRazorDirectiveBody(this); + public override void Accept(SyntaxVisitor visitor) => visitor.VisitRazorDirectiveBody(this); - public RazorDirectiveBodySyntax Update(RazorSyntaxNode keyword, CSharpCodeBlockSyntax cSharpCode) + public RazorDirectiveBodySyntax Update(RazorSyntaxNode keyword, CSharpCodeBlockSyntax csharpCode) { - if (keyword != Keyword || cSharpCode != CSharpCode) + if (keyword != Keyword || csharpCode != CSharpCode) { - var newNode = SyntaxFactory.RazorDirectiveBody(keyword, cSharpCode); + var newNode = SyntaxFactory.RazorDirectiveBody(keyword, csharpCode); var diagnostics = GetDiagnostics(); if (diagnostics != null && diagnostics.Length > 0) - newNode = newNode.WithDiagnostics(diagnostics); + newNode = newNode.WithDiagnostics(diagnostics); var annotations = GetAnnotations(); - if (annotations != null && annotations.Length > 0) - return newNode.WithAnnotations(annotations); - return newNode; + return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode; } return this; } - public RazorDirectiveBodySyntax WithKeyword(RazorSyntaxNode keyword) - { - return Update(keyword, CSharpCode); - } - - public RazorDirectiveBodySyntax WithCSharpCode(CSharpCodeBlockSyntax cSharpCode) - { - return Update(Keyword, cSharpCode); - } + public RazorDirectiveBodySyntax WithKeyword(RazorSyntaxNode keyword) => Update(keyword, CSharpCode); + public RazorDirectiveBodySyntax WithCSharpCode(CSharpCodeBlockSyntax csharpCode) => Update(Keyword, csharpCode); public RazorDirectiveBodySyntax AddCSharpCodeChildren(params RazorSyntaxNode[] items) { - var _cSharpCode = this.CSharpCode ?? SyntaxFactory.CSharpCodeBlock(); - return this.WithCSharpCode(_cSharpCode.WithChildren(_cSharpCode.Children.AddRange(items))); + var _csharpCode = this.CSharpCode ?? SyntaxFactory.CSharpCodeBlock(); + return this.WithCSharpCode(_csharpCode.WithChildren(_csharpCode.Children.AddRange(items))); } - } } diff --git a/src/razor/src/Compiler/tools/RazorSyntaxGenerator/AbstractFileWriter.cs b/src/razor/src/Compiler/tools/RazorSyntaxGenerator/AbstractFileWriter.cs index 419f9ed6927..ca71ead19ae 100644 --- a/src/razor/src/Compiler/tools/RazorSyntaxGenerator/AbstractFileWriter.cs +++ b/src/razor/src/Compiler/tools/RazorSyntaxGenerator/AbstractFileWriter.cs @@ -40,12 +40,12 @@ protected AbstractFileWriter(TextWriter writer, Tree tree) #region Output helpers - protected void Indent() + protected void IncreaseIndent() { _indentLevel++; } - protected void Unindent() + protected void DescreaseIndent() { if (_indentLevel <= 0) { @@ -54,6 +54,24 @@ protected void Unindent() _indentLevel--; } + protected IndentScope Indent() => new(this); + + protected readonly ref struct IndentScope + { + private readonly AbstractFileWriter _writer; + + public IndentScope(AbstractFileWriter writer) + { + _writer = writer; + _writer.IncreaseIndent(); + } + + public readonly void Dispose() + { + _writer.DescreaseIndent(); + } + } + protected void Write(string msg) { WriteIndentIfNeeded(); @@ -71,9 +89,30 @@ protected void WriteLine() WriteLine(""); } + protected void WriteIndentedLine(string msg) + { + using (Indent()) + { + WriteLine(msg); + } + } + + protected void WriteIndentedLine(string msg, params object[] args) + { + using (Indent()) + { + WriteLine(msg, args); + } + } + protected void WriteLine(string msg) { - WriteIndentIfNeeded(); + if (msg.Length > 0) + { + // Don't write the indent if we're writing a blank line. + WriteIndentIfNeeded(); + } + _writer.WriteLine(msg); _needIndent = true; //need an indent after each line break } @@ -94,16 +133,74 @@ private void WriteIndentIfNeeded() } } + /// + /// Writes all with each value separated by a comma. + /// + /// + /// Values can be either s or s of + /// . All of these are flattened into a single sequence that is joined. + /// Empty strings are ignored. + /// + protected void WriteCommaSeparatedList(params IEnumerable values) + { + Write(CommaJoin(values)); + } + + /// + /// Joins all the values together in into one string with each + /// value separated by a comma. Values can be either s or s of . All of these are flattened into a + /// single sequence that is joined. Empty strings are ignored. + /// + protected static string CommaJoin(params IEnumerable values) + => Join(", ", values); + + protected static string Join(string separator, params IEnumerable values) + => string.Join(separator, values.SelectMany(v => (v switch + { + string s => [s], + IEnumerable ss => ss, + _ => throw new InvalidOperationException("Join must be passed strings or collections of strings") + }).Where(s => s != ""))); + protected void OpenBlock() { WriteLine("{"); - Indent(); + IncreaseIndent(); + } + + protected void CloseBlock(bool addSemicolon = false) + { + DescreaseIndent(); + + if (addSemicolon) + { + WriteLine("};"); + } + else + { + WriteLine("}"); + } } - protected void CloseBlock() + protected BlockScope Block(bool addSemicolon = false) => new(this, addSemicolon); + + protected readonly ref struct BlockScope { - Unindent(); - WriteLine("}"); + private readonly AbstractFileWriter _writer; + private readonly bool _addSemicolon; + + public BlockScope(AbstractFileWriter writer, bool addSemicolon) + { + _writer = writer; + _addSemicolon = addSemicolon; + _writer.OpenBlock(); + } + + public readonly void Dispose() + { + _writer.CloseBlock(_addSemicolon); + } } #endregion Output helpers @@ -234,10 +331,16 @@ protected static bool HasErrors(Node n) protected static string CamelCase(string name) { - if (char.IsUpper(name[0])) + // Special logic to handle 'CSharp' correctly + if (name.StartsWith("CSharp", StringComparison.OrdinalIgnoreCase)) { - name = char.ToLowerInvariant(name[0]) + name.Substring(1); + name = "csharp" + name[6..]; } + else if (char.IsUpper(name[0])) + { + name = char.ToLowerInvariant(name[0]) + name[1..]; + } + return FixKeyword(name); } diff --git a/src/razor/src/Compiler/tools/RazorSyntaxGenerator/Properties/launchSettings.json b/src/razor/src/Compiler/tools/RazorSyntaxGenerator/Properties/launchSettings.json new file mode 100644 index 00000000000..5c210341bf8 --- /dev/null +++ b/src/razor/src/Compiler/tools/RazorSyntaxGenerator/Properties/launchSettings.json @@ -0,0 +1,8 @@ +{ + "profiles": { + "RazorSyntaxGenerator": { + "commandName": "Project", + "commandLineArgs": "\"$(RepositoryRoot)\\src\\Compiler\\Microsoft.CodeAnalysis.Razor.Compiler\\src\\Language\\Syntax\\Syntax.xml\" \"$(RepositoryRoot)\\src\\Compiler\\Microsoft.CodeAnalysis.Razor.Compiler\\src\\Language\\Syntax\\Generated\\\"" + } + } +} \ No newline at end of file diff --git a/src/razor/src/Compiler/tools/RazorSyntaxGenerator/SourceWriter.cs b/src/razor/src/Compiler/tools/RazorSyntaxGenerator/SourceWriter.cs index 8df3ea1bd84..fb71d151127 100644 --- a/src/razor/src/Compiler/tools/RazorSyntaxGenerator/SourceWriter.cs +++ b/src/razor/src/Compiler/tools/RazorSyntaxGenerator/SourceWriter.cs @@ -5,7 +5,6 @@ using System; using System.Collections.Generic; -using System.Globalization; using System.IO; using System.Linq; using System.Xml; @@ -30,10 +29,7 @@ private void WriteFileHeader() WriteLine("// "); WriteLine(); WriteLine("using System;"); - WriteLine("using System.Collections;"); WriteLine("using System.Collections.Generic;"); - WriteLine("using System.Linq;"); - WriteLine("using System.Threading;"); WriteLine("using Microsoft.AspNetCore.Razor.Language.Legacy;"); WriteLine(); } @@ -42,501 +38,446 @@ private void WriteInternal() { WriteFileHeader(); - WriteLine("namespace Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax"); - WriteLine("{"); - WriteLine(); + WriteLine("namespace Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax;"); + WriteGreenTypes(); WriteGreenVisitors(); WriteGreenRewriter(); WriteStaticGreenFactories(); - WriteLine("}"); } private void WriteSyntax() { WriteFileHeader(); - WriteLine(); - WriteLine("namespace Microsoft.AspNetCore.Razor.Language.Syntax"); - WriteLine("{"); - WriteLine(); + WriteLine("namespace Microsoft.AspNetCore.Razor.Language.Syntax;"); + WriteRedTypes(); - WriteLine("}"); } private void WriteMain() { WriteFileHeader(); - WriteLine(); - WriteLine("namespace Microsoft.AspNetCore.Razor.Language.Syntax"); - WriteLine("{"); - //WriteLine(" using Microsoft.AspNetCore.Razor.Language.Syntax;"); - //WriteLine(); + WriteLine("namespace Microsoft.AspNetCore.Razor.Language.Syntax;"); + WriteRedVisitors(); WriteRedRewriter(); WriteRedFactories(); - WriteLine("}"); } private void WriteGreenTypes() { - var nodes = Tree.Types.Where(n => !(n is PredefinedNode)).ToList(); - for (int i = 0, n = nodes.Count; i < n; i++) + var nodes = Tree.Types.Where(n => n is not PredefinedNode).ToList(); + + foreach (var node in nodes) { - var node = nodes[i]; WriteLine(); WriteGreenType(node); } } - private void WriteGreenType(TreeType node) + private void WriteGreenType(TreeType greenType) { - WriteComment(node.TypeComment, " "); + WriteComment(greenType.TypeComment); - if (node is AbstractNode) + switch (greenType) { - AbstractNode nd = (AbstractNode)node; - WriteLine(" internal abstract partial class {0} : {1}", node.Name, node.Base == "SyntaxNode" ? "GreenNode" : node.Base); - WriteLine(" {"); + case AbstractNode abstractNode: + { + WriteLine($"internal abstract partial class {abstractNode.Name} : {(abstractNode.Base == "SyntaxNode" ? "GreenNode" : abstractNode.Base)}"); + using (Block()) + { + // ctor with diagnostics and annotations + WriteLine($"internal {abstractNode.Name}(SyntaxKind kind, RazorDiagnostic[] diagnostics, SyntaxAnnotation[] annotations)"); + WriteIndentedLine(": base(kind, diagnostics, annotations)"); + using (Block()) + { + if (abstractNode.Name == "DirectiveTriviaSyntax") + { + WriteLine("_flags |= NodeFlags.ContainsDirectives;"); + } + } - // ctor with diagnostics and annotations - WriteLine(" internal {0}(SyntaxKind kind, RazorDiagnostic[] diagnostics, SyntaxAnnotation[] annotations)", node.Name); - WriteLine(" : base(kind, diagnostics, annotations)"); - WriteLine(" {"); - if (node.Name == "DirectiveTriviaSyntax") - { - WriteLine(" _flags |= NodeFlags.ContainsDirectives;"); - } - WriteLine(" }"); + WriteLine(); - // ctor without diagnostics and annotations - WriteLine(" internal {0}(SyntaxKind kind)", node.Name); - WriteLine(" : base(kind)"); - WriteLine(" {"); - if (node.Name == "DirectiveTriviaSyntax") - { - WriteLine(" _flags |= NodeFlags.ContainsDirectives;"); - } - WriteLine(" }"); + // ctor without diagnostics and annotations + WriteLine($"internal {abstractNode.Name}(SyntaxKind kind)"); + WriteIndentedLine(": base(kind)"); + using (Block()) + { + if (abstractNode.Name == "DirectiveTriviaSyntax") + { + WriteLine("_flags |= NodeFlags.ContainsDirectives;"); + } + } - /* Remove - // object reader constructor - WriteLine(); - WriteLine(" protected {0}(ObjectReader reader)", node.Name); - WriteLine(" : base(reader)"); - WriteLine(" {"); - if (node.Name == "DirectiveTriviaSyntax") - { - WriteLine(" _flags |= NodeFlags.ContainsDirectives;"); - } - WriteLine(" }"); */ + /* Remove + // object reader constructor + WriteLine(); + WriteLine(" protected {0}(ObjectReader reader)", node.Name); + WriteLine(" : base(reader)"); + WriteLine(" {"); + if (node.Name == "DirectiveTriviaSyntax") + { + WriteLine(" _flags |= NodeFlags.ContainsDirectives;"); + } + WriteLine(" }"); */ - var valueFields = nd.Fields.Where(n => !IsNodeOrNodeList(n.Type)).ToList(); - var nodeFields = nd.Fields.Where(n => IsNodeOrNodeList(n.Type)).ToList(); + var valueFields = abstractNode.Fields.Where(n => !IsNodeOrNodeList(n.Type)).ToList(); + var nodeFields = abstractNode.Fields.Where(n => IsNodeOrNodeList(n.Type)).ToList(); - for (int i = 0, n = nodeFields.Count; i < n; i++) - { - var field = nodeFields[i]; - if (IsNodeOrNodeList(field.Type)) - { - WriteLine(); - WriteComment(field.PropertyComment, " "); + for (int i = 0, n = nodeFields.Count; i < n; i++) + { + var field = nodeFields[i]; + if (IsNodeOrNodeList(field.Type)) + { + WriteLine(); + WriteComment(field.PropertyComment); - if (IsSeparatedNodeList(field.Type) || - IsNodeList(field.Type)) - { - WriteLine(" public abstract {0}{1} {2} {{ get; }}", - (IsNew(field) ? "new " : ""), field.Type, field.Name); - } - else - { - WriteLine(" public abstract {0}{1} {2} {{ get; }}", - (IsNew(field) ? "new " : ""), field.Type, field.Name); + if (IsSeparatedNodeList(field.Type) || + IsNodeList(field.Type)) + { + WriteLine($"public abstract {(IsNew(field) ? "new " : "")}{field.Type} {field.Name} {{ get; }}"); + } + else + { + WriteLine($"public abstract {(IsNew(field) ? "new " : "")}{field.Type} {field.Name} {{ get; }}"); + } + } + } + + for (int i = 0, n = valueFields.Count; i < n; i++) + { + var field = valueFields[i]; + WriteLine(); + WriteComment(field.PropertyComment); + + WriteLine($"public abstract {(IsNew(field) ? "new " : "")}{field.Type} {field.Name} {{ get; }}"); + } } + + break; } - } - for (int i = 0, n = valueFields.Count; i < n; i++) - { - var field = valueFields[i]; - WriteLine(); - WriteComment(field.PropertyComment, " "); + case Node node: + { + WriteLine("internal sealed partial class {0} : {1}", node.Name, node.Base); + using (Block()) + { + var valueFields = node.Fields.Where(n => !IsNodeOrNodeList(n.Type)).ToList(); + var nodeFields = node.Fields.Where(n => IsNodeOrNodeList(n.Type)).ToList(); - WriteLine(" public abstract {0}{1} {2} {{ get; }}", - (IsNew(field) ? "new " : ""), field.Type, field.Name); - } + for (int i = 0, n = nodeFields.Count; i < n; i++) + { + var field = nodeFields[i]; + var type = GetFieldType(field, green: true); + WriteLine("private readonly {0} {1};", type, GetFieldName(field)); + } - WriteLine(" }"); - } - else if (node is Node) - { - Node nd = (Node)node; + for (int i = 0, n = valueFields.Count; i < n; i++) + { + var field = valueFields[i]; + WriteLine("private readonly {0} {1};", field.Type, GetFieldName(field)); + } - WriteLine(" internal sealed partial class {0} : {1}", node.Name, node.Base); - WriteLine(" {"); + // write constructor with diagnostics and annotations + WriteLine(); + Write("internal {0}(SyntaxKind kind", node.Name); - var valueFields = nd.Fields.Where(n => !IsNodeOrNodeList(n.Type)).ToList(); - var nodeFields = nd.Fields.Where(n => IsNodeOrNodeList(n.Type)).ToList(); + WriteGreenNodeConstructorArgs(nodeFields, valueFields); - for (int i = 0, n = nodeFields.Count; i < n; i++) - { - var field = nodeFields[i]; - var type = GetFieldType(field, green: true); - WriteLine(" private readonly {0} {1};", type, UnderscoreCamelCase(field.Name)); - } + WriteLine(", RazorDiagnostic[] diagnostics, SyntaxAnnotation[] annotations)"); + WriteIndentedLine(": base(kind, diagnostics, annotations)"); + using (Block()) + { + WriteCtorBody(valueFields, nodeFields); + } - for (int i = 0, n = valueFields.Count; i < n; i++) - { - var field = valueFields[i]; - WriteLine(" private readonly {0} {1};", field.Type, UnderscoreCamelCase(field.Name)); - } + /* Remove + // write constructor with async + WriteLine(); + Write(" internal {0}(SyntaxKind kind", node.Name); - // write constructor with diagnostics and annotations - WriteLine(); - Write(" internal {0}(SyntaxKind kind", node.Name); + WriteGreenNodeConstructorArgs(nodeFields, valueFields); - WriteGreenNodeConstructorArgs(nodeFields, valueFields); + WriteLine(", SyntaxFactoryContext context)"); + WriteLine(" : base(kind)"); + WriteLine(" {"); + WriteLine(" this.SetFactoryContext(context);"); + WriteCtorBody(valueFields, nodeFields); + WriteLine(" }"); + WriteLine(); */ - WriteLine(", RazorDiagnostic[] diagnostics, SyntaxAnnotation[] annotations)"); - WriteLine(" : base(kind, diagnostics, annotations)"); - WriteLine(" {"); - WriteCtorBody(valueFields, nodeFields); - WriteLine(" }"); - WriteLine(); + // write constructor without diagnostics and annotations + WriteLine(); + Write("internal {0}(SyntaxKind kind", node.Name); - /* Remove - // write constructor with async - WriteLine(); - Write(" internal {0}(SyntaxKind kind", node.Name); + WriteGreenNodeConstructorArgs(nodeFields, valueFields); - WriteGreenNodeConstructorArgs(nodeFields, valueFields); + WriteLine(")"); + WriteIndentedLine(": base(kind)"); + using (Block()) + { + WriteCtorBody(valueFields, nodeFields); + } - WriteLine(", SyntaxFactoryContext context)"); - WriteLine(" : base(kind)"); - WriteLine(" {"); - WriteLine(" this.SetFactoryContext(context);"); - WriteCtorBody(valueFields, nodeFields); - WriteLine(" }"); - WriteLine(); */ + WriteLine(); - // write constructor without diagnostics and annotations - WriteLine(); - Write(" internal {0}(SyntaxKind kind", node.Name); + // property accessors + foreach (var field in nodeFields) + { + var type = field.Type; - WriteGreenNodeConstructorArgs(nodeFields, valueFields); + WriteComment(field.PropertyComment); - WriteLine(")"); - WriteLine(" : base(kind)"); - WriteLine(" {"); - WriteCtorBody(valueFields, nodeFields); - WriteLine(" }"); - WriteLine(); + if (IsNodeList(type)) + { + WriteLine($"public {OverrideOrNewModifier(field)}{type} {field.Name} => new {type}({GetFieldName(field)});"); + } + else if (IsSeparatedNodeList(type)) + { + WriteLine($"public {OverrideOrNewModifier(field)}{type} {field.Name} => new {type}(new SyntaxList({GetFieldName(field)}));"); + } + else if (type == "SyntaxNodeOrTokenList") + { + WriteLine($"public {OverrideOrNewModifier(field)}SyntaxList {field.Name} => new SyntaxList({GetFieldName(field)});"); + } + else + { + WriteLine($"public {OverrideOrNewModifier(field)}{type} {field.Name} => {GetFieldName(field)};"); + } + } - // property accessors - for (int i = 0, n = nodeFields.Count; i < n; i++) - { - var field = nodeFields[i]; - WriteComment(field.PropertyComment, " "); - if (IsNodeList(field.Type)) - { - WriteLine(" public {0}{1} {2} {{ get {{ return new {1}({3}); }} }}", - OverrideOrNewModifier(field), field.Type, field.Name, UnderscoreCamelCase(field.Name) - ); - } - else if (IsSeparatedNodeList(field.Type)) - { - WriteLine(" public {0}{1} {2} {{ get {{ return new {1}(new SyntaxList({3})); }} }}", - OverrideOrNewModifier(field), field.Type, field.Name, UnderscoreCamelCase(field.Name), i - ); - } - else if (field.Type == "SyntaxNodeOrTokenList") - { - WriteLine(" public {0}SyntaxList {1} {{ get {{ return new SyntaxList({2}); }} }}", - OverrideOrNewModifier(field), field.Name, UnderscoreCamelCase(field.Name) - ); - } - else - { - WriteLine(" public {0}{1} {2} {{ get {{ return {3}; }} }}", - OverrideOrNewModifier(field), field.Type, field.Name, UnderscoreCamelCase(field.Name) - ); - } - } + foreach (var field in valueFields) + { + WriteComment(field.PropertyComment); + WriteLine($"public {OverrideOrNewModifier(field)}{field.Type} {field.Name} => {GetFieldName(field)};"); + } - for (int i = 0, n = valueFields.Count; i < n; i++) - { - var field = valueFields[i]; - WriteComment(field.PropertyComment, " "); - WriteLine(" public {0}{1} {2} {{ get {{ return {3}; }} }}", - OverrideOrNewModifier(field), field.Type, field.Name, UnderscoreCamelCase(field.Name) - ); - } + // GetSlot + WriteLine(); + Write("internal override GreenNode GetSlot(int index)"); - // GetSlot - WriteLine(); - WriteLine(" internal override GreenNode GetSlot(int index)"); - WriteLine(" {"); - WriteLine(" switch (index)"); - WriteLine(" {"); - for (int i = 0, n = nodeFields.Count; i < n; i++) - { - var field = nodeFields[i]; - WriteLine(" case {0}: return {1};", i, UnderscoreCamelCase(field.Name)); - } - WriteLine(" default: return null;"); - WriteLine(" }"); - WriteLine(" }"); + if (nodeFields.Count == 0) + { + WriteLine(" => null;"); + } + else if (nodeFields.Count == 1) + { + WriteLine(); + WriteIndentedLine($"=> index == 0 ? this.{GetFieldName(nodeFields[0])} : null;"); + } + else + { + WriteLine(); + using (Indent()) + { + WriteLine("=> index switch"); + using (Block(addSemicolon: true)) + { + for (int i = 0, n = nodeFields.Count; i < n; i++) + { + var field = nodeFields[i]; + WriteLine($"{i} => {GetFieldName(field)},"); + } - WriteLine(); - WriteLine(" internal override SyntaxNode CreateRed(SyntaxNode parent, int position)"); - WriteLine(" {"); - WriteLine(" return new Syntax.{0}(this, parent, position);", node.Name); - WriteLine(" }"); + WriteLine("_ => null"); + } + } + } - WriteGreenAcceptMethods(nd); - WriteGreenUpdateMethod(nd); - WriteSetDiagnostics(nd); - WriteSetAnnotations(nd); + WriteLine(); + WriteLine($"internal override SyntaxNode CreateRed(SyntaxNode parent, int position) => new Syntax.{node.Name}(this, parent, position);"); - WriteLine(" }"); + WriteGreenAcceptMethods(node); + WriteGreenUpdateMethod(node); + WriteSetDiagnostics(node); + WriteSetAnnotations(node); + } + + break; + } } } private void WriteGreenNodeConstructorArgs(List nodeFields, List valueFields) { - for (int i = 0, n = nodeFields.Count; i < n; i++) + foreach (var field in nodeFields) { - var field = nodeFields[i]; - string type = GetFieldType(field, green: true); + var type = GetFieldType(field, green: true); - Write(", {0} {1}", type, CamelCase(field.Name)); + Write($", {type} {GetParameterName(field)}"); } - for (int i = 0, n = valueFields.Count; i < n; i++) + foreach (var field in valueFields) { - var field = valueFields[i]; - Write(", {0} {1}", field.Type, CamelCase(field.Name)); + Write($", {field.Type} {GetParameterName(field)}"); } } private void WriteCtorBody(List valueFields, List nodeFields) { // constructor body - WriteLine(" SlotCount = {0};", nodeFields.Count); + WriteLine("SlotCount = {0};", nodeFields.Count); - for (int i = 0, n = nodeFields.Count; i < n; i++) + foreach (var field in nodeFields) { - var field = nodeFields[i]; if (IsAnyList(field.Type) || IsOptional(field)) { - WriteLine(" if ({0} != null)", CamelCase(field.Name)); - WriteLine(" {"); - WriteLine(" AdjustFlagsAndWidth({0});", CamelCase(field.Name)); - WriteLine(" {0} = {1};", UnderscoreCamelCase(field.Name), CamelCase(field.Name)); - WriteLine(" }"); + WriteLine($"if ({GetParameterName(field)} != null)"); + + using (Block()) + { + WriteLine($"AdjustFlagsAndWidth({GetParameterName(field)});"); + WriteLine($"{GetFieldName(field)} = {GetParameterName(field)};"); + } } else { - WriteLine(" AdjustFlagsAndWidth({0});", CamelCase(field.Name)); - WriteLine(" {0} = {1};", UnderscoreCamelCase(field.Name), CamelCase(field.Name)); + WriteLine($"AdjustFlagsAndWidth({GetParameterName(field)});"); + WriteLine($"{GetFieldName(field)} = {GetParameterName(field)};"); } } - for (int i = 0, n = valueFields.Count; i < n; i++) + foreach (var field in valueFields) { - var field = valueFields[i]; - WriteLine(" {0} = {1};", UnderscoreCamelCase(field.Name), CamelCase(field.Name)); + WriteLine($"{GetFieldName(field)} = {GetParameterName(field)};"); } } private void WriteSetAnnotations(Node node) { WriteLine(); - WriteLine(" internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations)"); - WriteLine(" {"); - - Write(" return new {0}(", node.Name); - Write("Kind, "); - for (int f = 0; f < node.Fields.Count; f++) - { - var field = node.Fields[f]; - if (f > 0) - { - Write(", "); - } - - Write("{0}", UnderscoreCamelCase(field.Name)); + WriteLine("internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations)"); + using (Indent()) + { + Write($"=> new {node.Name}("); + WriteCommaSeparatedList( + "Kind", + node.Fields.Select(GetFieldName), + "GetDiagnostics()", + "annotations"); + WriteLine(");"); } - WriteLine(", GetDiagnostics(), annotations);"); - WriteLine(" }"); } private void WriteSetDiagnostics(Node node) { WriteLine(); - WriteLine(" internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics)"); - WriteLine(" {"); - - Write(" return new {0}(", node.Name); - Write("Kind, "); - for (int f = 0; f < node.Fields.Count; f++) - { - var field = node.Fields[f]; - if (f > 0) - { - Write(", "); - } - - Write("{0}", UnderscoreCamelCase(field.Name)); + WriteLine("internal override GreenNode SetDiagnostics(RazorDiagnostic[] diagnostics)"); + using (Indent()) + { + Write($"=> new {node.Name}("); + WriteCommaSeparatedList( + "Kind", + node.Fields.Select(GetFieldName), + "diagnostics", + "GetAnnotations()"); + WriteLine(");"); } - WriteLine(", diagnostics, GetAnnotations());"); - WriteLine(" }"); } private void WriteGreenAcceptMethods(Node node) { - //WriteLine(); - //WriteLine(" public override TResult Accept(SyntaxVisitor visitor, TArgument argument)"); - //WriteLine(" {"); - //WriteLine(" return visitor.Visit{0}(this, argument);", StripPost(node.Name, "Syntax")); - //WriteLine(" }"); WriteLine(); - WriteLine(" public override TResult Accept(SyntaxVisitor visitor)"); - WriteLine(" {"); - WriteLine(" return visitor.Visit{0}(this);", StripPost(node.Name, "Syntax")); - WriteLine(" }"); - WriteLine(); - WriteLine(" public override void Accept(SyntaxVisitor visitor)"); - WriteLine(" {"); - WriteLine(" visitor.Visit{0}(this);", StripPost(node.Name, "Syntax")); - WriteLine(" }"); + WriteLine($"public override TResult Accept(SyntaxVisitor visitor) => visitor.Visit{StripPost(node.Name, "Syntax")}(this);"); + WriteLine($"public override void Accept(SyntaxVisitor visitor) => visitor.Visit{StripPost(node.Name, "Syntax")}(this);"); } private void WriteGreenVisitors() { - //WriteGreenVisitor(true, true); - //WriteLine(); - WriteGreenVisitor(false, true); - WriteLine(); - WriteGreenVisitor(false, false); + WriteGreenVisitor(withResult: true); + WriteGreenVisitor(withResult: false); } - private void WriteGreenVisitor(bool withArgument, bool withResult) + private void WriteGreenVisitor(bool withResult) { - var nodes = Tree.Types.Where(n => !(n is PredefinedNode)).ToList(); + var nodes = Tree.Types.Where(n => n is not PredefinedNode).ToList(); WriteLine(); - WriteLine(" internal partial class SyntaxVisitor" + (withResult ? "<" + (withArgument ? "TArgument, " : "") + "TResult>" : "")); - WriteLine(" {"); - int nWritten = 0; - for (int i = 0, n = nodes.Count; i < n; i++) + WriteLine("internal partial class SyntaxVisitor" + (withResult ? "" : "")); + using (Block()) { - if (nodes[i] is Node node) + foreach (var node in nodes.OfType()) { - if (nWritten > 0) - { - WriteLine(); - } - - nWritten++; - WriteLine(" public virtual " + (withResult ? "TResult" : "void") + " Visit{0}({1} node{2})", StripPost(node.Name, "Syntax"), node.Name, withArgument ? ", TArgument argument" : ""); - WriteLine(" {"); - WriteLine(" " + (withResult ? "return " : "") + "DefaultVisit(node{0});", withArgument ? ", argument" : ""); - WriteLine(" }"); + WriteLine($"public virtual {(withResult ? "TResult" : "void")} Visit{StripPost(node.Name, "Syntax")}({node.Name} node) => DefaultVisit(node);"); } } - WriteLine(" }"); } private void WriteGreenUpdateMethod(Node node) { WriteLine(); - Write(" public {0} Update(", node.Name); + Write($"public {node.Name} Update("); // parameters - for (int f = 0; f < node.Fields.Count; f++) + WriteCommaSeparatedList(node.Fields.Select(static f => { - var field = node.Fields[f]; - if (f > 0) - { - Write(", "); - } - var type = - field.Type == "SyntaxNodeOrTokenList" ? "Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList" : - field.Type == "SyntaxTokenList" ? "Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax.SyntaxList" : - IsNodeList(field.Type) ? "Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax." + field.Type : - IsSeparatedNodeList(field.Type) ? "Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax." + field.Type : - field.Type; - - Write("{0} {1}", type, CamelCase(field.Name)); - } + f.Type == "SyntaxNodeOrTokenList" ? "InternalSyntax.SyntaxList" : + f.Type == "SyntaxTokenList" ? "InternalSyntax.SyntaxList" : + IsNodeList(f.Type) ? "InternalSyntax." + f.Type : + IsSeparatedNodeList(f.Type) ? "InternalSyntax." + f.Type : + f.Type; + + return $"{type} {GetParameterName(f)}"; + })); WriteLine(")"); - WriteLine(" {"); - Write(" if ("); - int nCompared = 0; - for (int f = 0; f < node.Fields.Count; f++) + using (Block()) { - var field = node.Fields[f]; - if (IsDerivedOrListOfDerived("SyntaxNode", field.Type) || IsDerivedOrListOfDerived("SyntaxToken", field.Type) || field.Type == "SyntaxNodeOrTokenList") + Write("if ("); + int nCompared = 0; + foreach (var field in node.Fields) { - if (nCompared > 0) + if (IsDerivedOrListOfDerived("SyntaxNode", field.Type) || IsDerivedOrListOfDerived("SyntaxToken", field.Type) || field.Type == "SyntaxNodeOrTokenList") { - Write(" || "); - } + if (nCompared > 0) + { + Write(" || "); + } - Write("{0} != {1}", CamelCase(field.Name), field.Name); - nCompared++; - } - } - if (nCompared > 0) - { - WriteLine(")"); - WriteLine(" {"); - Write(" var newNode = SyntaxFactory.{0}(", StripPost(node.Name, "Syntax")); - if (node.Kinds.Count > 1) - { - Write("Kind, "); + Write($"{GetParameterName(field)} != {field.Name}"); + nCompared++; + } } - for (int f = 0; f < node.Fields.Count; f++) + if (nCompared > 0) { - var field = node.Fields[f]; - if (f > 0) + WriteLine(")"); + using (Block()) { - Write(", "); - } + Write($"var newNode = SyntaxFactory.{StripPost(node.Name, "Syntax")}("); + WriteCommaSeparatedList( + node.Kinds.Count > 1 ? "Kind" : "", + node.Fields.Select(GetParameterName)); - Write(CamelCase(field.Name)); + WriteLine(");"); + WriteLine("var diags = GetDiagnostics();"); + WriteLine("if (diags != null && diags.Length > 0)"); + WriteIndentedLine("newNode = newNode.WithDiagnosticsGreen(diags);"); + WriteLine("var annotations = GetAnnotations();"); + WriteLine("if (annotations != null && annotations.Length > 0)"); + WriteIndentedLine("newNode = newNode.WithAnnotationsGreen(annotations);"); + WriteLine("return newNode;"); + } } - WriteLine(");"); - WriteLine(" var diags = GetDiagnostics();"); - WriteLine(" if (diags != null && diags.Length > 0)"); - WriteLine(" newNode = newNode.WithDiagnosticsGreen(diags);"); - WriteLine(" var annotations = GetAnnotations();"); - WriteLine(" if (annotations != null && annotations.Length > 0)"); - WriteLine(" newNode = newNode.WithAnnotationsGreen(annotations);"); - WriteLine(" return newNode;"); - WriteLine(" }"); - } - WriteLine(); - WriteLine(" return this;"); - WriteLine(" }"); + WriteLine(); + WriteLine("return this;"); + } } private void WriteGreenRewriter() { - var nodes = Tree.Types.Where(n => !(n is PredefinedNode)).ToList(); + var nodes = Tree.Types.Where(n => n is not PredefinedNode).ToList(); WriteLine(); - WriteLine(" internal partial class SyntaxRewriter : SyntaxVisitor"); - WriteLine(" {"); - int nWritten = 0; - for (int i = 0, n = nodes.Count; i < n; i++) + WriteLine("internal partial class SyntaxRewriter : SyntaxVisitor"); + using (Block()) { - if (nodes[i] is Node node) + var nWritten = 0; + foreach (var node in nodes.OfType()) { var nodeFields = node.Fields.Where(nd => IsNodeOrNodeList(nd.Type)).ToList(); @@ -546,64 +487,49 @@ private void WriteGreenRewriter() } nWritten++; - WriteLine(" public override GreenNode Visit{0}({1} node)", StripPost(node.Name, "Syntax"), node.Name); - WriteLine(" {"); - for (int f = 0; f < nodeFields.Count; f++) + WriteLine($"public override GreenNode Visit{StripPost(node.Name, "Syntax")}({node.Name} node)"); + + using (Indent()) { - var field = nodeFields[f]; - if (IsAnyList(field.Type)) + if (nodeFields.Count == 0) { - WriteLine(" var {0} = VisitList(node.{1});", CamelCase(field.Name), field.Name); + WriteLine("=> node;"); } else { - WriteLine(" var {0} = ({1})Visit(node.{2});", CamelCase(field.Name), field.Type, field.Name); - } - } - if (nodeFields.Count > 0) - { - Write(" return node.Update("); - for (int f = 0; f < node.Fields.Count; f++) - { - var field = node.Fields[f]; - if (f > 0) + Write("=> node.Update("); + WriteCommaSeparatedList(node.Fields.Select(f => { - Write(", "); - } - - if (IsNodeOrNodeList(field.Type)) - { - Write(CamelCase(field.Name)); - } - else - { - Write("node.{0}", field.Name); - } + if (IsAnyList(f.Type)) + { + return $"VisitList(node.{f.Name})"; + } + else if (IsNode(f.Type)) + { + return $"({f.Type})Visit(node.{f.Name})"; + } + else + { + return $"node.{f.Name}"; + } + })); + WriteLine(");"); } - WriteLine(");"); } - else - { - WriteLine(" return node;"); - } - WriteLine(" }"); } } - WriteLine(" }"); } private void WriteStaticGreenFactories() { - var nodes = Tree.Types.Where(n => !(n is PredefinedNode) && !(n is AbstractNode)).ToList(); + var nodes = Tree.Types.Where(n => n is not (PredefinedNode or AbstractNode)).ToList(); WriteLine(); - WriteLine(" internal static partial class SyntaxFactory"); - WriteLine(" {"); - - WriteGreenFactories(nodes); - - WriteGreenTypeList(); - - WriteLine(" }"); + WriteLine("internal static partial class SyntaxFactory"); + using (Block()) + { + WriteGreenFactories(nodes); + WriteGreenTypeList(); + } } private void WriteGreenFactories(List nodes, bool withSyntaxFactoryContext = false) @@ -611,7 +537,9 @@ private void WriteGreenFactories(List nodes, bool withSyntaxFactoryCon for (int i = 0, n = nodes.Count; i < n; i++) { var node = nodes[i]; + WriteGreenFactory((Node)node, withSyntaxFactoryContext); + if (i < n - 1) { WriteLine(); @@ -622,162 +550,183 @@ private void WriteGreenFactories(List nodes, bool withSyntaxFactoryCon private void WriteGreenTypeList() { WriteLine(); - WriteLine(" internal static IEnumerable GetNodeTypes()"); - WriteLine(" {"); - WriteLine(" return new Type[] {"); - - var nodes = Tree.Types.Where(n => !(n is PredefinedNode) && !(n is AbstractNode)).ToList(); - for (int i = 0, n = nodes.Count; i < n; i++) + WriteLine("internal static IEnumerable GetNodeTypes()"); + using (Block()) { - var node = nodes[i]; - Write(" typeof({0})", node.Name); - if (i < n - 1) + WriteLine("return new Type[]"); + + using (Block(addSemicolon: true)) { - Write(","); - } + var nodes = Tree.Types.Where(n => n is not PredefinedNode and not AbstractNode).ToList(); + for (int i = 0, n = nodes.Count; i < n; i++) + { + var node = nodes[i]; + Write($"typeof({node.Name})"); + if (i < n - 1) + { + Write(","); + } - WriteLine(); + WriteLine(); + } + } } - - WriteLine(" };"); - WriteLine(" }"); } - - private void WriteGreenFactory(Node nd, bool withSyntaxFactoryContext = false) + private void WriteGreenFactory(Node node, bool withSyntaxFactoryContext = false) { - var valueFields = nd.Fields.Where(n => !IsNodeOrNodeList(n.Type)).ToList(); - var nodeFields = nd.Fields.Where(n => IsNodeOrNodeList(n.Type)).ToList(); + var valueFields = node.Fields.Where(n => !IsNodeOrNodeList(n.Type)).ToList(); + var nodeFields = node.Fields.Where(n => IsNodeOrNodeList(n.Type)).ToList(); - Write(" public {0}{1} {2}(", withSyntaxFactoryContext ? "" : "static ", nd.Name, StripPost(nd.Name, "Syntax")); - WriteGreenFactoryParameters(nd); + Write($"public {(withSyntaxFactoryContext ? "" : "static ")}{node.Name} {StripPost(node.Name, "Syntax")}("); + WriteGreenFactoryParameters(node); WriteLine(")"); - WriteLine(" {"); - - // validate kind - if (nd.Kinds.Count > 1) + using (Block()) { - WriteLine(" switch (kind)"); - WriteLine(" {"); - foreach (var k in nd.Kinds) + // validate kind + if (node.Kinds.Count > 1) { - WriteLine(" case SyntaxKind.{0}:", k.Name); + WriteLine("switch (kind)"); + using (Block()) + { + var kinds = node.Kinds.Distinct().ToList(); + foreach (var kind in node.Kinds) + { + WriteLine($"case SyntaxKind.{kind.Name}:{(kind == kinds[^1] ? " break;" : string.Empty)}"); + } + + WriteLine("default: throw new ArgumentException(\"kind\");"); + } } - WriteLine(" break;"); - WriteLine(" default:"); - WriteLine(" throw new ArgumentException(\"kind\");"); - WriteLine(" }"); - } - // validate parameters - //WriteLine("#if DEBUG"); - for (int i = 0, n = nodeFields.Count; i < n; i++) - { - var field = nodeFields[i]; - var pname = CamelCase(field.Name); + // validate parameters + //WriteLine("#if DEBUG"); + foreach (var field in nodeFields) + { + var pname = GetParameterName(field); + + if (!IsAnyList(field.Type) && !IsOptional(field)) + { + WriteLine($"ArgHelper.ThrowIfNull({pname});"); + } + if (field.Type == "SyntaxToken" && field.Kinds != null && field.Kinds.Count > 0) + { + if (field.Kinds.Count == 1) + { + if (IsOptional(field)) + { + WriteLine($"if ({pname} is not null && {pname}.Kind is not (SyntaxKind.{field.Kinds[0].Name} or SyntaxKind.None))"); + } + else + { + WriteLine($"if ({pname}.Kind != SyntaxKind.{field.Kinds[0].Name})"); + } + + WriteIndentedLine($"ThrowHelper.ThrowArgumentException(nameof({pname}), " + + $"$\"Invalid SyntaxKind. Expected 'SyntaxKind.{field.Kinds[0].Name}'{(IsOptional(field) ? " or 'SyntaxKind.None'" : "")}, but it was {{{pname}.Kind}}\");"); + } + else + { + if (IsOptional(field)) + { + WriteLine($"if ({pname} != null)"); + OpenBlock(); + } + + WriteLine($"switch ({pname}.Kind)"); + using (Block()) + { + foreach (var kind in field.Kinds) + { + WriteLine($"case SyntaxKind.{kind.Name}:"); + } + + //we need to check for Kind=None as well as node == null because that's what the red factory will pass + if (IsOptional(field)) + { + WriteLine("case SyntaxKind.None:"); + } + + WriteIndentedLine("break;"); + WriteLine("default:"); + WriteIndentedLine($"throw new ArgumentException(\"{pname}\");"); + } + + if (IsOptional(field)) + { + CloseBlock(); + } + } + } + } + + //WriteLine("#endif"); + + if (node.Name != "SkippedTokensTriviaSyntax" && + node.Name != "DocumentationCommentTriviaSyntax" && + node.Name != "IncompleteMemberSyntax" && + valueFields.Count + nodeFields.Count <= 3) + { + //int hash; + //var cached = SyntaxNodeCache.TryGetNode((int)SyntaxKind.IdentifierName, identifier, this.context, out hash); + //if (cached != null) return (IdentifierNameSyntax)cached; + + //var result = new IdentifierNameSyntax(SyntaxKind.IdentifierName, identifier, this.context); + //if (hash >= 0) + //{ + // SyntaxNodeCache.AddNode(result, hash); + //} + + //return result; + + WriteLine(); - if (!IsAnyList(field.Type) && !IsOptional(field)) - { - WriteLine(" if ({0} == null)", CamelCase(field.Name)); - WriteLine(" throw new ArgumentNullException(nameof({0}));", CamelCase(field.Name)); - } - if (field.Type == "SyntaxToken" && field.Kinds != null && field.Kinds.Count > 0) - { - if (IsOptional(field)) - { - WriteLine(" if ({0} != null)", CamelCase(field.Name)); - WriteLine(" {"); - } - WriteLine(" switch ({0}.Kind)", pname); - WriteLine(" {"); - foreach (var kind in field.Kinds) - { - WriteLine(" case SyntaxKind.{0}:", kind.Name); - } - //we need to check for Kind=None as well as node == null because that's what the red factory will pass - if (IsOptional(field)) + /* Remove + //int hash; + WriteLine(" int hash;"); + //SyntaxNode cached = SyntaxNodeCache.TryGetNode(SyntaxKind.IdentifierName, identifier, this.context, out hash); + if (withSyntaxFactoryContext) { - WriteLine(" case SyntaxKind.None:"); + Write(" var cached = CSharpSyntaxNodeCache.TryGetNode((int)"); } - WriteLine(" break;"); - WriteLine(" default:"); - WriteLine(" throw new ArgumentException(\"{0}\");", pname); - WriteLine(" }"); - if (IsOptional(field)) + else { - WriteLine(" }"); + Write(" var cached = SyntaxNodeCache.TryGetNode((int)"); } - } - } - //WriteLine("#endif"); + WriteCtorArgList(nd, withSyntaxFactoryContext, valueFields, nodeFields); + WriteLine(", out hash);"); + // if (cached != null) return (IdentifierNameSyntax)cached; + WriteLine(" if (cached != null) return ({0})cached;", nd.Name); + WriteLine(); */ - if (nd.Name != "SkippedTokensTriviaSyntax" && - nd.Name != "DocumentationCommentTriviaSyntax" && - nd.Name != "IncompleteMemberSyntax" && - valueFields.Count + nodeFields.Count <= 3) - { - //int hash; - //var cached = SyntaxNodeCache.TryGetNode((int)SyntaxKind.IdentifierName, identifier, this.context, out hash); - //if (cached != null) return (IdentifierNameSyntax)cached; - - //var result = new IdentifierNameSyntax(SyntaxKind.IdentifierName, identifier, this.context); - //if (hash >= 0) - //{ - // SyntaxNodeCache.AddNode(result, hash); - //} + //var result = new IdentifierNameSyntax(SyntaxKind.IdentifierName, identifier); + Write($"var result = new {node.Name}("); + WriteCtorArgList(node, withSyntaxFactoryContext, valueFields, nodeFields); + WriteLine(");"); - //return result; - - WriteLine(); + /* Remove + //if (hash >= 0) + WriteLine(" if (hash >= 0)"); + //{ + WriteLine(" {"); + // SyntaxNodeCache.AddNode(result, hash); + WriteLine(" SyntaxNodeCache.AddNode(result, hash);"); + //} + WriteLine(" }"); */ + WriteLine(); - /* Remove - //int hash; - WriteLine(" int hash;"); - //SyntaxNode cached = SyntaxNodeCache.TryGetNode(SyntaxKind.IdentifierName, identifier, this.context, out hash); - if (withSyntaxFactoryContext) - { - Write(" var cached = CSharpSyntaxNodeCache.TryGetNode((int)"); + //return result; + WriteLine("return result;"); } else { - Write(" var cached = SyntaxNodeCache.TryGetNode((int)"); + WriteLine(); + Write("return new {0}(", node.Name); + WriteCtorArgList(node, withSyntaxFactoryContext, valueFields, nodeFields); + WriteLine(");"); } - - WriteCtorArgList(nd, withSyntaxFactoryContext, valueFields, nodeFields); - WriteLine(", out hash);"); - // if (cached != null) return (IdentifierNameSyntax)cached; - WriteLine(" if (cached != null) return ({0})cached;", nd.Name); - WriteLine(); */ - - //var result = new IdentifierNameSyntax(SyntaxKind.IdentifierName, identifier); - Write(" var result = new {0}(", nd.Name); - WriteCtorArgList(nd, withSyntaxFactoryContext, valueFields, nodeFields); - WriteLine(");"); - - /* Remove - //if (hash >= 0) - WriteLine(" if (hash >= 0)"); - //{ - WriteLine(" {"); - // SyntaxNodeCache.AddNode(result, hash); - WriteLine(" SyntaxNodeCache.AddNode(result, hash);"); - //} - WriteLine(" }"); */ - WriteLine(); - - //return result; - WriteLine(" return result;"); - } - else - { - WriteLine(); - Write(" return new {0}(", nd.Name); - WriteCtorArgList(nd, withSyntaxFactoryContext, valueFields, nodeFields); - WriteLine(");"); } - - WriteLine(" }"); } private void WriteGreenFactoryParameters(Node nd) @@ -804,7 +753,7 @@ private void WriteGreenFactoryParameters(Node nd) { type = "Microsoft.AspNetCore.Razor.Language.Syntax.InternalSyntax." + type; } - Write("{0} {1}", type, CamelCase(field.Name)); + Write($"{type} {GetParameterName(field)}"); } } @@ -825,11 +774,11 @@ private void WriteCtorArgList(Node nd, bool withSyntaxFactoryContext, List" || IsAnyList(field.Type)) { - Write("{0}.Node", CamelCase(field.Name)); + Write($"{GetParameterName(field)}.Node"); } else { - Write(CamelCase(field.Name)); + Write(GetParameterName(field)); } } // values are at end @@ -837,7 +786,7 @@ private void WriteCtorArgList(Node nd, bool withSyntaxFactoryContext, List GetNodeOrNodeListFields(TreeType node) ? nd.Fields.Where(n => IsNodeOrNodeList(n.Type)).ToList() : new List(); - private void WriteRedType(TreeType node) + private void WriteRedType(TreeType redType) { - WriteComment(node.TypeComment, " "); + WriteComment(redType.TypeComment); - if (node is AbstractNode) + switch (redType) { - AbstractNode nd = (AbstractNode)node; - WriteLine(" internal abstract partial class {0} : {1}", node.Name, node.Base); - WriteLine(" {"); - WriteLine(" internal {0}(GreenNode green, SyntaxNode parent, int position)", node.Name); - WriteLine(" : base(green, parent, position)"); - WriteLine(" {"); - WriteLine(" }"); - - var valueFields = nd.Fields.Where(n => !IsNodeOrNodeList(n.Type)).ToList(); - var nodeFields = GetNodeOrNodeListFields(nd); - - for (int i = 0, n = nodeFields.Count; i < n; i++) - { - var field = nodeFields[i]; - if (IsNodeOrNodeList(field.Type)) + case AbstractNode abstractNode: { - //red SyntaxLists can't contain tokens, so we switch to SyntaxTokenList - var fieldType = GetRedFieldType(field); - WriteLine(); - WriteComment(field.PropertyComment, " "); - WriteLine(" {0} abstract {1}{2} {3} {{ get; }}", "public", (IsNew(field) ? "new " : ""), fieldType, field.Name); - WriteLine($" public {node.Name} With{field.Name}({fieldType} {CamelCase(field.Name)}) => With{field.Name}Core({CamelCase(field.Name)});"); - WriteLine($" internal abstract {node.Name} With{field.Name}Core({fieldType} {CamelCase(field.Name)});"); - - if (IsAnyList(field.Type)) - { - var argType = GetElementType(field.Type); - WriteLine(); - WriteLine(" public {0} Add{1}(params {2}[] items) => Add{1}Core(items);", node.Name, field.Name, argType); - WriteLine(" internal abstract {0} Add{1}Core(params {2}[] items);", node.Name, field.Name, argType); - } - else + WriteLine($"internal abstract partial class {abstractNode.Name} : {abstractNode.Base}"); + using (Block()) { - var referencedNode = TryGetNodeForNestedList(field); - if (referencedNode != null) + WriteLine($"internal {abstractNode.Name}(GreenNode green, SyntaxNode parent, int position)"); + WriteIndentedLine(": base(green, parent, position)"); + using (Block()) { - for (int rf = 0; rf < referencedNode.Fields.Count; rf++) + } + + var valueFields = abstractNode.Fields.Where(n => !IsNodeOrNodeList(n.Type)).ToList(); + var nodeFields = GetNodeOrNodeListFields(abstractNode); + + foreach (var field in nodeFields) + { + if (IsNodeOrNodeList(field.Type)) { - var referencedNodeField = referencedNode.Fields[rf]; - if (IsAnyList(referencedNodeField.Type)) + //red SyntaxLists can't contain tokens, so we switch to SyntaxTokenList + var fieldType = GetRedFieldType(field); + WriteLine(); + WriteComment(field.PropertyComment); + WriteLine($"public abstract {(IsNew(field) ? "new " : "")}{fieldType} {field.Name} {{ get; }}"); + WriteLine($"public {abstractNode.Name} With{field.Name}({fieldType} {GetParameterName(field)}) => With{field.Name}Core({GetParameterName(field)});"); + WriteLine($"internal abstract {abstractNode.Name} With{field.Name}Core({fieldType} {GetParameterName(field)});"); + + if (IsAnyList(field.Type)) { - var argType = GetElementType(referencedNodeField.Type); - + var argType = GetElementType(field.Type); WriteLine(); - WriteLine(" public {0} Add{1}{2}(params {3}[] items) => Add{1}{2}Core(items);", node.Name, StripPost(field.Name, "Opt"), referencedNodeField.Name, argType); - WriteLine(" internal abstract {0} Add{1}{2}Core(params {3}[] items);", node.Name, StripPost(field.Name, "Opt"), referencedNodeField.Name, argType); + WriteLine($"public {abstractNode.Name} Add{field.Name}(params {argType}[] items) => Add{field.Name}Core(items);"); + WriteLine($"internal abstract {abstractNode.Name} Add{field.Name}Core(params {argType}[] items);"); + } + else + { + var referencedNode = TryGetNodeForNestedList(field); + if (referencedNode != null) + { + foreach (var referencedNodeField in referencedNode.Fields) + { + if (IsAnyList(referencedNodeField.Type)) + { + var argType = GetElementType(referencedNodeField.Type); + + WriteLine(); + WriteLine($"public {abstractNode.Name} Add{StripPost(field.Name, "Opt")}{referencedNodeField.Name}(params {argType}[] items) => Add{StripPost(field.Name, "Opt")}{referencedNodeField.Name}Core(items);"); + WriteLine($"internal abstract {abstractNode.Name} Add{StripPost(field.Name, "Opt")}{referencedNodeField.Name}Core(params {argType}[] items);"); + } + } + } } } } - } - } - } - for (int i = 0, n = valueFields.Count; i < n; i++) - { - var field = valueFields[i]; - WriteLine(); - WriteComment(field.PropertyComment, " "); - WriteLine(" {0} abstract {1}{2} {3} {{ get; }}", "public", (IsNew(field) ? "new " : ""), field.Type, field.Name); - } + foreach (var field in valueFields) + { + WriteLine(); + WriteComment(field.PropertyComment); + WriteLine($"public abstract {(IsNew(field) ? "new " : "")}{field.Type} {field.Name} {{ get; }}"); + } - var baseType = GetTreeType(node.Base); - if (baseType != null) - { - var baseNodeFields = GetNodeOrNodeListFields(baseType); - if (baseNodeFields.Count > 0) - { - WriteLine(); - } + var baseType = GetTreeType(abstractNode.Base); + if (baseType != null) + { + var baseNodeFields = GetNodeOrNodeListFields(baseType); + if (baseNodeFields.Count > 0) + { + WriteLine(); + } - foreach (var baseField in baseNodeFields) - { - WriteLine($" public new {node.Name} With{baseField.Name}({GetRedFieldType(baseField)} {CamelCase(baseField.Name)}) => ({node.Name})With{baseField.Name}Core({CamelCase(baseField.Name)});"); + foreach (var baseField in baseNodeFields) + { + WriteLine($"public new {abstractNode.Name} With{baseField.Name}({GetRedFieldType(baseField)} {GetParameterName(baseField)}) " + + $"=> ({abstractNode.Name})With{baseField.Name}Core({GetParameterName(baseField)});"); + } + + foreach (var baseField in baseNodeFields) + { + if (IsAnyList(baseField.Type)) + { + var argType = GetElementType(baseField.Type); + WriteLine(); + WriteLine($"public new {abstractNode.Name} Add{baseField.Name}(params {argType}[] items) => ({abstractNode.Name})Add{baseField.Name}Core(items);"); + } + else + { + var referencedNode = TryGetNodeForNestedList(baseField); + if (referencedNode != null) + { + // look for list members... + foreach (var referencedNodeField in referencedNode.Fields) + { + if (IsAnyList(referencedNodeField.Type)) + { + var argType = GetElementType(referencedNodeField.Type); + + WriteLine(); + WriteLine($"public new {baseType.Name} Add{StripPost(baseField.Name, "Opt")}{referencedNodeField.Name}(params {argType}[] items) => Add{StripPost(baseField.Name, "Opt")}{referencedNodeField.Name}Core(items);"); + } + } + } + } + } + } + } + + break; } - foreach (var baseField in baseNodeFields) + case Node node: { - if (IsAnyList(baseField.Type)) + WriteLine($"internal sealed partial class {node.Name} : {node.Base}"); + using (Block()) { - var argType = GetElementType(baseField.Type); + var valueFields = node.Fields.Where(n => !IsNodeOrNodeList(n.Type)).ToList(); + var nodeFields = node.Fields.Where(n => IsNodeOrNodeList(n.Type)).ToList(); + + foreach (var field in nodeFields) + { + //if (field.Type != "SyntaxToken" + // && field.Type != "SyntaxList" + // ) + //{ + if (IsSeparatedNodeList(field.Type) || field.Type == "SyntaxNodeOrTokenList") + { + WriteLine($"private SyntaxNode {GetFieldName(field)};"); + } + else + { + var type = GetFieldType(field, green: false); + WriteLine($"private {type} {GetFieldName(field)};"); + } + //} + } + + // write constructor WriteLine(); - WriteLine(" public new {0} Add{1}(params {2}[] items) => ({0})Add{1}Core(items);", node.Name, baseField.Name, argType); - } - else - { - var referencedNode = TryGetNodeForNestedList(baseField); - if (referencedNode != null) + WriteLine($"internal {node.Name}(GreenNode green, SyntaxNode parent, int position)"); + WriteIndentedLine(": base(green, parent, position)"); + using (Block()) { - // look for list members... - for (int rf = 0; rf < referencedNode.Fields.Count; rf++) + } + WriteLine(); + + // property accessors + for (var i = 0; i < nodeFields.Count; i++) + { + var field = nodeFields[i]; + //if (field.Type == "SyntaxToken") + //{ + // WriteComment(field.PropertyComment, " "); + // WriteLine(" {0} {1}{2} {3} ", "public", OverrideOrNewModifier(field), field.Type, field.Name); + // WriteLine(" {"); + // if (IsOptional(field)) + // { + // WriteLine(" get"); + // WriteLine(" {"); + // WriteLine(" var slot = ((InternalSyntax.{0})Green).{1};", node.Name, field.Name); + // WriteLine(" if (slot != null)"); + // WriteLine(" return new SyntaxToken(slot, this, {0});", GetChildPosition(i)/*, GetChildIndex(i)*/); + // WriteLine(); + // WriteLine(" return default(SyntaxToken);"); + // WriteLine(" }"); + // } + // else + // { + // WriteLine(" get {{ return new SyntaxToken(((InternalSyntax.{0})Green).{1}, this, {2}); }}", node.Name, field.Name, GetChildPosition(i)/*, GetChildIndex(i)*/); + // } + // WriteLine(" }"); + //} + /* Remove + else if (field.Type == "SyntaxList") { - var referencedNodeField = referencedNode.Fields[rf]; - if (IsAnyList(referencedNodeField.Type)) + WriteComment(field.PropertyComment, " "); + WriteLine(" {0} {1}SyntaxTokenList {2} ", "public", OverrideOrNewModifier(field), field.Name); + WriteLine(" {"); + WriteLine(" get"); + WriteLine(" {"); + WriteLine(" var slot = Green.GetSlot({0});", i); + WriteLine(" if (slot != null)"); + WriteLine(" return new SyntaxTokenList(this, slot, {0}, {1});", GetChildPosition(i), GetChildIndex(i)); + WriteLine(); + WriteLine(" return default(SyntaxTokenList);"); + WriteLine(" }"); + WriteLine(" }"); + } */ + //else + //{ + WriteComment(field.PropertyComment); + Write($"public {OverrideOrNewModifier(field)}{field.Type} {field.Name} "); + + if (IsNodeList(field.Type)) + { + WriteLine($" => new {field.Type}(GetRed(ref {GetFieldName(field)}, {i}));"); + } + else if (IsSeparatedNodeList(field.Type)) + { + WriteLine(); + using (Block()) { - var argType = GetElementType(referencedNodeField.Type); - - WriteLine(); - WriteLine(" public new {0} Add{1}{2}(params {3}[] items) => Add{1}{2}Core(items);", baseType.Name, StripPost(baseField.Name, "Opt"), referencedNodeField.Name, argType); + WriteLine("get"); + using (Block()) + { + WriteLine($"var red = GetRed(ref {GetFieldName(field)}, {i});"); + WriteLine($"return red != null ? new {field.Type}(red, {GetChildIndex(i)}) : default;"); + } + } + } + else if (field.Type == "SyntaxNodeOrTokenList") + { + throw new InvalidOperationException("field cannot be a random SyntaxNodeOrTokenList"); + } + else + { + if (i == 0) + { + WriteLine($" => GetRedAtZero(ref {GetFieldName(field)});"); + } + else + { + WriteLine($" => GetRed(ref {GetFieldName(field)}, {i});"); } } + //} } - } - } - } - WriteLine(" }"); - } - else if (node is Node) - { - Node nd = (Node)node; - WriteLine(" internal sealed partial class {0} : {1}", node.Name, node.Base); - WriteLine(" {"); + foreach (var field in valueFields) + { + WriteComment(field.PropertyComment); + WriteLine($"public {OverrideOrNewModifier(field)}{field.Type} {field.Name} => ((InternalSyntax.{node.Name})Green).{field.Name};"); + } - var valueFields = nd.Fields.Where(n => !IsNodeOrNodeList(n.Type)).ToList(); - var nodeFields = nd.Fields.Where(n => IsNodeOrNodeList(n.Type)).ToList(); + { + WriteLine(); - for (int i = 0, n = nodeFields.Count; i < n; i++) - { - var field = nodeFields[i]; - //if (field.Type != "SyntaxToken" - // && field.Type != "SyntaxList" - // ) - //{ - if (IsSeparatedNodeList(field.Type) || field.Type == "SyntaxNodeOrTokenList") - { - WriteLine(" private SyntaxNode {0};", UnderscoreCamelCase(field.Name)); - } - else - { - var type = GetFieldType(field, green: false); - WriteLine(" private {0} {1};", type, UnderscoreCamelCase(field.Name)); - } - //} - } + //GetNodeSlot forces creation of a red node. + Write("internal override SyntaxNode GetNodeSlot(int index)"); - // write constructor - WriteLine(); - WriteLine(" internal {0}(GreenNode green, SyntaxNode parent, int position)", node.Name); - WriteLine(" : base(green, parent, position)"); - WriteLine(" {"); - WriteLine(" }"); - WriteLine(); + var relevantNodes = nodeFields + .Select((field, index) => (field, index)) + //.Where(t => t.field.Type is not "SyntaxToken" and not "SyntaxList") + .ToList(); - // property accessors - for (int i = 0, n = nodeFields.Count; i < n; i++) - { - var field = nodeFields[i]; - //if (field.Type == "SyntaxToken") - //{ - // WriteComment(field.PropertyComment, " "); - // WriteLine(" {0} {1}{2} {3} ", "public", OverrideOrNewModifier(field), field.Type, field.Name); - // WriteLine(" {"); - // if (IsOptional(field)) - // { - // WriteLine(" get"); - // WriteLine(" {"); - // WriteLine(" var slot = ((InternalSyntax.{0})Green).{1};", node.Name, field.Name); - // WriteLine(" if (slot != null)"); - // WriteLine(" return new SyntaxToken(slot, this, {0});", GetChildPosition(i)/*, GetChildIndex(i)*/); - // WriteLine(); - // WriteLine(" return default(SyntaxToken);"); - // WriteLine(" }"); - // } - // else - // { - // WriteLine(" get {{ return new SyntaxToken(((InternalSyntax.{0})Green).{1}, this, {2}); }}", node.Name, field.Name, GetChildPosition(i)/*, GetChildIndex(i)*/); - // } - // WriteLine(" }"); - //} - /* Remove - else if (field.Type == "SyntaxList") - { - WriteComment(field.PropertyComment, " "); - WriteLine(" {0} {1}SyntaxTokenList {2} ", "public", OverrideOrNewModifier(field), field.Name); - WriteLine(" {"); - WriteLine(" get"); - WriteLine(" {"); - WriteLine(" var slot = Green.GetSlot({0});", i); - WriteLine(" if (slot != null)"); - WriteLine(" return new SyntaxTokenList(this, slot, {0}, {1});", GetChildPosition(i), GetChildIndex(i)); - WriteLine(); - WriteLine(" return default(SyntaxTokenList);"); - WriteLine(" }"); - WriteLine(" }"); - } */ - //else - //{ - WriteComment(field.PropertyComment, " "); - WriteLine(" {0} {1}{2} {3} ", "public", OverrideOrNewModifier(field), field.Type, field.Name); - WriteLine(" {"); - WriteLine(" get"); - WriteLine(" {"); + if (relevantNodes.Count == 0) + { + WriteLine(" => null;"); + } + else if (relevantNodes.Count == 1) + { + var (field, index) = relevantNodes[0]; + var whenTrue = index == 0 + ? $"GetRedAtZero(ref this.{GetFieldName(field)})" + : $"GetRed(ref this.{GetFieldName(field)}, {index})"; - if (IsNodeList(field.Type)) - { - WriteLine(" return new {0}(GetRed(ref {1}, {2}));", field.Type, UnderscoreCamelCase(field.Name), i); - } - else if (IsSeparatedNodeList(field.Type)) - { - WriteLine(" var red = GetRed(ref {0}, {1});", UnderscoreCamelCase(field.Name), i); - WriteLine(" if (red != null)", i); - WriteLine(" return new {0}(red, {1});", field.Type, GetChildIndex(i)); - WriteLine(); - WriteLine(" return default({0});", field.Type); - } - else if (field.Type == "SyntaxNodeOrTokenList") - { - throw new InvalidOperationException("field cannot be a random SyntaxNodeOrTokenList"); - } - else - { - if (i == 0) - { - WriteLine(" return GetRedAtZero(ref {0});", UnderscoreCamelCase(field.Name)); - } - else - { - WriteLine(" return GetRed(ref {0}, {1});", UnderscoreCamelCase(field.Name), i); - } - } - WriteLine(" }"); - WriteLine(" }"); - //} - WriteLine(); - } + WriteLine($" => index == {index} ? {whenTrue} : null;"); + } + else + { + WriteLine(); + using (Indent()) + { + WriteLine("=> index switch"); + using (Block(addSemicolon: true)) + { + foreach (var (field, index) in relevantNodes) + { + if (index == 0) + { + WriteLine($"{index} => GetRedAtZero(ref {GetFieldName(field)}),"); + } + else + { + WriteLine($"{index} => GetRed(ref {GetFieldName(field)}, {index}),"); + } + } + + WriteLine("_ => null"); + } + } + } + } - for (int i = 0, n = valueFields.Count; i < n; i++) - { - var field = valueFields[i]; - WriteComment(field.PropertyComment, " "); - WriteLine(" {0} {1}{2} {3} {{ get {{ return ((InternalSyntax.{4})Green).{3}; }} }}", - "public", OverrideOrNewModifier(field), field.Type, field.Name, node.Name - ); - WriteLine(); - } + WriteLine(); - //GetNodeSlot forces creation of a red node. - WriteLine(" internal override SyntaxNode GetNodeSlot(int index)"); - WriteLine(" {"); - WriteLine(" switch (index)"); - WriteLine(" {"); - for (int i = 0, n = nodeFields.Count; i < n; i++) - { - var field = nodeFields[i]; + { + //GetCachedSlot returns a red node if we have it. + Write("internal override SyntaxNode GetCachedSlot(int index)"); - //if (field.Type != "SyntaxToken" && field.Type != "SyntaxList") - if (true) - { - if (i == 0) - { - WriteLine(" case {0}: return GetRedAtZero(ref {1});", i, UnderscoreCamelCase(field.Name)); - } - else - { - WriteLine(" case {0}: return GetRed(ref {1}, {0});", i, UnderscoreCamelCase(field.Name)); - } - } - } - WriteLine(" default: return null;"); - WriteLine(" }"); - WriteLine(" }"); - - //GetCachedSlot returns a red node if we have it. - WriteLine(" internal override SyntaxNode GetCachedSlot(int index)"); - WriteLine(" {"); - WriteLine(" switch (index)"); - WriteLine(" {"); - for (int i = 0, n = nodeFields.Count; i < n; i++) - { - var field = nodeFields[i]; - //if (field.Type != "SyntaxToken" && field.Type != "SyntaxList") - if (true) - { - WriteLine(" case {0}: return {1};", i, UnderscoreCamelCase(field.Name)); - } - } - WriteLine(" default: return null;"); - WriteLine(" }"); - WriteLine(" }"); + var relevantNodes = nodeFields + .Select((field, index) => (field, index)) + //.Where(t => t.field.Type is not "SyntaxToken" and not "SyntaxList") + .ToList(); + + if (relevantNodes.Count == 0) + { + WriteLine(" => null;"); + } + else if (relevantNodes.Count == 1) + { + var (field, index) = relevantNodes[0]; + WriteLine($" => index == {index} ? this.{GetFieldName(field)} : null;"); + } + else + { + WriteLine(); + using (Indent()) + { + WriteLine("=> index switch"); + using (Block(addSemicolon: true)) + { + foreach (var (field, index) in relevantNodes) + { + WriteLine($"{index} => this.{GetFieldName(field)},"); + } + + WriteLine("_ => null"); + } + } + } + } - WriteRedAcceptMethods(nd); - WriteRedUpdateMethod(nd); - WriteRedWithMethods(nd); - WriteRedListHelperMethods(nd); + WriteRedAcceptMethods(node); + WriteRedUpdateMethod(node); + WriteRedWithMethods(node); + WriteRedListHelperMethods(node); + } - WriteLine(" }"); + break; + } } } @@ -1165,58 +1157,38 @@ private static string GetRedFieldType(Field field) return field.Type; } - private string GetChildIndex(int i) + private static string GetChildIndex(int i) { - if (i == 0) - { - return "0"; - } - else - { - return "GetChildIndex(" + i + ")"; - } + return i == 0 ? "0" : $"GetChildIndex({i})"; } private void WriteRedAcceptMethods(Node node) { - //WriteRedAcceptMethod(node, true, true); - WriteRedAcceptMethod(node, false, true); - WriteRedAcceptMethod(node, false, false); - } - - private void WriteRedAcceptMethod(Node node, bool genericArgument, bool genericResult) - { - string genericArgs = - (genericResult && genericArgument) ? "" : - genericResult ? "" : ""; WriteLine(); - WriteLine(" public override " + (genericResult ? "TResult" : "void") + " Accept" + genericArgs + "(SyntaxVisitor" + genericArgs + " visitor{0})", genericArgument ? ", TArgument argument" : ""); - WriteLine(" {"); - WriteLine(" " + (genericResult ? "return " : "") + "visitor.Visit{0}(this{1});", StripPost(node.Name, "Syntax"), genericArgument ? ", argument" : ""); - WriteLine(" }"); + WriteLine($"public override TResult Accept(SyntaxVisitor visitor) => visitor.Visit{StripPost(node.Name, "Syntax")}(this);"); + WriteLine($"public override void Accept(SyntaxVisitor visitor) => visitor.Visit{StripPost(node.Name, "Syntax")}(this);"); } private void WriteRedVisitors() { - //WriteRedVisitor(true, true); - WriteRedVisitor(false, true); - WriteRedVisitor(false, false); + WriteRedVisitor(genericResult: true); + WriteRedVisitor(genericResult: false); } - private void WriteRedVisitor(bool genericArgument, bool genericResult) + private void WriteRedVisitor(bool genericResult) { - string genericArgs = - (genericResult && genericArgument) ? "" : - genericResult ? "" : ""; - var nodes = Tree.Types.Where(n => !(n is PredefinedNode)).ToList(); + var (result, typeParams) = genericResult + ? ("TResult", "") + : ("void", string.Empty); + + var nodes = Tree.Types.Where(n => n is not PredefinedNode).ToList(); WriteLine(); - WriteLine(" internal partial class SyntaxVisitor" + genericArgs); - WriteLine(" {"); - int nWritten = 0; - for (int i = 0, n = nodes.Count; i < n; i++) + WriteLine($"internal partial class SyntaxVisitor{typeParams}"); + using (Block()) { - if (nodes[i] is Node node) + var nWritten = 0; + foreach (var node in nodes.OfType()) { if (nWritten > 0) { @@ -1224,95 +1196,71 @@ private void WriteRedVisitor(bool genericArgument, bool genericResult) } nWritten++; - WriteComment(string.Format(CultureInfo.InvariantCulture, "Called when the visitor visits a {0} node.", node.Name), " "); - WriteLine(" public virtual " + (genericResult ? "TResult" : "void") + " Visit{0}({1} node{2})", StripPost(node.Name, "Syntax"), node.Name, genericArgument ? ", TArgument argument" : ""); - WriteLine(" {"); - WriteLine(" " + (genericResult ? "return " : "") + "DefaultVisit(node{0});", genericArgument ? ", argument" : ""); - WriteLine(" }"); + WriteComment($"Called when the visitor visits a {node.Name} node."); + WriteLine($"public virtual {result} Visit{StripPost(node.Name, "Syntax")}({node.Name} node) => DefaultVisit(node);"); } } - WriteLine(" }"); } private void WriteRedUpdateMethod(Node node) { WriteLine(); - Write(" {0} {1} Update(", "public", node.Name); - - // parameters - for (int f = 0; f < node.Fields.Count; f++) - { - var field = node.Fields[f]; - if (f > 0) - { - Write(", "); - } - //var type = field.Type == "SyntaxList" ? "SyntaxTokenList" : field.Type; - var type = field.Type; - Write("{0} {1}", type, CamelCase(field.Name)); - } + Write($"public {node.Name} Update("); + WriteCommaSeparatedList( + node.Fields.Select(f => $"{GetRedPropertyType(f)} {GetParameterName(f)}")); WriteLine(")"); - WriteLine(" {"); - Write(" if ("); - int nCompared = 0; - for (int f = 0; f < node.Fields.Count; f++) + using (Block()) { - var field = node.Fields[f]; - if (IsDerivedOrListOfDerived("SyntaxNode", field.Type) || IsDerivedOrListOfDerived("SyntaxToken", field.Type) || field.Type is "SyntaxNodeOrTokenList" or "ISpanChunkGenerator") + Write("if ("); + var nCompared = 0; + foreach (var field in node.Fields) { - if (nCompared > 0) + if (IsDerivedOrListOfDerived("SyntaxNode", field.Type) || IsDerivedOrListOfDerived("SyntaxToken", field.Type) || field.Type is "SyntaxNodeOrTokenList" or "ISpanChunkGenerator") { - Write(" || "); - } + if (nCompared > 0) + { + Write(" || "); + } - Write("{0} != {1}", CamelCase(field.Name), field.Name); - nCompared++; - } - } - if (nCompared > 0) - { - WriteLine(")"); - WriteLine(" {"); - Write(" var newNode = SyntaxFactory.{0}(", StripPost(node.Name, "Syntax")); - if (node.Kinds.Count > 1) - { - Write("Kind(), "); + Write($"{GetParameterName(field)} != {field.Name}"); + nCompared++; + } } - for (int f = 0; f < node.Fields.Count; f++) + + if (nCompared > 0) { - var field = node.Fields[f]; - if (f > 0) + WriteLine(")"); + using (Block()) { - Write(", "); + Write($"var newNode = SyntaxFactory.{StripPost(node.Name, "Syntax")}("); + WriteCommaSeparatedList( + node.Kinds.Count > 1 ? "Kind" : string.Empty, + node.Fields.Select(f => GetParameterName(f))); + WriteLine(");"); + WriteLine("var diagnostics = GetDiagnostics();"); + WriteLine("if (diagnostics != null && diagnostics.Length > 0)"); + WriteIndentedLine("newNode = newNode.WithDiagnostics(diagnostics);"); + WriteLine("var annotations = GetAnnotations();"); + WriteLine("return annotations?.Length > 0 ? newNode.WithAnnotations(annotations) : newNode;"); } - - Write(CamelCase(field.Name)); } - WriteLine(");"); - WriteLine(" var diagnostics = GetDiagnostics();"); - WriteLine(" if (diagnostics != null && diagnostics.Length > 0)"); - WriteLine(" newNode = newNode.WithDiagnostics(diagnostics);"); - WriteLine(" var annotations = GetAnnotations();"); - WriteLine(" if (annotations != null && annotations.Length > 0)"); - WriteLine(" return newNode.WithAnnotations(annotations);"); - WriteLine(" return newNode;"); - WriteLine(" }"); - } - WriteLine(); - WriteLine(" return this;"); - WriteLine(" }"); + WriteLine(); + WriteLine("return this;"); + } } private void WriteRedWithMethods(Node node) { - for (int f = 0; f < node.Fields.Count; f++) + foreach (var field in node.Fields) { - var field = node.Fields[f]; var type = GetRedPropertyType(field); - WriteLine(); + if (field == node.Fields.First()) + { + WriteLine(); + } var isNew = false; if (IsOverride(field)) @@ -1320,36 +1268,17 @@ private void WriteRedWithMethods(Node node) var baseType = GetHighestBaseTypeWithField(node, field.Name); if (baseType != null) { - WriteLine($" internal override {baseType.Name} With{field.Name}Core({type} {CamelCase(field.Name)}) => With{field.Name}({CamelCase(field.Name)});"); + WriteLine($"internal override {baseType.Name} With{field.Name}Core({type} {GetParameterName(field)}) => With{field.Name}({GetParameterName(field)});"); isNew = true; } } - WriteLine($" public{(isNew ? " new " : " ")}{node.Name} With{StripPost(field.Name, "Opt")}({type} {CamelCase(field.Name)})"); - WriteLine(" {"); + Write($"public{(isNew ? " new " : " ")}{node.Name} With{StripPost(field.Name, "Opt")}({type} {GetParameterName(field)}) => Update("); // call update inside each setter - Write(" return Update("); - for (int f2 = 0; f2 < node.Fields.Count; f2++) - { - var field2 = node.Fields[f2]; - if (f2 > 0) - { - Write(", "); - } - - if (field2 == field) - { - Write("{0}", CamelCase(field2.Name)); - } - else - { - Write("{0}", field2.Name); - } - } + WriteCommaSeparatedList(node.Fields.Select(f => + f == field ? GetParameterName(f) : f.Name)); WriteLine(");"); - - WriteLine(" }"); } } @@ -1378,10 +1307,8 @@ private TreeType TryGetBaseType(TreeType node) private void WriteRedListHelperMethods(Node node) { - for (int f = 0; f < node.Fields.Count; f++) + foreach (var field in node.Fields) { - var field = node.Fields[f]; - if (IsAnyList(field.Type)) { // write list helper methods for list properties @@ -1393,9 +1320,8 @@ private void WriteRedListHelperMethods(Node node) if (referencedNode != null) { // look for list members... - for (int rf = 0; rf < referencedNode.Fields.Count; rf++) + foreach (var referencedNodeField in referencedNode.Fields) { - var referencedNodeField = referencedNode.Fields[rf]; if (IsAnyList(referencedNodeField.Type)) { WriteRedNestedListHelperMethods(node, field, referencedNode, referencedNodeField); @@ -1408,7 +1334,7 @@ private void WriteRedListHelperMethods(Node node) private Node TryGetNodeForNestedList(Field field) { - Node referencedNode = GetNode(field.Type); + var referencedNode = GetNode(field.Type); if (referencedNode != null && (!IsOptional(field) || RequiredFactoryArgumentCount(referencedNode) == 0)) { return referencedNode; @@ -1427,16 +1353,13 @@ private void WriteRedListHelperMethods(Node node, Field field) var baseType = GetHighestBaseTypeWithField(node, field.Name); if (baseType != null) { - WriteLine(" internal override {0} Add{1}Core(params {2}[] items) => Add{1}(items);", baseType.Name, field.Name, argType); + WriteLine($"internal override {baseType.Name} Add{field.Name}Core(params {argType}[] items) => Add{field.Name}(items);"); isNew = true; } } WriteLine(); - WriteLine($" public{(isNew ? " new " : " ")}{node.Name} Add{field.Name}(params {argType}[] items)"); - WriteLine(" {"); - WriteLine(" return With{0}(this.{1}.AddRange(items));", StripPost(field.Name, "Opt"), field.Name); - WriteLine(" }"); + WriteLine($"public{(isNew ? " new " : " ")}{node.Name} Add{field.Name}(params {argType}[] items) => With{StripPost(field.Name, "Opt")}(this.{field.Name}.AddRange(items));"); } private void WriteRedNestedListHelperMethods(Node node, Field field, Node referencedNode, Field referencedNodeField) @@ -1449,42 +1372,42 @@ private void WriteRedNestedListHelperMethods(Node node, Field field, Node refere var baseType = GetHighestBaseTypeWithField(node, field.Name); if (baseType != null) { - WriteLine(" internal override {0} Add{1}{2}Core(params {3}[] items) => Add{1}{2}(items);", baseType.Name, StripPost(field.Name, "Opt"), referencedNodeField.Name, argType); + WriteLine($"internal override {baseType.Name} Add{StripPost(field.Name, "Opt")}{referencedNodeField.Name}Core(params {argType}[] items) => Add{StripPost(field.Name, "Opt")}{referencedNodeField.Name}(items);"); isNew = true; } } // AddBaseListTypes WriteLine(); - WriteLine($" public{(isNew ? " new " : " ")}{node.Name} Add{StripPost(field.Name, "Opt")}{referencedNodeField.Name}(params {argType}[] items)"); - WriteLine(" {"); + Write($"public{(isNew ? " new " : " ")}{node.Name} Add{StripPost(field.Name, "Opt")}{referencedNodeField.Name}(params {argType}[] items)"); if (IsOptional(field)) { - var factoryName = StripPost(referencedNode.Name, "Syntax"); - var varName = StripPost(UnderscoreCamelCase(field.Name), "Opt"); - WriteLine(" var {0} = this.{1} ?? SyntaxFactory.{2}();", varName, field.Name, factoryName); - WriteLine(" return this.With{0}({1}.With{2}({1}.{3}.AddRange(items)));", StripPost(field.Name, "Opt"), varName, StripPost(referencedNodeField.Name, "Opt"), referencedNodeField.Name); + WriteLine(); + using (Block()) + { + var factoryName = StripPost(referencedNode.Name, "Syntax"); + var varName = StripPost(GetFieldName(field), "Opt"); + WriteLine($"var {varName} = this.{field.Name} ?? SyntaxFactory.{factoryName}();"); + WriteLine($"return this.With{StripPost(field.Name, "Opt")}({varName}.With{StripPost(referencedNodeField.Name, "Opt")}({varName}.{referencedNodeField.Name}.AddRange(items)));"); + } } else { - WriteLine(" return this.With{0}(this.{1}.With{2}(this.{1}.{3}.AddRange(items)));", StripPost(field.Name, "Opt"), field.Name, StripPost(referencedNodeField.Name, "Opt"), referencedNodeField.Name); + WriteLine($" => With{StripPost(field.Name, "Opt")}(this.{field.Name}.With{StripPost(referencedNodeField.Name, "Opt")}(this.{field.Name}.{referencedNodeField.Name}.AddRange(items)));"); } - - WriteLine(" }"); } private void WriteRedRewriter() { - var nodes = Tree.Types.Where(n => !(n is PredefinedNode)).ToList(); + var nodes = Tree.Types.Where(n => n is not PredefinedNode).ToList(); WriteLine(); - WriteLine(" internal partial class SyntaxRewriter : SyntaxVisitor"); - WriteLine(" {"); - int nWritten = 0; - for (int i = 0, n = nodes.Count; i < n; i++) + WriteLine("internal partial class SyntaxRewriter : SyntaxVisitor"); + using (Block()) { - if (nodes[i] is Node node) + var nWritten = 0; + foreach (var node in nodes.OfType()) { var nodeFields = node.Fields.Where(nd => IsNodeOrNodeList(nd.Type)).ToList(); @@ -1494,74 +1417,61 @@ private void WriteRedRewriter() } nWritten++; - WriteLine(" public override SyntaxNode Visit{0}({1} node)", StripPost(node.Name, "Syntax"), node.Name); - WriteLine(" {"); - for (int f = 0; f < nodeFields.Count; f++) + WriteLine($"public override SyntaxNode Visit{StripPost(node.Name, "Syntax")}({node.Name} node)"); + + if (node.Fields.Count == 0) { - var field = nodeFields[f]; - if (IsAnyList(field.Type)) - { - WriteLine(" var {0} = VisitList(node.{1});", CamelCase(field.Name), field.Name); - } - else if (field.Type == "SyntaxToken") - { - WriteLine(" var {0} = ({1})VisitToken(node.{2});", CamelCase(field.Name), field.Type, field.Name); - } - else - { - WriteLine(" var {0} = ({1})Visit(node.{2});", CamelCase(field.Name), field.Type, field.Name); - } + WriteIndentedLine("=> node;"); } - if (nodeFields.Count > 0) + else { - Write(" return node.Update("); - for (int f = 0; f < node.Fields.Count; f++) + using (Indent()) { - var field = node.Fields[f]; - if (f > 0) + Write("=> node.Update("); + WriteCommaSeparatedList(node.Fields.Select(f => { - Write(", "); - } + if (IsNodeOrNodeList(f.Type)) + { + if (IsAnyList(f.Type)) + { + return $"VisitList(node.{f.Name})"; + } + else if (f.Type == "SyntaxToken") + { + return $"({f.Type})VisitToken(node.{f.Name})"; + } + else + { + return $"({f.Type})Visit(node.{f.Name})"; + } + } - if (IsNodeOrNodeList(field.Type)) - { - Write(CamelCase(field.Name)); - } - else - { - Write("node.{0}", field.Name); - } + return $"node.{f.Name}"; + })); + + WriteLine(");"); } - WriteLine(");"); } - else - { - WriteLine(" return node;"); - } - WriteLine(" }"); } } - WriteLine(" }"); } private void WriteRedFactories() { - var nodes = Tree.Types.Where(n => !(n is PredefinedNode) && !(n is AbstractNode)).OfType().ToList(); + var nodes = Tree.Types.Where(n => n is not PredefinedNode and not AbstractNode).OfType().ToList(); WriteLine(); - WriteLine(" internal static partial class SyntaxFactory"); - WriteLine(" {"); - - for (int i = 0, n = nodes.Count; i < n; i++) + WriteLine("internal static partial class SyntaxFactory"); + using (Block()) { - var node = nodes[i]; - WriteRedFactory(node); - WriteRedFactoryWithNoAutoCreatableTokens(node); - WriteRedMinimalFactory(node); - WriteRedMinimalFactory(node, withStringNames: true); - WriteKindConverters(node); + foreach (var node in nodes) + { + WriteRedFactory(node); + WriteRedFactoryWithNoAutoCreatableTokens(node); + WriteRedMinimalFactory(node); + WriteRedMinimalFactory(node, withStringNames: true); + WriteKindConverters(node); + } } - - WriteLine(" }"); } protected bool CanBeAutoCreated(Node node, Field field) @@ -1569,7 +1479,7 @@ protected bool CanBeAutoCreated(Node node, Field field) return IsAutoCreatableToken(node, field) || IsAutoCreatableNode(node, field); } - private bool IsAutoCreatableToken(Node node, Field field) + private static bool IsAutoCreatableToken(Node node, Field field) { return field.Type == "SyntaxToken" && field.Kinds != null @@ -1579,7 +1489,7 @@ private bool IsAutoCreatableToken(Node node, Field field) private bool IsAutoCreatableNode(Node node, Field field) { var referencedNode = GetNode(field.Type); - return (referencedNode != null && RequiredFactoryArgumentCount(referencedNode) == 0); + return referencedNode != null && RequiredFactoryArgumentCount(referencedNode) == 0; } private bool IsRequiredFactoryField(Node node, Field field) @@ -1594,7 +1504,7 @@ private bool IsValueField(Field field) private int RequiredFactoryArgumentCount(Node nd, bool includeKind = true) { - int count = 0; + var count = 0; // kind must be specified in factory if (nd.Kinds.Count > 1 && includeKind) @@ -1616,7 +1526,7 @@ private int RequiredFactoryArgumentCount(Node nd, bool includeKind = true) private int OptionalFactoryArgumentCount(Node nd) { - int count = 0; + var count = 0; for (int i = 0, n = nd.Fields.Count; i < n; i++) { var field = nd.Fields[i]; @@ -1630,160 +1540,176 @@ private int OptionalFactoryArgumentCount(Node nd) } // full factory signature with nothing optional - private void WriteRedFactory(Node nd) + private void WriteRedFactory(Node node) { WriteLine(); - var valueFields = nd.Fields.Where(n => IsValueField(n)).ToList(); - var nodeFields = nd.Fields.Where(n => !IsValueField(n)).ToList(); - - WriteComment(string.Format(CultureInfo.InvariantCulture, "Creates a new {0} instance.", nd.Name), " "); + var valueFields = node.Fields.Where(IsValueField).ToList(); + var nodeFields = node.Fields.Where(n => !IsValueField(n)).ToList(); - Write(" {0} static {1} {2}(", "public", nd.Name, StripPost(nd.Name, "Syntax")); - WriteRedFactoryParameters(nd); + var hasValidation = node.Kinds.Count > 1 || nodeFields.Any(f => NeedsNullCheck(f) || NeedsSyntaxKindValidation(f)); + WriteComment($"Creates a new {node.Name} instance."); + Write($"public static {node.Name} {StripPost(node.Name, "Syntax")}("); + WriteCommaSeparatedList( + node.Kinds.Count > 1 ? "SyntaxKind kind" : string.Empty, + node.Fields.Select(f => $"{GetRedPropertyType(f)} {GetParameterName(f)}")); WriteLine(")"); - WriteLine(" {"); - - // validate kinds - if (nd.Kinds.Count > 1) - { - WriteLine(" switch (kind)"); - WriteLine(" {"); - foreach (var kind in nd.Kinds) - { - WriteLine(" case SyntaxKind.{0}:", kind.Name); - } - WriteLine(" break;"); - WriteLine(" default:"); - WriteLine(" throw new ArgumentException(\"kind\");"); - WriteLine(" }"); - } - // validate parameters - for (int i = 0, n = nodeFields.Count; i < n; i++) + if (hasValidation) { - var field = nodeFields[i]; - var pname = CamelCase(field.Name); + // We only need to write a block if we're adding validation. + OpenBlock(); - if (field.Type == "SyntaxToken") + // validate kinds + if (node.Kinds.Count > 1) { - if (field.Kinds != null && field.Kinds.Count > 0) + WriteLine("switch (kind)"); + using (Block()) { - if (IsOptional(field)) - { - WriteLine(" if ({0} != null)", CamelCase(field.Name)); - WriteLine(" {"); - } - WriteLine(" switch ({0}.Kind)", pname); - WriteLine(" {"); - foreach (var kind in field.Kinds) + var kinds = node.Kinds.Distinct().ToList(); + foreach (var kind in node.Kinds) { - WriteLine(" case SyntaxKind.{0}:", kind.Name); + WriteLine($"case SyntaxKind.{kind.Name}:{(kind == kinds[^1] ? " break;" : string.Empty)}"); } - if (IsOptional(field)) + + WriteLine("default: throw new ArgumentException(\"kind\");"); + } + } + + // validate parameters + foreach (var field in nodeFields) + { + var pname = GetParameterName(field); + + if (!IsAnyList(field.Type) && !IsOptional(field)) + { + WriteLine($"ArgHelper.ThrowIfNull({pname});"); + } + + if (field.Type == "SyntaxToken" && field.Kinds?.Count > 0) + { + if (field.Kinds.Count == 1) { - WriteLine(" case SyntaxKind.None:"); + if (IsOptional(field)) + { + WriteLine($"if ({pname} is not null && {pname}.Kind is not (SyntaxKind.{field.Kinds[0].Name} or SyntaxKind.None))"); + } + else + { + WriteLine($"if ({pname}.Kind != SyntaxKind.{field.Kinds[0].Name})"); + } + + WriteIndentedLine($"ThrowHelper.ThrowArgumentException(nameof({pname}), " + + $"$\"Invalid SyntaxKind. Expected 'SyntaxKind.{field.Kinds[0].Name}'{(IsOptional(field) ? " or 'SyntaxKind.None'" : "")}, but it was {{{pname}.Kind}}\");"); } - WriteLine(" break;"); - WriteLine(" default:"); - WriteLine(" throw new ArgumentException(\"{0}\");", pname); - WriteLine(" }"); - if (IsOptional(field)) + else { - WriteLine(" }"); + if (IsOptional(field)) + { + WriteLine($"if ({pname} != null)"); + OpenBlock(); + } + + WriteLine($"switch ({pname}.Kind)"); + using (Block()) + { + foreach (var kind in field.Kinds) + { + WriteLine($"case SyntaxKind.{kind.Name}:"); + } + + //we need to check for Kind=None as well as node == null because that's what the red factory will pass + if (IsOptional(field)) + { + WriteLine("case SyntaxKind.None:"); + } + + WriteIndentedLine("break;"); + WriteLine($"default: throw new ArgumentException(\"{pname}\");"); + } + + if (IsOptional(field)) + { + CloseBlock(); + } } } } - else if (!IsAnyList(field.Type) && !IsOptional(field)) - { - WriteLine(" if ({0} == null)", CamelCase(field.Name)); - WriteLine(" throw new ArgumentNullException(nameof({0}));", CamelCase(field.Name)); - } - } - Write(" return ({0})InternalSyntax.SyntaxFactory.{1}(", nd.Name, StripPost(nd.Name, "Syntax")); - if (nd.Kinds.Count > 1) - { - Write("kind, "); + Write($"return ({node.Name})InternalSyntax.SyntaxFactory.{StripPost(node.Name, "Syntax")}("); } - for (int i = 0, n = nodeFields.Count; i < n; i++) + else { - var field = nodeFields[i]; - if (i > 0) - { - Write(", "); - } + // If we're not generating validation, we can use an expression body. + IncreaseIndent(); + Write($"=> ({node.Name})InternalSyntax.SyntaxFactory.{StripPost(node.Name, "Syntax")}("); + } - if (field.Type == "SyntaxToken") + WriteCommaSeparatedList( + node.Kinds.Count > 1 ? "kind" : string.Empty, + nodeFields.Select(f => { - if (IsOptional(field)) + if (f.Type == "SyntaxToken") + { + if (IsOptional(f)) + { + return $"(Syntax.InternalSyntax.SyntaxToken){GetParameterName(f)}?.Green"; + } + else + { + return $"(Syntax.InternalSyntax.SyntaxToken){GetParameterName(f)}.Green"; + } + } + else if (f.Type == "SyntaxList") { - Write("(Syntax.InternalSyntax.SyntaxToken){0}?.Green", CamelCase(field.Name)); + return $"{GetParameterName(f)}.Node.ToGreenList()"; + } + else if (IsNodeList(f.Type)) + { + return $"{GetParameterName(f)}.Node.ToGreenList()"; + } + else if (IsSeparatedNodeList(f.Type)) + { + return $"{GetParameterName(f)}.Node.ToGreenSeparatedList()"; + } + else if (f.Type == "SyntaxNodeOrTokenList") + { + return $"{GetParameterName(f)}.Node.ToGreenList()"; } else { - Write("(Syntax.InternalSyntax.SyntaxToken){0}.Green", CamelCase(field.Name)); + return $"{GetParameterName(f)} == null ? null : (InternalSyntax.{f.Type}){GetParameterName(f)}.Green"; } - } - else if (field.Type == "SyntaxList") - { - Write("{0}.Node.ToGreenList()", CamelCase(field.Name)); - } - else if (IsNodeList(field.Type)) - { - Write("{0}.Node.ToGreenList()", CamelCase(field.Name), GetElementType(field.Type)); - } - else if (IsSeparatedNodeList(field.Type)) - { - Write("{0}.Node.ToGreenSeparatedList()", CamelCase(field.Name), GetElementType(field.Type)); - } - else if (field.Type == "SyntaxNodeOrTokenList") - { - Write("{0}.Node.ToGreenList()", CamelCase(field.Name)); - } - else - { - Write("{0} == null ? null : (InternalSyntax.{1}){0}.Green", CamelCase(field.Name), field.Type); - } - } + }), + // values are at end + valueFields.Select(f => GetParameterName(f))); - // values are at end - for (int i = 0, n = valueFields.Count; i < n; i++) + WriteLine(").CreateRed();"); + + if (hasValidation) { - var field = valueFields[i]; - Write(", "); - Write(CamelCase(field.Name)); + CloseBlock(); + } + else + { + DescreaseIndent(); } - - WriteLine(").CreateRed();"); - WriteLine(" }"); //WriteLine(); - } - private void WriteRedFactoryParameters(Node nd) - { - if (nd.Kinds.Count > 1) + static bool NeedsNullCheck(Field field) { - Write("SyntaxKind kind, "); + return !IsAnyList(field.Type) && !IsOptional(field); } - for (int i = 0, n = nd.Fields.Count; i < n; i++) + static bool NeedsSyntaxKindValidation(Field field) { - var field = nd.Fields[i]; - if (i > 0) - { - Write(", "); - } - - var type = GetRedPropertyType(field); - - Write("{0} {1}", type, CamelCase(field.Name)); + return field.Type == "SyntaxToken" && field.Kinds?.Count > 0; } } - private string GetRedPropertyType(Field field) + private static string GetRedPropertyType(Field field) { //if (field.Type == "SyntaxList") // return "SyntaxTokenList"; @@ -1801,75 +1727,71 @@ private string GetDefaultValue(Node nd, Field field) if (IsOptional(field) || IsAnyList(field.Type)) { - return string.Format(CultureInfo.InvariantCulture, "default({0})", GetRedPropertyType(field)); + return $"default({GetRedPropertyType(field)})"; } else if (field.Type == "SyntaxToken") { // auto construct token? if (field.Kinds.Count == 1) { - return string.Format(CultureInfo.InvariantCulture, "SyntaxFactory.Token(SyntaxKind.{0})", field.Kinds[0].Name); + return $"SyntaxFactory.Token(SyntaxKind.{field.Kinds[0].Name})"; } else { - return string.Format(CultureInfo.InvariantCulture, "SyntaxFactory.Token(Get{0}{1}Kind(kind))", StripPost(nd.Name, "Syntax"), StripPost(field.Name, "Opt")); + return $"SyntaxFactory.Token(Get{StripPost(nd.Name, "Syntax")}{StripPost(field.Name, "Opt")}Kind(kind))"; } } else { var referencedNode = GetNode(field.Type); - return string.Format(CultureInfo.InvariantCulture, "SyntaxFactory.{0}()", StripPost(referencedNode.Name, "Syntax")); + return $"SyntaxFactory.{StripPost(referencedNode.Name, "Syntax")}()"; } } // Writes GetKind() methods for converting between node kind and member token kinds... - private void WriteKindConverters(Node nd) + private void WriteKindConverters(Node node) { - for (int f = 0; f < nd.Fields.Count; f++) + foreach (var field in node.Fields) { - var field = nd.Fields[f]; - - if (field.Type == "SyntaxToken" && CanBeAutoCreated(nd, field) && field.Kinds.Count > 1) + if (field.Type == "SyntaxToken" && CanBeAutoCreated(node, field) && field.Kinds.Count > 1) { WriteLine(); - WriteLine(" private static SyntaxKind Get{0}{1}Kind(SyntaxKind kind)", StripPost(nd.Name, "Syntax"), StripPost(field.Name, "Opt")); - WriteLine(" {"); - - WriteLine(" switch (kind)"); - WriteLine(" {"); - - for (int k = 0; k < field.Kinds.Count; k++) + WriteLine($"private static SyntaxKind Get{StripPost(node.Name, "Syntax")}{StripPost(field.Name, "Opt")}Kind(SyntaxKind kind)"); + using (Indent()) { - var nKind = nd.Kinds[k]; - var pKind = field.Kinds[k]; - WriteLine(" case SyntaxKind.{0}:", nKind.Name); - WriteLine(" return SyntaxKind.{0};", pKind.Name); - } + WriteLine("=> kind switch"); + using (Block()) + { + for (var i = 0; i < field.Kinds.Count; i++) + { + var nKind = node.Kinds[i]; + var pKind = field.Kinds[i]; + WriteLine($"SyntaxKind.{nKind.Name} => SyntaxKind.{pKind.Name}"); + } - WriteLine(" default:"); - WriteLine(" throw new ArgumentOutOfRangeException();"); - WriteLine(" }"); - WriteLine(" }"); + WriteLine($"_ => ThrowHelper.ThrowArgumentOutOfRangeException(nameof(kind));"); + } + } } } } - private IEnumerable DetermineRedFactoryWithNoAutoCreatableTokenFields(Node nd) + private static IEnumerable DetermineRedFactoryWithNoAutoCreatableTokenFields(Node node) { - return nd.Fields.Where(f => !IsAutoCreatableToken(nd, f)); + return node.Fields.Where(f => !IsAutoCreatableToken(node, f)); } // creates a factory without auto-creatable token arguments - private void WriteRedFactoryWithNoAutoCreatableTokens(Node nd) + private void WriteRedFactoryWithNoAutoCreatableTokens(Node node) { - var nAutoCreatableTokens = nd.Fields.Count(f => IsAutoCreatableToken(nd, f)); + var nAutoCreatableTokens = node.Fields.Count(f => IsAutoCreatableToken(node, f)); if (nAutoCreatableTokens == 0) { return; // already handled by general factory } - var factoryWithNoAutoCreatableTokenFields = new HashSet(DetermineRedFactoryWithNoAutoCreatableTokenFields(nd)); - var minimalFactoryFields = DetermineMinimalFactoryFields(nd); + var factoryWithNoAutoCreatableTokenFields = new HashSet(DetermineRedFactoryWithNoAutoCreatableTokenFields(node)); + var minimalFactoryFields = DetermineMinimalFactoryFields(node); if (minimalFactoryFields != null && factoryWithNoAutoCreatableTokenFields.SetEquals(minimalFactoryFields)) { return; // will be handled in minimal factory case @@ -1877,77 +1799,31 @@ private void WriteRedFactoryWithNoAutoCreatableTokens(Node nd) WriteLine(); - WriteComment(string.Format(CultureInfo.InvariantCulture, "Creates a new {0} instance.", nd.Name), " "); - Write(" {0} static {1} {2}(", "public", nd.Name, StripPost(nd.Name, "Syntax")); - - bool hasPreviousParameter = false; - if (nd.Kinds.Count > 1) - { - Write("SyntaxKind kind"); - hasPreviousParameter = true; - } - - for (int i = 0, n = nd.Fields.Count; i < n; i++) - { - var field = nd.Fields[i]; - - if (factoryWithNoAutoCreatableTokenFields.Contains(field)) - { - if (hasPreviousParameter) - { - Write(", "); - } - - Write("{0} {1}", GetRedPropertyType(field), CamelCase(field.Name)); - - hasPreviousParameter = true; - } - } + WriteComment($"Creates a new {node.Name} instance."); + Write($"public static {node.Name} {StripPost(node.Name, "Syntax")}("); + WriteCommaSeparatedList( + node.Kinds.Count > 1 ? "SyntaxKind kind" : string.Empty, + node.Fields + .Where(factoryWithNoAutoCreatableTokenFields.Contains) + .Select(f => $"{GetRedPropertyType(f)} {GetParameterName(f)}")); WriteLine(")"); - WriteLine(" {"); - - Write(" return SyntaxFactory.{0}(", StripPost(nd.Name, "Syntax")); - - bool hasPreviousArgument = false; - if (nd.Kinds.Count > 1) - { - Write("kind"); - hasPreviousArgument = true; - } - - for (int i = 0, n = nd.Fields.Count; i < n; i++) + using (Indent()) { - var field = nd.Fields[i]; - - if (hasPreviousArgument) - { - Write(", "); - } - - if (factoryWithNoAutoCreatableTokenFields.Contains(field)) - { - // pass supplied parameter on to general factory - Write("{0}", CamelCase(field.Name)); - } - else - { - // pass an auto-created token to the general factory - Write("{0}", GetDefaultValue(nd, field)); - } - - hasPreviousArgument = true; + Write($"=> SyntaxFactory.{StripPost(node.Name, "Syntax")}("); + WriteCommaSeparatedList( + node.Kinds.Count > 1 ? "kind" : string.Empty, + node.Fields.Select(f => factoryWithNoAutoCreatableTokenFields.Contains(f) + ? GetParameterName(f) + : GetDefaultValue(node, f))); + WriteLine(");"); } - - WriteLine(");"); - - WriteLine(" }"); } private Field DetermineMinimalOptionalField(Node nd) { // first if there is a single list, then choose the list because it would not have been optional - int listCount = nd.Fields.Count(f => IsAnyNodeList(f.Type)); + var listCount = nd.Fields.Count(f => IsAnyNodeList(f.Type)); if (listCount == 1) { return nd.Fields.First(f => IsAnyNodeList(f.Type)); @@ -1955,7 +1831,7 @@ private Field DetermineMinimalOptionalField(Node nd) else { // otherwise, if there is a single optional node, use that.. - int nodeCount = nd.Fields.Count(f => IsNode(f.Type) && f.Type != "SyntaxToken"); + var nodeCount = nd.Fields.Count(f => IsNode(f.Type) && f.Type != "SyntaxToken"); if (nodeCount == 1) { return nd.Fields.First(f => IsNode(f.Type) && f.Type != "SyntaxToken"); @@ -1989,147 +1865,103 @@ private IEnumerable DetermineMinimalFactoryFields(Node nd) } // creates a factory with only the required arguments (everything else is defaulted) - private void WriteRedMinimalFactory(Node nd, bool withStringNames = false) + private void WriteRedMinimalFactory(Node node, bool withStringNames = false) { - var optionalCount = OptionalFactoryArgumentCount(nd); + var optionalCount = OptionalFactoryArgumentCount(node); if (optionalCount == 0) { return; // already handled w/ general factory method } - var minimalFactoryfields = new HashSet(DetermineMinimalFactoryFields(nd)); + var minimalFactoryfields = new HashSet(DetermineMinimalFactoryFields(node)); - if (withStringNames && !minimalFactoryfields.Any(f => IsRequiredFactoryField(nd, f) && CanAutoConvertFromString(f))) + if (withStringNames && !minimalFactoryfields.Any(f => IsRequiredFactoryField(node, f) && CanAutoConvertFromString(f))) { return; // no string-name overload necessary } WriteLine(); - WriteComment(string.Format(CultureInfo.InvariantCulture, "Creates a new {0} instance.", nd.Name), " "); - Write(" {0} static {1} {2}(", "public", nd.Name, StripPost(nd.Name, "Syntax")); - - bool hasPreviousParameter = false; - if (nd.Kinds.Count > 1) - { - Write("SyntaxKind kind"); - hasPreviousParameter = true; - } - - for (int i = 0, n = nd.Fields.Count; i < n; i++) - { - var field = nd.Fields[i]; - - if (minimalFactoryfields.Contains(field)) + WriteComment($"Creates a new {node.Name} instance."); + Write($"public static {node.Name} {StripPost(node.Name, "Syntax")}("); + WriteCommaSeparatedList( + node.Kinds.Count > 1 ? "SyntaxKind kind" : string.Empty, + node.Fields.Where(minimalFactoryfields.Contains).Select(f => { - var type = GetRedPropertyType(field); + var type = GetRedPropertyType(f); - if (IsRequiredFactoryField(nd, field)) + if (IsRequiredFactoryField(node, f)) { - if (hasPreviousParameter) - { - Write(", "); - } - - if (withStringNames && CanAutoConvertFromString(field)) + if (withStringNames && CanAutoConvertFromString(f)) { type = "string"; } - Write("{0} {1}", type, CamelCase(field.Name)); - - hasPreviousParameter = true; + return $"{type} {GetParameterName(f)}"; } else { - if (hasPreviousParameter) - { - Write(", "); - } - - Write("{0} {1} = default({0})", type, CamelCase(field.Name)); - - hasPreviousParameter = true; + return $"{type} {GetParameterName(f)} = default({type})"; } - } - } + })); WriteLine(")"); - WriteLine(" {"); - - Write(" return SyntaxFactory.{0}(", StripPost(nd.Name, "Syntax")); - - bool hasPreviousArgument = false; - if (nd.Kinds.Count > 1) - { - Write("kind"); - hasPreviousArgument = true; - } - - for (int i = 0, n = nd.Fields.Count; i < n; i++) + using (Indent()) { - var field = nd.Fields[i]; - - if (hasPreviousArgument) - { - Write(", "); - } + Write($"=> SyntaxFactory.{StripPost(node.Name, "Syntax")}("); - if (minimalFactoryfields.Contains(field)) - { - if (IsRequiredFactoryField(nd, field)) - { - if (withStringNames && CanAutoConvertFromString(field)) - { - Write("{0}({1})", GetStringConverterMethod(field), CamelCase(field.Name)); - } - else - { - Write("{0}", CamelCase(field.Name)); - } - } - else + WriteCommaSeparatedList( + node.Kinds.Count > 1 ? "kind" : string.Empty, + node.Fields.Select(f => { - if (IsOptional(field) || IsAnyList(field.Type)) - { - Write("{0}", CamelCase(field.Name)); - } - else + if (minimalFactoryfields.Contains(f)) { - Write("{0} ?? {1}", CamelCase(field.Name), GetDefaultValue(nd, field)); + if (IsRequiredFactoryField(node, f)) + { + if (withStringNames && CanAutoConvertFromString(f)) + { + return $"{GetStringConverterMethod(f)}({GetParameterName(f)})"; + } + else + { + return GetParameterName(f); + } + } + else + { + if (IsOptional(f) || IsAnyList(f.Type)) + { + return GetParameterName(f); + } + else + { + return $"{GetParameterName(f)} ?? {GetDefaultValue(node, f)}"; + } + } } - } - } - else - { - var defaultValue = GetDefaultValue(nd, field); - Write(defaultValue); - } - hasPreviousArgument = true; + return GetDefaultValue(node, f); + })); + WriteLine(");"); } - - WriteLine(");"); - - WriteLine(" }"); } - private bool CanAutoConvertFromString(Field field) + private static bool CanAutoConvertFromString(Field field) { return IsIdentifierToken(field) || IsIdentifierNameSyntax(field); } - private bool IsIdentifierToken(Field field) + private static bool IsIdentifierToken(Field field) { return field.Type == "SyntaxToken" && field.Kinds != null && field.Kinds.Count == 1 && field.Kinds[0].Name == "IdentifierToken"; } - private bool IsIdentifierNameSyntax(Field field) + private static bool IsIdentifierNameSyntax(Field field) { return field.Type == "IdentifierNameSyntax"; } - private string GetStringConverterMethod(Field field) + private static string GetStringConverterMethod(Field field) { if (IsIdentifierToken(field)) { @@ -2149,14 +1981,14 @@ private string GetStringConverterMethod(Field field) /// Anything inside a <Comment> tag gets written out (escaping untouched) as the /// XML doc comment. Line breaks will be preserved. /// - private void WriteComment(string comment, string indent) + private void WriteComment(string comment) { if (comment != null) { var lines = comment.Split(new string[] { "\r", "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries); foreach (var line in lines.Where(l => !string.IsNullOrWhiteSpace(l))) { - WriteLine("{0}/// {1}", indent, line.TrimStart()); + WriteLine("/// {0}", line.TrimStart()); } } } @@ -2165,7 +1997,7 @@ private void WriteComment(string comment, string indent) /// Anything inside a <Comment> tag gets written out (escaping untouched) as the /// XML doc comment. Line breaks will be preserved. /// - private void WriteComment(Comment comment, string indent) + private void WriteComment(Comment comment) { if (comment != null) { @@ -2174,9 +2006,15 @@ private void WriteComment(Comment comment, string indent) string[] lines = element.OuterXml.Split(new string[] { "\r", "\n", "\r\n" }, StringSplitOptions.RemoveEmptyEntries); foreach (string line in lines.Where(l => !string.IsNullOrWhiteSpace(l))) { - WriteLine("{0}/// {1}", indent, line.TrimStart()); + WriteLine("/// {0}", line.TrimStart()); } } } } + + private static string GetFieldName(Field field) + => UnderscoreCamelCase(field.Name); + + private static string GetParameterName(Field field) + => CamelCase(field.Name); } diff --git a/src/razor/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/EndpointContracts/IRazorNotificationHandler.cs b/src/razor/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/EndpointContracts/IRazorNotificationHandler.cs index a29ece4e499..3f3a0c181fa 100644 --- a/src/razor/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/EndpointContracts/IRazorNotificationHandler.cs +++ b/src/razor/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/EndpointContracts/IRazorNotificationHandler.cs @@ -5,7 +5,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer.EndpointContracts; -internal interface IRazorNotificationHandler : INotificationHandler +internal interface IRazorNotificationHandler : INotificationHandler { } diff --git a/src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost/CohostCodeActionsEndpoint.cs b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/CodeActions/CohostCodeActionsEndpoint.cs similarity index 94% rename from src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost/CohostCodeActionsEndpoint.cs rename to src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/CodeActions/CohostCodeActionsEndpoint.cs index c7cf0b75867..3d0af51a254 100644 --- a/src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost/CohostCodeActionsEndpoint.cs +++ b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/CodeActions/CohostCodeActionsEndpoint.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Immutable; using System.Composition; +using System.Diagnostics; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor; @@ -11,6 +12,7 @@ using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.ExternalAccess.Razor.Cohost; using Microsoft.CodeAnalysis.ExternalAccess.Razor.Cohost.Handlers; +using Microsoft.CodeAnalysis.ExternalAccess.Razor.Features; using Microsoft.CodeAnalysis.Razor.CodeActions; using Microsoft.CodeAnalysis.Razor.CodeActions.Models; using Microsoft.CodeAnalysis.Razor.Protocol; @@ -24,7 +26,7 @@ namespace Microsoft.VisualStudio.Razor.LanguageClient.Cohost; [Shared] [CohostEndpoint(Methods.TextDocumentCodeActionName)] [Export(typeof(IDynamicRegistrationProvider))] -[ExportCohostStatelessLspService(typeof(CohostCodeActionsEndpoint))] +[ExportRazorStatelessLspService(typeof(CohostCodeActionsEndpoint))] [method: ImportingConstructor] #pragma warning restore RS0030 // Do not use banned APIs internal sealed class CohostCodeActionsEndpoint( @@ -80,9 +82,15 @@ public ImmutableArray GetRegistrations(VSInternalClientCapabilitie return null; } + // This is just to prevent a warning for an unused field in the VS Code extension + Debug.Assert(_requestInvoker is not null); + var delegatedCodeActions = requestInfo.LanguageKind switch { + // We don't support Html code actions in VS Code +#if !VSCODE RazorLanguageKind.Html => await GetHtmlCodeActionsAsync(razorDocument, request, correlationId, cancellationToken).ConfigureAwait(false), +#endif RazorLanguageKind.CSharp => await GetCSharpCodeActionsAsync(razorDocument, requestInfo.CSharpRequest.AssumeNotNull(), correlationId, cancellationToken).ConfigureAwait(false), _ => [] }; @@ -110,6 +118,7 @@ private async Task GetCSharpCodeActionsAsync(TextDo return JsonHelpers.ConvertAll(csharpCodeActions); } +#if !VSCODE private async Task GetHtmlCodeActionsAsync(TextDocument razorDocument, VSCodeActionParams request, Guid correlationId, CancellationToken cancellationToken) { var result = await _requestInvoker.MakeHtmlLspRequestAsync( @@ -127,6 +136,7 @@ private async Task GetHtmlCodeActionsAsync(TextDocu return result; } +#endif internal TestAccessor GetTestAccessor() => new(this); diff --git a/src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost/CohostCodeActionsResolveEndpoint.cs b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/CodeActions/CohostCodeActionsResolveEndpoint.cs similarity index 91% rename from src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost/CohostCodeActionsResolveEndpoint.cs rename to src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/CodeActions/CohostCodeActionsResolveEndpoint.cs index 485b1d4b05a..041a4e01c50 100644 --- a/src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost/CohostCodeActionsResolveEndpoint.cs +++ b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/CodeActions/CohostCodeActionsResolveEndpoint.cs @@ -10,32 +10,38 @@ using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.ExternalAccess.Razor.Cohost; using Microsoft.CodeAnalysis.ExternalAccess.Razor.Cohost.Handlers; +using Microsoft.CodeAnalysis.ExternalAccess.Razor.Features; using Microsoft.CodeAnalysis.Razor.CodeActions; using Microsoft.CodeAnalysis.Razor.CodeActions.Models; using Microsoft.CodeAnalysis.Razor.Formatting; using Microsoft.CodeAnalysis.Razor.Protocol; using Microsoft.CodeAnalysis.Razor.Remote; -using Microsoft.VisualStudio.Razor.Settings; +using Microsoft.CodeAnalysis.Razor.Workspaces.Settings; namespace Microsoft.VisualStudio.Razor.LanguageClient.Cohost; #pragma warning disable RS0030 // Do not use banned APIs +#if !VSCODE +// Visual Studio requires us to register for every method name, VS Code correctly realises that if you +// register for code actions, and say you have resolve support, then registering for resolve is unnecessary. +// In fact it's an error. +[Export(typeof(IDynamicRegistrationProvider))] +#endif [Shared] [CohostEndpoint(Methods.CodeActionResolveName)] -[Export(typeof(IDynamicRegistrationProvider))] -[ExportCohostStatelessLspService(typeof(CohostCodeActionsResolveEndpoint))] +[ExportRazorStatelessLspService(typeof(CohostCodeActionsResolveEndpoint))] [method: ImportingConstructor] #pragma warning restore RS0030 // Do not use banned APIs internal sealed class CohostCodeActionsResolveEndpoint( IRemoteServiceInvoker remoteServiceInvoker, IClientCapabilitiesService clientCapabilitiesService, - IClientSettingsManager clientSettingsManager, + IClientSettingsReader clientSettingsManager, IHtmlRequestInvoker requestInvoker) : AbstractRazorCohostDocumentRequestHandler, IDynamicRegistrationProvider { private readonly IRemoteServiceInvoker _remoteServiceInvoker = remoteServiceInvoker; private readonly IClientCapabilitiesService _clientCapabilitiesService = clientCapabilitiesService; - private readonly IClientSettingsManager _clientSettingsManager = clientSettingsManager; + private readonly IClientSettingsReader _clientSettingsManager = clientSettingsManager; private readonly IHtmlRequestInvoker _requestInvoker = requestInvoker; protected override bool MutatesSolutionState => false; diff --git a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/CohostStartupService.cs b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/CohostStartupService.cs index f8cfcc345b9..561e49197cf 100644 --- a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/CohostStartupService.cs +++ b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/CohostStartupService.cs @@ -5,45 +5,49 @@ using System.Collections.Generic; using System.Collections.Immutable; using System.ComponentModel.Composition; +using System.Linq; using System.Text.Json; using System.Threading; using System.Threading.Tasks; using Microsoft.CodeAnalysis.ExternalAccess.Razor.Cohost; +using Microsoft.CodeAnalysis.Razor.Logging; using Microsoft.CodeAnalysis.Razor.Protocol; -using Microsoft.CodeAnalysis.Razor.Workspaces; namespace Microsoft.VisualStudio.Razor.LanguageClient.Cohost; [Export(typeof(ICohostStartupService))] [method: ImportingConstructor] -internal class CohostStartupService( - LanguageServerFeatureOptions languageServerFeatureOptions, - [ImportMany] IEnumerable> lazyStartupServices) - : ICohostStartupService +internal sealed class CohostStartupService( + [ImportMany] IEnumerable> lazyStartupServices, + ILoggerFactory loggerFactory) : ICohostStartupService { - private readonly LanguageServerFeatureOptions _languageServerFeatureOptions = languageServerFeatureOptions; private readonly ImmutableArray> _lazyStartupServices = [.. lazyStartupServices]; + private readonly ILogger _logger = loggerFactory.GetOrCreateLogger(); public async Task StartupAsync(string clientCapabilitiesString, RazorCohostRequestContext requestContext, CancellationToken cancellationToken) { var clientCapabilities = JsonSerializer.Deserialize(clientCapabilitiesString, JsonHelpers.JsonSerializerOptions) ?? new(); - // We want to make sure LanguageServerFeatureOptions is initialized first, so decisions can be made based on flags, - // and we also ensure we have a RazorClientLanguageServerManager available for anything that needs to call back to the client, - // so we do those two things first, manually. - if (_languageServerFeatureOptions is IRazorCohostStartupService startupService) - { - await startupService.StartupAsync(clientCapabilities, requestContext, cancellationToken).ConfigureAwait(false); - } + var providers = _lazyStartupServices.Select(p => p.Value).OrderByAsArray(p => p.Order); - if (!_languageServerFeatureOptions.UseRazorCohostServer) + foreach (var provider in providers) { - return; - } + if (cancellationToken.IsCancellationRequested) + { + _logger.LogInformation($"Razor extension startup cancelled."); + return; + } - foreach (var provider in _lazyStartupServices) - { - await provider.Value.StartupAsync(clientCapabilities, requestContext, cancellationToken).ConfigureAwait(false); + try + { + await provider.StartupAsync(clientCapabilities, requestContext, cancellationToken).ConfigureAwait(false); + } + catch (Exception ex) when (ex is not OperationCanceledException) + { + _logger.LogError(ex, $"Error initializing Razor startup service '{provider.GetType().Name}'"); + } } + + _logger.LogInformation($"Razor extension startup finished."); } } diff --git a/src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost/CohostCompletionListCache.cs b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/Completion/CohostCompletionListCache.cs similarity index 100% rename from src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost/CohostCompletionListCache.cs rename to src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/Completion/CohostCompletionListCache.cs diff --git a/src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost/CohostDocumentCompletionEndpoint.cs b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/Completion/CohostDocumentCompletionEndpoint.cs similarity index 93% rename from src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost/CohostDocumentCompletionEndpoint.cs rename to src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/Completion/CohostDocumentCompletionEndpoint.cs index 26e81ec48ae..001b17c150a 100644 --- a/src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost/CohostDocumentCompletionEndpoint.cs +++ b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/Completion/CohostDocumentCompletionEndpoint.cs @@ -11,6 +11,7 @@ using Microsoft.AspNetCore.Razor.PooledObjects; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.ExternalAccess.Razor.Cohost; +using Microsoft.CodeAnalysis.ExternalAccess.Razor.Features; using Microsoft.CodeAnalysis.Razor.Completion; using Microsoft.CodeAnalysis.Razor.Completion.Delegation; using Microsoft.CodeAnalysis.Razor.Logging; @@ -19,8 +20,7 @@ using Microsoft.CodeAnalysis.Razor.Remote; using Microsoft.CodeAnalysis.Razor.Telemetry; using Microsoft.CodeAnalysis.Razor.Workspaces; -using Microsoft.VisualStudio.Razor.Settings; -using Microsoft.VisualStudio.Razor.Snippets; +using Microsoft.CodeAnalysis.Razor.Workspaces.Settings; using Response = Microsoft.CodeAnalysis.Razor.Remote.RemoteResponse; namespace Microsoft.VisualStudio.Razor.LanguageClient.Cohost; @@ -29,14 +29,16 @@ namespace Microsoft.VisualStudio.Razor.LanguageClient.Cohost; [Shared] [CohostEndpoint(Methods.TextDocumentCompletionName)] [Export(typeof(IDynamicRegistrationProvider))] -[ExportCohostStatelessLspService(typeof(CohostDocumentCompletionEndpoint))] +[ExportRazorStatelessLspService(typeof(CohostDocumentCompletionEndpoint))] [method: ImportingConstructor] #pragma warning restore RS0030 // Do not use banned APIs internal sealed class CohostDocumentCompletionEndpoint( IRemoteServiceInvoker remoteServiceInvoker, - IClientSettingsManager clientSettingsManager, + IClientSettingsReader clientSettingsManager, IClientCapabilitiesService clientCapabilitiesService, - SnippetCompletionItemProvider snippetCompletionItemProvider, +#pragma warning disable RS0030 // Do not use banned APIs + [Import(AllowDefault = true)] ISnippetCompletionItemProvider? snippetCompletionItemProvider, +#pragma warning restore RS0030 // Do not use banned APIs LanguageServerFeatureOptions languageServerFeatureOptions, IHtmlRequestInvoker requestInvoker, CompletionListCache completionListCache, @@ -45,9 +47,9 @@ internal sealed class CohostDocumentCompletionEndpoint( : AbstractRazorCohostDocumentRequestHandler, IDynamicRegistrationProvider { private readonly IRemoteServiceInvoker _remoteServiceInvoker = remoteServiceInvoker; - private readonly IClientSettingsManager _clientSettingsManager = clientSettingsManager; + private readonly IClientSettingsReader _clientSettingsManager = clientSettingsManager; private readonly IClientCapabilitiesService _clientCapabilitiesService = clientCapabilitiesService; - private readonly SnippetCompletionItemProvider _snippetCompletionItemProvider = snippetCompletionItemProvider; + private readonly ISnippetCompletionItemProvider? _snippetCompletionItemProvider = snippetCompletionItemProvider; private readonly CompletionTriggerAndCommitCharacters _triggerAndCommitCharacters = new(languageServerFeatureOptions); private readonly IHtmlRequestInvoker _requestInvoker = requestInvoker; private readonly CompletionListCache _completionListCache = completionListCache; @@ -194,7 +196,8 @@ public ImmutableArray GetRegistrations(VSInternalClientCapabilitie combinedCompletionList = htmlCompletionList; } - if (completionPositionInfo.ShouldIncludeDelegationSnippets) + if (completionPositionInfo.ShouldIncludeDelegationSnippets && + _snippetCompletionItemProvider is not null) { combinedCompletionList = AddSnippets( combinedCompletionList, @@ -250,11 +253,11 @@ public ImmutableArray GetRegistrations(VSInternalClientCapabilitie string? triggerCharacter) { using var builder = new PooledArrayBuilder(); - _snippetCompletionItemProvider.AddSnippetCompletions( + _snippetCompletionItemProvider.AssumeNotNull().AddSnippetCompletions( + ref builder.AsRef(), languageKind, invokeKind, - triggerCharacter, - ref builder.AsRef()); + triggerCharacter); // If there were no snippets, just return the original list if (builder.Count == 0) diff --git a/src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost/CohostDocumentCompletionResolveEndpoint.cs b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/Completion/CohostDocumentCompletionResolveEndpoint.cs similarity index 87% rename from src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost/CohostDocumentCompletionResolveEndpoint.cs rename to src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/Completion/CohostDocumentCompletionResolveEndpoint.cs index b2bcc3aab82..175e93327c1 100644 --- a/src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost/CohostDocumentCompletionResolveEndpoint.cs +++ b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/Completion/CohostDocumentCompletionResolveEndpoint.cs @@ -9,34 +9,40 @@ using Microsoft.AspNetCore.Razor; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.ExternalAccess.Razor.Cohost; +using Microsoft.CodeAnalysis.ExternalAccess.Razor.Features; using Microsoft.CodeAnalysis.Razor.Completion; using Microsoft.CodeAnalysis.Razor.Completion.Delegation; using Microsoft.CodeAnalysis.Razor.Formatting; using Microsoft.CodeAnalysis.Razor.Logging; using Microsoft.CodeAnalysis.Razor.Protocol; using Microsoft.CodeAnalysis.Razor.Remote; -using Microsoft.VisualStudio.Razor.Settings; +using Microsoft.CodeAnalysis.Razor.Workspaces.Settings; namespace Microsoft.VisualStudio.Razor.LanguageClient.Cohost; #pragma warning disable RS0030 // Do not use banned APIs +#if !VSCODE +// Visual Studio requires us to register for every method name, VS Code correctly realises that if you +// register for code actions, and say you have resolve support, then registering for resolve is unnecessary. +// In fact it's an error. +[Export(typeof(IDynamicRegistrationProvider))] +#endif [Shared] [CohostEndpoint(Methods.TextDocumentCompletionResolveName)] -[Export(typeof(IDynamicRegistrationProvider))] -[ExportCohostStatelessLspService(typeof(CohostDocumentCompletionResolveEndpoint))] +[ExportRazorStatelessLspService(typeof(CohostDocumentCompletionResolveEndpoint))] [method: ImportingConstructor] #pragma warning restore RS0030 // Do not use banned APIs internal sealed class CohostDocumentCompletionResolveEndpoint( CompletionListCache completionListCache, IRemoteServiceInvoker remoteServiceInvoker, - IClientSettingsManager clientSettingsManager, + IClientSettingsReader clientSettingsManager, IHtmlRequestInvoker requestInvoker, ILoggerFactory loggerFactory) : AbstractRazorCohostDocumentRequestHandler, IDynamicRegistrationProvider { private readonly CompletionListCache _completionListCache = completionListCache; private readonly IRemoteServiceInvoker _remoteServiceInvoker = remoteServiceInvoker; - private readonly IClientSettingsManager _clientSettingsManager = clientSettingsManager; + private readonly IClientSettingsReader _clientSettingsManager = clientSettingsManager; private readonly IHtmlRequestInvoker _requestInvoker = requestInvoker; private readonly ILogger _logger = loggerFactory.GetOrCreateLogger(); @@ -92,8 +98,17 @@ public ImmutableArray GetRegistrations(VSInternalClientCapabilitie { Debug.Assert(delegatedContext.ProjectedKind == RazorLanguageKind.Html); +#if VSCODE + Debug.Assert(_requestInvoker is not null); + Debug.Assert(_logger is not null); + Debug.Assert(nameof(DelegatedCompletionHelper).Length > 0); + + // We don't support completion resolve in VS Code + return completionItem; +#else completionItem.Data = DelegatedCompletionHelper.GetOriginalCompletionItemData(completionItem, completionList, delegatedContext.OriginalCompletionListData); return await ResolveHtmlCompletionItemAsync(completionItem, razorDocument, cancellationToken).ConfigureAwait(false); +#endif } var clientSettings = _clientSettingsManager.GetClientSettings(); @@ -119,6 +134,7 @@ public ImmutableArray GetRegistrations(VSInternalClientCapabilitie return result; } +#if !VSCODE private async Task ResolveHtmlCompletionItemAsync( VSInternalCompletionItem request, TextDocument razorDocument, @@ -134,6 +150,7 @@ private async Task ResolveHtmlCompletionItemAsync( return result ?? request; } +#endif internal TestAccessor GetTestAccessor() => new(this); diff --git a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/Diagnostics/CohostDocumentPullDiagnosticsEndpointBase.cs b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/Diagnostics/CohostDocumentPullDiagnosticsEndpointBase.cs new file mode 100644 index 00000000000..e36863556df --- /dev/null +++ b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/Diagnostics/CohostDocumentPullDiagnosticsEndpointBase.cs @@ -0,0 +1,135 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the MIT license. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Razor.Threading; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.ExternalAccess.Razor; +using Microsoft.CodeAnalysis.ExternalAccess.Razor.Cohost; +using Microsoft.CodeAnalysis.Razor.Logging; +using Microsoft.CodeAnalysis.Razor.Protocol; +using Microsoft.CodeAnalysis.Razor.Remote; +using Microsoft.CodeAnalysis.Razor.Telemetry; +using ExternalHandlers = Microsoft.CodeAnalysis.ExternalAccess.Razor.Cohost.Handlers; + +namespace Microsoft.VisualStudio.Razor.LanguageClient.Cohost; + +internal abstract class CohostDocumentPullDiagnosticsEndpointBase( + IRemoteServiceInvoker remoteServiceInvoker, + IHtmlRequestInvoker requestInvoker, + ITelemetryReporter telemetryReporter, + ILoggerFactory loggerFactory) + : AbstractRazorCohostDocumentRequestHandler + where TRequest : notnull +{ + private readonly IRemoteServiceInvoker _remoteServiceInvoker = remoteServiceInvoker; + private readonly IHtmlRequestInvoker _requestInvoker = requestInvoker; + private readonly ITelemetryReporter _telemetryReporter = telemetryReporter; + private readonly ILogger _logger = loggerFactory.GetOrCreateLogger>(); + + protected override bool MutatesSolutionState => false; + + protected override bool RequiresLSPSolution => true; + + protected abstract string LspMethodName { get; } + protected abstract bool SupportsHtmlDiagnostics { get; } + + protected virtual LspDiagnostic[] ExtractHtmlDiagnostics(TResponse result) + { + throw new NotSupportedException("If SupportsHtmlDiagnostics is true, you must implement GetHtmlDiagnostics"); + } + + protected virtual TRequest CreateHtmlParams(Uri uri) + { + throw new NotSupportedException("If SupportsHtmlDiagnostics is true, you must implement CreateHtmlParams"); + } + + protected async Task GetDiagnosticsAsync(TextDocument razorDocument, CancellationToken cancellationToken) + { + var correlationId = Guid.NewGuid(); + using var _ = _telemetryReporter.TrackLspRequest(LspMethodName, LanguageServerConstants.RazorLanguageServerName, TelemetryThresholds.DiagnosticsRazorTelemetryThreshold, correlationId); + + // Diagnostics is a little different, because Roslyn is not designed to run diagnostics in OOP. Their system will transition to OOP + // as it needs, but we have to start here in devenv. This is not as big a problem as it sounds, specifically for diagnostics, because + // we only need to tell Roslyn the document we need diagnostics for. If we had to map positions or ranges etc. it would be worse + // because we'd have to transition to our OOP to find out that info, then back here to get the diagnostics, then back to OOP to process. + _logger.LogDebug($"Getting diagnostics for {razorDocument.FilePath}"); + + var csharpTask = GetCSharpDiagnosticsAsync(razorDocument, correlationId, cancellationToken); + var htmlTask = SupportsHtmlDiagnostics + ? GetHtmlDiagnosticsAsync(razorDocument, correlationId, cancellationToken) + : SpecializedTasks.EmptyArray(); + + try + { + await Task.WhenAll(htmlTask, csharpTask).ConfigureAwait(false); + } + catch (Exception e) when (e is not OperationCanceledException) + { + _logger.LogError(e, $"Exception thrown in PullDiagnostic delegation"); + throw; + } + + if (cancellationToken.IsCancellationRequested) + { + return null; + } + + var csharpDiagnostics = csharpTask.VerifyCompleted(); + var htmlDiagnostics = htmlTask.VerifyCompleted(); + + _logger.LogDebug($"Calling OOP with the {csharpDiagnostics.Length} C# and {htmlDiagnostics.Length} Html diagnostics"); + var diagnostics = await _remoteServiceInvoker.TryInvokeAsync>( + razorDocument.Project.Solution, + (service, solutionInfo, cancellationToken) => service.GetDiagnosticsAsync(solutionInfo, razorDocument.Id, csharpDiagnostics, htmlDiagnostics, cancellationToken), + cancellationToken).ConfigureAwait(false); + + if (diagnostics.IsDefaultOrEmpty) + { + return null; + } + + _logger.LogDebug($"Reporting {diagnostics.Length} diagnostics back to the client"); + return diagnostics.ToArray(); + } + + private async Task GetCSharpDiagnosticsAsync(TextDocument razorDocument, Guid correletionId, CancellationToken cancellationToken) + { + if (!razorDocument.TryComputeHintNameFromRazorDocument(out var hintName) || + await razorDocument.Project.TryGetSourceGeneratedDocumentFromHintNameAsync(hintName, cancellationToken).ConfigureAwait(false) is not { } generatedDocument) + { + return []; + } + + _logger.LogDebug($"Getting C# diagnostics for {generatedDocument.FilePath}"); + + using var _ = _telemetryReporter.TrackLspRequest(LspMethodName, "Razor.ExternalAccess", TelemetryThresholds.DiagnosticsSubLSPTelemetryThreshold, correletionId); + var diagnostics = await ExternalHandlers.Diagnostics.GetDocumentDiagnosticsAsync(generatedDocument, supportsVisualStudioExtensions: true, cancellationToken).ConfigureAwait(false); + return diagnostics.ToArray(); + } + + private async Task GetHtmlDiagnosticsAsync(TextDocument razorDocument, Guid correletionId, CancellationToken cancellationToken) + { + var diagnosticsParams = CreateHtmlParams(razorDocument.CreateUri()); + + var result = await _requestInvoker.MakeHtmlLspRequestAsync( + razorDocument, + LspMethodName, + diagnosticsParams, + TelemetryThresholds.DiagnosticsSubLSPTelemetryThreshold, + correletionId, + cancellationToken).ConfigureAwait(false); + + if (result is null) + { + return []; + } + + return ExtractHtmlDiagnostics(result); + } +} diff --git a/src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost/CohostDocumentHighlightEndpoint.cs b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/DocumentHighlight/CohostDocumentHighlightEndpoint.cs similarity index 94% rename from src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost/CohostDocumentHighlightEndpoint.cs rename to src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/DocumentHighlight/CohostDocumentHighlightEndpoint.cs index 2dd94eea3f2..cd9978cb38c 100644 --- a/src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost/CohostDocumentHighlightEndpoint.cs +++ b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/DocumentHighlight/CohostDocumentHighlightEndpoint.cs @@ -9,6 +9,7 @@ using Microsoft.AspNetCore.Razor; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.ExternalAccess.Razor.Cohost; +using Microsoft.CodeAnalysis.ExternalAccess.Razor.Features; using Microsoft.CodeAnalysis.Razor.Protocol.DocumentHighlight; using Microsoft.CodeAnalysis.Razor.Remote; using Microsoft.CodeAnalysis.Razor.Workspaces; @@ -19,7 +20,7 @@ namespace Microsoft.VisualStudio.Razor.LanguageClient.Cohost; [Shared] [CohostEndpoint(Methods.TextDocumentDocumentHighlightName)] [Export(typeof(IDynamicRegistrationProvider))] -[ExportCohostStatelessLspService(typeof(CohostDocumentHighlightEndpoint))] +[ExportRazorStatelessLspService(typeof(CohostDocumentHighlightEndpoint))] [method: ImportingConstructor] #pragma warning restore RS0030 // Do not use banned APIs internal sealed class CohostDocumentHighlightEndpoint( @@ -36,7 +37,7 @@ internal sealed class CohostDocumentHighlightEndpoint( public ImmutableArray GetRegistrations(VSInternalClientCapabilities clientCapabilities, RazorCohostRequestContext requestContext) { - if (clientCapabilities.SupportsVisualStudioExtensions) + if (clientCapabilities.TextDocument?.DocumentHighlight?.DynamicRegistration == true) { return [new Registration { diff --git a/src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost/CohostFoldingRangeEndpoint.cs b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/FoldingRange/CohostFoldingRangeEndpoint.cs similarity index 97% rename from src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost/CohostFoldingRangeEndpoint.cs rename to src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/FoldingRange/CohostFoldingRangeEndpoint.cs index 7838f39c2fb..15d9cb898ac 100644 --- a/src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost/CohostFoldingRangeEndpoint.cs +++ b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/FoldingRange/CohostFoldingRangeEndpoint.cs @@ -11,6 +11,7 @@ using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.ExternalAccess.Razor; using Microsoft.CodeAnalysis.ExternalAccess.Razor.Cohost; +using Microsoft.CodeAnalysis.ExternalAccess.Razor.Features; using Microsoft.CodeAnalysis.Razor.Logging; using Microsoft.CodeAnalysis.Razor.Protocol.Folding; using Microsoft.CodeAnalysis.Razor.Remote; @@ -21,7 +22,7 @@ namespace Microsoft.VisualStudio.Razor.LanguageClient.Cohost; [Shared] [CohostEndpoint(Methods.TextDocumentFoldingRangeName)] [Export(typeof(IDynamicRegistrationProvider))] -[ExportCohostStatelessLspService(typeof(CohostFoldingRangeEndpoint))] +[ExportRazorStatelessLspService(typeof(CohostFoldingRangeEndpoint))] [method: ImportingConstructor] #pragma warning restore RS0030 // Do not use banned APIs internal sealed class CohostFoldingRangeEndpoint( diff --git a/src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost/CohostHoverEndpoint.cs b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/Hover/CohostHoverEndpoint.cs similarity index 96% rename from src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost/CohostHoverEndpoint.cs rename to src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/Hover/CohostHoverEndpoint.cs index 4f01038a2e2..0ba885288a3 100644 --- a/src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost/CohostHoverEndpoint.cs +++ b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/Hover/CohostHoverEndpoint.cs @@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Razor; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.ExternalAccess.Razor.Cohost; +using Microsoft.CodeAnalysis.ExternalAccess.Razor.Features; using Microsoft.CodeAnalysis.Razor.Remote; namespace Microsoft.VisualStudio.Razor.LanguageClient.Cohost; @@ -16,7 +17,7 @@ namespace Microsoft.VisualStudio.Razor.LanguageClient.Cohost; [Shared] [CohostEndpoint(Methods.TextDocumentHoverName)] [Export(typeof(IDynamicRegistrationProvider))] -[ExportCohostStatelessLspService(typeof(CohostHoverEndpoint))] +[ExportRazorStatelessLspService(typeof(CohostHoverEndpoint))] [method: ImportingConstructor] #pragma warning restore RS0030 // Do not use banned APIs internal sealed class CohostHoverEndpoint( diff --git a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/IRazorCohostStartupService.cs b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/IRazorCohostStartupService.cs index c98e6b95bc6..a5496bfe201 100644 --- a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/IRazorCohostStartupService.cs +++ b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/IRazorCohostStartupService.cs @@ -9,5 +9,7 @@ namespace Microsoft.VisualStudio.Razor.LanguageClient.Cohost; internal interface IRazorCohostStartupService { + int Order { get; } + Task StartupAsync(VSInternalClientCapabilities clientCapabilities, RazorCohostRequestContext requestContext, CancellationToken cancellationToken); } diff --git a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/Microsoft.CodeAnalysis.Razor.CohostingShared.projitems b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/Microsoft.CodeAnalysis.Razor.CohostingShared.projitems index 09a5e109db0..bee52513a77 100644 --- a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/Microsoft.CodeAnalysis.Razor.CohostingShared.projitems +++ b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/Microsoft.CodeAnalysis.Razor.CohostingShared.projitems @@ -9,12 +9,21 @@ Microsoft.CodeAnalysis.Razor.CohostingShared + + + + + + + + + @@ -31,6 +40,7 @@ + diff --git a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/RazorCohostClientCapabilitiesService.cs b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/RazorCohostClientCapabilitiesService.cs index 3ec2950939e..a07a42b23fe 100644 --- a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/RazorCohostClientCapabilitiesService.cs +++ b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/RazorCohostClientCapabilitiesService.cs @@ -13,6 +13,8 @@ namespace Microsoft.VisualStudio.Razor.LanguageClient.Cohost; [Export(typeof(IClientCapabilitiesService))] internal sealed class RazorCohostClientCapabilitiesService : AbstractClientCapabilitiesService, IRazorCohostStartupService { + public int Order => WellKnownStartupOrder.ClientCapabilities; + public Task StartupAsync(VSInternalClientCapabilities clientCapabilities, RazorCohostRequestContext requestContext, CancellationToken cancellationToken) { SetCapabilities(clientCapabilities); diff --git a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/RazorCohostDynamicRegistrationService.cs b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/RazorCohostDynamicRegistrationService.cs index 31f84df797d..ffbfff37246 100644 --- a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/RazorCohostDynamicRegistrationService.cs +++ b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/RazorCohostDynamicRegistrationService.cs @@ -10,13 +10,17 @@ using Microsoft.AspNetCore.Razor.PooledObjects; using Microsoft.CodeAnalysis.ExternalAccess.Razor; using Microsoft.CodeAnalysis.ExternalAccess.Razor.Cohost; +using Microsoft.CodeAnalysis.Razor.Logging; +using Microsoft.CodeAnalysis.Razor.Workspaces; namespace Microsoft.VisualStudio.Razor.LanguageClient.Cohost; [Export(typeof(IRazorCohostStartupService))] [method: ImportingConstructor] internal class RazorCohostDynamicRegistrationService( - [ImportMany] IEnumerable> lazyRegistrationProviders) + LanguageServerFeatureOptions languageServerFeatureOptions, + [ImportMany] IEnumerable> lazyRegistrationProviders, + ILoggerFactory loggerFactory) : IRazorCohostStartupService { private static readonly DocumentFilter[] s_filter = [new DocumentFilter() @@ -30,9 +34,18 @@ internal class RazorCohostDynamicRegistrationService( }]; private readonly ImmutableArray> _lazyRegistrationProviders = [.. lazyRegistrationProviders]; + private readonly LanguageServerFeatureOptions _languageServerFeatureOptions = languageServerFeatureOptions; + private readonly ILogger _logger = loggerFactory.GetOrCreateLogger(); + + public int Order => WellKnownStartupOrder.DynamicRegistration; public async Task StartupAsync(VSInternalClientCapabilities clientCapabilities, RazorCohostRequestContext requestContext, CancellationToken cancellationToken) { + if (!_languageServerFeatureOptions.UseRazorCohostServer) + { + return; + } + // We assume most registration providers will just return one, so whilst this isn't completely accurate, it's a // reasonable starting point using var registrations = new PooledArrayBuilder(_lazyRegistrationProviders.Length); @@ -54,11 +67,14 @@ public async Task StartupAsync(VSInternalClientCapabilities clientCapabilities, var razorCohostClientLanguageServerManager = requestContext.GetRequiredService(); + var allRegistrations = registrations.ToArray(); + _logger.LogInformation($"Requesting {allRegistrations.Length} Razor cohost registrations."); + await razorCohostClientLanguageServerManager.SendRequestAsync( Methods.ClientRegisterCapabilityName, new RegistrationParams() { - Registrations = registrations.ToArray() + Registrations = allRegistrations }, cancellationToken).ConfigureAwait(false); } diff --git a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/WellKnownStartupOrder.cs b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/WellKnownStartupOrder.cs new file mode 100644 index 00000000000..4f92d302ad1 --- /dev/null +++ b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.CohostingShared/WellKnownStartupOrder.cs @@ -0,0 +1,25 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the MIT license. See License.txt in the project root for license information. + +namespace Microsoft.VisualStudio.Razor.LanguageClient.Cohost; + +internal static class WellKnownStartupOrder +{ + // Client capabilities is first because it has no dependencies, but a lot of other things need to check capabilities + public const int ClientCapabilities = int.MinValue; + + // Client server manager similarly has no dependencies, and nothing else can make requests without it + public const int ClientServerManager = int.MinValue; + + // Options are early in case something needs to know what is enabled + public const int LanguageServerFeatureOptions = -1000; + + // Remote services initialize before "default", but depends on the above so not too early + public const int RemoteServices = -500; + + public const int Default = 0; + + // Dynamic registration is ordered last, because endpoints do all sorts of weird things in their register methods + public const int DynamicRegistration = int.MaxValue; + +} diff --git a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Completion/ISnippetCompletionItemProvider.cs b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Completion/ISnippetCompletionItemProvider.cs new file mode 100644 index 00000000000..e32b0f21f5e --- /dev/null +++ b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Completion/ISnippetCompletionItemProvider.cs @@ -0,0 +1,12 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the MIT license. See License.txt in the project root for license information. + +using Microsoft.AspNetCore.Razor.PooledObjects; +using Microsoft.CodeAnalysis.Razor.Protocol; + +namespace Microsoft.CodeAnalysis.Razor.Completion; + +internal interface ISnippetCompletionItemProvider +{ + void AddSnippetCompletions(ref PooledArrayBuilder builder, RazorLanguageKind projectedKind, VSInternalCompletionInvokeKind invokeKind, string? triggerCharacter); +} diff --git a/src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/Extensions/TextDocumentExtensions.cs b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Extensions/TextDocumentExtensions.cs similarity index 91% rename from src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/Extensions/TextDocumentExtensions.cs rename to src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Extensions/TextDocumentExtensions.cs index 344902721f5..6d5d5f0188f 100644 --- a/src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/Extensions/TextDocumentExtensions.cs +++ b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Extensions/TextDocumentExtensions.cs @@ -3,10 +3,10 @@ using System.Diagnostics.CodeAnalysis; using System.IO; -using Microsoft.CodeAnalysis; +using Microsoft.AspNetCore.Razor; using Microsoft.NET.Sdk.Razor.SourceGenerators; -namespace Microsoft.VisualStudio.Razor.Extensions; +namespace Microsoft.CodeAnalysis; internal static class TextDocumentExtensions { @@ -25,7 +25,7 @@ public static bool TryComputeHintNameFromRazorDocument(this TextDocument razorDo return false; } - var projectBasePath = Path.GetDirectoryName(razorDocument.Project.FilePath); + var projectBasePath = Path.GetDirectoryName(razorDocument.Project.FilePath).AssumeNotNull(); var relativeDocumentPath = razorDocument.FilePath[projectBasePath.Length..].TrimStart('/', '\\'); hintName = RazorSourceGenerator.GetIdentifierFromPath(relativeDocumentPath); diff --git a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/Completion/RemoteCompletionService.cs b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/Completion/RemoteCompletionService.cs index 0f5eb44426b..7db43892957 100644 --- a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/Completion/RemoteCompletionService.cs +++ b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/Completion/RemoteCompletionService.cs @@ -199,7 +199,7 @@ private async ValueTask GetCompletionAsync( var mappedLinePosition = mappedPosition.ToLinePosition(); VSInternalCompletionList? completionList = null; - using (_telemetryReporter.TrackLspRequest(Methods.TextDocumentCompletionName, "Razor.ExternalAccess", TelemetryThresholds.CompletionSubLSPTelemetryThreshold, correlationId)) + using (_telemetryReporter.TrackLspRequest(Methods.TextDocumentCompletionName, Constants.ExternalAccessServerName, TelemetryThresholds.CompletionSubLSPTelemetryThreshold, correlationId)) { completionList = await ExternalAccess.Razor.Cohost.Handlers.Completion.GetCompletionListAsync( generatedDocument, diff --git a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/FindAllReferences/RemoteFindAllReferencesService.cs b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/FindAllReferences/RemoteFindAllReferencesService.cs index 6392f9cd351..b2f529fab6c 100644 --- a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/FindAllReferences/RemoteFindAllReferencesService.cs +++ b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/FindAllReferences/RemoteFindAllReferencesService.cs @@ -9,6 +9,7 @@ using Microsoft.CodeAnalysis.Razor.FindAllReferences; using Microsoft.CodeAnalysis.Razor.Protocol; using Microsoft.CodeAnalysis.Razor.Remote; +using Microsoft.CodeAnalysis.Razor.Workspaces; using Microsoft.CodeAnalysis.Remote.Razor.DocumentMapping; using Microsoft.CodeAnalysis.Remote.Razor.ProjectSystem; using Microsoft.CodeAnalysis.Text; @@ -27,6 +28,7 @@ protected override IRemoteFindAllReferencesService CreateService(in ServiceArgs } private readonly IClientCapabilitiesService _clientCapabilitiesService = args.ExportProvider.GetExportedValue(); + private readonly IWorkspaceProvider _workspaceProvider = args.WorkspaceProvider; protected override IDocumentPositionInfoStrategy DocumentPositionInfoStrategy => PreferAttributeNameDocumentPositionInfoStrategy.Instance; @@ -67,7 +69,7 @@ protected override IRemoteFindAllReferencesService CreateService(in ServiceArgs var results = await ExternalHandlers.FindAllReferences .FindReferencesAsync( - RemoteWorkspaceAccessor.GetWorkspace(), + _workspaceProvider.GetWorkspace(), generatedDocument, positionInfo.Position.ToLinePosition(), _clientCapabilitiesService.ClientCapabilities.SupportsVisualStudioExtensions, diff --git a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/GoToDefinition/RemoteGoToDefinitionService.cs b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/GoToDefinition/RemoteGoToDefinitionService.cs index 1b448a68a4d..b158972d8b7 100644 --- a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/GoToDefinition/RemoteGoToDefinitionService.cs +++ b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/GoToDefinition/RemoteGoToDefinitionService.cs @@ -9,6 +9,7 @@ using Microsoft.CodeAnalysis.Razor.GoToDefinition; using Microsoft.CodeAnalysis.Razor.Protocol; using Microsoft.CodeAnalysis.Razor.Remote; +using Microsoft.CodeAnalysis.Razor.Workspaces; using Microsoft.CodeAnalysis.Remote.Razor.DocumentMapping; using Microsoft.CodeAnalysis.Remote.Razor.ProjectSystem; using Microsoft.CodeAnalysis.Text; @@ -26,6 +27,7 @@ protected override IRemoteGoToDefinitionService CreateService(in ServiceArgs arg } private readonly IRazorComponentDefinitionService _componentDefinitionService = args.ExportProvider.GetExportedValue(); + private readonly IWorkspaceProvider _workspaceProvider = args.WorkspaceProvider; protected override IDocumentPositionInfoStrategy DocumentPositionInfoStrategy => PreferAttributeNameDocumentPositionInfoStrategy.Instance; @@ -78,7 +80,7 @@ protected override IRemoteGoToDefinitionService CreateService(in ServiceArgs arg var locations = await ExternalHandlers.GoToDefinition .GetDefinitionsAsync( - RemoteWorkspaceAccessor.GetWorkspace(), + _workspaceProvider.GetWorkspace(), generatedDocument, typeOnly: false, positionInfo.Position.ToLinePosition(), diff --git a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorBrokeredServiceBase.FactoryBase`1.cs b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorBrokeredServiceBase.FactoryBase`1.cs index 08bdda64906..42ed6e265b4 100644 --- a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorBrokeredServiceBase.FactoryBase`1.cs +++ b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorBrokeredServiceBase.FactoryBase`1.cs @@ -84,6 +84,12 @@ protected async Task CreateInternalAsync( ? new TraceSourceLoggerFactory(traceSource) : EmptyLoggerFactory.Instance); + var workspaceProvider = brokeredServiceData?.WorkspaceProvider ?? RemoteWorkspaceProvider.Instance; + + // Update the MEF composition's IHostServicesAccessor to the target workspace + var hostServicesProvider = exportProvider.GetExportedValue(); + hostServicesProvider.SetWorkspaceProvider(workspaceProvider); + // Update the MEF composition's ILoggerFactory to the target ILoggerFactory. // Note that this means that the first non-empty ILoggerFactory that we use // will be used for MEF component logging for the lifetime of all services. @@ -93,7 +99,7 @@ protected async Task CreateInternalAsync( // In proc services don't use any service hub infra if (stream is null) { - var inProcArgs = new ServiceArgs(ServiceBroker: null, exportProvider, targetLoggerFactory, ServerConnection: null, brokeredServiceData.AssumeNotNull().Interceptor); + var inProcArgs = new ServiceArgs(ServiceBroker: null, exportProvider, targetLoggerFactory, workspaceProvider, ServerConnection: null, brokeredServiceData.AssumeNotNull().Interceptor); return CreateService(in inProcArgs); } @@ -104,7 +110,7 @@ protected async Task CreateInternalAsync( : RazorServices.Descriptors.GetDescriptorForServiceFactory(typeof(TService)); var serverConnection = descriptor.WithTraceSource(traceSource).ConstructRpcConnection(pipe); - var args = new ServiceArgs(serviceBroker.AssumeNotNull(), exportProvider, targetLoggerFactory, serverConnection, brokeredServiceData?.Interceptor); + var args = new ServiceArgs(serviceBroker.AssumeNotNull(), exportProvider, targetLoggerFactory, workspaceProvider, serverConnection, brokeredServiceData?.Interceptor); var service = CreateService(in args); diff --git a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorBrokeredServiceData.cs b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorBrokeredServiceData.cs index 862fef2f615..5945061053e 100644 --- a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorBrokeredServiceData.cs +++ b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RazorBrokeredServiceData.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. See License.txt in the project root for license information. using Microsoft.CodeAnalysis.Razor.Logging; +using Microsoft.CodeAnalysis.Razor.Workspaces; using Microsoft.VisualStudio.Composition; namespace Microsoft.CodeAnalysis.Remote.Razor; @@ -9,4 +10,5 @@ namespace Microsoft.CodeAnalysis.Remote.Razor; internal sealed record class RazorBrokeredServiceData( ExportProvider? ExportProvider, ILoggerFactory? LoggerFactory, - IRazorBrokeredServiceInterceptor? Interceptor); + IRazorBrokeredServiceInterceptor? Interceptor, + IWorkspaceProvider? WorkspaceProvider); diff --git a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteHostServicesProvider.cs b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteHostServicesProvider.cs index fcacdb3afa6..c76b3e14d32 100644 --- a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteHostServicesProvider.cs +++ b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteHostServicesProvider.cs @@ -2,16 +2,26 @@ // Licensed under the MIT license. See License.txt in the project root for license information. using System.Composition; +using Microsoft.AspNetCore.Razor; using Microsoft.CodeAnalysis.Host; using Microsoft.CodeAnalysis.Razor.Workspaces; namespace Microsoft.CodeAnalysis.Remote.Razor; -[Export(typeof(IHostServicesProvider)), Shared] +[Shared] +[Export(typeof(IHostServicesProvider))] +[Export(typeof(RemoteHostServicesProvider))] internal sealed class RemoteHostServicesProvider : IHostServicesProvider { + private IWorkspaceProvider? _workspaceProvider; + + public void SetWorkspaceProvider(IWorkspaceProvider workspaceProvider) + { + _workspaceProvider = workspaceProvider; + } + public HostServices GetServices() { - return RemoteWorkspaceAccessor.GetWorkspace().Services.HostServices; + return _workspaceProvider.AssumeNotNull().GetWorkspace().Services.HostServices; } } diff --git a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteWorkspaceAccessor.cs b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteWorkspaceProvider.cs similarity index 88% rename from src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteWorkspaceAccessor.cs rename to src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteWorkspaceProvider.cs index 3613bd4ffef..871f1faab53 100644 --- a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteWorkspaceAccessor.cs +++ b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/RemoteWorkspaceProvider.cs @@ -4,11 +4,14 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.CodeAnalysis.ExternalAccess.Razor.Api; +using Microsoft.CodeAnalysis.Razor.Workspaces; namespace Microsoft.CodeAnalysis.Remote.Razor; -internal static class RemoteWorkspaceAccessor +internal sealed class RemoteWorkspaceProvider : IWorkspaceProvider { + public static RemoteWorkspaceProvider Instance = new(); + /// /// Gets the remote workspace used in the Roslyn OOP process /// @@ -19,7 +22,7 @@ internal static class RemoteWorkspaceAccessor /// /// This should be used sparingly and carefully, and no updates should be made to the workspace. /// - public static Workspace GetWorkspace() + public Workspace GetWorkspace() => RazorBrokeredServiceImplementation.GetWorkspace(); /// diff --git a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/SemanticTokens/RemoteCSharpSemanticTokensProvider.cs b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/SemanticTokens/RemoteCSharpSemanticTokensProvider.cs index 0bf56927ff8..28b6e88e5de 100644 --- a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/SemanticTokens/RemoteCSharpSemanticTokensProvider.cs +++ b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/SemanticTokens/RemoteCSharpSemanticTokensProvider.cs @@ -11,7 +11,6 @@ using Microsoft.CodeAnalysis.Razor.ProjectSystem; using Microsoft.CodeAnalysis.Razor.SemanticTokens; using Microsoft.CodeAnalysis.Razor.Telemetry; -using Microsoft.CodeAnalysis.Razor.Workspaces; using Microsoft.CodeAnalysis.Remote.Razor.ProjectSystem; using Microsoft.CodeAnalysis.Text; @@ -19,16 +18,15 @@ namespace Microsoft.CodeAnalysis.Remote.Razor.SemanticTokens; [Export(typeof(ICSharpSemanticTokensProvider)), Shared] [method: ImportingConstructor] -internal class RemoteCSharpSemanticTokensProvider(IFilePathService filePathService, ITelemetryReporter telemetryReporter) : ICSharpSemanticTokensProvider +internal class RemoteCSharpSemanticTokensProvider(ITelemetryReporter telemetryReporter) : ICSharpSemanticTokensProvider { - private readonly IFilePathService _filePathService = filePathService; private readonly ITelemetryReporter _telemetryReporter = telemetryReporter; public async Task GetCSharpSemanticTokensResponseAsync(DocumentContext documentContext, ImmutableArray csharpRanges, Guid correlationId, CancellationToken cancellationToken) { - using var _ = _telemetryReporter.TrackLspRequest(nameof(SemanticTokensRange.GetSemanticTokensAsync), + using var _ = _telemetryReporter.TrackLspRequest(Methods.TextDocumentSemanticTokensRangeName, Constants.ExternalAccessServerName, - TelemetryThresholds.SemanticTokensRazorTelemetryThreshold, + TelemetryThresholds.SemanticTokensSubLSPTelemetryThreshold, correlationId); // We have a razor document, lets find the generated C# document diff --git a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/ServiceArgs.cs b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/ServiceArgs.cs index 31e8f5ff0d6..e3a3e348649 100644 --- a/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/ServiceArgs.cs +++ b/src/razor/src/Razor/src/Microsoft.CodeAnalysis.Remote.Razor/ServiceArgs.cs @@ -2,6 +2,7 @@ // Licensed under the MIT license. See License.txt in the project root for license information. using Microsoft.CodeAnalysis.Razor.Logging; +using Microsoft.CodeAnalysis.Razor.Workspaces; using Microsoft.ServiceHub.Framework; using Microsoft.VisualStudio.Composition; @@ -11,5 +12,6 @@ internal readonly record struct ServiceArgs( IServiceBroker? ServiceBroker, ExportProvider ExportProvider, ILoggerFactory ServiceLoggerFactory, + IWorkspaceProvider WorkspaceProvider, ServiceRpcDescriptor.RpcConnection? ServerConnection = null, IRazorBrokeredServiceInterceptor? Interceptor = null); diff --git a/src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost/CohostDocumentPullDiagnosticsEndpoint.cs b/src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost/CohostDocumentPullDiagnosticsEndpoint.cs index 112e98c2a5d..5f1acbd389d 100644 --- a/src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost/CohostDocumentPullDiagnosticsEndpoint.cs +++ b/src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Cohost/CohostDocumentPullDiagnosticsEndpoint.cs @@ -2,24 +2,18 @@ // Licensed under the MIT license. See License.txt in the project root for license information. using System; -using System.Collections.Generic; using System.Collections.Immutable; using System.Composition; -using System.Linq; using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Razor; using Microsoft.AspNetCore.Razor.PooledObjects; using Microsoft.CodeAnalysis; -using Microsoft.CodeAnalysis.ExternalAccess.Razor; using Microsoft.CodeAnalysis.ExternalAccess.Razor.Cohost; using Microsoft.CodeAnalysis.Razor.Logging; -using Microsoft.CodeAnalysis.Razor.Protocol; using Microsoft.CodeAnalysis.Razor.Remote; using Microsoft.CodeAnalysis.Razor.Telemetry; -using Microsoft.VisualStudio.Razor.Extensions; using Microsoft.VisualStudio.Razor.Settings; -using ExternalHandlers = Microsoft.CodeAnalysis.ExternalAccess.Razor.Cohost.Handlers; namespace Microsoft.VisualStudio.Razor.LanguageClient.Cohost; @@ -36,17 +30,13 @@ internal sealed class CohostDocumentPullDiagnosticsEndpoint( IClientSettingsManager clientSettingsManager, ITelemetryReporter telemetryReporter, ILoggerFactory loggerFactory) - : AbstractRazorCohostDocumentRequestHandler, IDynamicRegistrationProvider + : CohostDocumentPullDiagnosticsEndpointBase(remoteServiceInvoker, requestInvoker, telemetryReporter, loggerFactory), IDynamicRegistrationProvider { private readonly IRemoteServiceInvoker _remoteServiceInvoker = remoteServiceInvoker; - private readonly IHtmlRequestInvoker _requestInvoker = requestInvoker; private readonly IClientSettingsManager _clientSettingsManager = clientSettingsManager; - private readonly ITelemetryReporter _telemetryReporter = telemetryReporter; - private readonly ILogger _logger = loggerFactory.GetOrCreateLogger(); - protected override bool MutatesSolutionState => false; - - protected override bool RequiresLSPSolution => true; + protected override string LspMethodName => VSInternalMethods.DocumentPullDiagnosticName; + protected override bool SupportsHtmlDiagnostics => true; public ImmutableArray GetRegistrations(VSInternalClientCapabilities clientCapabilities, RazorCohostRequestContext requestContext) { @@ -68,148 +58,82 @@ public ImmutableArray GetRegistrations(VSInternalClientCapabilitie protected override RazorTextDocumentIdentifier? GetRazorTextDocumentIdentifier(VSInternalDocumentDiagnosticsParams request) => request.TextDocument?.ToRazorTextDocumentIdentifier(); - protected override Task HandleRequestAsync(VSInternalDocumentDiagnosticsParams request, RazorCohostRequestContext context, CancellationToken cancellationToken) + protected async override Task HandleRequestAsync(VSInternalDocumentDiagnosticsParams request, RazorCohostRequestContext context, CancellationToken cancellationToken) { if (request.QueryingDiagnosticKind?.Value == VSInternalDiagnosticKind.Task.Value) { - return HandleTaskListItemRequestAsync( + return await HandleTaskListItemRequestAsync( context.TextDocument.AssumeNotNull(), _clientSettingsManager.GetClientSettings().AdvancedSettings.TaskListDescriptors, - cancellationToken); + cancellationToken).ConfigureAwait(false); } - return HandleRequestAsync(context.TextDocument.AssumeNotNull(), cancellationToken); - } + var results = await GetDiagnosticsAsync(context.TextDocument.AssumeNotNull(), cancellationToken).ConfigureAwait(false); - private async Task HandleTaskListItemRequestAsync(TextDocument razorDocument, ImmutableArray taskListDescriptors, CancellationToken cancellationToken) - { - var diagnostics = await _remoteServiceInvoker.TryInvokeAsync>( - razorDocument.Project.Solution, - (service, solutionInfo, cancellationToken) => service.GetTaskListDiagnosticsAsync(solutionInfo, razorDocument.Id, taskListDescriptors, cancellationToken), - cancellationToken).ConfigureAwait(false); - - if (diagnostics.IsDefaultOrEmpty) + if (results is null) { - return null; + return []; } - return - [ - new() - { - Diagnostics = [.. diagnostics], - ResultId = Guid.NewGuid().ToString() - } - ]; + return [new() + { + Diagnostics = results, + ResultId = Guid.NewGuid().ToString() + }]; } - private async Task HandleRequestAsync(TextDocument razorDocument, CancellationToken cancellationToken) + protected override VSInternalDocumentDiagnosticsParams CreateHtmlParams(Uri uri) { - var correlationId = Guid.NewGuid(); - using var _ = _telemetryReporter.TrackLspRequest(Methods.TextDocumentCompletionName, LanguageServerConstants.RazorLanguageServerName, TelemetryThresholds.DiagnosticsRazorTelemetryThreshold, correlationId); - - // Diagnostics is a little different, because Roslyn is not designed to run diagnostics in OOP. Their system will transition to OOP - // as it needs, but we have to start here in devenv. This is not as big a problem as it sounds, specifically for diagnostics, because - // we only need to tell Roslyn the document we need diagnostics for. If we had to map positions or ranges etc. it would be worse - // because we'd have to transition to our OOP to find out that info, then back here to get the diagnostics, then back to OOP to process. - _logger.LogDebug($"Getting diagnostics for {razorDocument.FilePath}"); - - var csharpTask = GetCSharpDiagnosticsAsync(razorDocument, correlationId, cancellationToken); - var htmlTask = GetHtmlDiagnosticsAsync(razorDocument, correlationId, cancellationToken); - - try + return new VSInternalDocumentDiagnosticsParams { - await Task.WhenAll(htmlTask, csharpTask).ConfigureAwait(false); - } - catch (Exception e) + TextDocument = new TextDocumentIdentifier { Uri = uri } + }; + } + + protected override LspDiagnostic[] ExtractHtmlDiagnostics(VSInternalDiagnosticReport[] result) + { + using var allDiagnostics = new PooledArrayBuilder(); + foreach (var report in result) { - if (e is not OperationCanceledException) + if (report.Diagnostics is not null) { - _logger.LogError(e, $"Exception thrown in PullDiagnostic delegation"); - throw; + allDiagnostics.AddRange(report.Diagnostics); } } - var csharpDiagnostics = await csharpTask.ConfigureAwait(false); - var htmlDiagnostics = await htmlTask.ConfigureAwait(false); + return allDiagnostics.ToArray(); + } - _logger.LogDebug($"Calling OOP with the {csharpDiagnostics.Length} C# and {htmlDiagnostics.Length} Html diagnostics"); + private async Task HandleTaskListItemRequestAsync(TextDocument razorDocument, ImmutableArray taskListDescriptors, CancellationToken cancellationToken) + { var diagnostics = await _remoteServiceInvoker.TryInvokeAsync>( razorDocument.Project.Solution, - (service, solutionInfo, cancellationToken) => service.GetDiagnosticsAsync(solutionInfo, razorDocument.Id, csharpDiagnostics, htmlDiagnostics, cancellationToken), + (service, solutionInfo, cancellationToken) => service.GetTaskListDiagnosticsAsync(solutionInfo, razorDocument.Id, taskListDescriptors, cancellationToken), cancellationToken).ConfigureAwait(false); if (diagnostics.IsDefaultOrEmpty) { - return null; + return []; } - _logger.LogDebug($"Reporting {diagnostics.Length} diagnostics back to the client"); return [ new() { - Diagnostics = diagnostics.ToArray(), + Diagnostics = [.. diagnostics], ResultId = Guid.NewGuid().ToString() } ]; } - private async Task GetCSharpDiagnosticsAsync(TextDocument razorDocument, Guid correletionId, CancellationToken cancellationToken) - { - if (!razorDocument.TryComputeHintNameFromRazorDocument(out var hintName) || - await razorDocument.Project.TryGetSourceGeneratedDocumentFromHintNameAsync(hintName, cancellationToken).ConfigureAwait(false) is not { } generatedDocument) - { - return []; - } - - _logger.LogDebug($"Getting C# diagnostics for {generatedDocument.FilePath}"); - - using var _ = _telemetryReporter.TrackLspRequest(VSInternalMethods.DocumentPullDiagnosticName, "Razor.ExternalAccess", TelemetryThresholds.DiagnosticsSubLSPTelemetryThreshold, correletionId); - var diagnostics = await ExternalHandlers.Diagnostics.GetDocumentDiagnosticsAsync(generatedDocument, supportsVisualStudioExtensions: true, cancellationToken).ConfigureAwait(false); - return diagnostics.ToArray(); - } - - private async Task GetHtmlDiagnosticsAsync(TextDocument razorDocument, Guid correletionId, CancellationToken cancellationToken) - { - var diagnosticsParams = new VSInternalDocumentDiagnosticsParams - { - TextDocument = new TextDocumentIdentifier { Uri = razorDocument.CreateUri() } - }; - - var result = await _requestInvoker.MakeHtmlLspRequestAsync( - razorDocument, - VSInternalMethods.DocumentPullDiagnosticName, - diagnosticsParams, - TelemetryThresholds.DiagnosticsSubLSPTelemetryThreshold, - correletionId, - cancellationToken).ConfigureAwait(false); - - if (result is null) - { - return []; - } - - using var allDiagnostics = new PooledArrayBuilder(); - foreach (var report in result) - { - if (report.Diagnostics is not null) - { - allDiagnostics.AddRange(report.Diagnostics); - } - } - - return allDiagnostics.ToArray(); - } - internal TestAccessor GetTestAccessor() => new(this); internal readonly struct TestAccessor(CohostDocumentPullDiagnosticsEndpoint instance) { - public Task HandleRequestAsync(TextDocument razorDocument, CancellationToken cancellationToken) - => instance.HandleRequestAsync(razorDocument, cancellationToken); + public Task HandleRequestAsync(TextDocument razorDocument, CancellationToken cancellationToken) + => instance.GetDiagnosticsAsync(razorDocument, cancellationToken); - public Task HandleTaskListItemRequestAsync(TextDocument razorDocument, ImmutableArray taskListDescriptors, CancellationToken cancellationToken) + public Task HandleTaskListItemRequestAsync(TextDocument razorDocument, ImmutableArray taskListDescriptors, CancellationToken cancellationToken) => instance.HandleTaskListItemRequestAsync(razorDocument, taskListDescriptors, cancellationToken); } } diff --git a/src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Endpoints/RazorCustomMessageTarget_Completion.cs b/src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Endpoints/RazorCustomMessageTarget_Completion.cs index 207551b6378..4d405ea8902 100644 --- a/src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Endpoints/RazorCustomMessageTarget_Completion.cs +++ b/src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/Endpoints/RazorCustomMessageTarget_Completion.cs @@ -165,7 +165,7 @@ internal partial class RazorCustomMessageTarget if (request.ShouldIncludeSnippets) { - _snippetCompletionItemProvider.AddSnippetCompletions(request.ProjectedKind, request.Context.InvokeKind, request.Context.TriggerCharacter, ref builder.AsRef()); + _snippetCompletionItemProvider.AddSnippetCompletions(ref builder.AsRef(), request.ProjectedKind, request.Context.InvokeKind, request.Context.TriggerCharacter); } completionList.Items = builder.ToArray(); diff --git a/src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/Snippets/SnippetCompletionItemProvider.cs b/src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/Snippets/SnippetCompletionItemProvider.cs index 87bd371969b..ea1a8bd7882 100644 --- a/src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/Snippets/SnippetCompletionItemProvider.cs +++ b/src/razor/src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/Snippets/SnippetCompletionItemProvider.cs @@ -5,12 +5,13 @@ using System.ComponentModel.Composition; using System.Linq; using Microsoft.AspNetCore.Razor.PooledObjects; +using Microsoft.CodeAnalysis.Razor.Completion; using Microsoft.CodeAnalysis.Razor.Protocol; namespace Microsoft.VisualStudio.Razor.Snippets; -[Export(typeof(SnippetCompletionItemProvider))] -internal sealed class SnippetCompletionItemProvider +[Export(typeof(ISnippetCompletionItemProvider))] +internal sealed class SnippetCompletionItemProvider : ISnippetCompletionItemProvider { [ImportingConstructor] public SnippetCompletionItemProvider(SnippetCache snippetCache) @@ -21,10 +22,10 @@ public SnippetCompletionItemProvider(SnippetCache snippetCache) public SnippetCache SnippetCache { get; } public void AddSnippetCompletions( + ref PooledArrayBuilder builder, RazorLanguageKind projectedKind, VSInternalCompletionInvokeKind invokeKind, - string? triggerCharacter, - ref PooledArrayBuilder builder) + string? triggerCharacter) { // Temporary fix: snippets are broken in CSharp. We're investigating // but this is very disruptive. This quick fix unblocks things. diff --git a/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Endpoints/DocumentPullDiagnosticsEndpoint.cs b/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Endpoints/DocumentPullDiagnosticsEndpoint.cs new file mode 100644 index 00000000000..0df01cbc85a --- /dev/null +++ b/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Endpoints/DocumentPullDiagnosticsEndpoint.cs @@ -0,0 +1,71 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the MIT license. See License.txt in the project root for license information. + +using System; +using System.Collections.Immutable; +using System.Composition; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Razor; +using Microsoft.CodeAnalysis.ExternalAccess.Razor.Cohost; +using Microsoft.CodeAnalysis.ExternalAccess.Razor.Features; +using Microsoft.CodeAnalysis.Razor.Logging; +using Microsoft.CodeAnalysis.Razor.Remote; +using Microsoft.CodeAnalysis.Razor.Telemetry; + +namespace Microsoft.VisualStudio.Razor.LanguageClient.Cohost; + +#pragma warning disable RS0030 // Do not use banned APIs +[Shared] +[CohostEndpoint(Methods.TextDocumentDiagnosticName)] +[Export(typeof(IDynamicRegistrationProvider))] +[ExportRazorStatelessLspService(typeof(DocumentPullDiagnosticsEndpoint))] +[method: ImportingConstructor] +#pragma warning restore RS0030 // Do not use banned APIs +internal sealed class DocumentPullDiagnosticsEndpoint( + IRemoteServiceInvoker remoteServiceInvoker, + IHtmlRequestInvoker requestInvoker, + ITelemetryReporter telemetryReporter, + ILoggerFactory loggerFactory) + : CohostDocumentPullDiagnosticsEndpointBase(remoteServiceInvoker, requestInvoker, telemetryReporter, loggerFactory), IDynamicRegistrationProvider +{ + protected override string LspMethodName => Methods.TextDocumentDiagnosticName; + protected override bool SupportsHtmlDiagnostics => false; + + public ImmutableArray GetRegistrations(VSInternalClientCapabilities clientCapabilities, RazorCohostRequestContext requestContext) + { + if (clientCapabilities.TextDocument?.Diagnostic?.DynamicRegistration is true) + { + return [new Registration() + { + Method = Methods.TextDocumentDiagnosticName, + RegisterOptions = new DiagnosticRegistrationOptions() + { + WorkspaceDiagnostics = false + } + }]; + } + + return []; + } + + protected override RazorTextDocumentIdentifier? GetRazorTextDocumentIdentifier(DocumentDiagnosticParams request) + => request.TextDocument?.ToRazorTextDocumentIdentifier(); + + protected async override Task HandleRequestAsync(DocumentDiagnosticParams request, RazorCohostRequestContext context, CancellationToken cancellationToken) + { + var results = await GetDiagnosticsAsync(context.TextDocument.AssumeNotNull(), cancellationToken).ConfigureAwait(false); + + if (results is null) + { + return null; + } + + return new() + { + Items = results, + ResultId = Guid.NewGuid().ToString() + }; + } +} + diff --git a/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/DynamicFileProviderFactory.cs b/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/DynamicFileProviderFactory.cs index da91e709854..9fcd4a518e9 100644 --- a/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/DynamicFileProviderFactory.cs +++ b/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/DynamicFileProviderFactory.cs @@ -10,14 +10,17 @@ namespace Microsoft.VisualStudioCode.RazorExtension.Services; [ExportRazorLspServiceFactory(typeof(RazorLspDynamicFileInfoProvider)), Shared] [method: ImportingConstructor] -internal sealed class DynamicFileProviderFactory(LanguageServerFeatureOptions featureOptions) : AbstractRazorLspServiceFactory +internal sealed class DynamicFileProviderFactory( + LanguageServerFeatureOptions featureOptions, + VSCodeWorkspaceProvider workspaceProvider) : AbstractRazorLspServiceFactory { private readonly LanguageServerFeatureOptions _featureOptions = featureOptions; + private readonly VSCodeWorkspaceProvider _workspaceProvider = workspaceProvider; protected override AbstractRazorLspService CreateService(IRazorLspServices lspServices) { var clientLanguageServerManager = lspServices.GetRequiredService(); - return new LspDynamicFileProvider(clientLanguageServerManager, _featureOptions); + return new LspDynamicFileProvider(clientLanguageServerManager, _featureOptions, _workspaceProvider); } } diff --git a/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/EmptyServiceProvider.cs b/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/EmptyServiceProvider.cs index bc8273356c1..c4b2d36d690 100644 --- a/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/EmptyServiceProvider.cs +++ b/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/EmptyServiceProvider.cs @@ -11,7 +11,7 @@ internal sealed class EmptyServiceProvider : IRazorDocumentServiceProvider public bool CanApplyChange => false; - public bool SupportDiagnostics => false; + public bool SupportDiagnostics => true; public TService? GetService() where TService : class { diff --git a/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/InProcServiceFactory.cs b/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/InProcServiceFactory.cs index 793c4bbe86d..8b4b146b119 100644 --- a/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/InProcServiceFactory.cs +++ b/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/InProcServiceFactory.cs @@ -7,6 +7,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Razor; using Microsoft.CodeAnalysis.Razor.Logging; +using Microsoft.CodeAnalysis.Razor.Workspaces; using Microsoft.CodeAnalysis.Remote.Razor; namespace Microsoft.VisualStudioCode.RazorExtension.Services; @@ -47,12 +48,12 @@ private static Dictionary BuildFactoryMap() } public static async Task CreateServiceAsync( - VSCodeBrokeredServiceInterceptor brokeredServiceInterceptor, ILoggerFactory loggerFactory) + VSCodeBrokeredServiceInterceptor brokeredServiceInterceptor, IWorkspaceProvider workspaceProvider, ILoggerFactory loggerFactory) where TService : class { Assumes.True(s_factoryMap.TryGetValue(typeof(TService), out var factory)); - var brokeredServiceData = new RazorBrokeredServiceData(ExportProvider: null, loggerFactory, brokeredServiceInterceptor); + var brokeredServiceData = new RazorBrokeredServiceData(ExportProvider: null, loggerFactory, brokeredServiceInterceptor, workspaceProvider); var hostProvidedServices = new HostProvidedServices(brokeredServiceData); return (TService)await factory.CreateInProcAsync(hostProvidedServices).ConfigureAwait(false); diff --git a/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/DynamicFileInfoProvider.cs b/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/LspDynamicFileProvider.cs similarity index 83% rename from src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/DynamicFileInfoProvider.cs rename to src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/LspDynamicFileProvider.cs index 4856b4df56a..2156151156d 100644 --- a/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/DynamicFileInfoProvider.cs +++ b/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/LspDynamicFileProvider.cs @@ -11,16 +11,24 @@ namespace Microsoft.VisualStudioCode.RazorExtension.Services; -internal sealed partial class LspDynamicFileProvider(IRazorClientLanguageServerManager clientLanguageServerManager, LanguageServerFeatureOptions languageServerFeatureOptions) : RazorLspDynamicFileInfoProvider +internal sealed partial class LspDynamicFileProvider( + IRazorClientLanguageServerManager clientLanguageServerManager, + LanguageServerFeatureOptions languageServerFeatureOptions, + VSCodeWorkspaceProvider workspaceProvider) : RazorLspDynamicFileInfoProvider { private const string ProvideRazorDynamicFileInfoMethodName = "razor/provideDynamicFileInfo"; private const string RemoveRazorDynamicFileInfoMethodName = "razor/removeDynamicFileInfo"; private readonly IRazorClientLanguageServerManager _clientLanguageServerManager = clientLanguageServerManager; private readonly LanguageServerFeatureOptions _languageServerFeatureOptions = languageServerFeatureOptions; + private readonly VSCodeWorkspaceProvider _workspaceProvider = workspaceProvider; public override async Task GetDynamicFileInfoAsync(Workspace workspace, ProjectId projectId, string? projectFilePath, string filePath, CancellationToken cancellationToken) { + // TODO: Temporarily using this as a hook to get the workspace into cohosting. In future when we delete the IDynamicFileInfo + // system as a whole, we'll need some other hook to get to the LspWorkspace + _workspaceProvider.SetWorkspace(workspace); + if (_languageServerFeatureOptions.UseRazorCohostServer) { return null; diff --git a/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/RazorClientServerManagerProvider.cs b/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/RazorClientServerManagerProvider.cs index 0e140911796..06c895beadb 100644 --- a/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/RazorClientServerManagerProvider.cs +++ b/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/RazorClientServerManagerProvider.cs @@ -20,6 +20,8 @@ internal class RazorClientServerManagerProvider() : IRazorCohostStartupService public IRazorClientLanguageServerManager? ClientLanguageServerManager => _razorClientLanguageServerManager; + public int Order => WellKnownStartupOrder.ClientServerManager; + public Task StartupAsync(VSInternalClientCapabilities clientCapabilities, RazorCohostRequestContext requestContext, CancellationToken cancellationToken) { _razorClientLanguageServerManager = requestContext.GetRequiredService(); diff --git a/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/VSCodeLanguageServerFeatureOptions.cs b/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/VSCodeLanguageServerFeatureOptions.cs index e2411846e49..a9f47c95e08 100644 --- a/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/VSCodeLanguageServerFeatureOptions.cs +++ b/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/VSCodeLanguageServerFeatureOptions.cs @@ -5,8 +5,9 @@ using System.Text.Json.Nodes; using System.Threading; using System.Threading.Tasks; +using Microsoft.AspNetCore.Razor; +using Microsoft.AspNetCore.Razor.LanguageServer; using Microsoft.AspNetCore.Razor.Utilities; -using Microsoft.CodeAnalysis.ExternalAccess.Razor; using Microsoft.CodeAnalysis.ExternalAccess.Razor.Cohost; using Microsoft.CodeAnalysis.Razor.Workspaces; using Microsoft.NET.Sdk.Razor.SourceGenerators; @@ -15,13 +16,17 @@ namespace Microsoft.VisualStudioCode.RazorExtension.Services; [Shared] +[Export(typeof(IRazorCohostStartupService))] [Export(typeof(LanguageServerFeatureOptions))] -internal class VSCodeLanguageServerFeatureOptions : LanguageServerFeatureOptions, IRazorCohostStartupService +[method: ImportingConstructor] +internal class VSCodeLanguageServerFeatureOptions(RazorClientServerManagerProvider razorClientServerManagerProvider) : LanguageServerFeatureOptions, IRazorCohostStartupService { private bool _useRazorCohostServer = false; private bool _useNewFormattingEngine = true; private bool _forceRuntimeCodeGeneration = false; + private readonly RazorClientServerManagerProvider _razorClientServerManagerProvider = razorClientServerManagerProvider; + // Options that are set to their defaults public override bool SupportsFileManipulation => true; public override bool SingleServerSupport => false; @@ -44,9 +49,11 @@ internal class VSCodeLanguageServerFeatureOptions : LanguageServerFeatureOptions public override bool ForceRuntimeCodeGeneration => _forceRuntimeCodeGeneration; public override bool UseNewFormattingEngine => _useNewFormattingEngine; + public int Order => WellKnownStartupOrder.LanguageServerFeatureOptions; + public async Task StartupAsync(VSInternalClientCapabilities clientCapabilities, RazorCohostRequestContext requestContext, CancellationToken cancellationToken) { - var razorClientLanguageServerManager = requestContext.GetRequiredService(); + var razorClientLanguageServerManager = _razorClientServerManagerProvider.ClientLanguageServerManager.AssumeNotNull(); // Attempt to get configurations from the client. If this throws we'll get NFW reports. var configurationParams = new ConfigurationParams() diff --git a/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/VSCodeRemoteServiceInvoker.cs b/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/VSCodeRemoteServiceInvoker.cs index 676cd4b952f..a2bf2270eaa 100644 --- a/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/VSCodeRemoteServiceInvoker.cs +++ b/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/VSCodeRemoteServiceInvoker.cs @@ -11,6 +11,7 @@ using Microsoft.CodeAnalysis.ExternalAccess.Razor; using Microsoft.CodeAnalysis.Razor.Logging; using Microsoft.CodeAnalysis.Razor.Remote; +using Microsoft.CodeAnalysis.Razor.Workspaces; using Microsoft.VisualStudio.Composition; namespace Microsoft.VisualStudioCode.RazorExtension.Services; @@ -19,8 +20,10 @@ namespace Microsoft.VisualStudioCode.RazorExtension.Services; [Export(typeof(IRemoteServiceInvoker))] [method: ImportingConstructor] internal class VSCodeRemoteServiceInvoker( + IWorkspaceProvider workspaceProvider, ILoggerFactory loggerFactory) : IRemoteServiceInvoker, IDisposable { + private readonly IWorkspaceProvider _workspaceProvider = workspaceProvider; private readonly ILoggerFactory _loggerFactory = loggerFactory; private readonly Dictionary _services = []; private readonly Lock _serviceLock = new(); @@ -61,7 +64,7 @@ internal class VSCodeRemoteServiceInvoker( // Create the service using the InProcServiceFactory try { - var service = await InProcServiceFactory.CreateServiceAsync(_serviceInterceptor, _loggerFactory).ConfigureAwait(false); + var service = await InProcServiceFactory.CreateServiceAsync(_serviceInterceptor, _workspaceProvider, _loggerFactory).ConfigureAwait(false); lock (_serviceLock) { diff --git a/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/VSCodeRemoteServicesInitializer.cs b/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/VSCodeRemoteServicesInitializer.cs index 13d901f8c61..4e8c4d55b79 100644 --- a/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/VSCodeRemoteServicesInitializer.cs +++ b/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/VSCodeRemoteServicesInitializer.cs @@ -19,18 +19,32 @@ namespace Microsoft.VisualStudioCode.RazorExtension.Services; internal class VSCodeRemoteServicesInitializer( LanguageServerFeatureOptions featureOptions, ISemanticTokensLegendService semanticTokensLegendService, + IWorkspaceProvider workspaceProvider, ILoggerFactory loggerFactory) : IRazorCohostStartupService { private readonly LanguageServerFeatureOptions _featureOptions = featureOptions; private readonly ISemanticTokensLegendService _semanticTokensLegendService = semanticTokensLegendService; + private readonly IWorkspaceProvider _workspaceProvider = workspaceProvider; private readonly ILoggerFactory _loggerFactory = loggerFactory; + public int Order => WellKnownStartupOrder.RemoteServices; + public async Task StartupAsync(VSInternalClientCapabilities clientCapabilities, RazorCohostRequestContext requestContext, CancellationToken cancellationToken) { + // Initializing remote services will create a MEF composition, but if cohost is not on we don't need it + if (!_featureOptions.UseRazorCohostServer) + { + return; + } + // Normal remote service invoker logic requires a solution, but we don't have one here. Fortunately we don't need one, and since // we know this is VS Code specific, its all just smoke and mirrors anyway. We can avoid the smoke :) var serviceInterceptor = new VSCodeBrokeredServiceInterceptor(); - var service = await InProcServiceFactory.CreateServiceAsync(serviceInterceptor, _loggerFactory).ConfigureAwait(false); + + var logger = _loggerFactory.GetOrCreateLogger(); + logger.LogDebug("Initializing remote services."); + var service = await InProcServiceFactory.CreateServiceAsync(serviceInterceptor, _workspaceProvider, _loggerFactory).ConfigureAwait(false); + logger.LogDebug("Initialized remote services."); await service.InitializeAsync(new RemoteClientInitializationOptions { diff --git a/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/VSCodeWorkspaceProvider.cs b/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/VSCodeWorkspaceProvider.cs new file mode 100644 index 00000000000..f1264df1181 --- /dev/null +++ b/src/razor/src/Razor/src/Microsoft.VisualStudioCode.RazorExtension/Services/VSCodeWorkspaceProvider.cs @@ -0,0 +1,27 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the MIT license. See License.txt in the project root for license information. + +using System.Composition; +using Microsoft.AspNetCore.Razor; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.Razor.Workspaces; + +namespace Microsoft.VisualStudioCode.RazorExtension.Services; + +[Shared] +[Export(typeof(IWorkspaceProvider))] +[Export(typeof(VSCodeWorkspaceProvider))] +internal sealed class VSCodeWorkspaceProvider : IWorkspaceProvider +{ + private Workspace? _workspace; + + public void SetWorkspace(Workspace workspace) + { + _workspace = workspace; + } + + public Workspace GetWorkspace() + { + return _workspace ?? Assumed.Unreachable("Accessing the workspace before it has been provided"); + } +} diff --git a/src/razor/src/Razor/src/rzls/LspLogger.cs b/src/razor/src/Razor/src/rzls/LspLogger.cs index 50c7d752b3c..448d3d355b2 100644 --- a/src/razor/src/Razor/src/rzls/LspLogger.cs +++ b/src/razor/src/Razor/src/rzls/LspLogger.cs @@ -38,7 +38,7 @@ public void Log(LogLevel logLevel, string message, Exception? exception) LogLevel.Error => MessageType.Error, LogLevel.Warning => MessageType.Warning, LogLevel.Information => MessageType.Info, - LogLevel.Debug => MessageType.Log, + LogLevel.Debug => MessageType.Debug, LogLevel.Trace => MessageType.Log, _ => throw new NotImplementedException(), }; diff --git a/src/razor/src/Razor/test/Microsoft.VisualStudio.LanguageServices.Razor.Test/Cohost/BrokeredServiceFactory.cs b/src/razor/src/Razor/test/Microsoft.VisualStudio.LanguageServices.Razor.Test/Cohost/BrokeredServiceFactory.cs index 1284f6785bf..bc1b6a0697c 100644 --- a/src/razor/src/Razor/test/Microsoft.VisualStudio.LanguageServices.Razor.Test/Cohost/BrokeredServiceFactory.cs +++ b/src/razor/src/Razor/test/Microsoft.VisualStudio.LanguageServices.Razor.Test/Cohost/BrokeredServiceFactory.cs @@ -59,7 +59,7 @@ public static async Task CreateServiceAsync( Assert.True(s_factoryMap.TryGetValue(typeof(TService), out var factory)); var (clientStream, serverStream) = FullDuplexStream.CreatePair(); - var brokeredServiceData = new RazorBrokeredServiceData(exportProvider, loggerFactory, brokeredServiceInterceptor); + var brokeredServiceData = new RazorBrokeredServiceData(exportProvider, loggerFactory, brokeredServiceInterceptor, WorkspaceProvider: null); var hostProvidedServices = VsMocks.CreateServiceProvider(b => { b.AddService(brokeredServiceData); diff --git a/src/razor/src/Razor/test/Microsoft.VisualStudio.LanguageServices.Razor.Test/Cohost/CohostDocumentPullDiagnosticsTest.cs b/src/razor/src/Razor/test/Microsoft.VisualStudio.LanguageServices.Razor.Test/Cohost/CohostDocumentPullDiagnosticsTest.cs index 4de92531521..8c9be19f30d 100644 --- a/src/razor/src/Razor/test/Microsoft.VisualStudio.LanguageServices.Razor.Test/Cohost/CohostDocumentPullDiagnosticsTest.cs +++ b/src/razor/src/Razor/test/Microsoft.VisualStudio.LanguageServices.Razor.Test/Cohost/CohostDocumentPullDiagnosticsTest.cs @@ -163,7 +163,10 @@ private async Task VerifyDiagnosticsAsync(TestCode input, VSInternalDiagnosticRe var result = taskListRequest ? await endpoint.GetTestAccessor().HandleTaskListItemRequestAsync(document, ["TODO"], DisposalToken) - : await endpoint.GetTestAccessor().HandleRequestAsync(document, DisposalToken); + : [new() + { + Diagnostics = await endpoint.GetTestAccessor().HandleRequestAsync(document, DisposalToken) + }]; var markers = result!.SelectMany(d => d.Diagnostics.AssumeNotNull()).SelectMany(d => new[] { diff --git a/src/razor/src/Razor/test/Microsoft.VisualStudio.LanguageServices.Razor.Test/Cohost/CohostEndpointTestBase.cs b/src/razor/src/Razor/test/Microsoft.VisualStudio.LanguageServices.Razor.Test/Cohost/CohostEndpointTestBase.cs index 3b2861efa10..4e116ad4d14 100644 --- a/src/razor/src/Razor/test/Microsoft.VisualStudio.LanguageServices.Razor.Test/Cohost/CohostEndpointTestBase.cs +++ b/src/razor/src/Razor/test/Microsoft.VisualStudio.LanguageServices.Razor.Test/Cohost/CohostEndpointTestBase.cs @@ -118,8 +118,8 @@ protected override async Task InitializeAsync() _filePathService = new RemoteFilePathService(FeatureOptions); // Force initialization and creation of the remote workspace. It will be filled in later. - await RemoteWorkspaceAccessor.TestAccessor.InitializeRemoteExportProviderBuilderAsync(Path.GetTempPath(), DisposalToken); - _ = RemoteWorkspaceAccessor.GetWorkspace(); + await RemoteWorkspaceProvider.TestAccessor.InitializeRemoteExportProviderBuilderAsync(Path.GetTempPath(), DisposalToken); + _ = RemoteWorkspaceProvider.Instance.GetWorkspace(); } private protected void UpdateClientInitializationOptions(Func mutation) @@ -157,7 +157,7 @@ protected TextDocument CreateProjectAndRazorDocument( var projectId = ProjectId.CreateNewId(debugName: projectName); var documentId = DocumentId.CreateNewId(projectId, debugName: documentFilePath); - var remoteWorkspace = RemoteWorkspaceAccessor.GetWorkspace(); + var remoteWorkspace = RemoteWorkspaceProvider.Instance.GetWorkspace(); var remoteDocument = CreateProjectAndRazorDocument(remoteWorkspace, projectId, projectName, documentId, documentFilePath, contents, additionalFiles, inGlobalNamespace); if (createSeparateRemoteAndLocalWorkspaces) diff --git a/src/source-manifest.json b/src/source-manifest.json index 7ff881cafd0..7d8d41fe965 100644 --- a/src/source-manifest.json +++ b/src/source-manifest.json @@ -85,11 +85,11 @@ "commitSha": "d535886475b1eeda1813eb1947af23bd046abb25" }, { - "packageVersion": "10.0.0-preview.25228.4", - "barId": 266105, + "packageVersion": "10.0.0-preview.25251.3", + "barId": 266611, "path": "razor", "remoteUri": "https://github.com/dotnet/razor", - "commitSha": "8babb3ad96fe6ac7a28619b18b2f3a0c352e3d1a" + "commitSha": "2e057fe832fbda6847f68d5782508d6c469d794c" }, { "packageVersion": "5.0.0-1.25230.6", From 3b83017bbef1dd0918f7c2f894cfd07f56bcd689 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Fri, 2 May 2025 08:28:13 +0200 Subject: [PATCH 5/5] [main] Source code updates from dotnet/command-line-api (#334) Co-authored-by: dotnet-maestro[bot] --- prereqs/git-info/command-line-api.props | 6 +++--- src/command-line-api/.config/tsaoptions.json | 11 ++++++++++ src/command-line-api/.vsts-ci-official.yml | 21 ++++++++++++++++++-- src/source-manifest.json | 6 +++--- 4 files changed, 36 insertions(+), 8 deletions(-) create mode 100644 src/command-line-api/.config/tsaoptions.json diff --git a/prereqs/git-info/command-line-api.props b/prereqs/git-info/command-line-api.props index 8484d309f55..ec987f60079 100644 --- a/prereqs/git-info/command-line-api.props +++ b/prereqs/git-info/command-line-api.props @@ -1,8 +1,8 @@  - a91bcf488ba7d0112b2637b505f8de32aded6825 - 20250424.1 - 0.1.622401 + e5a8d8400751a0fe40f766f2130ef00c59ee9c56 + 20250501.4 + 0.1.625104 \ No newline at end of file diff --git a/src/command-line-api/.config/tsaoptions.json b/src/command-line-api/.config/tsaoptions.json new file mode 100644 index 00000000000..baf4b6d65fb --- /dev/null +++ b/src/command-line-api/.config/tsaoptions.json @@ -0,0 +1,11 @@ +{ + "instanceUrl": "https://devdiv.visualstudio.com/", + "template": "TFSDEVDIV", + "projectName": "DEVDIV", + "areaPath": "DevDiv\\NET Libraries", + "iterationPath": "DevDiv", + "notificationAliases": [ "system-commandline@microsoft.com" ], + "repositoryName":"command-line-api", + "codebaseName": "command-line-api", + "serviceTreeId": "7a9b52f6-7805-416c-9390-343168c0cdb3" +} diff --git a/src/command-line-api/.vsts-ci-official.yml b/src/command-line-api/.vsts-ci-official.yml index 036fa36050a..387b7f91828 100644 --- a/src/command-line-api/.vsts-ci-official.yml +++ b/src/command-line-api/.vsts-ci-official.yml @@ -5,6 +5,11 @@ variables: value: .NETCore - name: Codeql.Enabled value: true + # CodeQL3000 needs this plumbed along as a variable to enable TSA. + - name: Codeql.TSAEnabled + value: true + - name: Codeql.TSAOptionsPath + value: '$(Build.SourcesDirectory)/.config/tsaoptions.json' # CI and PR triggers trigger: @@ -12,6 +17,8 @@ trigger: branches: include: - main + - internal/release/* + - validation/* pr: autoCancel: false @@ -35,6 +42,11 @@ extends: os: windows customBuildTags: - ES365AIMigrationTooling + sdl: + policheck: + enabled: true + tsa: + enabled: true stages: - stage: build displayName: Build and Test @@ -91,8 +103,10 @@ extends: ${{ if notin(variables['Build.Reason'], 'PullRequest') }}: _SignType: real _BuildArgs: $(_OfficialBuildArgs) - templateContext: + sdl: + binskim: + analyzeTargetGlob: +:f|artifacts\bin\**\*.dll;+:f|artifacts\bin\**\*.exe;-:f|artifacts\bin\**\xunit*.dll;-:f|artifacts\bin\**\verify*.dll; outputs: - output: pipelineArtifact displayName: Upload package artifacts @@ -104,7 +118,10 @@ extends: condition: and(eq(variables['system.pullrequest.isfork'], false), eq(variables['_BuildConfig'], 'Release')) targetPath: '$(Build.SourcesDirectory)\artifacts\SymStore\$(_BuildConfig)' artifactName: 'NativeSymbols' - + # WORKAROUND: BinSkim requires the folder exist prior to scanning. + preSteps: + - powershell: New-Item -ItemType Directory -Path $(Build.SourcesDirectory)/artifacts/bin -Force + displayName: Create artifacts/bin directory steps: - checkout: self clean: true diff --git a/src/source-manifest.json b/src/source-manifest.json index 7d8d41fe965..5bcaa8f806c 100644 --- a/src/source-manifest.json +++ b/src/source-manifest.json @@ -29,11 +29,11 @@ "commitSha": "b861ffe40adc95775897af7f77cdae5292ac8c35" }, { - "packageVersion": "0.1.622401", - "barId": 265541, + "packageVersion": "0.1.625104", + "barId": 266615, "path": "command-line-api", "remoteUri": "https://github.com/dotnet/command-line-api", - "commitSha": "a91bcf488ba7d0112b2637b505f8de32aded6825" + "commitSha": "e5a8d8400751a0fe40f766f2130ef00c59ee9c56" }, { "packageVersion": "9.0.0-preview.1.25228.1",