## 事象 [[telescope-coc.nvim]]で`Telescope coc references`の[[Exコマンド]]を実行したとき、パスが絶対パスになっておりファイル名が分からない。 ![[Pasted image 20231125211433.png]] ## 原因 [[coc-tsserver]]が[[Windows]]の[[Node.js]]環境下でドライブ名を小文字で返すため、相対パスとして扱われてなさそう[^1]。 他の環境では再現しない。 - [[Go]]では再現しない - [[Ubuntu]]環境では[[Node.js]]、[[Bun]]共に再現しない ## 解決方法 ### ファイル名のみを表示させる [[telescope.nvim]]の`path_display`でファイル名だけ表示するようにすれば回避はできる。以下のコマンド、もしくは設定で変更。 ``` Telescope coc references path_display={'tail'} ``` > [!info] > 詳細は `:h telescope.defaults.path_display` でヘルプを表示する。 しかし、この方法は上記環境以外のケースでもファイル名以外が表示されなくなってしまう。[[OS]]や言語タイプで設定を分岐すればいいかもしれないがスマートではない。 ### [[telescope-coc.nvim]]のコードをいじる `lua/telescope/_extensions/coc.lua`に以下の変更を加える。 ```diff + local normalizeDriveLetter = function(str) + return str:match("^[a-z]:") and str:sub(1, 1):upper() .. str:sub(2) or str + end local make_display = function(entry) local line_info = { table.concat({ entry.lnum, entry.col }, ':'), 'TelescopeResultsLineNr' } - local filename = utils.transform_path(opts, entry.filename) + local filename = utils.transform_path(opts, normalizeDriveLetter(entry.filename)) return displayer({ line_info, filename, entry.text:gsub('.* | ', ''), }) end ``` > [[📜2023-11-25 telescope-coc.nvimのコードを見て、Windows環境でTypeScriptを使ったときのパスが必ず絶対パスになる問題を調査してみる]] この対応が[[Windows]]以外に悪影響を及ぼさないかは不明。そのため、[[Windows]]の環境のみに適応することを推奨。 > [!question] [[telescope-coc.nvim]]にプルリクエストを作成しないのか? > 以下の理由から今は静観する。 > - 説明がやや大変であり、時間がとれない > - [[telescope-coc.nvim]]の更新頻度は高くない (最後は9ヶ月前) ので、`Lazy sync`で上書きされるリスクもほぼない > > 私の代わりにGitHub Issuesに報告したり、PR作成してくれる方がいれば大歓迎なので、本ページ および [[📜2023-11-25 telescope-coc.nvimのコードを見て、Windows環境でTypeScriptを使ったときのパスが必ず絶対パスになる問題を調査してみる]] の内容は自由にしていただいて問題ない。 ## 参考 - [Make entries for references configurable · Issue \#32 · fannheyward/telescope\-coc\.nvim](https://github.com/fannheyward/telescope-coc.nvim/issues/32) [^1]: [[📜2023-11-25 telescope-coc.nvimのコードを見て、Windows環境でTypeScriptを使ったときのパスが必ず絶対パスになる問題を調査してみる]] より