From 4e36560d9f89067f7e099deb23962eba3ecaa933 Mon Sep 17 00:00:00 2001 From: David Wengier Date: Fri, 7 Feb 2025 10:38:46 +1100 Subject: [PATCH 1/2] Add button to view the formatting document to the syntax visualizer --- .../Passes/New/CSharpFormattingPass.cs | 6 +++++ .../SyntaxVisualizerControl.xaml.cs | 25 +++++++++++++++++++ .../SyntaxVisualizerToolWindow.cs | 7 ++++++ .../SyntaxVisualizerMenu.vsct | 8 ++++++ .../xlf/SyntaxVisualizerMenu.vsct.cs.xlf | 5 ++++ .../xlf/SyntaxVisualizerMenu.vsct.de.xlf | 5 ++++ .../xlf/SyntaxVisualizerMenu.vsct.es.xlf | 5 ++++ .../xlf/SyntaxVisualizerMenu.vsct.fr.xlf | 5 ++++ .../xlf/SyntaxVisualizerMenu.vsct.it.xlf | 5 ++++ .../xlf/SyntaxVisualizerMenu.vsct.ja.xlf | 5 ++++ .../xlf/SyntaxVisualizerMenu.vsct.ko.xlf | 5 ++++ .../xlf/SyntaxVisualizerMenu.vsct.pl.xlf | 5 ++++ .../xlf/SyntaxVisualizerMenu.vsct.pt-BR.xlf | 5 ++++ .../xlf/SyntaxVisualizerMenu.vsct.ru.xlf | 5 ++++ .../xlf/SyntaxVisualizerMenu.vsct.tr.xlf | 5 ++++ .../xlf/SyntaxVisualizerMenu.vsct.zh-Hans.xlf | 5 ++++ .../xlf/SyntaxVisualizerMenu.vsct.zh-Hant.xlf | 5 ++++ 17 files changed, 111 insertions(+) diff --git a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Formatting/Passes/New/CSharpFormattingPass.cs b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Formatting/Passes/New/CSharpFormattingPass.cs index 7508a37bc51..43cdd33306c 100644 --- a/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Formatting/Passes/New/CSharpFormattingPass.cs +++ b/src/Razor/src/Microsoft.CodeAnalysis.Razor.Workspaces/Formatting/Passes/New/CSharpFormattingPass.cs @@ -1,10 +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 System; using System.Collections.Immutable; using System.Diagnostics; using System.Threading; using System.Threading.Tasks; +using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.PooledObjects; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.ExternalAccess.Razor; @@ -171,4 +173,8 @@ private async Task FormatCSharpAsync(SourceText generatedCSharpText, return generatedCSharpText.WithChanges(csharpChanges); } + + [Obsolete("Only for the syntax visualizer, do not call")] + internal static string GetFormattingDocumentContentsForSyntaxVisualizer(RazorCodeDocument codeDocument) + => CSharpDocumentGenerator.Generate(codeDocument, new()).SourceText.ToString(); } diff --git a/src/Razor/src/Microsoft.VisualStudio.RazorExtension/SyntaxVisualizer/SyntaxVisualizerControl.xaml.cs b/src/Razor/src/Microsoft.VisualStudio.RazorExtension/SyntaxVisualizer/SyntaxVisualizerControl.xaml.cs index 76f65e5c069..f71ea15dca7 100644 --- a/src/Razor/src/Microsoft.VisualStudio.RazorExtension/SyntaxVisualizer/SyntaxVisualizerControl.xaml.cs +++ b/src/Razor/src/Microsoft.VisualStudio.RazorExtension/SyntaxVisualizer/SyntaxVisualizerControl.xaml.cs @@ -10,6 +10,7 @@ using System.Windows.Controls; using Microsoft.AspNetCore.Razor.Language; using Microsoft.AspNetCore.Razor.Serialization.Json; +using Microsoft.CodeAnalysis.Razor.Formatting.New; using Microsoft.VisualStudio.LanguageServer.ContainedLanguage; using Microsoft.VisualStudio.LanguageServer.ContainedLanguage.Extensions; using Microsoft.VisualStudio.Razor; @@ -108,6 +109,30 @@ void IDisposable.Dispose() } } + public void ShowFormattingDocument() + { + if (_activeWpfTextView is null) + { + return; + } + + EnsureInitialized(); + + if (_fileUriProvider.TryGet(_activeWpfTextView.TextBuffer, out var hostDocumentUri)) + { + var codeDocument = GetCodeDocument(); + if (codeDocument is null) + { + return; + } + +#pragma warning disable CS0618 // Type or member is obsolete + var formattingDocument = CSharpFormattingPass.GetFormattingDocumentContentsForSyntaxVisualizer(codeDocument); +#pragma warning restore CS0618 // Type or member is obsolete + OpenGeneratedCode(hostDocumentUri.AbsoluteUri + ".formatting.cs", formattingDocument); + } + } + public void ShowGeneratedCode() { if (_activeWpfTextView is null) diff --git a/src/Razor/src/Microsoft.VisualStudio.RazorExtension/SyntaxVisualizer/SyntaxVisualizerToolWindow.cs b/src/Razor/src/Microsoft.VisualStudio.RazorExtension/SyntaxVisualizer/SyntaxVisualizerToolWindow.cs index 14b7359cf10..64f0d4793b0 100644 --- a/src/Razor/src/Microsoft.VisualStudio.RazorExtension/SyntaxVisualizer/SyntaxVisualizerToolWindow.cs +++ b/src/Razor/src/Microsoft.VisualStudio.RazorExtension/SyntaxVisualizer/SyntaxVisualizerToolWindow.cs @@ -31,6 +31,7 @@ internal class SyntaxVisualizerToolWindow : ToolWindowPane private const int CmdIdShowAllTagHelpers = 0x0113; private const int CmdIdShowInScopeTagHelpers = 0x0114; private const int CmdIdShowReferencedTagHelpers = 0x0115; + private const int CmdidShowFormattingDocument = 0x0117; private MenuCommand? _showSourceMappingsCommand; private SyntaxVisualizerControl _visualizerControl => (SyntaxVisualizerControl)Content; @@ -82,6 +83,7 @@ internal void InitializeCommands(IMenuCommandService mcs, Guid guidSyntaxVisuali }; mcs.AddCommand(_showSourceMappingsCommand); + mcs.AddCommand(new MenuCommand(ShowFormattingDocument, new CommandID(guidSyntaxVisualizerMenuCmdSet, CmdidShowFormattingDocument))); mcs.AddCommand(new MenuCommand(ShowGeneratedCode, new CommandID(guidSyntaxVisualizerMenuCmdSet, CmdIdShowGeneratedCode))); mcs.AddCommand(new MenuCommand(ShowGeneratedHtml, new CommandID(guidSyntaxVisualizerMenuCmdSet, CmdIdShowGeneratedHtml))); mcs.AddCommand(new MenuCommand(ShowAllTagHelpers, new CommandID(guidSyntaxVisualizerMenuCmdSet, CmdIdShowAllTagHelpers))); @@ -100,6 +102,11 @@ private void ShowSourceMappings(object sender, EventArgs e) } } + private void ShowFormattingDocument(object sender, EventArgs e) + { + _visualizerControl.ShowFormattingDocument(); + } + private void ShowGeneratedCode(object sender, EventArgs e) { _visualizerControl.ShowGeneratedCode(); diff --git a/src/Razor/src/Microsoft.VisualStudio.RazorExtension/SyntaxVisualizerMenu.vsct b/src/Razor/src/Microsoft.VisualStudio.RazorExtension/SyntaxVisualizerMenu.vsct index 9cbada4571e..16ccdb7efb5 100644 --- a/src/Razor/src/Microsoft.VisualStudio.RazorExtension/SyntaxVisualizerMenu.vsct +++ b/src/Razor/src/Microsoft.VisualStudio.RazorExtension/SyntaxVisualizerMenu.vsct @@ -98,6 +98,13 @@ + +