GitHub - ousttrue/WorkspaceFolder: A tool to launch LanguageServer, DebugAdapter, and task execution from workspaceFolder 📁
A tool to launch LanguageServer, DebugAdapter, and task execution from workspaceFolder 📁 - ousttrue/WorkspaceFolder
GitHub - ousttrue/WorkspaceFolder: A tool to launch LanguageServer, DebugAdapter, and task execution from workspaceFolder 📁 favicon https://github.com/ousttrue/WorkspaceFolder
GitHub - ousttrue/WorkspaceFolder: A tool to launch LanguageServer, DebugAdapter, and task execution from workspaceFolder 📁

要件は、

  • WindowsとLinuxで共用にできる
  • 実行時に、親フォルダを遡って設定(プロジェクトルートに Duck.toml を配置する約束`)を探しに行く能力がある
  • Task間の依存関係が記述できる
  • コマンド呼び出し時のパスを調整できる

こんなもん。

augroup MyAutoCmd
autocmd BufWritePost *.md :!duck build
augroup END

としておいて保存時に呼ぶようにしてみた。

Duck.toml
[generate]
cwd = 'build'
command = ['cmake', '..', '-G', 'Unix Makefiles']
[build]
depends = ['generate']
cwd = 'build'
command = ['make']

duck build

のように呼ぶ。

vimのカレントフォルダ問題

親フォルダを遡って設定を探しに行くというのが重要です。例えば vim でサブフォルダのファイルを編集しているときに、親フォルダの Makefile でビルドしたい場合がある。このときに、vim のカレントフォルダを考慮するのが無理なのです。 そういうわけで vim では単純に autocd して、カレントフォルダを意識しないことにしました。 代わりにツール側で親フォルダに遡れるようにして、そのツールがプロジェクトのルートから指定のコマンドを呼び出すのです。

  • make を呼ぶ
  • cmake を呼ぶ
  • dub を呼ぶ
  • setup.py を呼ぶ
  • MSBuild を呼ぶ

などのように、言語毎に専門のツールを呼ぶ補助的なツールです。

特定の LSP (D言語向けの dls ) がカレントフォルダをプロジェクトルートに移動してから起動しないといけないなどの癖があるようなので、その辺を吸収させるのも狙っている。

WindowsでCMakeをどうやって見つけるのか

unix 的なシステムでは、/usr/bin/cmake であろうことが期待できるのだけど、 Windows ではそうはいかない。でも最近の VisualStudio がインストールされていれば、その中に cmake が入っている。だから Program Files から決め打ちで探してくるという方法があるのだけど、もう一歩進めて VisualStudio のインストールパスを registry から取ってくるという手法がある。しかし、たくさんのバージョンとエディションで少しずつ違うのでやってられない。で、これに対応するツールとして vswhere というツールがある。たぶん、vcpkgのために作られたのだと思うのだけど、これでインストールされている VisualStudio の情報を得ることができる。まだ、 vswhere をどうやって得るのか問題があるのだが、小さいので自分のプロジェクトに入れておくとか、ダウンロードするとか、 VisualStudio に入っているので決め打ちでパスを探すといったことになろうと思う。

要するに vc が入っている環境では、9割くらいの確率で cmake を発見できます。 duck にもこの機能を入れようとしている。

GitHub - joelspadin/pyvswhere: Python interface to Microsoft's Visual Studio locator tool, vswhere
Python interface to Microsoft's Visual Studio locator tool, vswhere - joelspadin/pyvswhere
GitHub - joelspadin/pyvswhere: Python interface to Microsoft's Visual Studio locator tool, vswhere favicon https://github.com/ChaosinaCan/pyvswhere
GitHub - joelspadin/pyvswhere: Python interface to Microsoft's Visual Studio locator tool, vswhere