Emacsにphp-cs, php-stan導入した(けど片方動かない)
環境
- Emacs 25.2
init.el
;; require前に書く必要があるらしい (setq php-mode-coding-style 'psr2) (when (require 'php-mode nil t) ;; 拡張子phpのファイルを開いたときにphp-modeに。 ;; TODO ;; blade.phpはbladeテンプレートなので除く (add-to-list 'auto-mode-alist '("\\.php\\'" . php-mode)) ;; コメントを行コメに (defun php-comment-hook () (setq comment-start "//") (setq comment-end "")) ;; companyによる補完 (defun php-company-hook () (require 'company-php) (company-mode t) (ac-php-core-eldoc-setup) ;; enable eldoc (make-local-variable 'company-backends) (add-to-list 'company-backends 'company-ac-php-backend) ; 定義にジャンプ (define-key php-mode-map (kbd "M-.") 'ac-php-find-symbol-at-point) ; ジャンプ先から戻る (define-key php-mode-map (kbd "M-,") 'ac-php-location-stack-back)) ;; flycheck ;; phpcs and phpstan (defun php-flycheck-hook () (require 'flycheck nil t) (require 'flycheck-phpstan nil t) (setq flycheck-phpcs-standard "PSR2") (setq phpstan-executable 'docker) (flycheck-mode t)) (add-hook 'php-mode-hook 'php-comment-hook) (add-hook 'php-mode-hook 'php-company-hook) (add-hook 'php-mode-hook 'php-flycheck-hook) (provide 'php-config))
flycheckの設定部分
;; flycheck ;; phpcs and phpstan (defun php-flycheck-hook () (require 'flycheck nil t) (require 'flycheck-phpstan nil t) (setq flycheck-phpcs-standard "PSR2") (setq phpstan-executable 'docker) (flycheck-mode t)) (add-hook 'php-mode-hook 'php-flycheck-hook)
phpcs
- PHPコードフォーマッタ
- デフォルトで、パスが通っている
phpcs
を実行しに行く - windows10: 下記バッチ
phpcs.bat
@echo off REM path通す docker container run -i -v %CD%:/project --rm herloct/phpcs %*
ホストマシンにPHPを入れて依存させたくないので、dockerコンテナを使用する
-i
... 検査対象のコードを標準入力するために必要-v
... 検査対象のコードを入力するために必要--rm
... 停止したコンテナ消す
phpcs.sh
#!/bin/sh docker container run -i -v $(pwd):/project --rm herloct/phpcs $@
phpstan
- 静的解析
- 不要use
- 不要キャスト
- 不使用変数
- これだけで良しなにやってくれる。イマドキだ
- autoloadファイルの解決とかも良しなにやってくれる
(setq phpstan-executable 'docker)
が……駄目っ……!
- phpcsを有効にするとphpstanが動かない
Syntax checker in buffer User.php in php-mode: phpstan (disabled) - major mode: `php-mode' supported - may enable: Automatically disabled! - executable: Found at c:/Program Files/Docker/Docker/Resources/bin/docker.exe Flycheck cannot use this syntax checker for this buffer. Flycheck Mode is enabled. Use C-u C-c ! x to enable disabled checkers.
- executableが存在するのに
may enable: Automatically disabled!
ってどういうことなんだ (setq flycheck-phpcs-standard "PSR2")
を消すと動く。謎