dotnet / razor

Compiler and tooling experience for Razor ASP.NET Core apps in Visual Studio, Visual Studio for Mac, and VS Code.
https://asp.net
MIT License
474 stars 185 forks source link

Broken formatting on Razor (cshtml) files with LF EOL (vscode) #4349

Open bryanjhv opened 3 years ago

bryanjhv commented 3 years ago

Describe the bug

Razor (cshtml) file formatting breaks in a very strange way when using LF end of lines. It doesn't happen if file EOL is CRLF. It's independent of BOM-encoded file (tested this).

To Reproduce

Repository: https://github.com/bryanjhv/aspnet-vscode-issues (including the steps above and some extra files in the GIF below)

  1. Create a new webapp project using dotnet new.
  2. Open any .cshtml file with Razor expressions (Index.cshtml, etc).
  3. Change its end of line to LF and save it.
  4. Enable format on save.
  5. Modify the file (add a space or something).
  6. Save the file.

recording

Exceptions (if any)

None.

Further technical details

Additional notes

Migrated from https://github.com/OmniSharp/omnisharp-vscode/issues/4503 as requested.

NTaylorMullen commented 3 years ago

@davidwengier From your investigations in our formatting area did anything jump out to you as concerning in regards to EOL handling?

davidwengier commented 3 years ago

I didn't look at that specifically (yet?) but I did see some cases where new lines were added around C# blocks within razor directives, so if the parsing is choking on newlines and producing multiple code blocks or something I could see this happening. Would have to dig in to be sure.

NTaylorMullen commented 3 years ago

I didn't look at that specifically (yet?) but I did see some cases where new lines were added around C# blocks within razor directives, so if the parsing is choking on newlines and producing multiple code blocks or something I could see this happening. Would have to dig in to be sure.

Ahhh interesting, in the situations where we were adding newlines were those added newlines via Environment.NewLine or via a configured newline?

davidwengier commented 3 years ago

Not sure, but it was the Roslyn C# formatter adding the new lines, not Razor tooling by the look of things.

NTaylorMullen commented 3 years ago

Not sure, but it was the Roslyn C# formatter adding the new lines, not Razor tooling by the look of things.

😲

bryanjhv commented 3 years ago

Still testing... Looks like it's specific to Windows/LF combination. Tried reproducing the issue in a Codespaces VM, and works fine with LF/CRLF. Don't know if the same would happen when testing on a real Linux machine, though.

PeterWone commented 3 years ago

Still testing... Looks like it's specific to Windows/LF combination. Tried reproducing the issue in a Codespaces VM, and works fine with LF/CRLF.

Does this mean that if I configure VS Code to force everything to CRLF line endings the problem will go away?

NTaylorMullen commented 3 years ago

Does this mean that if I configure VS Code to force everything to CRLF line endings the problem will go away?

If you're on Windows yes. Gist is the whole stack does a lot of Environment.Newline in .NET which doesn't respect the VSCode's newline setting 😄

bryanjhv commented 3 years ago

Does this mean that if I configure VS Code to force everything to CRLF line endings the problem will go away?

To be specific, even if I don't set a global files.eol setting, but just the file to CRLF, everything is fine. In the repro repo I'm forcing it to LF via EditorConfig (then uninstalled, discarding issues with other extensions).

Gist is the whole stack does a lot of Environment.Newline in .NET which doesn't respect the VSCode's newline setting

Haven't tried but I'm guessing it's not specific to VSCode (OmniSharp and others are also used on Vim, for example). So, maybe a solution which detects file EOL would be better. Just a suggestion, don't know how hard it would be.

NTaylorMullen commented 3 years ago

Haven't tried but I'm guessing it's not specific to VSCode (OmniSharp and others are also used on Vim, for example). So, maybe a solution which detects file EOL would be better. Just a suggestion, don't know how hard it would be.

File EOL isn't an awful idea but we typically stray away from it only because it's a little less defined what to do in mixed newline cases. Not really an excuse on our part though because obv there's ways around that. Just work to be done 😄

PeterWone commented 3 years ago

The cynic in my calls this IWOMP, something of which most of us are guilty. (It Works on my Platform)

Sent from Mailhttps://go.microsoft.com/fwlink/?LinkId=550986 for Windows 10

From: N. Taylor @.> Sent: Saturday, 24 April 2021 8:54 AM To: @.> Cc: Peter @.>; @.> Subject: Re: [dotnet/aspnetcore] Broken formatting on Razor (cshtml) files with LF EOL (vscode) (#31937)

Haven't tried but I'm guessing it's not specific to VSCode (OmniSharp and others are also used on Vim, for example). So, maybe a solution which detects file EOL would be better. Just a suggestion, don't know how hard it would be.

File EOL isn't an awful idea but we typically stray away from it only because it's a little less defined what to do in mixed newline cases. Not really an excuse on our part though because obv there's ways around that. Just work to be done 😄

— You are receiving this because you commented. Reply to this email directly, view it on GitHubhttps://github.com/dotnet/aspnetcore/issues/31937#issuecomment-825982008, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ABJ6QOCDMZE2RLTX5JXEIULTKH3C3ANCNFSM43GLA6QA.

bryanjhv commented 3 years ago

The cynic in my calls this IWOMP, something of which most of us are guilty.

Tried again with a "clean" environment (just C# extension, no user settings, nothing more than the repro repo, deleted user omnisharp.json in case Roslynator interfered). Here's the result (still happening at least for me). One thing to notice is that it takes one save (or a modification as I said at point 5 of my "To Reproduce" steps) to show the issue. Don't know the way VSCode works but it seems it doesn't execute save actions (formatting in this case) on unmodified files (but that's another thing).

recording

we typically stray away from it only because it's a little less defined what to do in mixed newline cases

I understand, that's kind of an issue in some edge (I mean, not so infrequent) cases, and would bring confusion. Some sort of "auto-detect EOL" setting would be useful but, again, that's another thing unrelated to this issue.

bryanjhv commented 3 years ago

After setting razor.trace to Verbose in order to have a Razor Log (to provide more information on where the issue would be, if logged), here are the results on three consecutive formatting requests:

Format #​1 ``` OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Finding descriptors for textDocument/formatting | Method='textDocument/formatting' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Found attributes 1, razor::file:///d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml | Count='1' Attributes='razor::file:///d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Looking for handler for descriptors textDocument/formatting | Method='textDocument/formatting' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Checking handler textDocument/formatting:Microsoft.AspNetCore.Razor.LanguageServer.Formatting.RazorFormattingEndpoint | Method='textDocument/formatting' Handler='Microsoft.AspNetCore.Razor.LanguageServer.Formatting.RazorFormattingEndpoint' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Registration options OmniSharp.Extensions.LanguageServer.Protocol.Models.DocumentFormattingRegistrationOptions | OptionsName='OmniSharp.Extensions.LanguageServer.Protocol.Models.DocumentFormattingRegistrationOptions' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Document Selector [**/*.{cshtml,razor}] | DocumentSelector='[**/*.{cshtml,razor}]' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Handler Selected: Microsoft.AspNetCore.Razor.LanguageServer.Formatting.RazorFormattingEndpoint via [**/*.{cshtml,razor}] (targeting OmniSharp.Extensions.JsonRpc.IJsonRpcRequestHandler`2[[OmniSharp.Extensions.LanguageServer.Protocol.Models.DocumentFormattingParams, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022],[OmniSharp.Extensions.LanguageServer.Protocol.Models.TextEditContainer, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022]]) | Handler='Microsoft.AspNetCore.Razor.LanguageServer.Formatting.RazorFormattingEndpoint' Id='' DocumentSelector='[**/*.{cshtml,razor}]' HandlerInterface='OmniSharp.Extensions.JsonRpc.IJsonRpcRequestHandler`2[[OmniSharp.Extensions.LanguageServer.Protocol.Models.DocumentFormattingParams, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022],[OmniSharp.Extensions.LanguageServer.Protocol.Models.TextEditContainer, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022]]' OmniSharp.Extensions.JsonRpc.ProcessScheduler: Queueing Parallel:textDocument/formatting:11 request for processing | Type='Parallel' Name='textDocument/formatting:11' OmniSharp.Extensions.JsonRpc.InputHandler: Starting: Processing request textDocument/formatting 11 | Method='textDocument/formatting' ResponseId='11' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Starting: Routing Request (11) textDocument/formatting | Id='11' Method='textDocument/formatting' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Converting params for Request (11) textDocument/formatting to OmniSharp.Extensions.LanguageServer.Protocol.Models.DocumentFormattingParams | Id='11' Method='textDocument/formatting' Type='OmniSharp.Extensions.LanguageServer.Protocol.Models.DocumentFormattingParams' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Converting params for Notification textDocument/formatting to OmniSharp.Extensions.LanguageServer.Protocol.Models.DocumentFormattingParams | Method='textDocument/formatting' Type='OmniSharp.Extensions.LanguageServer.Protocol.Models.DocumentFormattingParams' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Response value was OmniSharp.Extensions.LanguageServer.Protocol.Models.TextEditContainer | Type='OmniSharp.Extensions.LanguageServer.Protocol.Models.TextEditContainer' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Finished: Routing Request (11) textDocument/formatting in 57ms | Id='11' Method='textDocument/formatting' ElapsedMilliseconds='57' OmniSharp.Extensions.JsonRpc.InputHandler: Finished: Processing request textDocument/formatting 11 in 57ms | Method='textDocument/formatting' ResponseId='11' ElapsedMilliseconds='57' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Finding descriptors for textDocument/didChange | Method='textDocument/didChange' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Found attributes 1, razor::file:///d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml | Count='1' Attributes='razor::file:///d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Looking for handler for descriptors textDocument/didChange | Method='textDocument/didChange' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Checking handler textDocument/didChange:Microsoft.AspNetCore.Razor.LanguageServer.RazorDocumentSynchronizationEndpoint | Method='textDocument/didChange' Handler='Microsoft.AspNetCore.Razor.LanguageServer.RazorDocumentSynchronizationEndpoint' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Registration options OmniSharp.Extensions.LanguageServer.Protocol.Models.TextDocumentChangeRegistrationOptions | OptionsName='OmniSharp.Extensions.LanguageServer.Protocol.Models.TextDocumentChangeRegistrationOptions' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Document Selector [**/*.{cshtml,razor}] | DocumentSelector='[**/*.{cshtml,razor}]' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Handler Selected: Microsoft.AspNetCore.Razor.LanguageServer.RazorDocumentSynchronizationEndpoint via [**/*.{cshtml,razor}] (targeting OmniSharp.Extensions.JsonRpc.IJsonRpcNotificationHandler`1[[OmniSharp.Extensions.LanguageServer.Protocol.Models.DidChangeTextDocumentParams, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022]]) | Handler='Microsoft.AspNetCore.Razor.LanguageServer.RazorDocumentSynchronizationEndpoint' Id='' DocumentSelector='[**/*.{cshtml,razor}]' HandlerInterface='OmniSharp.Extensions.JsonRpc.IJsonRpcNotificationHandler`1[[OmniSharp.Extensions.LanguageServer.Protocol.Models.DidChangeTextDocumentParams, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022]]' OmniSharp.Extensions.JsonRpc.ProcessScheduler: Swapping from Parallel to Serial | From='Parallel' To='Serial' OmniSharp.Extensions.JsonRpc.ProcessScheduler: Completing existing request process type Parallel | Type='Parallel' OmniSharp.Extensions.JsonRpc.ProcessScheduler: Queueing Serial:textDocument/didChange request for processing | Type='Serial' Name='textDocument/didChange' OmniSharp.Extensions.JsonRpc.InputHandler: Starting: Processing notification textDocument/didChange | Method='textDocument/didChange' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Starting: Routing Notification textDocument/didChange | Method='textDocument/didChange' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Converting params for Notification textDocument/didChange to OmniSharp.Extensions.LanguageServer.Protocol.Models.DidChangeTextDocumentParams | Method='textDocument/didChange' Type='OmniSharp.Extensions.LanguageServer.Protocol.Models.DidChangeTextDocumentParams' Microsoft.AspNetCore.Razor.LanguageServer.RazorDocumentSynchronizationEndpoint: Applying TextChange: { [26..26), " " } | Microsoft.AspNetCore.Razor.LanguageServer.ProjectSystem.DefaultRazorProjectService: Updating document 'd:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml'. | Microsoft.AspNetCore.Razor.LanguageServer.DefaultGeneratedDocumentPublisher: Updating C# buffer of d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml to correspond with host document version 5. 2580 -> 2581 = Change delta of 1 via 1 text changes. | 0='d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml' 1='5' 2='2580' 3='2581' 4='1' 5='1' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Finished: Routing Notification textDocument/didChange in 4ms | Method='textDocument/didChange' ElapsedMilliseconds='4' [Client - 11:42:27 PM] Updating the C# document for Razor file 'd:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml' (5) [Client - 11:42:27 PM] Notifying document 'd:\Downloads\aspnet-vscode-issues-master\Pages\Index.cshtml' changed 'csharpChanged' OmniSharp.Extensions.JsonRpc.InputHandler: Finished: Processing notification textDocument/didChange in 4ms | Method='textDocument/didChange' ElapsedMilliseconds='4' Microsoft.AspNetCore.Razor.LanguageServer.DefaultGeneratedDocumentPublisher: Updating HTML buffer of d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml to correspond with host document version 5. 252 -> 253 = Change delta of 1 via 1 text changes. | 0='d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml' 1='5' 2='252' 3='253' 4='1' 5='1' [Client - 11:42:27 PM] Updating the HTML document for Razor file 'd:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml' (5) [Client - 11:42:27 PM] Notifying document 'd:\Downloads\aspnet-vscode-issues-master\Pages\Index.cshtml' changed 'htmlChanged' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Finding descriptors for textDocument/semanticTokens/edits | Method='textDocument/semanticTokens/edits' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Found attributes 1, razor::file:///d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml | Count='1' Attributes='razor::file:///d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Looking for handler for descriptors textDocument/semanticTokens/edits | Method='textDocument/semanticTokens/edits' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Checking handler textDocument/semanticTokens/edits:Microsoft.AspNetCore.Razor.LanguageServer.Semantic.RazorSemanticTokensEndpoint | Method='textDocument/semanticTokens/edits' Handler='Microsoft.AspNetCore.Razor.LanguageServer.Semantic.RazorSemanticTokensEndpoint' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Registration options OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensRegistrationOptions | OptionsName='OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensRegistrationOptions' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Document Selector [**/*.{cshtml,razor}] | DocumentSelector='[**/*.{cshtml,razor}]' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Handler Selected: Microsoft.AspNetCore.Razor.LanguageServer.Semantic.RazorSemanticTokensEndpoint via [**/*.{cshtml,razor}] (targeting OmniSharp.Extensions.JsonRpc.IJsonRpcRequestHandler`2[[OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensDeltaParams, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022],[System.Nullable`1[[OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensFullOrDelta, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022]], System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]) | Handler='Microsoft.AspNetCore.Razor.LanguageServer.Semantic.RazorSemanticTokensEndpoint' Id='' DocumentSelector='[**/*.{cshtml,razor}]' HandlerInterface='OmniSharp.Extensions.JsonRpc.IJsonRpcRequestHandler`2[[OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensDeltaParams, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022],[System.Nullable`1[[OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensFullOrDelta, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022]], System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]' OmniSharp.Extensions.JsonRpc.ProcessScheduler: Swapping from Serial to Parallel | From='Serial' To='Parallel' OmniSharp.Extensions.JsonRpc.ProcessScheduler: Completing existing request process type Serial | Type='Serial' OmniSharp.Extensions.JsonRpc.ProcessScheduler: Queueing Parallel:textDocument/semanticTokens/edits:12 request for processing | Type='Parallel' Name='textDocument/semanticTokens/edits:12' OmniSharp.Extensions.JsonRpc.InputHandler: Starting: Processing request textDocument/semanticTokens/edits 12 | Method='textDocument/semanticTokens/edits' ResponseId='12' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Starting: Routing Request (12) textDocument/semanticTokens/edits | Id='12' Method='textDocument/semanticTokens/edits' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Converting params for Request (12) textDocument/semanticTokens/edits to OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensDeltaParams | Id='12' Method='textDocument/semanticTokens/edits' Type='OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensDeltaParams' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Converting params for Notification textDocument/semanticTokens/edits to OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensDeltaParams | Method='textDocument/semanticTokens/edits' Type='OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensDeltaParams' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Response value was OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensFullOrDelta | Type='OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensFullOrDelta' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Finished: Routing Request (12) textDocument/semanticTokens/edits in 6ms | Id='12' Method='textDocument/semanticTokens/edits' ElapsedMilliseconds='6' OmniSharp.Extensions.JsonRpc.InputHandler: Finished: Processing request textDocument/semanticTokens/edits 12 in 6ms | Method='textDocument/semanticTokens/edits' ResponseId='12' ElapsedMilliseconds='6' ```
Format #​2 ``` OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Finding descriptors for textDocument/formatting | Method='textDocument/formatting' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Found attributes 1, razor::file:///d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml | Count='1' Attributes='razor::file:///d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Looking for handler for descriptors textDocument/formatting | Method='textDocument/formatting' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Checking handler textDocument/formatting:Microsoft.AspNetCore.Razor.LanguageServer.Formatting.RazorFormattingEndpoint | Method='textDocument/formatting' Handler='Microsoft.AspNetCore.Razor.LanguageServer.Formatting.RazorFormattingEndpoint' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Registration options OmniSharp.Extensions.LanguageServer.Protocol.Models.DocumentFormattingRegistrationOptions | OptionsName='OmniSharp.Extensions.LanguageServer.Protocol.Models.DocumentFormattingRegistrationOptions' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Document Selector [**/*.{cshtml,razor}] | DocumentSelector='[**/*.{cshtml,razor}]' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Handler Selected: Microsoft.AspNetCore.Razor.LanguageServer.Formatting.RazorFormattingEndpoint via [**/*.{cshtml,razor}] (targeting OmniSharp.Extensions.JsonRpc.IJsonRpcRequestHandler`2[[OmniSharp.Extensions.LanguageServer.Protocol.Models.DocumentFormattingParams, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022],[OmniSharp.Extensions.LanguageServer.Protocol.Models.TextEditContainer, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022]]) | Handler='Microsoft.AspNetCore.Razor.LanguageServer.Formatting.RazorFormattingEndpoint' Id='' DocumentSelector='[**/*.{cshtml,razor}]' HandlerInterface='OmniSharp.Extensions.JsonRpc.IJsonRpcRequestHandler`2[[OmniSharp.Extensions.LanguageServer.Protocol.Models.DocumentFormattingParams, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022],[OmniSharp.Extensions.LanguageServer.Protocol.Models.TextEditContainer, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022]]' OmniSharp.Extensions.JsonRpc.ProcessScheduler: Queueing Parallel:textDocument/formatting:13 request for processing | Type='Parallel' Name='textDocument/formatting:13' OmniSharp.Extensions.JsonRpc.InputHandler: Starting: Processing request textDocument/formatting 13 | Method='textDocument/formatting' ResponseId='13' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Starting: Routing Request (13) textDocument/formatting | Id='13' Method='textDocument/formatting' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Converting params for Request (13) textDocument/formatting to OmniSharp.Extensions.LanguageServer.Protocol.Models.DocumentFormattingParams | Id='13' Method='textDocument/formatting' Type='OmniSharp.Extensions.LanguageServer.Protocol.Models.DocumentFormattingParams' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Converting params for Notification textDocument/formatting to OmniSharp.Extensions.LanguageServer.Protocol.Models.DocumentFormattingParams | Method='textDocument/formatting' Type='OmniSharp.Extensions.LanguageServer.Protocol.Models.DocumentFormattingParams' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Response value was OmniSharp.Extensions.LanguageServer.Protocol.Models.TextEditContainer | Type='OmniSharp.Extensions.LanguageServer.Protocol.Models.TextEditContainer' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Finished: Routing Request (13) textDocument/formatting in 31ms | Id='13' Method='textDocument/formatting' ElapsedMilliseconds='31' OmniSharp.Extensions.JsonRpc.InputHandler: Finished: Processing request textDocument/formatting 13 in 31ms | Method='textDocument/formatting' ResponseId='13' ElapsedMilliseconds='31' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Finding descriptors for textDocument/didChange | Method='textDocument/didChange' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Found attributes 1, razor::file:///d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml | Count='1' Attributes='razor::file:///d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Looking for handler for descriptors textDocument/didChange | Method='textDocument/didChange' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Checking handler textDocument/didChange:Microsoft.AspNetCore.Razor.LanguageServer.RazorDocumentSynchronizationEndpoint | Method='textDocument/didChange' Handler='Microsoft.AspNetCore.Razor.LanguageServer.RazorDocumentSynchronizationEndpoint' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Registration options OmniSharp.Extensions.LanguageServer.Protocol.Models.TextDocumentChangeRegistrationOptions | OptionsName='OmniSharp.Extensions.LanguageServer.Protocol.Models.TextDocumentChangeRegistrationOptions' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Document Selector [**/*.{cshtml,razor}] | DocumentSelector='[**/*.{cshtml,razor}]' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Handler Selected: Microsoft.AspNetCore.Razor.LanguageServer.RazorDocumentSynchronizationEndpoint via [**/*.{cshtml,razor}] (targeting OmniSharp.Extensions.JsonRpc.IJsonRpcNotificationHandler`1[[OmniSharp.Extensions.LanguageServer.Protocol.Models.DidChangeTextDocumentParams, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022]]) | Handler='Microsoft.AspNetCore.Razor.LanguageServer.RazorDocumentSynchronizationEndpoint' Id='' DocumentSelector='[**/*.{cshtml,razor}]' HandlerInterface='OmniSharp.Extensions.JsonRpc.IJsonRpcNotificationHandler`1[[OmniSharp.Extensions.LanguageServer.Protocol.Models.DidChangeTextDocumentParams, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022]]' OmniSharp.Extensions.JsonRpc.ProcessScheduler: Swapping from Parallel to Serial | From='Parallel' To='Serial' OmniSharp.Extensions.JsonRpc.ProcessScheduler: Completing existing request process type Parallel | Type='Parallel' OmniSharp.Extensions.JsonRpc.ProcessScheduler: Queueing Serial:textDocument/didChange request for processing | Type='Serial' Name='textDocument/didChange' OmniSharp.Extensions.JsonRpc.InputHandler: Starting: Processing notification textDocument/didChange | Method='textDocument/didChange' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Starting: Routing Notification textDocument/didChange | Method='textDocument/didChange' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Converting params for Notification textDocument/didChange to OmniSharp.Extensions.LanguageServer.Protocol.Models.DidChangeTextDocumentParams | Method='textDocument/didChange' Type='OmniSharp.Extensions.LanguageServer.Protocol.Models.DidChangeTextDocumentParams' Microsoft.AspNetCore.Razor.LanguageServer.RazorDocumentSynchronizationEndpoint: Applying TextChange: { [27..27), " " } | Microsoft.AspNetCore.Razor.LanguageServer.RazorDocumentSynchronizationEndpoint: Applying TextChange: { [26..26), " " } | Microsoft.AspNetCore.Razor.LanguageServer.ProjectSystem.DefaultRazorProjectService: Updating document 'd:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml'. | Microsoft.AspNetCore.Razor.LanguageServer.DefaultGeneratedDocumentPublisher: Updating C# buffer of d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml to correspond with host document version 6. 2581 -> 2583 = Change delta of 2 via 1 text changes. | 0='d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml' 1='6' 2='2581' 3='2583' 4='2' 5='1' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Finished: Routing Notification textDocument/didChange in 3ms | Method='textDocument/didChange' ElapsedMilliseconds='3' [Client - 11:43:05 PM] Updating the C# document for Razor file 'd:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml' (6) [Client - 11:43:05 PM] Notifying document 'd:\Downloads\aspnet-vscode-issues-master\Pages\Index.cshtml' changed 'csharpChanged' OmniSharp.Extensions.JsonRpc.InputHandler: Finished: Processing notification textDocument/didChange in 3ms | Method='textDocument/didChange' ElapsedMilliseconds='3' Microsoft.AspNetCore.Razor.LanguageServer.DefaultGeneratedDocumentPublisher: Updating HTML buffer of d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml to correspond with host document version 6. 253 -> 255 = Change delta of 2 via 1 text changes. | 0='d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml' 1='6' 2='253' 3='255' 4='2' 5='1' [Client - 11:43:05 PM] Updating the HTML document for Razor file 'd:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml' (6) [Client - 11:43:05 PM] Notifying document 'd:\Downloads\aspnet-vscode-issues-master\Pages\Index.cshtml' changed 'htmlChanged' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Finding descriptors for textDocument/semanticTokens/edits | Method='textDocument/semanticTokens/edits' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Found attributes 1, razor::file:///d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml | Count='1' Attributes='razor::file:///d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Looking for handler for descriptors textDocument/semanticTokens/edits | Method='textDocument/semanticTokens/edits' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Checking handler textDocument/semanticTokens/edits:Microsoft.AspNetCore.Razor.LanguageServer.Semantic.RazorSemanticTokensEndpoint | Method='textDocument/semanticTokens/edits' Handler='Microsoft.AspNetCore.Razor.LanguageServer.Semantic.RazorSemanticTokensEndpoint' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Registration options OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensRegistrationOptions | OptionsName='OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensRegistrationOptions' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Document Selector [**/*.{cshtml,razor}] | DocumentSelector='[**/*.{cshtml,razor}]' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Handler Selected: Microsoft.AspNetCore.Razor.LanguageServer.Semantic.RazorSemanticTokensEndpoint via [**/*.{cshtml,razor}] (targeting OmniSharp.Extensions.JsonRpc.IJsonRpcRequestHandler`2[[OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensDeltaParams, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022],[System.Nullable`1[[OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensFullOrDelta, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022]], System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]) | Handler='Microsoft.AspNetCore.Razor.LanguageServer.Semantic.RazorSemanticTokensEndpoint' Id='' DocumentSelector='[**/*.{cshtml,razor}]' HandlerInterface='OmniSharp.Extensions.JsonRpc.IJsonRpcRequestHandler`2[[OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensDeltaParams, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022],[System.Nullable`1[[OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensFullOrDelta, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022]], System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]' OmniSharp.Extensions.JsonRpc.ProcessScheduler: Swapping from Serial to Parallel | From='Serial' To='Parallel' OmniSharp.Extensions.JsonRpc.ProcessScheduler: Completing existing request process type Serial | Type='Serial' OmniSharp.Extensions.JsonRpc.ProcessScheduler: Queueing Parallel:textDocument/semanticTokens/edits:14 request for processing | Type='Parallel' Name='textDocument/semanticTokens/edits:14' OmniSharp.Extensions.JsonRpc.InputHandler: Starting: Processing request textDocument/semanticTokens/edits 14 | Method='textDocument/semanticTokens/edits' ResponseId='14' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Starting: Routing Request (14) textDocument/semanticTokens/edits | Id='14' Method='textDocument/semanticTokens/edits' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Converting params for Request (14) textDocument/semanticTokens/edits to OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensDeltaParams | Id='14' Method='textDocument/semanticTokens/edits' Type='OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensDeltaParams' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Converting params for Notification textDocument/semanticTokens/edits to OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensDeltaParams | Method='textDocument/semanticTokens/edits' Type='OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensDeltaParams' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Response value was OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensFullOrDelta | Type='OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensFullOrDelta' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Finished: Routing Request (14) textDocument/semanticTokens/edits in 3ms | Id='14' Method='textDocument/semanticTokens/edits' ElapsedMilliseconds='3' OmniSharp.Extensions.JsonRpc.InputHandler: Finished: Processing request textDocument/semanticTokens/edits 14 in 3ms | Method='textDocument/semanticTokens/edits' ResponseId='14' ElapsedMilliseconds='3' ```
Format #​3 ``` OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Finding descriptors for textDocument/formatting | Method='textDocument/formatting' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Found attributes 1, razor::file:///d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml | Count='1' Attributes='razor::file:///d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Looking for handler for descriptors textDocument/formatting | Method='textDocument/formatting' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Checking handler textDocument/formatting:Microsoft.AspNetCore.Razor.LanguageServer.Formatting.RazorFormattingEndpoint | Method='textDocument/formatting' Handler='Microsoft.AspNetCore.Razor.LanguageServer.Formatting.RazorFormattingEndpoint' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Registration options OmniSharp.Extensions.LanguageServer.Protocol.Models.DocumentFormattingRegistrationOptions | OptionsName='OmniSharp.Extensions.LanguageServer.Protocol.Models.DocumentFormattingRegistrationOptions' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Document Selector [**/*.{cshtml,razor}] | DocumentSelector='[**/*.{cshtml,razor}]' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Handler Selected: Microsoft.AspNetCore.Razor.LanguageServer.Formatting.RazorFormattingEndpoint via [**/*.{cshtml,razor}] (targeting OmniSharp.Extensions.JsonRpc.IJsonRpcRequestHandler`2[[OmniSharp.Extensions.LanguageServer.Protocol.Models.DocumentFormattingParams, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022],[OmniSharp.Extensions.LanguageServer.Protocol.Models.TextEditContainer, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022]]) | Handler='Microsoft.AspNetCore.Razor.LanguageServer.Formatting.RazorFormattingEndpoint' Id='' DocumentSelector='[**/*.{cshtml,razor}]' HandlerInterface='OmniSharp.Extensions.JsonRpc.IJsonRpcRequestHandler`2[[OmniSharp.Extensions.LanguageServer.Protocol.Models.DocumentFormattingParams, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022],[OmniSharp.Extensions.LanguageServer.Protocol.Models.TextEditContainer, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022]]' OmniSharp.Extensions.JsonRpc.ProcessScheduler: Queueing Parallel:textDocument/formatting:15 request for processing | Type='Parallel' Name='textDocument/formatting:15' OmniSharp.Extensions.JsonRpc.InputHandler: Starting: Processing request textDocument/formatting 15 | Method='textDocument/formatting' ResponseId='15' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Starting: Routing Request (15) textDocument/formatting | Id='15' Method='textDocument/formatting' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Converting params for Request (15) textDocument/formatting to OmniSharp.Extensions.LanguageServer.Protocol.Models.DocumentFormattingParams | Id='15' Method='textDocument/formatting' Type='OmniSharp.Extensions.LanguageServer.Protocol.Models.DocumentFormattingParams' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Converting params for Notification textDocument/formatting to OmniSharp.Extensions.LanguageServer.Protocol.Models.DocumentFormattingParams | Method='textDocument/formatting' Type='OmniSharp.Extensions.LanguageServer.Protocol.Models.DocumentFormattingParams' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Response value was OmniSharp.Extensions.LanguageServer.Protocol.Models.TextEditContainer | Type='OmniSharp.Extensions.LanguageServer.Protocol.Models.TextEditContainer' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Finished: Routing Request (15) textDocument/formatting in 33ms | Id='15' Method='textDocument/formatting' ElapsedMilliseconds='33' OmniSharp.Extensions.JsonRpc.InputHandler: Finished: Processing request textDocument/formatting 15 in 33ms | Method='textDocument/formatting' ResponseId='15' ElapsedMilliseconds='33' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Finding descriptors for textDocument/didChange | Method='textDocument/didChange' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Found attributes 1, razor::file:///d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml | Count='1' Attributes='razor::file:///d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Looking for handler for descriptors textDocument/didChange | Method='textDocument/didChange' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Checking handler textDocument/didChange:Microsoft.AspNetCore.Razor.LanguageServer.RazorDocumentSynchronizationEndpoint | Method='textDocument/didChange' Handler='Microsoft.AspNetCore.Razor.LanguageServer.RazorDocumentSynchronizationEndpoint' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Registration options OmniSharp.Extensions.LanguageServer.Protocol.Models.TextDocumentChangeRegistrationOptions | OptionsName='OmniSharp.Extensions.LanguageServer.Protocol.Models.TextDocumentChangeRegistrationOptions' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Document Selector [**/*.{cshtml,razor}] | DocumentSelector='[**/*.{cshtml,razor}]' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Handler Selected: Microsoft.AspNetCore.Razor.LanguageServer.RazorDocumentSynchronizationEndpoint via [**/*.{cshtml,razor}] (targeting OmniSharp.Extensions.JsonRpc.IJsonRpcNotificationHandler`1[[OmniSharp.Extensions.LanguageServer.Protocol.Models.DidChangeTextDocumentParams, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022]]) | Handler='Microsoft.AspNetCore.Razor.LanguageServer.RazorDocumentSynchronizationEndpoint' Id='' DocumentSelector='[**/*.{cshtml,razor}]' HandlerInterface='OmniSharp.Extensions.JsonRpc.IJsonRpcNotificationHandler`1[[OmniSharp.Extensions.LanguageServer.Protocol.Models.DidChangeTextDocumentParams, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022]]' OmniSharp.Extensions.JsonRpc.ProcessScheduler: Swapping from Parallel to Serial | From='Parallel' To='Serial' OmniSharp.Extensions.JsonRpc.ProcessScheduler: Completing existing request process type Parallel | Type='Parallel' OmniSharp.Extensions.JsonRpc.ProcessScheduler: Queueing Serial:textDocument/didChange request for processing | Type='Serial' Name='textDocument/didChange' OmniSharp.Extensions.JsonRpc.InputHandler: Starting: Processing notification textDocument/didChange | Method='textDocument/didChange' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Starting: Routing Notification textDocument/didChange | Method='textDocument/didChange' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Converting params for Notification textDocument/didChange to OmniSharp.Extensions.LanguageServer.Protocol.Models.DidChangeTextDocumentParams | Method='textDocument/didChange' Type='OmniSharp.Extensions.LanguageServer.Protocol.Models.DidChangeTextDocumentParams' Microsoft.AspNetCore.Razor.LanguageServer.RazorDocumentSynchronizationEndpoint: Applying TextChange: { [29..29), " " } | Microsoft.AspNetCore.Razor.LanguageServer.RazorDocumentSynchronizationEndpoint: Applying TextChange: { [28..28), " " } | Microsoft.AspNetCore.Razor.LanguageServer.RazorDocumentSynchronizationEndpoint: Applying TextChange: { [27..27), " " } | Microsoft.AspNetCore.Razor.LanguageServer.RazorDocumentSynchronizationEndpoint: Applying TextChange: { [26..26), " " } | Microsoft.AspNetCore.Razor.LanguageServer.ProjectSystem.DefaultRazorProjectService: Updating document 'd:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml'. | OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Finished: Routing Notification textDocument/didChange in 5ms | Method='textDocument/didChange' ElapsedMilliseconds='5' Microsoft.AspNetCore.Razor.LanguageServer.DefaultGeneratedDocumentPublisher: Updating C# buffer of d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml to correspond with host document version 7. 2583 -> 2587 = Change delta of 4 via 1 text changes. | 0='d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml' 1='7' 2='2583' 3='2587' 4='4' 5='1' [Client - 11:43:30 PM] Updating the C# document for Razor file 'd:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml' (7) [Client - 11:43:30 PM] Notifying document 'd:\Downloads\aspnet-vscode-issues-master\Pages\Index.cshtml' changed 'csharpChanged' OmniSharp.Extensions.JsonRpc.InputHandler: Finished: Processing notification textDocument/didChange in 5ms | Method='textDocument/didChange' ElapsedMilliseconds='5' Microsoft.AspNetCore.Razor.LanguageServer.DefaultGeneratedDocumentPublisher: Updating HTML buffer of d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml to correspond with host document version 7. 255 -> 259 = Change delta of 4 via 1 text changes. | 0='d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml' 1='7' 2='255' 3='259' 4='4' 5='1' [Client - 11:43:30 PM] Updating the HTML document for Razor file 'd:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml' (7) [Client - 11:43:30 PM] Notifying document 'd:\Downloads\aspnet-vscode-issues-master\Pages\Index.cshtml' changed 'htmlChanged' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Finding descriptors for textDocument/didSave | Method='textDocument/didSave' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Found attributes 1, razor::file:///d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml | Count='1' Attributes='razor::file:///d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Looking for handler for descriptors textDocument/didSave | Method='textDocument/didSave' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Checking handler textDocument/didSave:Microsoft.AspNetCore.Razor.LanguageServer.RazorDocumentSynchronizationEndpoint | Method='textDocument/didSave' Handler='Microsoft.AspNetCore.Razor.LanguageServer.RazorDocumentSynchronizationEndpoint' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Registration options OmniSharp.Extensions.LanguageServer.Protocol.Models.TextDocumentSaveRegistrationOptions | OptionsName='OmniSharp.Extensions.LanguageServer.Protocol.Models.TextDocumentSaveRegistrationOptions' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Document Selector [**/*.{cshtml,razor}] | DocumentSelector='[**/*.{cshtml,razor}]' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Handler Selected: Microsoft.AspNetCore.Razor.LanguageServer.RazorDocumentSynchronizationEndpoint via [**/*.{cshtml,razor}] (targeting OmniSharp.Extensions.JsonRpc.IJsonRpcNotificationHandler`1[[OmniSharp.Extensions.LanguageServer.Protocol.Models.DidSaveTextDocumentParams, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022]]) | Handler='Microsoft.AspNetCore.Razor.LanguageServer.RazorDocumentSynchronizationEndpoint' Id='' DocumentSelector='[**/*.{cshtml,razor}]' HandlerInterface='OmniSharp.Extensions.JsonRpc.IJsonRpcNotificationHandler`1[[OmniSharp.Extensions.LanguageServer.Protocol.Models.DidSaveTextDocumentParams, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022]]' OmniSharp.Extensions.JsonRpc.ProcessScheduler: Queueing Serial:textDocument/didSave request for processing | Type='Serial' Name='textDocument/didSave' OmniSharp.Extensions.JsonRpc.InputHandler: Starting: Processing notification textDocument/didSave | Method='textDocument/didSave' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Starting: Routing Notification textDocument/didSave | Method='textDocument/didSave' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Converting params for Notification textDocument/didSave to OmniSharp.Extensions.LanguageServer.Protocol.Models.DidSaveTextDocumentParams | Method='textDocument/didSave' Type='OmniSharp.Extensions.LanguageServer.Protocol.Models.DidSaveTextDocumentParams' [Info - 11:43:30 PM] Microsoft.AspNetCore.Razor.LanguageServer.RazorDocumentSynchronizationEndpoint: Saved Document d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml | OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Finished: Routing Notification textDocument/didSave in 0ms | Method='textDocument/didSave' ElapsedMilliseconds='0' OmniSharp.Extensions.JsonRpc.InputHandler: Finished: Processing notification textDocument/didSave in 0ms | Method='textDocument/didSave' ElapsedMilliseconds='0' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Finding descriptors for textDocument/semanticTokens/edits | Method='textDocument/semanticTokens/edits' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Found attributes 1, razor::file:///d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml | Count='1' Attributes='razor::file:///d:/Downloads/aspnet-vscode-issues-master/Pages/Index.cshtml' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Looking for handler for descriptors textDocument/semanticTokens/edits | Method='textDocument/semanticTokens/edits' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Checking handler textDocument/semanticTokens/edits:Microsoft.AspNetCore.Razor.LanguageServer.Semantic.RazorSemanticTokensEndpoint | Method='textDocument/semanticTokens/edits' Handler='Microsoft.AspNetCore.Razor.LanguageServer.Semantic.RazorSemanticTokensEndpoint' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Registration options OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensRegistrationOptions | OptionsName='OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensRegistrationOptions' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Document Selector [**/*.{cshtml,razor}] | DocumentSelector='[**/*.{cshtml,razor}]' OmniSharp.Extensions.LanguageServer.Server.Matchers.TextDocumentMatcher: Handler Selected: Microsoft.AspNetCore.Razor.LanguageServer.Semantic.RazorSemanticTokensEndpoint via [**/*.{cshtml,razor}] (targeting OmniSharp.Extensions.JsonRpc.IJsonRpcRequestHandler`2[[OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensDeltaParams, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022],[System.Nullable`1[[OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensFullOrDelta, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022]], System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]) | Handler='Microsoft.AspNetCore.Razor.LanguageServer.Semantic.RazorSemanticTokensEndpoint' Id='' DocumentSelector='[**/*.{cshtml,razor}]' HandlerInterface='OmniSharp.Extensions.JsonRpc.IJsonRpcRequestHandler`2[[OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensDeltaParams, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022],[System.Nullable`1[[OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensFullOrDelta, OmniSharp.Extensions.LanguageProtocol, Version=0.18.0.0, Culture=neutral, PublicKeyToken=6d868dff454e6022]], System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]' OmniSharp.Extensions.JsonRpc.ProcessScheduler: Swapping from Serial to Parallel | From='Serial' To='Parallel' OmniSharp.Extensions.JsonRpc.ProcessScheduler: Completing existing request process type Serial | Type='Serial' OmniSharp.Extensions.JsonRpc.ProcessScheduler: Queueing Parallel:textDocument/semanticTokens/edits:16 request for processing | Type='Parallel' Name='textDocument/semanticTokens/edits:16' OmniSharp.Extensions.JsonRpc.InputHandler: Starting: Processing request textDocument/semanticTokens/edits 16 | Method='textDocument/semanticTokens/edits' ResponseId='16' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Starting: Routing Request (16) textDocument/semanticTokens/edits | Id='16' Method='textDocument/semanticTokens/edits' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Converting params for Request (16) textDocument/semanticTokens/edits to OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensDeltaParams | Id='16' Method='textDocument/semanticTokens/edits' Type='OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensDeltaParams' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Converting params for Notification textDocument/semanticTokens/edits to OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensDeltaParams | Method='textDocument/semanticTokens/edits' Type='OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensDeltaParams' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Response value was OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensFullOrDelta | Type='OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals.SemanticTokensFullOrDelta' OmniSharp.Extensions.LanguageServer.Shared.LspRequestRouter: Finished: Routing Request (16) textDocument/semanticTokens/edits in 3ms | Id='16' Method='textDocument/semanticTokens/edits' ElapsedMilliseconds='3' OmniSharp.Extensions.JsonRpc.InputHandler: Finished: Processing request textDocument/semanticTokens/edits 16 in 3ms | Method='textDocument/semanticTokens/edits' ResponseId='16' ElapsedMilliseconds='3' ```
NTaylorMullen commented 3 years ago

Thanks for the traces @bryanjhv! Ya I validated that things didn't break down for normal crlf cases which thankfully they don't; however, was definitely able to reproduce after changing the file's crlf -> lf.

jonathanlamela commented 2 years ago

Hi to everyone, I've the same problem on my vscode on Mac Os M1. When I save , with the option Format on Save, the html code wrapped with @{} is formatted with bad identation. I hope the bug is as soon as solved. Thanks for your work

image

davidwengier commented 1 year ago

Another report: https://github.com/OmniSharp/omnisharp-vscode/issues/5327

rfrancisco commented 1 year ago

Hi to everyone, I've the same problem on my vscode on Mac Os M1. When I save , with the option Format on Save, the html code wrapped with @{} is formatted with bad identation. I hope the bug is as soon as solved. Thanks for your work

image

Same thing here. Also on a M1 Mac.

TheElegantCoding commented 1 year ago

same error here with index.razor file

image