En plus de la réponse donnée le 28 mai 2009, je pense pouvoir y ajouter quelques paquets qui ont amélioré mon expérience de PHP sur Emacs.
Autocomplétion
ac-php est à mon avis un bon complément à Etags. Toutes les références à un tag seront trouvées avec etags, mais la définition avec ac-php. ac-php est également configurable pour savoir quels répertoires doivent être inclus. Par exemple, lors du développement d'un plugin wordpress, vous pouvez ajouter une référence au répertoire contenant les fichiers wordpress en .ac-php-conf.json
(qui réside dans la racine du projet) et il s'auto-complètera, sautera à la référence, etc. Ce paquet supporte company-mode
y auto-complete
.
Voici un exemple de configuration de ac-php :
(use-package ac-php
:ensure t
:bind (:map
php-mode-map
("M-+" . ac-php-find-symbol-at-point)
("M-]" . ac-php-location-stack-back)
("<menu> r" . ac-php-remake-tags)
("<menu> R" . ac-php-remake-tags-all)))
Une autre option serait d'utiliser phpactor Mais l'interface d'Emacs est, à l'heure où j'écris ces lignes, encore en phase alpha, et je n'ai guère d'expérience dans ce domaine, à l'exception de la complétion des constructeurs, qui fonctionne plutôt bien.
Vérification des erreurs
En plus des erreurs de syntaxe, Flycheck supporte phpMessDetector y phpCodeSniffer en dehors de la boîte. Cela vous permet d'avoir des rapports de notification, d'avertissement et d'erreur améliorés, basés sur les normes de codage et les meilleures pratiques prises en charge.
Un autre paquet que j'aime pour l'analyse statique est Interface Emacs de PHPStan qui signale les erreurs potentielles dans votre code (y compris les indications de type incorrectes).
Mise en forme supplémentaire
J'utilise également phpcbf (qui apparemment est archivé). Ce paquet formate le tampon dans le standard de codage souhaité.
Sémantique
Pour ceux qui ne le savent pas, Semantic est un paquetage intégré à Emacs et offre des fonctionnalités similaires à celles d'un IDE. Voici un exemple d'inclusion de semantic pour php-mode :
(add-hook 'php-mode-hook (lambda ()
(require 'semantic/symref/grep)
(add-to-list 'semantic-symref-filepattern-alist '(php-mode "*.php" "*.inc"))
(semantic-mode)))
Imenu
Pour inclure l'imenu sautant aux définitions, un autre exemple de configuration :
C'est la barre latérale qui permet de passer à dans le fichier les méthodes et les fonctions.
(use-package imenu-list
:ensure t
:config
(setq imenu-list-focus-after-activation t)
:bind (:map php-map
("<menu> \\" . imenu-list-smart-toggle)))
Exemple de configuration pour le support de la barre dans le passage aux définitions dans tous les fichiers du projet :
(use-package imenu-anywhere
:ensure t
:after helm
:bind (:map php-map
("<menu> |" . helm-imenu-anywhere)))
Débogage supplémentaire
Outre geben, j'aime utiliser psysh qui, en ajoutant eval(\Psy\sh());
donne un repl sur cette ligne de code et donne accès à toutes les définitions et tout ce à quoi on aurait accès (bien sûr, après l'avoir demandé dans le compositeur).
Plus généralement, des paquets pratiques
Snippets
Peut-être un peu évident pour tous ceux qui ont déjà de l'expérience avec Emacs, mais yasnippet est également très pratique pour écrire vos propres modèles. Il existe également des paquets qui incluent de nombreux modèles prédéfinis pour toutes sortes de langues, mais j'écris les miens pour qu'Emacs soit un peu moins lourd que ma configuration actuelle, ce qui m'aide aussi à m'en souvenir plus facilement.
Gestion de projet
Pardonnez encore une fois l'évidence, mais Projectile est aussi un très bon paquet qui inclut par défaut le support git pour délimiter le projet.
Documentation hors ligne
Si vous utilisez Zeal pour parcourir la documentation hors ligne, il existe aussi zeal-at-point
. Exemple de configuration, si vous utilisez, disons : PHP, CodeIgniter et WordPress :
(use-package zeal-at-point
:ensure t
:bind (("<menu> z" . zeal-at-point))
:config
(add-to-list 'zeal-at-point-mode-alist '(php-mode . ("codeigniter" "wordpress" "php"))))