doomemacs/modules/lang/php
Henrik Lissner 9ef5ca2922 bump: :lang
Andersbakken/rtags@65113e2a13 -> Andersbakken/rtags@cdff9b47fc
Emacs-Kotlin-Mode-Maintainers/kotlin-mode@0e4bafb31d -> Emacs-Kotlin-Mode-Maintainers/kotlin-mode@876cc27dc1
Groovy-Emacs-Modes/groovy-emacs-modes@99eaf70720 -> Groovy-Emacs-Modes/groovy-emacs-modes@84f89b68ec
JuliaEditorSupport/julia-emacs@fe6f6f7a80 -> JuliaEditorSupport/julia-emacs@06f6fdb94c
NixOS/nix-mode@3cca5b6527 -> NixOS/nix-mode@8e20de5ba7
OVYA/php-cs-fixer@c5b5d8a498 -> OVYA/php-cs-fixer@cc9a3624dc
ProofGeneral/PG@bc86736abb -> ProofGeneral/PG@e2b4227e1f
Raku/raku-mode@7496ad3a03 -> Raku/raku-mode@eaac071f17
Somelauw/evil-markdown@064fe9b476 -> Somelauw/evil-markdown@8e6cc68af8
StanfordLegion/terra-mode@eab9e59ded -> StanfordLegion/terra-mode@ceef8cae5b
amake/flutter.el@960b63576a -> amake/flutter.el@81c524a43c
ananthakumaran/tide@ccff099e94 -> ananthakumaran/tide@296c0e0e3a
asok/projectile-rails@6a18ada356 -> asok/projectile-rails@30828afbfa
beancount/beancount-mode@02fe03ee44 -> beancount/beancount-mode@dbafe6a73d
bradyt/dart-mode@43975c9208 -> bradyt/dart-mode@3bac14200f
brianc/jade-mode@4dbde92542 -> brianc/jade-mode@111460b056
brotzeit/rustic@6ca73bb3cc -> brotzeit/rustic@804ebfe029
cdominik/cdlatex@614a8d94f6 -> cdominik/cdlatex@f215b70c5c
clojure-emacs/clojure-mode@3e426b3a47 -> clojure-emacs/clojure-mode@e1dc7caee7
cython/cython@fae33cf7d4 -> cython/cython@aea4e6b84b
dgutov/robe@e1304d123d -> dgutov/robe@fd972e912d
emacs-csharp/csharp-mode@093f0f21a9 -> emacs-csharp/csharp-mode@fe8a68e984
emacs-ess/ESS@4fefd0feaa -> emacs-ess/ESS@a7ce81bb76
emacs-geiser/gauche@66e51430bd -> emacs-geiser/gauche@fd52cbaed9
emacs-geiser/geiser@4099dce8f5 -> emacs-geiser/geiser@327ff01e5b
emacs-lsp/lsp-metals@ca927e5a83 -> emacs-lsp/lsp-metals@695291761b
emacs-php/php-mode@cbf2723264 -> emacs-php/php-mode@535aec8173
emacs-straight/auctex@ea410dce4f -> emacs-straight/auctex@3b0a080ae5
emacs-typescript/typescript.el@1043025d42 -> emacs-typescript/typescript.el@2a58631230
erlang/otp@645ea8110d -> erlang/otp@118cb37bd5
ethereum/emacs-solidity@5f6ef3156f -> ethereum/emacs-solidity@6f7bd1641e
factor/factor@b989a860d1 -> factor/factor@7b451bb813
fsharp/emacs-fsharp-mode@93b1fbc31d -> fsharp/emacs-fsharp-mode@c90d762c06
fxbois/web-mode@8ef47935d6 -> fxbois/web-mode@61f057a6ba
greghendershott/racket-mode@7f12cb1ff2 -> greghendershott/racket-mode@a879a8d67b
haskell/haskell-mode@98ba392236 -> haskell/haskell-mode@8402caa341
hhvm/hack-mode@f9315be699 -> hhvm/hack-mode@4c1c2b0939
idris-hackers/idris-mode@f52ad0b477 -> idris-hackers/idris-mode@3cc9361b4c
immerrr/lua-mode@2bd9077dd0 -> immerrr/lua-mode@5a9bee8d5f
iyefrat/evil-tex@87445d4d23 -> iyefrat/evil-tex@aa0ddf8e76
jimhourihan/glsl-mode@b071120164 -> jimhourihan/glsl-mode@9b2e5f28e4
joaotavora/sly@41f4d65048 -> joaotavora/sly@540a8c5b9a
jrblevin/markdown-mode@359347b2bb -> jrblevin/markdown-mode@862ae8addd
jwiegley/emacs-async@9a8cd0c3d5 -> jwiegley/emacs-async@5d365ffc6a
liblit/demangle-mode@aaef0bd77a -> liblit/demangle-mode@04f545adab
necaris/conda.el@6db0720b6d -> necaris/conda.el@4de6eccda5
ocaml-ppx/ocamlformat@5dd6574d8f -> ocaml-ppx/ocamlformat@22a3707da3
ocaml/dune@75ecfe3421 -> ocaml/dune@4d0a47edd5
ocaml/merlin@5731826810 -> ocaml/merlin@e4791e2298
ocaml/merlin@5731826810 -> ocaml/merlin@e4791e2298
ocaml/tuareg@b59c422759 -> ocaml/tuareg@00faf47a7c
pashky/restclient.el@2cc1fd3496 -> pashky/restclient.el@176d9cb655
polymode/polymode@7d1f822f08 -> polymode/polymode@54888d6c15
s-kostyaev/go-gen-test@44c202ac97 -> s-kostyaev/go-gen-test@35df36dcd5
seagle0128/grip-mode@c0ca789903 -> seagle0128/grip-mode@1c82e27bee
smihica/emmet-mode@1acb821e01 -> smihica/emmet-mode@6b2e554f7f
swift-emacs/swift-mode@1b47a09f1c -> swift-emacs/swift-mode@800efe2910
technomancy/fennel-mode@a908db8696 -> technomancy/fennel-mode@47152970a9
vspinu/company-math@a796053590 -> vspinu/company-math@45778f5731
yoshiki/yaml-mode@3a57058468 -> yoshiki/yaml-mode@63b637f846
ziglang/zig-mode@0babe7ec52 -> ziglang/zig-mode@aba01b6199
2021-09-15 01:22:33 +02:00
..
autoload.el lang/php: refactor company init 2020-02-27 23:27:50 -05:00
config.el lang/php: use php-language-server.php if in PATH 2020-10-26 05:49:21 -04:00
doctor.el Add :tools lsp checks for +lsp flag 2019-04-24 18:16:05 -04:00
packages.el bump: :lang 2021-09-15 01:22:33 +02:00
README.org lang/php: expand on dependencies in README 2021-01-31 20:41:17 -05:00

lang/php

Description

This module adds support for PHP 5.3+ (including PHP7).

  • ctags-based code completion (company-php and phpctags)
  • eldoc support (ac-php and php-extras)
  • REPL (php-boris)
  • Code refactoring commands (php-refactor-mode)
  • Unit-test commands (phpunit)
  • Support for laravel and composer projects (with project-specific snippets)
  • File templates
  • Snippets

PHP was the first programming language I got paid to code in, back in the Cretaceous period (2003). My sincerest apologies go out to all the programmers who inherited my earliest PHP work. I know you're out there, writhing in your straitjackets.

Save a programmer today. Stop a friend from choosing PHP as their first language.

Maintainers

This module has no dedicated maintainers.

Module Flags

  • +hack Add support for the Hack dialect of PHP by Facebook.
  • +lsp Enable LSP support through phpactor or intelephense. Requires the :tools lsp module and the phpactor server to be installed on your system.

Prerequisites

PHP

To get started with PHP, you'll need php (5.3+) and composer.

Note for +lsp:

  1. In order to make full use of phpactor server, php (7.3+) is recommended.
  2. If you use intelephense, node and npm are needed.

MacOS

PHP 5.5 comes prepackaged with newer versions of MacOS. These instructions are provided for reference:

brew tap homebrew/homebrew-php
brew install php71  # or php53, php54, php55
brew install composer

# If you use intelephense:
brew install node
brew install npm

Arch Linux

sudo pacman --needed --noconfirm -S php composer  # or php53, php54, php55

# If you use intelephense:
sudo pacman -S nodejs npm

openSUSE

sudo zypper install php-composer

# If you use intelephense:
sudo zypper install nodejs npm

Dependencies

This module has no required dependencies, but it has a couple optional ones.

  • boris (REPL)
  • phpctags (better code completion)
  • phpunit (unit test commands)
  • php-cs-fixer and @prettier/plugin-php (for code formatting)
composer global require \
    d11wtq/boris \
    phpunit/phpunit \
    techlivezheng/phpctags \
    friendsofphp/php-cs-fixer

# Needed by php-cs-fixer, otherwise you'll get "Couldn't resolve parser
# 'php'" errors
npm install -g @prettier/plugin-php

You must ensure that \~/.composer/vendor/bin is in PATH, so these executables are visible to Emacs:

# place this in your profile file, like ~/.bash_profile or ~/.zshenv
export PATH="~/.composer/vendor/bin:$PATH"

You may also need to regenerate your envvar file by running doom env on the command line.

To use intelephense instead of , run M-x lsp-install-server and choose iph to install lsp-intelephense.

TODO Features

TODO Configuration

TODO Troubleshooting