2017-06-08 11:47:56 +02:00
|
|
|
;;; lang/php/config.el -*- lexical-binding: t; -*-
|
2015-06-15 09:06:10 +02:00
|
|
|
|
2020-02-27 23:27:28 -05:00
|
|
|
(defvar +php--company-backends nil
|
|
|
|
"List of company backends to use in `php-mode'.")
|
|
|
|
|
2019-10-19 15:25:29 -04:00
|
|
|
(after! projectile
|
|
|
|
(add-to-list 'projectile-project-root-files "composer.json"))
|
|
|
|
|
|
|
|
|
|
|
|
;;
|
|
|
|
;;; Packages
|
|
|
|
|
2019-07-23 12:44:03 +02:00
|
|
|
(use-package! php-mode
|
2018-07-18 19:27:13 +02:00
|
|
|
:mode "\\.inc\\'"
|
2015-06-15 09:06:10 +02:00
|
|
|
:config
|
2018-01-28 21:36:42 -05:00
|
|
|
;; Disable HTML compatibility in php-mode. `web-mode' has superior support for
|
2020-03-27 01:25:30 -04:00
|
|
|
;; php+html. Use the .phtml extension instead.
|
2017-02-19 18:57:16 -05:00
|
|
|
(setq php-template-compatibility nil)
|
2016-05-01 01:10:30 -04:00
|
|
|
|
feature/lookup: rewrite dash docset integration
+ 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
2018-08-31 02:44:49 +02:00
|
|
|
(set-docsets! 'php-mode "PHP" "PHPUnit" "Laravel" "CakePHP" "CodeIgniter" "Doctrine_ORM")
|
2018-06-15 16:07:24 +02:00
|
|
|
(set-repl-handler! 'php-mode #'php-boris)
|
2018-06-15 17:27:48 +02:00
|
|
|
(set-lookup-handlers! 'php-mode :documentation #'php-search-documentation)
|
2018-08-22 02:15:44 +02:00
|
|
|
(set-formatter! 'php-mode #'php-cs-fixer-fix)
|
2020-08-12 18:52:14 -04:00
|
|
|
(set-ligatures! 'php-mode
|
2020-07-14 01:48:19 +04:30
|
|
|
;; Functional
|
|
|
|
:lambda "function()"
|
|
|
|
:def "function"
|
|
|
|
;; Types
|
|
|
|
:null "null"
|
|
|
|
:true "true" :false "false"
|
|
|
|
:int "int" :float "float"
|
|
|
|
:str "string"
|
|
|
|
:bool "list"
|
|
|
|
;; Flow
|
|
|
|
:not "!"
|
|
|
|
:and "&&" :and "and"
|
|
|
|
:or "||" :or "or"
|
|
|
|
:for "for"
|
|
|
|
:return "return"
|
|
|
|
:yield "use")
|
2017-03-19 22:47:50 -04:00
|
|
|
|
2020-10-26 05:49:21 -04:00
|
|
|
(if (not (featurep! +lsp))
|
|
|
|
;; `+php-company-backend' uses `company-phpactor', `php-extras-company' or
|
|
|
|
;; `company-dabbrev-code', in that order.
|
|
|
|
(when +php--company-backends
|
|
|
|
(set-company-backend! 'php-mode
|
|
|
|
(cons :separate +php--company-backends)
|
|
|
|
'company-dabbrev-code))
|
|
|
|
(when (executable-find "php-language-server.php")
|
|
|
|
(setq lsp-clients-php-server-command "php-language-server.php"))
|
|
|
|
(add-hook 'php-mode-local-vars-hook #'lsp!))
|
2017-05-23 21:33:03 +02:00
|
|
|
|
2018-07-18 19:27:13 +02:00
|
|
|
;; Use the smallest `sp-max-pair-length' for optimum `smartparens' performance
|
2018-08-13 18:12:50 +02:00
|
|
|
(setq-hook! 'php-mode-hook sp-max-pair-length 5)
|
2016-10-05 12:50:02 +02:00
|
|
|
|
2016-04-23 22:08:46 -04:00
|
|
|
(sp-with-modes '(php-mode)
|
2018-07-18 19:58:33 +02:00
|
|
|
(sp-local-pair "<?" "?>" :post-handlers '(("| " "SPC" "=") ("||\n[i]" "RET") ("[d2]" "p")))
|
|
|
|
(sp-local-pair "<?php" "?>" :post-handlers '(("| " "SPC") ("||\n[i]" "RET"))))
|
2017-02-19 18:57:16 -05:00
|
|
|
|
2018-12-23 23:54:27 -05:00
|
|
|
(map! :localleader
|
|
|
|
:map php-mode-map
|
2019-10-04 17:49:28 -04:00
|
|
|
:prefix ("t" . "test")
|
2018-12-23 23:54:27 -05:00
|
|
|
"r" #'phpunit-current-project
|
|
|
|
"a" #'phpunit-current-class
|
|
|
|
"s" #'phpunit-current-test))
|
2017-02-19 18:57:16 -05:00
|
|
|
|
2015-06-15 09:06:10 +02:00
|
|
|
|
2019-07-23 12:44:03 +02:00
|
|
|
(use-package! phpactor
|
2019-02-21 16:08:27 -05:00
|
|
|
:unless (featurep! +lsp)
|
2018-08-13 18:12:50 +02:00
|
|
|
:after php-mode
|
2020-02-27 23:27:28 -05:00
|
|
|
:init
|
|
|
|
(add-to-list '+php--company-backends #'company-phpactor nil 'eq)
|
2018-08-13 18:12:50 +02:00
|
|
|
:config
|
|
|
|
(set-lookup-handlers! 'php-mode
|
|
|
|
:definition #'phpactor-goto-definition)
|
2018-12-23 23:54:27 -05:00
|
|
|
(map! :localleader
|
|
|
|
:map php-mode-map
|
2019-10-04 17:49:28 -04:00
|
|
|
:prefix ("r" . "refactor")
|
2018-12-23 23:54:27 -05:00
|
|
|
"cc" #'phpactor-copy-class
|
|
|
|
"mc" #'phpactor-move-class
|
|
|
|
"oi" #'phpactor-offset-info
|
|
|
|
"t" #'phpactor-transform
|
|
|
|
"ic" #'phpactor-import-class))
|
2018-07-29 02:46:18 +02:00
|
|
|
|
|
|
|
|
2019-07-23 12:44:03 +02:00
|
|
|
(use-package! php-refactor-mode
|
2018-08-13 18:12:50 +02:00
|
|
|
:hook php-mode
|
|
|
|
:config
|
2018-12-23 23:54:27 -05:00
|
|
|
(map! :localleader
|
|
|
|
:map php-refactor-mode-map
|
2018-08-13 18:12:50 +02:00
|
|
|
:prefix "r"
|
2018-12-23 23:54:27 -05:00
|
|
|
"cv" #'php-refactor--convert-local-to-instance-variable
|
|
|
|
"u" #'php-refactor--optimize-use
|
|
|
|
"xm" #'php-refactor--extract-method
|
|
|
|
"rv" #'php-refactor--rename-local-variable))
|
2018-07-18 19:27:13 +02:00
|
|
|
|
|
|
|
|
2019-07-23 12:44:03 +02:00
|
|
|
(use-package! php-extras
|
2016-04-23 22:08:46 -04:00
|
|
|
:after php-mode
|
2018-08-13 18:12:50 +02:00
|
|
|
:preface
|
|
|
|
;; We'll set up company support ourselves
|
|
|
|
(advice-add #'php-extras-company-setup :override #'ignore)
|
2020-02-27 23:27:28 -05:00
|
|
|
:init
|
|
|
|
(add-to-list '+php--company-backends #'php-extras-company)
|
2017-05-23 21:33:03 +02:00
|
|
|
:config
|
2017-06-08 11:47:56 +02:00
|
|
|
(setq php-extras-eldoc-functions-file
|
|
|
|
(concat doom-etc-dir "php-extras-eldoc-functions"))
|
2019-06-14 18:32:05 +02:00
|
|
|
;; Silence warning if `php-extras-eldoc-functions-file' hasn't finished
|
|
|
|
;; generating yet.
|
|
|
|
(defun php-extras-load-eldoc ()
|
|
|
|
(require 'php-extras-eldoc-functions php-extras-eldoc-functions-file t))
|
2017-02-19 18:57:16 -05:00
|
|
|
;; Make expensive php-extras generation async
|
2015-11-17 02:09:34 -05:00
|
|
|
(unless (file-exists-p (concat php-extras-eldoc-functions-file ".el"))
|
2017-05-23 21:33:03 +02:00
|
|
|
(message "Generating PHP eldoc files...")
|
2018-01-06 17:02:57 -05:00
|
|
|
(require 'async)
|
2018-08-09 01:02:47 +02:00
|
|
|
(async-start `(lambda ()
|
|
|
|
,(async-inject-variables "\\`\\(load-path\\|php-extras-eldoc-functions-file\\)$")
|
|
|
|
(require 'php-extras-gen-eldoc)
|
|
|
|
(php-extras-generate-eldoc-1 t))
|
2015-11-17 02:09:34 -05:00
|
|
|
(lambda (_)
|
|
|
|
(load (concat php-extras-eldoc-functions-file ".el"))
|
2016-04-23 22:08:46 -04:00
|
|
|
(message "PHP eldoc updated!")))))
|
2016-03-28 21:39:13 -04:00
|
|
|
|
2016-05-19 03:18:57 -04:00
|
|
|
|
2019-07-23 12:44:03 +02:00
|
|
|
(use-package! hack-mode
|
2018-08-13 18:12:50 +02:00
|
|
|
:when (featurep! +hack)
|
|
|
|
:mode "\\.hh$")
|
2017-05-23 21:33:03 +02:00
|
|
|
|
|
|
|
|
2021-09-15 20:22:33 +01:00
|
|
|
(use-package! composer
|
|
|
|
:defer t
|
|
|
|
:init
|
|
|
|
(map! :after php-mode
|
|
|
|
:localleader
|
|
|
|
:map php-mode-map
|
|
|
|
:prefix ("c" . "composer")
|
|
|
|
"c" #'composer
|
|
|
|
"i" #'composer-install
|
|
|
|
"r" #'composer-require
|
|
|
|
"u" #'composer-update
|
|
|
|
"d" #'composer-dump-autoload
|
|
|
|
"s" #'composer-run-script
|
|
|
|
"v" #'composer-run-vendor-bin-command
|
|
|
|
"o" #'composer-find-json-file
|
|
|
|
"l" #'composer-view-lock-file))
|
|
|
|
|
|
|
|
|
2017-02-19 18:57:16 -05:00
|
|
|
;;
|
|
|
|
;; Projects
|
|
|
|
|
2017-03-02 18:20:46 -05:00
|
|
|
(def-project-mode! +php-laravel-mode
|
2019-07-21 14:49:09 +02:00
|
|
|
:modes '(php-mode yaml-mode web-mode nxml-mode js2-mode scss-mode)
|
2017-03-02 18:20:46 -05:00
|
|
|
:files (and "artisan" "server.php"))
|
|
|
|
|
|
|
|
(def-project-mode! +php-composer-mode
|
2019-07-21 14:49:09 +02:00
|
|
|
:modes '(web-mode php-mode)
|
2018-06-01 02:20:00 +02:00
|
|
|
:files ("composer.json"))
|