aboutsummaryrefslogtreecommitdiffhomepage
path: root/services/nuldoc/content/posts/2024-04-29
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2025-11-27 05:05:04 +0900
committernsfisis <nsfisis@gmail.com>2025-11-27 06:07:46 +0900
commitc754d24b162ecd504f3c4bdd8632045dd0398768 (patch)
tree362323710bb329ad609d379df4e4a429e4229fd2 /services/nuldoc/content/posts/2024-04-29
parentd1014de68415df8f0a5dc3389332e086119c6198 (diff)
downloadnsfisis.dev-c754d24b162ecd504f3c4bdd8632045dd0398768.tar.gz
nsfisis.dev-c754d24b162ecd504f3c4bdd8632045dd0398768.tar.zst
nsfisis.dev-c754d24b162ecd504f3c4bdd8632045dd0398768.zip
feat(nuldoc): Djot to Markdown
Diffstat (limited to 'services/nuldoc/content/posts/2024-04-29')
-rw-r--r--services/nuldoc/content/posts/2024-04-29/zsh-file-completion-for-composer-custom-commands.md (renamed from services/nuldoc/content/posts/2024-04-29/zsh-file-completion-for-composer-custom-commands.dj)18
1 files changed, 6 insertions, 12 deletions
diff --git a/services/nuldoc/content/posts/2024-04-29/zsh-file-completion-for-composer-custom-commands.dj b/services/nuldoc/content/posts/2024-04-29/zsh-file-completion-for-composer-custom-commands.md
index 5738de8..bae8416 100644
--- a/services/nuldoc/content/posts/2024-04-29/zsh-file-completion-for-composer-custom-commands.dj
+++ b/services/nuldoc/content/posts/2024-04-29/zsh-file-completion-for-composer-custom-commands.md
@@ -13,23 +13,20 @@ tags = [
date = "2024-04-29"
remark = "公開"
---
-{#version-info}
-# バージョン情報
+# バージョン情報 {#version-info}
* Composer: 2.7.4
* PHP: 8.3.6
* Zsh: 5.9
-{#intro}
-# はじめに
+# はじめに {#intro}
[Composer](https://getcomposer.org/) は PHP のデファクトスタンダードなパッケージマネージャである。
Zsh では、`composer` コマンドに対する補完が提供されており、`composer` と入力してタブキーを押すと、利用可能なコマンドやオプションが補完される。
Zsh の補完はシェル関数の形で実装されており、`composer` コマンドに対応した補完をおこなうのは `_composer` である。
[記事執筆時点での補完関数の定義は、GitHub のミラーリポジトリから参照できる。](https://github.com/zsh-users/zsh/blob/a66e92918568881af110a3e2e3018b317c054e4a/Completion/Unix/Command/_composer)
-{#problem}
-# 発生していた問題
+# 発生していた問題 {#problem}
`composer` コマンドはカスタムコマンド (`composer.json` の `scripts` で定義されたコマンド) に対して補完をおこなわない。
つまり、途中まで入力されたカスタムコマンドを補完しないし、カスタムコマンドの引数も補完しない。
@@ -46,8 +43,7 @@ Zsh の補完はシェル関数の形で実装されており、`composer` コ
# commands requires making slow calls to Composer
```
-{#what-i-want-to-achive}
-# やりたいこと
+# やりたいこと {#what-i-want-to-achive}
確かに、カスタムコマンドに対して完全な補完を提供するのは不可能か、あるいは実現できても遅くなりすぎるだろう。
しかし、不完全なフォールバックを提供するくらいなら可能なはずだ。
@@ -55,8 +51,7 @@ Zsh の補完はシェル関数の形で実装されており、`composer` コ
この記事では、これらのカスタムコマンドについて、Zsh が提供するデフォルトのファイル・ディレクトリ補完を適用する。
つまり、`composer phpunit -- tests/` まで打ってタブキーを押すと、`tests` ディレクトリの下にあるテストファイルまたはディレクトリが補完される。
-{#solution}
-# 解決策
+# 解決策 {#solution}
まずは、Zsh で補完関数を提供する場合のボイラープレートコードを書く。
以下は `~/.zshrc` にすべて書く前提だが、`autoload` を設定するなどすれば別ファイルに分離できる (詳細な手順は割愛)。
@@ -79,8 +74,7 @@ function _my_composer() {
`_composer` コマンドは何も補完候補がなかったとき非ゼロな exit status で終了するので、そうであったなら `_files` を呼び出す。
`_files` は、Zsh がデフォルトで用意しているファイル・ディレクトリの補完をおこなう関数である。
-{#conclusion}
-# まとめ
+# まとめ {#conclusion}
これらの設定をおこなうことで、部分的ながら Composer のカスタムコマンドに対して補完をおこなうことができる。
特に、PHPUnit や PHPStan などの対象ファイル・ディレクトリを引数に取るようなコマンドを使う場合に有用であろう。