Emacs company-modeでLaravelのPHPコードの補完・定義ジャンプ
環境
動機
ac-php
依存
- Emacs Lisp
- company-php
- executable
導入
ac-php, company-php
M-x package-list-packages RET
ac-php
,company-php
を探してINSTALL
PHP本体
なんで今更
入れる
- php公式にアクセス、zipを落としてくる
- とりあえず最新の
- Laravel 5.5が7系必須だった気がする
- とりあえずスレッドセーフなやつ
- とりあえず最新の
- 適当に解凍、パスを通す
- インストール確認
php --version
PHP 7.3.1 (cli) (built: Jan 9 2019 22:20:52) ( ZTS MSVC15 (Visual C++ 2017) x64 ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.1, Copyright (c) 1998-2018 Zend Technologies
init.elいじる
(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)) (add-hook 'php-mode-hook 'php-company-hook)
下準備
- laravelプロジェクトルートに
.ac-php-conf.json
ファイルを作る- 空でいい
M-x ac-php-remake-tags-all RET
でタグファイルを作る- バッファ右下に進捗が表示される。完了を待つ
つかう
補完
- ばっちり補完される
__callStatic()
マジックメソッドで他モジュールに委譲している呼び出しまで拾ってくれる
\Illuminate\Support\Facades\DB
=>\Illuminate\Database\DatabaseManager
\Illuminate\Database\DatabaseManager
=>\Illuminate\Database\Connection
- たぶん
@see
とか@mixin
アノテーションのおかげ(未検証)
<?php /** * @see \Illuminate\Database\DatabaseManager * @see \Illuminate\Database\Connection */ class DB extends Facade
<?php /** * @mixin \Illuminate\Database\Connection */ class DatabaseManager implements ConnectionResolverInterface
定義ジャンプ
M-.
快適
限界
\DB::select()
とかは補完してくれない
<project_root>/config/app.php
のaliases
定義までは拾ってくれない模様