ストーリー
「はぁ?効果測定?そんなの効果あるに決まってるだろ?」
というわけでまぁ効果があるのか測定しろとのことなので、とりあえず github copilot を導入したことによって打たなくてよくなったキータイプの回数を数えてみることにしました。1
やりたいこと
私は copilot.vim で github copilot を使ってます。
とりあえず tab キーを押して補完を採用したときに copilot が自分の代わりに打ってくれた文字列をファイルに1か月くらいどんどん貯めていけば、後で wc
コマンドで文字数カウントできそうですね。
下記の方法は vim-9.0.0749 で動作確認しました。neovim とかは違うのかな。わかんない
copilot.vim を編集
vim ~/.vim/pack/github/start/copilot.vim/autoload/copilot.vim
まずはファイル末尾に下記の function を新規追加します。
" Function to append Copilot completions to a log file
function! Copilot_AppendCompletion(completion)
let l:logfile = expand("~/.copilot_completions.log")
call writefile([a:completion], l:logfile, "a")
endfunction
次に、下記の場所に
" HERE -------------------------------
call Copilot_AppendCompletion(text)
" HERE -------------------------------
という行を1行追加します。
function! copilot#Accept(...) abort
let s = copilot#GetDisplayedSuggestion()
if !empty(s.text)
unlet! b:_copilot
let text = ''
if a:0 > 1
let text = substitute(matchstr(s.text, "\n*" . '\%(' . a:2 .'\)'), "\n*$", '', '')
endif
if empty(text)
let text = s.text
endif
call copilot#Request('notifyAccepted', {'uuid': s.uuid, 'acceptedLength': copilot#doc#UTF16Width(text)})
call s:ClearPreview()
let s:suggestion_text = text
" HERE -------------------------------
call Copilot_AppendCompletion(text)
" HERE -------------------------------
return repeat("\<Left>\<Del>", s.outdentSize) . repeat("\<Del>", s.deleteSize) .
\ "\<C-R>\<C-O>=copilot#TextQueuedForInsertion()\<CR>" . (a:0 > 1 ? '' : "\<End>")
endif
let default = get(g:, 'copilot_tab_fallback', pumvisible() ? "\<C-N>" : "\t")
if !a:0
return default
elseif type(a:1) == v:t_string
return a:1
elseif type(a:1) == v:t_func
try
return call(a:1, [])
catch
return default
endtry
else
return default
endif
endfunction
suggestion_text
が確定した直後ですね。リンクで言うと、この辺。
https://github.com/github/copilot.vim/blob/release/autoload/copilot.vim#L511
以上です
動作風景
test.c
を github copilot で編集してみましょう。
動画の上半分は、 tail -F
で ~/.copilot_completions.log
をモニターして、リアルタイムにどんな感じにファイル追記されているのかを見せているだけです。
ちゃんと tab キーを押した瞬間にファイルに追記されていますね。
1か月後とかに
wc ~/.copilot_completions.log
とかで文字数を数えてみましょう
-
まぁこんなことしなくても組織管理者へはどれだけ補完がなされたかの統計情報が AcceptRate としてレポートされるらしいんですが。組織管理者じゃないし見方わかんないので ↩