LSP 実装メモ(gopls cache `Snapshot` 編)

前回 tennashi.hatenablog.com 先週はやる気が消失したためお休みした。 前回のまとめ ひたすらに (*Session).NewView() からの呼び出しを追っていった。 今回は残った (*snapshot).load() メソッドの処理を読む。 が、全て詳細に読むと長くなりすぎてしまう…

LSP 実装メモ(gopls cache `View` 生成詳解編)

前回 tennashi.hatenablog.com 引き続き、gopls の cache 実装を読む。 前回のまとめ View 実装のフィールドとその生成タイミングを見ることで、ディレクトリ単位で何かしらの cache をしていることが分かった。 View の初期化処理をもう少し詳しく追ってい…

LSP 実装メモ(gopls cache `View` 生成編)

前回 tennashi.hatenablog.com 引き続き、gopls の cache 実装を読む。 前回のまとめ gopls で採用されている cache は 3 層で前回読んだのは Cache/Session の 2 層だ。 Cache 素朴な OS ファイルシステム上のファイルの cache cache 自体の実体は source.F…

facebook/ent を使ってみた

Go

最近 GraphQL の素振りのため、シンプルな Web アプリケーションを作ることを考えていた。 で、どうせなら最低限の機能はシングルバイナリ + いくつかのファイルを用意するだけで動作させようと思い、以下のような構成だけなんとなく考えた。 フロントアプリ…

k8s 上での Redis の永続化戦略

Redis を起動すると次のようなログが出力されることがある。 1:M 31 Aug 2020 12:36:07.554 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sy…

LSP 実装メモ(gopls cache `Cache` `Session` 編)

前回 tennashi.hatenablog.com 今回から少し gopls の cache 機構を集中して読んでいく。 というのも結局 LSP サーバの実装の肝は クライアントから受け取った TextDocument の中身をいつパースするか どのようにパースするか どのように保持するか どうやっ…

LSP 実装メモ (Text Document Synchronization `textDocument/didClose` 編)

前回 tennashi.hatenablog.com 仕様: Language Server Protocol Specification - 3.15 訳したやつ: tennashi/lsp_spec_ja 引き続き、Text Document Synchronization 周りの仕様について書いていく。 textDocument/didOpen 通知 <- done textDocument/didChan…

LSP 実装メモ (Text Document Synchronization `textDocument/didSave` 編)

前回 tennashi.hatenablog.com 仕様: Language Server Protocol Specification - 3.15 訳したやつ: tennashi/lsp_spec_ja 引き続き、Text Document Synchronization 周りの仕様について書いていく。 textDocument/didOpen 通知 <- done textDocument/didChan…

LSP 実装メモ (Text Document Synchronization `textDocument/willSave` `textDocument/willSaveWaitUntil` 編)

前回 tennashi.hatenablog.com 週刊 LSP 第三号 前回 gopls で見つけた Issue は無事 merge された 仕様: Language Server Protocol Specification - 3.15 訳したやつ: tennashi/lsp_spec_ja 引き続き、Text Document Synchronization 周りの仕様について書…

LSP 実装メモ (Text Document Synchronization `textDocument/didChange` 編)

tennashi.hatenablog.com 週刊 LSP 第二号。 Language Server Protocol に従ったサーバを実装するためのメモ 仕様: Language Server Protocol Specification - 3.15 訳したやつ: tennashi/lsp_spec_ja 前回に引き続き、Text Document Synchronization 周りの…

LSP 実装メモ (Text Document Synchronization `textDocument/didOpen` 編)

Language Server Protocol に従ったサーバを実装するためのメモ 仕様: Language Server Protocol Specification - 3.15 訳したやつ: tennashi/lsp_spec_ja まずは Text Document Synchronization の実装から調査する。 Text Document Synchronization とは T…

ご家庭 k8s はじめました

ずっと電源すら入れてなかった Core i7 第4世代の PC、最近家で作業してるし置いとくのももったいなかったので k8s で遊ぶ用に整備した ESXi 7.0 をインストールして、その上の仮想マシンで 1 master + 2 worker 構成で k8s を立てた この構成の作成手順は無…

バイナリ操作奮闘記 前編(アセンブリ/手書き編)

最近以下のテキストを読みながら C コンパイラを書いています www.sigbus.info 書いてるうちにふと疑問がわいてきました 9cc はアセンブリを出力しているけども実際の実行ファイルにするために gcc 挟んでいるし、アセンブリを ELF 形式の実行ファイルにする…

Vim で自前バッファを用意するプラグインを書く

Vim

この記事は Vim Advent Calendar 2019 23 日目の記事です qiita.com 最近メールを vim で読むためのプラグインを書いています(道半ば) 機能としては メールフォルダの一覧 フォルダの中のメール一覧 メール本文の表示 があるのですが、これらを vim 上で表示…

最近よく書く HTTP サーバ基礎部分

Go

この記事は Go3 Advent Calendar 2019 13日目の記事です qiita.com TL;DR x/sync/errgroup はいいぞ 本編 最近よく書くサーバの起動部分のコードを紹介します 分かる人には見るのが一番早いと思うので、早速コード全体を載せます やりたいことは localhost:8…

mbsync/imapnotify で(ある程度)快適なメール受信環境を手に入れる

この記事は dotfiles Advent Calendar 2019 2日目の記事です qiita.com みなさん、電子メールと呼ばれるものをご存知でしょうか 現代を生きておられる皆様におかれましては想像もつかないでしょうが、太古の昔平成という時代では、人間同士のコミュニケーシ…

吉祥寺.pm #20 で LT してきた

してきた 資料 kichijojipm_20.md · GitHub 吉祥寺.pm kichijojipm.connpass.com .pm と言いつつ任意の話題が提供される楽しい会 もちろん Perl の話題もある 句会: poem meeting でもあるという説がある[要出典] LT した経緯 kichijojipm.connpass.com 前回…

VimConf 2019 に行ってきた話

Vim

VimConf 2019 vimconf.org VimConf は、世界初かつ世界で唯一のコミュニティによって定期運営されているVimの国際カンファレンスです。 Vim の国際カンファレンス 何を言っているかさっぱりわかんねーと思うが(ry 開催は 11/03 今日は 11/23、20日ごしの感想…

golang.tokyo #25 参加レポ

Go

golang.tokyo #25 に参加してきました 補欠だったんですが、ブログ枠が空いてたので急遽そっちで参加することに でいい機会なのでブログをはじめてみることにしました というわけで本題 今改めて読みなおしたい Go 基礎情報 その1 docs.google.com 概要 Go …