IntelliSenseが遅すぎる...
通常、pythonのソースコードを開くと、コードがハイライトされ、F12で定義参照などに行くことができる。しかし、全然コードがハイライトされず、F12を押しても定義に飛べない!これの解決に苦労したので、備忘録として残しておく。
考えられる原因
便宜上vscodeで開いているフォルダをrootとする。機械学習を行っていたのでroot/dataフォルダの配下に何十万というファイルが存在していた。原因は明らかにこいつだろと思っていたので、このdataフォルダを除外する方法はないかと模索した。
python.analysis.excludeに設定の追加
はじめにpython.analysis.excludeにdataフォルダを追加してみた。しかし、効果は得られなかった。ちなみに,python.analysis.excludeとは、ショートカットキー「Ctrl+,」でsettingsを開き、検索バーに「python exclude」と入力して出てくる設定項目である。
pyrightconfig.jsonの追加
いろいろ調べるとPythonのIntelisenseは拡張機能であるPylanceが関係しているようである。Pylanceのログがないかなと探していたらログを見つけることができた。
Vscode画面のパネルのタブをOUTPUTを選択し、その右側にあるプルダウンリストをPython Language Serverを選択することで、Pylanceのログを確認することができた。
そこで、ログを見てみると気になるErrorが表示がされていた。
2023-09-28 13:29:04.631 [info] [Error - 1:29:04 PM] (1527144) Enumeration of workspace source files is taking longer than 10 seconds.
This may be because:
* You have opened your home directory or entire hard drive as a workspace
* Your workspace contains a very large number of directories and files
* Your workspace contains a symlink to a directory with many files
* Your workspace is remote, and file enumeration is slow
To reduce this time, open a workspace directory with fewer files or add a pyrightconfig.json configuration file with an "exclude" section to exclude subdirectories from your workspace. For more details, refer to https://github.com/microsoft/pyright/blob/main/docs/configuration.md.
なんか時間かかってるからエラーがでているらしい。しかも、ファイルがたくさんあることが原因の可能性があるとあった。pyrightconfig.jsonを編集することで、dataを除外できるてきな雰囲気があるので、早速https://github.com/microsoft/pyright/blob/main/docs/configuration.mdを参照してみた。すると、ルートフォルダの下にpyrightconfig.jsonが生成される的なことが書いてあった。しかし、rootフォルダを確認してみても生成はされていない。そこで、「Ctrl+N」で新しいファイルを作成し、pyrightconfig.jsonという名前にしておいてみた。
root
├data
├pyrightconfig.json
ファイルの中身は以下のようにした。
{
"exclude":"data"
}
すると、上ででていたエラーが解消され、すぐにIntelisenseが効くようになった。
ちなみに、ログにも
2023-09-28 13:38:44.416 [info] [Info - 1:38:44 PM] (1529385) Loading configuration file at /[パス]/root/pyrightconfig.json
のように、読み込んでいる雰囲気の出力がされていた。
結論
pyrightconfig.jsonでexcludeを指定すれば、余分なファイルを分析させずにすむ。