タグ

ブックマーク / daisuzu.hatenablog.com (5)

  • Goで時刻が絡む単体テストをどうするか考える - daisuzu's notes

    Goにはtimeパッケージをmockする仕組みが用意されていない。 そのため、time.Nowを以下のようにして使っているコードを見かけることがある。 var Now = func() time.Time { return time.Now() } たしかにこうすることでNow()が返す値を自由に設定でき、単体テストが書きやすくなる。 ただ、関数を変数に入れるということは「その関数を処理の中で書き換えるため」という意味を持たせることになり、それをテストでしか書き換えないのであれば読み手に無用な混乱を与えてしまいそうで個人的にはあまり好きではない。 その辺りの意識が開発者の間で統一されていればそれで良いのかもしれないが、新しく入った人なんかはそうもいかないはず。 さすがに意図せず書き換えてトラブってしまうことはまず無いだろうが、自分がよく使いそうな用途でこのような使い方を避けられないか考えて

    Goで時刻が絡む単体テストをどうするか考える - daisuzu's notes
    michael26
    michael26 2020/08/03
  • gopls(v0.4.0)の機能 - daisuzu's notes

    goplsは更新頻度が高く、何ができるのかをちゃんと把握できていなかったので、LSPのメソッドベースで今の時点(v0.4.0)の機能をざっと調べてみることにしました。 補完(textDocument/completion) ジャンプtextDocument/definition textDocument/typeDefinition textDocument/implementation textDocument/references textDocument/documentSymbol workspace/symbol その他 Diagnostic textDocument/codeAction textDocument/codeLens textDocument/hover textDocument/signatureHelp textDocument/documentHighl

    gopls(v0.4.0)の機能 - daisuzu's notes
    michael26
    michael26 2020/05/07
  • goplsでworkspace/symbolが使いたい - daisuzu's notes

    現状の最新版(gopls/v0.2.2-pre2)では未実装。 daisuzu.hatenablog.com を書いていたら欲しくなったので第1回 ゴリラ合宿で実装したのがコチラ。 github.com symbolの探索はServerのsessionのViews()から Snapshotを取ってきて、 KnownPackages()のCompiledGoFiles()をParse()して*ast.Fileを引っ張り出して、 あとは地道にWorkspaceSymbolParamsにマッチするものを探していくようにした。 ただ、WorkspaceSymbolParamsの仕様*1がよくわかっておらず、実装の仕方も上記のやり方で良かったのか全然わかっていない。 また、最初は素直にスライスを作るように実装してみたところ、Vimから:tselectなどを実行すると タグが重複したり、 実行するたび

    goplsでworkspace/symbolが使いたい - daisuzu's notes
    michael26
    michael26 2019/12/09
  • Vimでファイルを開く方法(基本編) - daisuzu's notes

    この記事はVim Advent Calendar 2016の4日目の記事です。 Vimでファイルを開くのに Unite.vim Denite.nvim ctrlp.vim など のプラグインを使っている人はたくさんいると思います。 これらのプラグインは大変便利なインターフェースを提供してくれているのですが、 依存しすぎてしまうと標準機能でファイルを開く方法を忘れてしまうかもしれません。 ...さすがにそんなVimmerはいないと思いますが、ファイルを開く コマンド キーマッピング をおさらいしてみましょう。 コマンドで開く 以下のコマンド*1の引数としてファイル名を指定します。 コマンド 説明 :e[dit] 現在のバッファでファイルを開く :sp[lit] 水平分割してファイルを開く :vs[plit] 垂直分割してファイルを開く :tabe[dit] 新しいタブページを作成してファイル

    Vimでファイルを開く方法(基本編) - daisuzu's notes
    michael26
    michael26 2016/12/07
  • vimのjob機能を使ってプラグインを更新する - daisuzu's notes

    2ヶ月以上経ってるけど一応前回の続き。 ~/.vim/pack/bundle/opt/配下にインストールされているプラグインを更新するには、 ls -d ~/.vim/pack/bundle/opt/* | xargs -I{} git -C {} pull --ff --ff-only でやってしまうのが手っ取り早いんだけど、あえてvimでやってみた。 以下のようにjob機能を使うことでvimをブロックせず、結果をバッファに出力するといった処理が簡単に実現できた。 let s:plugins = [ \ 'vim-quickrun', \ ] "プラグインを更新したくなったら :call UpdatePackPlugins() を実行する function! UpdatePackPlugins() " 結果を表示するためのバッファを作成 topleft split edit `='[up

    vimのjob機能を使ってプラグインを更新する - daisuzu's notes
  • 1