+ Uses alist variable to store config, rather than hooks + Added check for installed docsets in +lookup/documentation + Set docsets for various language modules (c-mode, c++-mode, css-mode, scss-mode, sass-mode, web-mode, go-mode, racket-mode, emacs-lisp-mode, js2-mode, rjsx-mode, typescript-mode, rust-mode, and php-mode) + Made *eww* popups for dash docsets larger + Renamed set-docset! => set-docsets! (set-docset! is aliased to set-docsets!) + New +lookup/install-docset alias
114 lines
3.7 KiB
EmacsLisp
114 lines
3.7 KiB
EmacsLisp
;;; lang/php/config.el -*- lexical-binding: t; -*-
|
|
|
|
(def-package! php-mode
|
|
:mode "\\.inc\\'"
|
|
:config
|
|
;; Disable HTML compatibility in php-mode. `web-mode' has superior support for
|
|
;; php+html. Use the .phtml
|
|
(setq php-template-compatibility nil)
|
|
|
|
(set-docsets! 'php-mode "PHP" "PHPUnit" "Laravel" "CakePHP" "CodeIgniter" "Doctrine_ORM")
|
|
(set-repl-handler! 'php-mode #'php-boris)
|
|
(set-lookup-handlers! 'php-mode :documentation #'php-search-documentation)
|
|
(set-formatter! 'php-mode #'php-cs-fixer-fix)
|
|
|
|
;; `+php-company-backend' uses `company-phpactor', `php-extras-company' or
|
|
;; `company-dabbrev-code', in that order.
|
|
(set-company-backend! 'php-mode '+php-company-backend 'company-dabbrev-code)
|
|
|
|
;; Use the smallest `sp-max-pair-length' for optimum `smartparens' performance
|
|
(setq-hook! 'php-mode-hook sp-max-pair-length 5)
|
|
|
|
(sp-with-modes '(php-mode)
|
|
(sp-local-pair "<?" "?>" :post-handlers '(("| " "SPC" "=") ("||\n[i]" "RET") ("[d2]" "p")))
|
|
(sp-local-pair "<?php" "?>" :post-handlers '(("| " "SPC") ("||\n[i]" "RET"))))
|
|
|
|
(map! :map php-mode-map
|
|
:localleader
|
|
:prefix "t"
|
|
:n "r" #'phpunit-current-project
|
|
:n "a" #'phpunit-current-class
|
|
:n "s" #'phpunit-current-test))
|
|
|
|
|
|
(def-package! phpactor
|
|
:after php-mode
|
|
:config
|
|
(set-lookup-handlers! 'php-mode
|
|
:definition #'phpactor-goto-definition)
|
|
|
|
;; TODO PR these for phpactor.el?
|
|
;; company-phpactor breaks company if executable doesn't exist
|
|
(defun +php*company-phpactor-fail-silently (orig-fn &rest args)
|
|
(when (phpactor-find-executable)
|
|
(apply orig-fn args)))
|
|
(advice-add #'company-phpactor :around #'+php*company-phpactor-fail-silently)
|
|
|
|
;; `phpactor-get-working-dir' throws stringp errors if not in a project.
|
|
(defun +php*project-root (&rest _)
|
|
(setq phpactor-working-dir
|
|
(or phpactor-working-dir
|
|
(php-project-get-root-dir)
|
|
(doom-project-root))))
|
|
(advice-add #'phpactor-get-working-dir :before #'+php*project-root)
|
|
|
|
(map! :map php-mode-map
|
|
:localleader
|
|
:prefix "r"
|
|
:n "cc" #'phpactor-copy-class
|
|
:n "mc" #'phpactor-move-class
|
|
:v "oi" #'phpactor-offset-info
|
|
:n "t" #'phpactor-transform
|
|
:n "ic" #'phpactor-import-class))
|
|
|
|
|
|
(def-package! php-refactor-mode
|
|
:hook php-mode
|
|
:config
|
|
(map! :map php-refactor-mode-map
|
|
:localleader
|
|
:prefix "r"
|
|
:n "cv" #'php-refactor--convert-local-to-instance-variable
|
|
:n "u" #'php-refactor--optimize-use
|
|
:v "xm" #'php-refactor--extract-method
|
|
:n "rv" #'php-refactor--rename-local-variable))
|
|
|
|
|
|
(def-package! php-extras
|
|
:after php-mode
|
|
:preface
|
|
;; We'll set up company support ourselves
|
|
(advice-add #'php-extras-company-setup :override #'ignore)
|
|
:config
|
|
(setq php-extras-eldoc-functions-file
|
|
(concat doom-etc-dir "php-extras-eldoc-functions"))
|
|
;; Make expensive php-extras generation async
|
|
(unless (file-exists-p (concat php-extras-eldoc-functions-file ".el"))
|
|
(message "Generating PHP eldoc files...")
|
|
(require 'async)
|
|
(async-start `(lambda ()
|
|
,(async-inject-variables "\\`\\(load-path\\|php-extras-eldoc-functions-file\\)$")
|
|
(require 'php-extras-gen-eldoc)
|
|
(php-extras-generate-eldoc-1 t))
|
|
(lambda (_)
|
|
(load (concat php-extras-eldoc-functions-file ".el"))
|
|
(message "PHP eldoc updated!")))))
|
|
|
|
|
|
(def-package! hack-mode
|
|
:when (featurep! +hack)
|
|
:mode "\\.hh$")
|
|
|
|
|
|
;;
|
|
;; Projects
|
|
;;
|
|
|
|
(def-project-mode! +php-laravel-mode
|
|
:modes (php-mode yaml-mode web-mode nxml-mode js2-mode scss-mode)
|
|
:files (and "artisan" "server.php"))
|
|
|
|
(def-project-mode! +php-composer-mode
|
|
:modes (web-mode php-mode)
|
|
:files ("composer.json"))
|
|
|