You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
Go to file
Hugo Thunnissen 4a75cd350c
ci/woodpecker/push/woodpecker Pipeline failed Details
Insert closing parenthesis when function does not take any arguments
9 months ago
benchmarks Apply overall code quality improvements 9 months ago
test Apply overall code quality improvements 9 months ago
.gitignore Add ELPA generated files to .gitignore 9 months ago
.woodpecker.yml Another attempt at fixing CI 1 year ago
COPYING Add license information 3 years ago
Cask Add Cask configuration and fix some compilation warnings 10 months ago
Makefile Add Cask configuration and fix some compilation warnings 10 months ago
README.md Update README 10 months ago
compile.bash Fix native compilation warnings 9 months ago
native-compile.bash Fix native compilation warnings 9 months ago
phpinspect-autoload.el Fix native compilation warnings 9 months ago
phpinspect-bmap.el Update copyright statements and apply some code style improvements 9 months ago
phpinspect-buffer.el Run relint and fix detected regexp issues 9 months ago
phpinspect-cache.el Update copyright statements and apply some code style improvements 9 months ago
phpinspect-changeset.el Update copyright statements and apply some code style improvements 9 months ago
phpinspect-class-struct.el Update copyright statements and apply some code style improvements 9 months ago
phpinspect-class.el Update copyright statements and apply some code style improvements 9 months ago
phpinspect-completion.el Insert closing parenthesis when function does not take any arguments 9 months ago
phpinspect-edtrack.el Update copyright statements and apply some code style improvements 9 months ago
phpinspect-eldoc.el Update copyright statements and apply some code style improvements 9 months ago
phpinspect-fs.el Update copyright statements and apply some code style improvements 9 months ago
phpinspect-imports.el Run relint and fix detected regexp issues 9 months ago
phpinspect-index.el Fix native compilation warnings 9 months ago
phpinspect-meta.el Update copyright statements and apply some code style improvements 9 months ago
phpinspect-parse-context.el Apply overall code quality improvements 9 months ago
phpinspect-parser.el Fix native compilation warnings 9 months ago
phpinspect-pipeline.el Apply overall code quality improvements 9 months ago
phpinspect-project-struct.el Update copyright statements and apply some code style improvements 9 months ago
phpinspect-project.el Update copyright statements and apply some code style improvements 9 months ago
phpinspect-queue.el Update copyright statements and apply some code style improvements 9 months ago
phpinspect-resolve.el Update copyright statements and apply some code style improvements 9 months ago
phpinspect-resolvecontext.el Update copyright statements and apply some code style improvements 9 months ago
phpinspect-serialize.el Update copyright statements and apply some code style improvements 9 months ago
phpinspect-splayt.el Apply overall code quality improvements 9 months ago
phpinspect-suggest.el Update copyright statements and apply some code style improvements 9 months ago
phpinspect-toc.el Update copyright statements and apply some code style improvements 9 months ago
phpinspect-token-predicates.el Update copyright statements and apply some code style improvements 9 months ago
phpinspect-type.el Use class-keyword handler regexp when extracting class name from declaration 9 months ago
phpinspect-util.el Apply overall code quality improvements 9 months ago
phpinspect-worker.el Update copyright statements and apply some code style improvements 9 months ago
phpinspect.el Apply overall code quality improvements 9 months ago

README.md

phpinspect.el

PHPInspect is a minor mode that provides code intelligence for PHP in Emacs. At its core is a PHP parser implemented in Emacs Lisp. PHPInspect comes with backends for completion-at-point, company-mode and eldoc. A backend for xref (which provides go-to-definition functionality) is planned to be implemented at a later date. The main documentation of the mode is in the docstring of the mode itself (C-h f phpinspect-mode RET to view, or read it in the source code of phpinspect.el).

Projects and Finding Types

By default, phpinspect will recognize composer projects and read their composer.json files for autoload information which is used to find files in which the types/classes/functions you use in your code are defined. It is also possible to add an "include directory" of files that should always be read and indexed for a certain project. To do this, open a file in a project and run M-x phpinspect-project-add-include-dir. You can also edit the list of include directories via M-x customize-goup RET phpinspect RET.

Example Configuration

If you already have a completion UI setup that is able to use completion-at-point-functions as completion source, you can basically just enable phpinspect-mode and you'll be good to go. An example of a basic mode hook configuration to get the most out of phpinspect is the following:

(defun my-php-personal-hook ()
  ;; Shortcut to add use statements for classes you use.
  (define-key php-mode-map (kbd \"C-c u\") 'phpinspect-fix-imports)

  ;; Shortcuts to quickly search/open files of PHP classes.
  ;; You can make these local to php-mode, but making them global
  ;; like this makes them work in other modes/filetypes as well, which
  ;; can be handy when jumping between templates, config files and PHP code.
  (global-set-key (kbd \"C-c a\") 'phpinspect-find-class-file)
  (global-set-key (kbd \"C-c c\") 'phpinspect-find-own-class-file)

  ;; Enable phpinspect-mode
  (phpinspect-mode))

(add-hook 'php-mode-hook #'my-php-personal-hook)

Example config with company mode setup

;;;###autoload
(defun my-php-personal-hook ()
  ;; It is important to enable `company-mode' before setting
  ;; the variables below.
  (company-mode)
  (setq-local company-minimum-prefix-length 0)
  (setq-local company-tooltip-align-annotations t)
  (setq-local company-idle-delay 0.1)
  (setq-local company-backends '(phpinspect-company-backend))

  ;; Shortcut to add use statements for classes you use.
  (define-key php-mode-map (kbd "C-c u") 'phpinspect-fix-imports)

  ;; Shortcuts to quickly search/open files of PHP classes.
  (global-set-key (kbd "C-c a") 'phpinspect-find-class-file)
  (global-set-key (kbd "C-c c") 'phpinspect-find-own-class-file)

  (phpinspect-mode))

(add-hook 'php-mode-hook #'my-php-personal-hook)

Install

git clone https://git.snorba.art/hugo/phpinspect.el ~/projects/phpinspect.el
(add-to-list 'load-path "~/projects/phpinspect.el")
(require 'phpinspect)

Development

Running tests

Tests are implemented using ert. You can run them in batch mode with the following command:

emacs -L ./ -batch -l ert -l ./phpinspect.el -l ./test/phpinspect-test.el -f ert-run-tests-batch-and-exit