julia-vscode / LanguageServer.jl

An implementation of the Microsoft Language Server Protocol for the Julia language.
Other
355 stars 75 forks source link

get_offset crashed #593

Open davidanthoff opened 4 years ago

davidanthoff commented 4 years ago

From [crash reporting]().

Error message:

get_offset crashed. More diagnostics:
line=2
character=1
position(io)=33
line_offsets='[0, 13, 25]'
text='aaaaaaaaaaaa
aaaaaaaaaaa
aaaaaaaa'

original_error=ERROR: EOFError: read end of file
Stacktrace:
 [1] read at ./iobuffer.jl:212 [inlined]
 [2] read at ./io.jl:697 [inlined]
 [3] get_offset(::LanguageServer.Document, ::Int64, ::Int64) at /Users/XXX/.vscode/extensions/julialang.language-julia-0.14.17/scripts/languageserver/packages/LanguageServer/src/document.jl:78
 [4] get_offset at /Users/XXX/.vscode/extensions/julialang.language-julia-0.14.17/scripts/languageserver/packages/LanguageServer/src/document.jl:97 [inlined]
 [5] process(::LanguageServer.JSONRPC.Request{Val{Symbol("textDocument/completion")},LanguageServer.CompletionParams}, ::LanguageServerInstance) at /Users/XXX/.vscode/extensions/julialang.language-julia-0.14.17/scripts/languageserver/packages/LanguageServer/src/requests/completions.jl:5
 [6] run(::LanguageServerInstance) at /Users/XXX/.vscode/extensions/julialang.language-julia-0.14.17/scripts/languageserver/packages/LanguageServer/src/languageserverinstance.jl:233
 [7] top-level scope at /Users/XXX/.vscode/extensions/julialang.language-julia-0.14.17/scripts/languageserver/main.jl:28
 [8] include at ./boot.jl:328 [inlined]
 [9] include_relative(::Module, ::String) at ./loading.jl:1105
 [10] include(::Module, ::String) at ./Base.jl:31
 [11] exec_options(::Base.JLOptions) at ./client.jl:287
 [12] _start() at ./client.jl:460 

Stack trace:

ErrorException:
   at error(::String) (error.jl33)
   at get_offset(::LanguageServer.Document, ::Int64, ::Int64) (./scripts/languageserver/packages/LanguageServer/src/document.jl94)
   at get_offset (./scripts/languageserver/packages/LanguageServer/src/document.jl97)
   at process(::LanguageServer.JSONRPC.Request{Val{Symbol("textDocument/completion")},LanguageServer.CompletionParams}, ::LanguageServerInstance) (./scripts/languageserver/packages/LanguageServer/src/requests/completions.jl5)
   at run(::LanguageServerInstance) (./scripts/languageserver/packages/LanguageServer/src/languageserverinstance.jl233)
   at top-level scope (./scripts/languageserver/main.jl28)
   at include (boot.jl328)
   at include_relative(::Module, ::String) (loading.jl1105)
   at include(::Module, ::String) (Base.jl31)
   at exec_options(::Base.JLOptions) (client.jl287)
   at _start() (client.jl460)
davidanthoff commented 4 years ago

another example, that is maybe even more telling:

get_offset crashed. More diagnostics:
line=0
character=1
position(io)=0
line_offsets='[0]'
text=''
davidanthoff commented 4 years ago

And another one:

get_offset crashed. More diagnostics:
line=4
character=11
position(io)=0
line_offsets='[0]'
text=''
davidanthoff commented 4 years ago

So my working assumption is that we fixed the text sync now because we haven't seen any crash reports from the didSave test so far.

But these requests seem really odd, asking for something on line 4 in an empty doc?

Maybe we wait a little longer to see whether we do get some crash reports from didSave, just to be sure?

davidanthoff commented 4 years ago

I also asked over in the official repo about this case: https://github.com/microsoft/language-server-protocol/issues/946.

davidanthoff commented 4 years ago

For now we're going to wait whether VS Code itself can add some checks to make sure we never receive invalid positions, details are tracked in microsoft/language-server-protocol#946.

goulf-3m commented 1 month ago

Some info, working with Neovim:

Write some julia code:

function xxx()
end

Run `:w' to save to a file. Then add another function, but not written to file. Namely, the buffer in Neovim has

function xxx()
end
function yyy()
end

Then I ask Neovim to format the buffer (with the conform plugin, which will use julia-lsp), this error will occur. Julia-lsp will read the code for yyy from file, which does not exist!

Amend:

from the backtrace, textDocument_documentHighlight_request triggered this error.