## 事象
[[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を使ったときのパスが必ず絶対パスになる問題を調査してみる]] より