Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"Roslyn server stopped" when the file doesn't have a new line at EOF #27

Open
tuliopaim opened this issue Aug 2, 2024 · 17 comments
Open

Comments

@tuliopaim
Copy link

tuliopaim commented Aug 2, 2024

In the company where I work, they have this weird lint rule of not allowing any file to have an empty line at the end of the file.

Every time I go to the end of the file and add a new line, the LSP server crashes, and as :LspRestart doesn't work, I have to quit and re-open neovim.

To reproduce:

  • Create a file with some class and remove the last line
  • Press G and o to go to the EOF and add a new line
    image
  • See the error in :messages

Stopping roslyn process
Roslyn server stopped

@seblj
Copy link
Owner

seblj commented Aug 2, 2024

I can't reproduce. What is the log from the server? :LspLog

@tuliopaim
Copy link
Author

I can't reproduce. What is the log from the server? :LspLog

Ok, I tried to reproduce it in a personal project just by removing the last line, but I couldn't.
So I created this .editorconfig file in the root of the project:

root = true

[*.cs]

# New line preferences
insert_final_newline = false

Then after running the dotnet format command, you can then see in the git diff:

image

The LspLog:

[ERROR][2024-08-02 12:00:53] ...lsp/handlers.lua:623	"[LanguageServerHost] System.ArgumentException: Range={ Start={ Line=11, Character=1 }, End={ Line=12, Character=0 } }. text.Length=209. text.Lines.Count=12\n ---> System.ArgumentOutOfRangeException: The requested line number 12 must be less than the number of lines 12. (Parameter 'Line')\n   at Microsoft.CodeAnalysis.Text.TextLineCollection.GetPosition(LinePosition position) in /_/src/Compilers/Core/Portable/Text/TextLineCollection.cs:line 67\n   at Microsoft.CodeAnalysis.Text.TextLineCollection.GetTextSpan(LinePositionSpan span) in /_/src/Compilers/Core/Portable/Text/TextLineCollection.cs:line 78\n   at Microsoft.CodeAnalysis.LanguageServer.ProtocolConversions.RangeToTextSpan(Range range, SourceText text) in /_/src/LanguageServer/Protocol/Extensions/ProtocolConversions.cs:line 330\n   --- End of inner exception stack trace ---\n   at Microsoft.CodeAnalysis.LanguageServer.ProtocolConversions.RangeToTextSpan(Range range, SourceText text) in /_/src/LanguageServer/Protocol/Extensions/ProtocolConversions.cs:line 335\n   at Microsoft.CodeAnalysis.LanguageServer.ProtocolConversions.ContentChangeEventToTextChange(TextDocumentContentChangeEvent changeEvent, SourceText text) in /_/src/LanguageServer/Protocol/Extensions/ProtocolConversions.cs:line 365\n   at System.Linq.Enumerable.SelectEnumerableIterator`2.MoveNext()\n   at System.Collections.Immutable.ImmutableArray`1.Builder.AddRange(IEnumerable`1 items)\n   at Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1.AddRange(IEnumerable`1 items) in /_/src/Dependencies/PooledObjects/ArrayBuilder.cs:line 624\n   at Roslyn.Utilities.EnumerableExtensions.SelectAsArray[TSource,TResult](IEnumerable`1 source, Func`2 selector) in /_/src/Compilers/Core/Portable/InternalUtilities/EnumerableExtensions.cs:line 355\n   at Microsoft.CodeAnalysis.LanguageServer.Handler.DocumentChanges.DidChangeHandler.GetUpdatedSourceText(TextDocumentContentChangeEvent[] contentChanges, SourceText text) in /_/src/LanguageServer/Protocol/Handler/DocumentChanges/DidChangeHandler.cs:line 70\n   at Microsoft.CodeAnalysis.LanguageServer.Handler.DocumentChanges.DidChangeHandler.HandleRequestAsync(DidChangeTextDocumentParams request, RequestContext context, CancellationToken cancellationToken) in /_/src/LanguageServer/Protocol/Handler/DocumentChanges/DidChangeHandler.cs:line 33\n   at Microsoft.CommonLanguageServerProtocol.Framework.QueueItem`1.StartRequestAsync[TRequest,TResponse](TRequest request, TRequestContext context, IMethodHandler handler, String language, CancellationToken cancellationToken) in /_/src/LanguageServer/Microsoft.CommonLanguageServerProtocol.Framework/QueueItem.cs:line 187"
[ERROR][2024-08-02 12:00:53] ...lsp/handlers.lua:623	"[LanguageServerHost] System.ArgumentException: Range={ Start={ Line=11, Character=1 }, End={ Line=12, Character=0 } }. text.Length=209. text.Lines.Count=12\n ---> System.ArgumentOutOfRangeException: The requested line number 12 must be less than the number of lines 12. (Parameter 'Line')\n   at Microsoft.CodeAnalysis.Text.TextLineCollection.GetPosition(LinePosition position) in /_/src/Compilers/Core/Portable/Text/TextLineCollection.cs:line 67\n   at Microsoft.CodeAnalysis.Text.TextLineCollection.GetTextSpan(LinePositionSpan span) in /_/src/Compilers/Core/Portable/Text/TextLineCollection.cs:line 78\n   at Microsoft.CodeAnalysis.LanguageServer.ProtocolConversions.RangeToTextSpan(Range range, SourceText text) in /_/src/LanguageServer/Protocol/Extensions/ProtocolConversions.cs:line 330\n   --- End of inner exception stack trace ---\n   at Microsoft.CodeAnalysis.LanguageServer.ProtocolConversions.RangeToTextSpan(Range range, SourceText text) in /_/src/LanguageServer/Protocol/Extensions/ProtocolConversions.cs:line 335\n   at Microsoft.CodeAnalysis.LanguageServer.ProtocolConversions.ContentChangeEventToTextChange(TextDocumentContentChangeEvent changeEvent, SourceText text) in /_/src/LanguageServer/Protocol/Extensions/ProtocolConversions.cs:line 365\n   at System.Linq.Enumerable.SelectEnumerableIterator`2.MoveNext()\n   at System.Collections.Immutable.ImmutableArray`1.Builder.AddRange(IEnumerable`1 items)\n   at Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1.AddRange(IEnumerable`1 items) in /_/src/Dependencies/PooledObjects/ArrayBuilder.cs:line 624\n   at Roslyn.Utilities.EnumerableExtensions.SelectAsArray[TSource,TResult](IEnumerable`1 source, Func`2 selector) in /_/src/Compilers/Core/Portable/InternalUtilities/EnumerableExtensions.cs:line 355\n   at Microsoft.CodeAnalysis.LanguageServer.Handler.DocumentChanges.DidChangeHandler.GetUpdatedSourceText(TextDocumentContentChangeEvent[] contentChanges, SourceText text) in /_/src/LanguageServer/Protocol/Handler/DocumentChanges/DidChangeHandler.cs:line 70\n   at Microsoft.CodeAnalysis.LanguageServer.Handler.DocumentChanges.DidChangeHandler.HandleRequestAsync(DidChangeTextDocumentParams request, RequestContext context, CancellationToken cancellationToken) in /_/src/LanguageServer/Protocol/Handler/DocumentChanges/DidChangeHandler.cs:line 33\n   at Microsoft.CommonLanguageServerProtocol.Framework.QueueItem`1.StartRequestAsync[TRequest,TResponse](TRequest request, TRequestContext context, IMethodHandler handler, String language, CancellationToken cancellationToken) in /_/src/LanguageServer/Microsoft.CommonLanguageServerProtocol.Framework/QueueItem.cs:line 187\n   at Microsoft.CommonLanguageServerProtocol.Framework.QueueItem`1.StartRequestAsync[TRequest,TResponse](TRequest request, TRequestContext context, IMethodHandler handler, String language, CancellationToken cancellationToken) in /_/src/LanguageServer/Microsoft.CommonLanguageServerProtocol.Framework/QueueItem.cs:line 241\n   at Microsoft.CommonLanguageServerProtocol.Framework.RequestExecutionQueue`1.ProcessQueueCoreAsync[TRequest,TResponse](IQueueItem`1 work, IMethodHandler handler, RequestHandlerMetadata metadata, ConcurrentDictionary`2 concurrentlyExecutingTasks, CancellationTokenSource currentWorkCts, CancellationToken cancellationToken) in /_/src/LanguageServer/Microsoft.CommonLanguageServerProtocol.Framework/RequestExecutionQueue.cs:line 349\n   at Microsoft.CommonLanguageServerProtocol.Framework.RequestExecutionQueue`1.InvokeProcessCoreAsync(IQueueItem`1 work, RequestHandlerMetadata metadata, IMethodHandler handler, MethodInfo methodInfo, ConcurrentDictionary`2 concurrentlyExecutingTasks, CancellationTokenSource currentWorkCts, CancellationToken cancellationToken) in /_/src/LanguageServer/Microsoft.CommonLanguageServerProtocol.Framework/RequestExecutionQueue.cs:line 302\n   at Microsoft.CommonLanguageServerProtocol.Framework.RequestExecutionQueue`1.ProcessQueueAsync() in /_/src/LanguageServer/Microsoft.CommonLanguageServerProtocol.Framework/RequestExecutionQueue.cs:line 254"

@tuliopaim
Copy link
Author

@seblj I found out about this fork yesterday, thanks a lot for it.

One other issue, I'm using the latest LanguageServer version, and the diagnostics are not showing, should I open another issue? What version should I use?

$ dotnet Microsoft.CodeAnalysis.LanguageServer.dll --version
4.12.0-2.24401.2+eafb7892671c3917bc1c060c185211740eeb55ce

Saw this error in LspLog:

[ERROR][2024-08-02 12:08:39] ...lsp/handlers.lua:623	"[LanguageServerProjectSystem] Error while loading /home/tuliopaim/dev/tb/ems/AM-13809-scheduled-lambda/src/WebApi/WebAPI.csproj: Exception thrown: StreamJsonRpc.RemoteMethodNotFoundException: MethodNotFound\n   at StreamJsonRpc.JsonRpc.InvokeCoreAsync[TResult](RequestId id, String targetName, IReadOnlyList`1 arguments, IReadOnlyList`1 positionalArgumentDeclaredTypes, IReadOnlyDictionary`2 namedArgumentDeclaredTypes, CancellationToken cancellationToken, Boolean isParameterObject)\n   at Microsoft.CodeAnalysis.LanguageServer.HostWorkspace.RazorDynamicFileInfoProvider.GetDynamicFileInfoAsync(ProjectId projectId, String projectFilePath, String filePath, CancellationToken cancellationToken) in /_/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/RazorDynamicFileInfoProvider.cs:line 63\n   at Roslyn.Utilities.TaskExtensions.WaitAndGetResult_CanCallOnBackground[T](Task`1 task, CancellationToken cancellationToken) in /_/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Utilities/TaskExtensions.cs:line 56\n   at Microsoft.CodeAnalysis.Workspaces.ProjectSystem.ProjectSystemProject.AddDynamicSourceFile(String dynamicFilePath, ImmutableArray`1 folders) in /_/src/Workspaces/Core/Portable/Workspace/ProjectSystem/ProjectSystemProject.cs:line 826\n   at Microsoft.CodeAnalysis.LanguageServer.HostWorkspace.LoadedProject.<>c__DisplayClass15_0.<UpdateWithNewProjectInfoAsync>g__UpdateProjectSystemProjectCollection|16[T](IEnumerable`1 loadedCollection, IEnumerable`1 oldLoadedCollection, IEqualityComparer`1 comparer, Action`1 addItem, Action`1 removeItem, String logMessage) in /_/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/LoadedProject.cs:line 215\n   at Microsoft.CodeAnalysis.LanguageServer.HostWorkspace.LoadedProject.UpdateWithNewProjectInfoAsync(ProjectFileInfo newProjectInfo, ILogger logger) in /_/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/LoadedProject.cs:line 179\n   at Microsoft.CodeAnalysis.LanguageServer.HostWorkspace.LoadedProject.UpdateWithNewProjectInfoAsync(ProjectFileInfo newProjectInfo, ILogger logger) in /_/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/LoadedProject.cs:line 196\n   at Microsoft.CodeAnalysis.LanguageServer.HostWorkspace.LanguageServerProjectSystem.LoadOrReloadProjectAsync(ProjectToLoad projectToLoad, ToastErrorReporter toastErrorReporter, BuildHostProcessManager buildHostProcessManager, CancellationToken cancellationToken) in /_/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/LanguageServerProjectSystem.cs:line 284"

@seblj
Copy link
Owner

seblj commented Aug 2, 2024

Okay I was able to reproduce with the .editorconfig, so I can look into that. Cannot reproduce no diagnostics with the newest server. Make sure you actually make some edits in the buffer first. The diagnostics does not appear before this: #13

@seblj
Copy link
Owner

seblj commented Aug 2, 2024

This is probably a bug in neovim as I cannot reproduce this in vscode, and this plugin is mostly just a thin wrapper to be able to start the server (and a couple of extra handlers implemented). It looks like neovim is sending a didChange request with a range that causes the server to crash. It would probably help to debug what vscode is sending as a request. However, I tried to figure out a way to debug that a while ago, and I had no idea how to get the logs from vscode.

It might also be that neovim is behaving correctly (I am not sure), and the server just not adhering to the LSP spec. Wouldn't be the first time if so.

@tuliopaim
Copy link
Author

tuliopaim commented Aug 2, 2024

This is probably a bug in neovim as I cannot reproduce this in vscode, and this plugin is mostly just a thin wrapper to be able to start the server (and a couple of extra handlers implemented). It looks like neovim is sending a didChange request with a range that causes the server to crash. It would probably help to debug what vscode is sending as a request. However, I tried to figure out a way to debug that a while ago, and I had no idea how to get the logs from vscode.

It might also be that neovim is behaving correctly (I am not sure), and the server just not adhering to the LSP spec. Wouldn't be the first time if so.

Got it, I imagined that this was not an issue with this plugin... thanks for the investigation anyways.

Would be good if the :LspRestart worked tho.

@seblj
Copy link
Owner

seblj commented Aug 2, 2024

Yeah I agree, but I think that only works with language servers setup via nvim-lspconfig...

I think we can just leave this issue open if it's okay for you? Then I can potentially investigate it more if I get time at some point, and then potentially at least raise an issue where it belongs. Or maybe someone else notices the same thing, and they can easily see it, and maybe help if they want

@seblj seblj reopened this Aug 2, 2024
@tuliopaim
Copy link
Author

@seblj sure, I'd appreciate that.

About that other error:

2024-08-02.13-08-33.mp4
[ERROR][2024-08-02 13:08:40] ...lsp/handlers.lua:623	"[LanguageServerProjectSystem] Error while loading /home/tuliopaim/dev/personal/TradingChat/main/src/TradingChat.WebApp/TradingChat.WebApp.csproj: Exception thrown: StreamJsonRpc.RemoteMethodNotFoundException: MethodNotFound\n   at StreamJsonRpc.JsonRpc.InvokeCoreAsync[TResult](RequestId id, String targetName, IReadOnlyList`1 arguments, IReadOnlyList`1 positionalArgumentDeclaredTypes, IReadOnlyDictionary`2 namedArgumentDeclaredTypes, CancellationToken cancellationToken, Boolean isParameterObject)\n   at Microsoft.CodeAnalysis.LanguageServer.HostWorkspace.RazorDynamicFileInfoProvider.GetDynamicFileInfoAsync(ProjectId projectId, String projectFilePath, String filePath, CancellationToken cancellationToken) in /_/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/RazorDynamicFileInfoProvider.cs:line 63\n   at Roslyn.Utilities.TaskExtensions.WaitAndGetResult_CanCallOnBackground[T](Task`1 task, CancellationToken cancellationToken) in /_/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Utilities/TaskExtensions.cs:line 56\n   at Microsoft.CodeAnalysis.Workspaces.ProjectSystem.ProjectSystemProject.AddDynamicSourceFile(String dynamicFilePath, ImmutableArray`1 folders) in /_/src/Workspaces/Core/Portable/Workspace/ProjectSystem/ProjectSystemProject.cs:line 826\n   at Microsoft.CodeAnalysis.LanguageServer.HostWorkspace.LoadedProject.<>c__DisplayClass15_0.<UpdateWithNewProjectInfoAsync>g__UpdateProjectSystemProjectCollection|16[T](IEnumerable`1 loadedCollection, IEnumerable`1 oldLoadedCollection, IEqualityComparer`1 comparer, Action`1 addItem, Action`1 removeItem, String logMessage) in /_/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/LoadedProject.cs:line 215\n   at Microsoft.CodeAnalysis.LanguageServer.HostWorkspace.LoadedProject.UpdateWithNewProjectInfoAsync(ProjectFileInfo newProjectInfo, ILogger logger) in /_/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/LoadedProject.cs:line 179\n   at Microsoft.CodeAnalysis.LanguageServer.HostWorkspace.LoadedProject.UpdateWithNewProjectInfoAsync(ProjectFileInfo newProjectInfo, ILogger logger) in /_/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/LoadedProject.cs:line 196\n   at Microsoft.CodeAnalysis.LanguageServer.HostWorkspace.LanguageServerProjectSystem.LoadOrReloadProjectAsync(ProjectToLoad projectToLoad, ToastErrorReporter toastErrorReporter, BuildHostProcessManager buildHostProcessManager, CancellationToken cancellationToken) in /_/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/LanguageServerProjectSystem.cs:line 284"
[ERROR][2024-08-02 13:08:54] ...lsp/handlers.lua:623	"[LanguageServerProjectSystem] Error while loading /home/tuliopaim/dev/personal/TradingChat/main/src/TradingChat.WebApp/TradingChat.WebApp.csproj: Exception thrown: System.InvalidOperationException: We haven't been given a loaded project yet, so we can't provide the existing TFM. - file LoadedProject.cs line 69\n   at Roslyn.Utilities.Contract.Fail(String message, Int32 lineNumber, String filePath) in /_/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Utilities/Contract.cs:line 157\n   at Microsoft.CodeAnalysis.LanguageServer.HostWorkspace.LoadedProject.GetTargetFramework() in /_/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/LoadedProject.cs:line 69\n   at Microsoft.CodeAnalysis.LanguageServer.HostWorkspace.LanguageServerProjectSystem.<>c__DisplayClass19_1.<LoadOrReloadProjectAsync>b__3(LoadedProject p) in /_/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/LanguageServerProjectSystem.cs:line 256\n   at System.Collections.Generic.List`1.Find(Predicate`1 match)\n   at Microsoft.CodeAnalysis.LanguageServer.HostWorkspace.LanguageServerProjectSystem.LoadOrReloadProjectAsync(ProjectToLoad projectToLoad, ToastErrorReporter toastErrorReporter, BuildHostProcessManager buildHostProcessManager, CancellationToken cancellationToken) in /_/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/LanguageServerProjectSystem.cs:line 256"
[ERROR][2024-08-02 13:09:00] ...lsp/handlers.lua:623	"[LanguageServerProjectSystem] Error while loading /home/tuliopaim/dev/personal/TradingChat/main/src/TradingChat.WebApp/TradingChat.WebApp.csproj: Exception thrown: System.InvalidOperationException: We haven't been given a loaded project yet, so we can't provide the existing TFM. - file LoadedProject.cs line 69\n   at Roslyn.Utilities.Contract.Fail(String message, Int32 lineNumber, String filePath) in /_/src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/Utilities/Contract.cs:line 157\n   at Microsoft.CodeAnalysis.LanguageServer.HostWorkspace.LoadedProject.GetTargetFramework() in /_/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/LoadedProject.cs:line 69\n   at Microsoft.CodeAnalysis.LanguageServer.HostWorkspace.LanguageServerProjectSystem.<>c__DisplayClass19_1.<LoadOrReloadProjectAsync>b__3(LoadedProject p) in /_/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/LanguageServerProjectSystem.cs:line 256\n   at System.Collections.Generic.List`1.Find(Predicate`1 match)\n   at Microsoft.CodeAnalysis.LanguageServer.HostWorkspace.LanguageServerProjectSystem.LoadOrReloadProjectAsync(ProjectToLoad projectToLoad, ToastErrorReporter toastErrorReporter, BuildHostProcessManager buildHostProcessManager, CancellationToken cancellationToken) in /_/src/LanguageServer/Microsoft.CodeAnalysis.LanguageServer/HostWorkspace/LanguageServerProjectSystem.cs:line 256"

@seblj
Copy link
Owner

seblj commented Aug 2, 2024

Hmm, that is weird because it works in my projects at work🤔 it looks like the project is public, so I can have a look at testing it with that project. Could you could open another issue, attach the video and the output of the entire lsp log?

@tuliopaim
Copy link
Author

Hmm, that is weird because it works in my projects at work🤔 it looks like the project is public, so I can have a look at testing it with that project. Could you could open another issue, attach the video and the output of the entire lsp log?

Sure, Ill do it in a sec, but that's happening for all my projects, not just that one.

Just to be sure I'm not doing something completely stupid, that's all I did when moving from the other repo to this fork (+ upgrading to the latest CodeAnalysis.LanguageServer):

image

I'll also try to downgrade the CodeAnalysis.LanguageServer version.

@seblj
Copy link
Owner

seblj commented Aug 2, 2024

Ahaaaaa, I know what is wrong... To fix this in no time for you, you can just remove capabilities from the setup. I am already setting capabilities with cmp correctly, so no need to pass them in.

However, this really is a bug in my plugin though. No need to create a new issue if you haven't already. I will fix this right away.

UPDATE: Fixed in the latest commit

@tuliopaim
Copy link
Author

@seblj Thanks a lot man, now everything is perfect! Keep it up with the good work!

@kmoschcau
Copy link

Hi, I am also experiencing the server crashing when adding an empty line to the end of the file. This happens with server version 4.13.0-2.24554.8.
Here are the relevant LSP logs:

[ERROR][2024-11-05 10:24:18] ...lsp/handlers.lua:590	"[LanguageServerHost] System.ArgumentException: Range={ Start={ Line=22, Character=1 }, End={ Line=23, Character=0 } }. text.Length=872. text.Lines.Count=23\r\n ---> System.ArgumentOutOfRangeException: The requested line number 23 must be less than the number of lines 23. (Parameter 'Line')\r\n   at Microsoft.CodeAnalysis.Text.TextLineCollection.GetPosition(LinePosition position) in /_/src/Compilers/Core/Portable/Text/TextLineCollection.cs:line 67\r\n   at Microsoft.CodeAnalysis.Text.TextLineCollection.GetTextSpan(LinePositionSpan span) in /_/src/Compilers/Core/Portable/Text/TextLineCollection.cs:line 78\r\n   at Microsoft.CodeAnalysis.LanguageServer.ProtocolConversions.RangeToTextSpan(Range range, SourceText text) in /_/src/LanguageServer/Protocol/Extensions/ProtocolConversions.cs:line 306\r\n   --- End of inner exception stack trace ---\r\n   at Microsoft.CodeAnalysis.LanguageServer.ProtocolConversions.RangeToTextSpan(Range range, SourceText text) in /_/src/LanguageServer/Protocol/Extensions/ProtocolConversions.cs:line 311\r\n   at Microsoft.CodeAnalysis.LanguageServer.ProtocolConversions.ContentChangeEventToTextChange(TextDocumentContentChangeEvent changeEvent, SourceText text) in /_/src/LanguageServer/Protocol/Extensions/ProtocolConversions.cs:line 341\r\n   at System.Linq.Enumerable.SelectEnumerableIterator`2.MoveNext()\r\n   at System.Collections.Immutable.ImmutableArray`1.Builder.AddRange(IEnumerable`1 items)\r\n   at Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1.AddRange(IEnumerable`1 items) in /_/src/Dependencies/PooledObjects/ArrayBuilder.cs:line 624\r\n   at Roslyn.Utilities.EnumerableExtensions.SelectAsArray[TSource,TResult](IEnumerable`1 source, Func`2 selector) in /_/src/Compilers/Core/Portable/InternalUtilities/EnumerableExtensions.cs:line 356\r\n   at Microsoft.CodeAnalysis.LanguageServer.Handler.DocumentChanges.DidChangeHandler.GetUpdatedSourceText(TextDocumentContentChangeEvent[] contentChanges, SourceText text) in /_/src/LanguageServer/Protocol/Handler/DocumentChanges/DidChangeHandler.cs:line 70\r\n   at Microsoft.CodeAnalysis.LanguageServer.Handler.DocumentChanges.DidChangeHandler.HandleRequestAsync(DidChangeTextDocumentParams request, RequestContext context, CancellationToken cancellationToken) in /_/src/LanguageServer/Protocol/Handler/DocumentChanges/DidChangeHandler.cs:line 33\r\n   at Microsoft.CommonLanguageServerProtocol.Framework.QueueItem`1.StartRequestAsync[TRequest,TResponse](TRequest request, TRequestContext context, IMethodHandler handler, String language, CancellationToken cancellationToken) in /_/src/LanguageServer/Microsoft.CommonLanguageServerProtocol.Framework/QueueItem.cs:line 191"
[ERROR][2024-11-05 10:24:18] ...lsp/handlers.lua:590	"[LanguageServerHost] System.ArgumentException: Range={ Start={ Line=22, Character=1 }, End={ Line=23, Character=0 } }. text.Length=872. text.Lines.Count=23\r\n ---> System.ArgumentOutOfRangeException: The requested line number 23 must be less than the number of lines 23. (Parameter 'Line')\r\n   at Microsoft.CodeAnalysis.Text.TextLineCollection.GetPosition(LinePosition position) in /_/src/Compilers/Core/Portable/Text/TextLineCollection.cs:line 67\r\n   at Microsoft.CodeAnalysis.Text.TextLineCollection.GetTextSpan(LinePositionSpan span) in /_/src/Compilers/Core/Portable/Text/TextLineCollection.cs:line 78\r\n   at Microsoft.CodeAnalysis.LanguageServer.ProtocolConversions.RangeToTextSpan(Range range, SourceText text) in /_/src/LanguageServer/Protocol/Extensions/ProtocolConversions.cs:line 306\r\n   --- End of inner exception stack trace ---\r\n   at Microsoft.CodeAnalysis.LanguageServer.ProtocolConversions.RangeToTextSpan(Range range, SourceText text) in /_/src/LanguageServer/Protocol/Extensions/ProtocolConversions.cs:line 311\r\n   at Microsoft.CodeAnalysis.LanguageServer.ProtocolConversions.ContentChangeEventToTextChange(TextDocumentContentChangeEvent changeEvent, SourceText text) in /_/src/LanguageServer/Protocol/Extensions/ProtocolConversions.cs:line 341\r\n   at System.Linq.Enumerable.SelectEnumerableIterator`2.MoveNext()\r\n   at System.Collections.Immutable.ImmutableArray`1.Builder.AddRange(IEnumerable`1 items)\r\n   at Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1.AddRange(IEnumerable`1 items) in /_/src/Dependencies/PooledObjects/ArrayBuilder.cs:line 624\r\n   at Roslyn.Utilities.EnumerableExtensions.SelectAsArray[TSource,TResult](IEnumerable`1 source, Func`2 selector) in /_/src/Compilers/Core/Portable/InternalUtilities/EnumerableExtensions.cs:line 356\r\n   at Microsoft.CodeAnalysis.LanguageServer.Handler.DocumentChanges.DidChangeHandler.GetUpdatedSourceText(TextDocumentContentChangeEvent[] contentChanges, SourceText text) in /_/src/LanguageServer/Protocol/Handler/DocumentChanges/DidChangeHandler.cs:line 70\r\n   at Microsoft.CodeAnalysis.LanguageServer.Handler.DocumentChanges.DidChangeHandler.HandleRequestAsync(DidChangeTextDocumentParams request, RequestContext context, CancellationToken cancellationToken) in /_/src/LanguageServer/Protocol/Handler/DocumentChanges/DidChangeHandler.cs:line 33\r\n   at Microsoft.CommonLanguageServerProtocol.Framework.QueueItem`1.StartRequestAsync[TRequest,TResponse](TRequest request, TRequestContext context, IMethodHandler handler, String language, CancellationToken cancellationToken) in /_/src/LanguageServer/Microsoft.CommonLanguageServerProtocol.Framework/QueueItem.cs:line 191\r\n   at Microsoft.CommonLanguageServerProtocol.Framework.QueueItem`1.StartRequestAsync[TRequest,TResponse](TRequest request, TRequestContext context, IMethodHandler handler, String language, CancellationToken cancellationToken) in /_/src/LanguageServer/Microsoft.CommonLanguageServerProtocol.Framework/QueueItem.cs:line 245\r\n   at Microsoft.CodeAnalysis.LanguageServer.RoslynRequestExecutionQueue.WrapStartRequestTaskAsync(Task nonMutatingRequestTask, Boolean rethrowExceptions) in /_/src/LanguageServer/Protocol/RoslynRequestExecutionQueue.cs:line 40\r\n   at Microsoft.CommonLanguageServerProtocol.Framework.RequestExecutionQueue`1.ProcessQueueCoreAsync[TRequest,TResponse](IQueueItem`1 work, IMethodHandler handler, RequestHandlerMetadata metadata, ConcurrentDictionary`2 concurrentlyExecutingTasks, CancellationTokenSource currentWorkCts, CancellationToken cancellationToken) in /_/src/LanguageServer/Microsoft.CommonLanguageServerProtocol.Framework/RequestExecutionQueue.cs:line 367\r\n   at Microsoft.CommonLanguageServerProtocol.Framework.RequestExecutionQueue`1.InvokeProcessCoreAsync(IQueueItem`1 work, RequestHandlerMetadata metadata, IMethodHandler handler, MethodInfo methodInfo, ConcurrentDictionary`2 concurrentlyExecutingTasks, CancellationTokenSource currentWorkCts, CancellationToken cancellationToken) in /_/src/LanguageServer/Microsoft.CommonLanguageServerProtocol.Framework/RequestExecutionQueue.cs:line 320\r\n   at Microsoft.CommonLanguageServerProtocol.Framework.RequestExecutionQueue`1.ProcessQueueAsync() in /_/src/LanguageServer/Microsoft.CommonLanguageServerProtocol.Framework/RequestExecutionQueue.cs:line 272"

@seblj
Copy link
Owner

seblj commented Nov 5, 2024

Haven't had any time/prioritized to look into this yet as there is nothing I can do in this repo. The issue must be in either neovim or roslyn.

@kmoschcau
Copy link

kmoschcau commented Nov 21, 2024

I did some more testing and I think we can rule out neovim's relevant options. The error seems to happen regardless of their value. I tested 'endofline', 'fixendofline', 'fileformat' and 'bomb'. Since this is the only LSP so far that shows this problem, I would bet on roslyn being off-spec. Might be we could file an issue on their repo or we just handle this case in roslyn.nvim.

@seblj
Copy link
Owner

seblj commented Nov 21, 2024

Yeah I think an issue to roslyn would be great. The issue should have some details in it though.

For example, the logs for the request, what neovims response is, and such.

It would also be interesting to see the logs of the communication between vscode and roslyn, to see how they deal with this. However, I don't know vscode well enough to configure it to see the logs for requests and response.

I could also be open to a PR with a hacky fix, if it is very self container, doesn't break anything, and does not require a lot of code. I have no idea how it could look like though

@drzbida
Copy link

drzbida commented Dec 3, 2024

The server can crash in other scenarios without any editorconfig, they are very likely related to each other and possibly the original issue

1

Yank / copy a line, a whole file, whatever you want
Go into a cs file and select the whole file with ggVG
If you paste, the server crashes; it doesn't matter what the content of the pasted content is, it crashes even if you copy the whole file and then paste over the whole file

If even the first or last line is excluded from the selection, it doesn't crash anymore.

Interestingly, if I paste from the terminal emulator with control + shift + v, it doesn't crash and the lsp works. That is, unless you delete the last line or undo the paste, at which point the server crashes.

2

Delete the content of a cs file
LSP works for the first line
If you create a new line with "o", the server crashes
The server works as long as you don't create new lines from normal mode. If you only create new lines with "enter" from insert mode, it keeps working.

3

Create a new cs file
Enter insert mode on the first line, type something
Enter normal mode, delete line with dd
Press o
Server crashes

Simply adding an empty line at the end in normal scenarios is somehow not enough for it to crash for me

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants