Emacs interface to PHPStan, includes checker for Flycheck.
- Emacs 25+
- PHPStan latest/dev-master (NOT support 0.9 seriese)
- PHP 7.1+ or Docker runtime
- If you have not set up MELPA, see Getting Started - MELPA.
M-x package-install flycheck-phpstan
(defun my-php-mode-setup ()
"My PHP-mode hook."
(require 'flycheck-phpstan)
(flycheck-mode t))
(add-hook 'php-mode-hook 'my-php-mode-setup)
(add-hook 'php-mode-hook #'flymake-phpstan-turn-on)
Install Docker and phpstan/phpstan image.
If you always use Docker for PHPStan, add the following into your .emacs
file (~~/.emacs.d/init.el~)
(setq-default phpstan-executable 'docker)
Put the following into .dir-locals.el
files on the root directory of project.
((nil . ((php-project-root . git)
(phpstan-executable . docker)
(phpstan-working-dir . (root . "path/to/dir"))
(phpstan-config-file . (root . "path/to/dir/phpstan-docker.neon"))
(phpstan-memory-limit . "1G")
(phpstan-level . 7))))
If your project Composer relies on phpstan, you do not need to set anything.
((nil . ((php-project-root . git)
(phpstan-executable . docker)
(phpstan-working-dir . (root . "path/to/dir"))
(phpstan-config-file . (root . "path/to/dir/phpstan-docker.neon"))
(phpstan-level . 7))))
Please install phpstan/phpstan package for each user environment or project by using Composer.
If you are unfamiliar with resolving dependencies, the following shell commands are recommended.
$ composer global require phpstan/phpstan
NOTICE: phpstan/phpstan-shim is deprecated. Please read PHPStan 0.12 Released!.
NOTICE: phpstan.el
requires PHPStan **0.10+**. We strongly recommend using the latest PHPStan.
Please download phpstan.phar
from Releases · phpstan/phpstan.
Variables for phpstan are mainly controlled by directory variables (.dir-locals.el
).
Frequently (root. "path/to/file")
notation appears in these variables. It is relative to the top level directory of the project. In general, the directory containing one of .projectile
, composer.json
, .git
file (or directory) is at the top level.
Please be aware that the root directory of the PHP project may NOT match either of PHPStan’s %rootDir%
and/or %currentWorkingDirectory%
.
Typically, you would set the following .dir-locals.el
.
((nil . ((php-project-root . auto)
(phpstan-executable . docker)
(phpstan-working-dir . (root . "path/to/dir/"))
(phpstan-config-file . (root . "path/to/dir/phpstan-custom.neon"))
(phpstan-level . max))))
If there is a phpstan.neon
file in the root directory of the project, you do not need to set both phpstan-working-dir
and phpstan-config-file
.
This package provides convenient commands for using PHPStan from Emacs.
Add \PHPStan\dumpType(...);
to your PHP code and analyze it to make PHPStan display the type of the expression.
(define-key php-mode-map (kbd "C-c ^") #'phpstan-insert-dumptype)
By default, if you press C-u
before invoking the command, \PHPStan\dumpPhpDocType()
will be inserted.
This feature was added in PHPStan 1.12.7 and will dump types compatible with the @param
and @return
PHPDoc tags.
Insert a @phpstan-ignore
tag to suppress any PHPStan errors on the current line.
By default it inserts the tag on the previous line, but if there is already a tag at the end of the current line or on the previous line, the identifiers will be appended there.
If there is no existing tag and C-u
is pressed before the command, it will be inserted at the end of the line.
Most variables defined in this package are buffer local. If you want to set it for multiple projects, use setq-default.
Path to working directory of PHPStan.
- STRING
- Absolute path to `phpstan’ working directory.
- ex)
"/path/to/phpstan.phar"
- ex)
(root . STRING)
- Relative path to `phpstan’ working directory from project root directory.
- ex)
(root . "path/to/dir")
- ex)
nil
- Use
(php-project-get-root-dir)
as working directory.
Path to project specific configuration file of PHPStan.
- STRING
- Absolute path to
phpstan
configuration file. (root . STRING)
- Relative path to
phpstan
configuration file from project root directory. - NIL
- Search
phpstan.neon(.dist)
in(phpstan-get-working-dir)
.
Rule level of PHPStan analysis. Please see README #Rule levels of PHPStan.
0
is the loosest and you can also use max
as an alias for the highest level. Default level is 0
.
- STRING
- Absolute path to `phpstan’ executable file.
- ex)
"/path/to/phpstan.phar"
- ex)
- SYMBOL
docker
- Use Docker using phpstan/docker-image.
(root . STRING)
- Relative path to `phpstan’ executable file from project root directory.
- ex)
(root . "script/phpstan")
- ex)
(STRING . (ARGUMENTS ...))
- Command name and arguments.
- ex)
("docker" "run" "--rm" "-v" "/path/to/project-dir/:/app" "your/docker-image")
- ex)
nil
- Auto detect
phpstan
executable file by composer dependencies of the project or executable command inPATH
environment variable.
Set flycheck phpstan-executable automatically when non-NIL.
Use phpstan memory limit option when non-NIL.
- STRING
- Specifies the memory limit in the same format php.ini accepts.
- ex)
"1G"
- ex)
nil
- Use memory limit in php.ini
Docker image URL or Docker Hub image name or NIL. Default as "ghcr.io/phpstan/phpstan"
. See Docker - PHPStan Documentation
and GitHub Container Registory - Package phpstan.