tag:crieit.net,2005:https://crieit.net/tags/LanguageServerProtocol/feed
「LanguageServerProtocol」の記事 - Crieit
Crieitでタグ「LanguageServerProtocol」に投稿された最近の記事
2019-02-18T10:39:14+09:00
https://crieit.net/tags/LanguageServerProtocol/feed
tag:crieit.net,2005:PublicArticle/14807
2019-02-18T09:52:00+09:00
2019-02-18T10:39:14+09:00
https://crieit.net/posts/gopls-golps-bingo-gopath-panic
gopls(golsp)でもbingoでも、gopathの下でなかったらただpanicで終了する
<p>この記事は以下のバージョンで確認した内容です</p>
<ul>
<li>go version 1.11</li>
<li><code>GO111MODULE</code>が<code>ON</code>ではない</li>
<li>gopls <a target="_blank" rel="nofollow noopener" href="https://go.googlesource.com/tools/+/8dcb7bc8c7fe0a895995c76c721cef79419ac98a">golang.org/x/tools/cmd/gopls</a> commit: 8dcb7bc</li>
</ul>
<hr />
<p>VimでGo言語の入力補完がしたくて、vim-lspとgoplsをインストールした。<br />
<code>.go</code>ファイルを開いて動作の確認をしようとしたが補完候補が出なかった。</p>
<p>vim-lspのログを見ると、ファイルを開いたときの一連の処理でgoplsが終了していた。<br />
<code>panic: runtime error: invalid memory address or nil pointer dereference</code></p>
<h3>原因は、<code>.go</code>ファイルがgopath以下のディレクトリになかったためだった。</h3>
<p>Vimの補完プラグインを試すことに注意が向いていたので、golangの基本的なことを忘れていた。</p>
<p>※ <a target="_blank" rel="nofollow noopener" href="https://github.com/golang/tools/blob/b258f6da23835bf37e95cc50af792447c7c67fe4/cmd/golsp/main.go#L5-L8">goplsは、golspから名前が変わったもの</a></p>
<hr />
<h4>開いた<code>.go</code>ファイルがgopath下になかったときのvim-lspのログ</h4>
<pre><code>Mon 18 Feb 2019 08:53:17 AM +09:["lsp#register_server","server registered","go-lang"]
... (中略) ...
Mon 18 Feb 2019 08:53:17 AM +09:["s:update_file_content()",1]
Mon 18 Feb 2019 08:53:17 AM +09:["--->",1,"go-lang",{"method":"textDocument/didOpen","params":{"textDocument":{"uri":"file:///home/user/main.go","version":1,"languageId":"go","text":"\n"<span>}</span><span>}</span>}]
Mon 18 Feb 2019 08:53:17 AM +09:[{"response":{"data":{"path":"file:///home/user/main.go","__data__":"vim-lsp","filetype":"go","server_name":"go-lang"},"message":"textDocument/open sent"<span>}</span><span>}</span>]
Mon 18 Feb 2019 08:53:17 AM +09:[{"response":{"data":{"path":"file:///home/user/main.go","__data__":"vim-lsp","server_name":"go-lang"},"message":"not dirty"<span>}</span><span>}</span>]
Mon 18 Feb 2019 08:53:17 AM +09:["<---(stderr)",1,"go-lang",["[Trace - 8:53:17 AM] Sending notification 'textDocument/didOpen'.\r","Params: {\"textDocument\":{\"uri\":\"file:///home/user/main.go\",\"version\":1,\"languageId\":\"go\",\"text\":\"\\n\"<span>}</span><span>}</span>\r","\r","\r",""]]
Mon 18 Feb 2019 08:53:17 AM +09:["<---(stderr)",1,"go-lang",["panic: runtime error: invalid memory address or nil pointer dereference","[signal SIGSEGV: segmentation violation code=0x1 addr=0x50 pc=0x6e894d]","","goroutine 7 [running]:","golang.org/x/tools/internal/lsp/source.Diagnostics(0x8b4f00, 0xc00001a0d8, 0x8b5040, 0xc00007e090, 0xc000018ce0, 0x1d, 0xc000034740, 0x1, 0x5d789e)","\t/home/user/gopath/src/golang.org/x/tools/internal/lsp/source/diagnostics.go:56 +0xcd","golang.org/x/tools/internal/lsp.(*server).cacheAndDiagnose.func1(0x8b4f00, 0xc00001a0d8, 0xc000051480, 0xc000018ce0, 0x1d)","\t/home/user/gopath/src/golang.org/x/tools/internal/lsp/diagnostics.go:24 +0x81","created by golang.org/x/tools/internal/lsp.(*server).cacheAndDiagnose","\t/home/user/gopath/src/golang.org/x/tools/internal/lsp/diagnostics.go:23 +0x13c",""]]
Mon 18 Feb 2019 08:53:17 AM +09:["s:on_exit",1,"go-lang","exited",2]
Mon 18 Feb 2019 08:53:20 AM +09:["s:on_text_document_did_close()",1]
</code></pre>
あぜち(おばあちゃん)