I use Emacs as PHP IDE in some projects.
Let's get to the point:
(require 'package)
;(setq package-check-signature nil)
(add-to-list 'package-archives '("gnu" . "https://elpa.gnu.org/packages/") t)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
(add-to-list 'package-archives '("melpa-stable" . "https://stable.melpa.org/packages/") t)
(package-initialize)
;; We will use 'use-package' to install and configure packages.
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package))
(eval-when-compile (require 'use-package))
(add-to-list 'exec-path "/home/mihamina/Apps/node/bin")
(add-to-list 'exec-path "/home/mihamina/node_modules/.bin")
(setq inhibit-startup-message t)
(setq inhibit-startup-screen t)
(use-package php-mode
:ensure t
:mode
("\\.php\\'" . php-mode))
(add-to-list 'auto-mode-alist '("\\.php$" . php-mode))
(use-package phpunit
:ensure t)
(provide 'lang-php)
(use-package company
:ensure t
:config
(setq company-idle-delay 0.3)
(global-company-mode 1)
(global-set-key (kbd "C-") 'company-complete)
)
(use-package lsp-mode
:config
(setq lsp-prefer-flymake nil)
:hook (php-mode . lsp)
:commands lsp)
(use-package lsp-ui
:requires lsp-mode flycheck
:config
(setq lsp-ui-doc-enable t
lsp-ui-doc-use-childframe t
lsp-ui-doc-position ‘top
lsp-ui-doc-include-signature t
lsp-ui-sideline-enable nil
lsp-ui-flycheck-enable t
lsp-ui-flycheck-list-position ‘right
lsp-ui-flycheck-live-reporting t
lsp-ui-peek-enable t
lsp-ui-peek-list-width 60
lsp-ui-peek-peek-height 25
lsp-ui-sideline-enable nil)
(add-hook 'lsp-mode-hook 'lsp-ui-mode))
(use-package company-lsp
:commands company-lsp)
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(package-selected-packages
'(lsp-mode lsp-ui company company-php company-shell company-web php-mode dockerfile-mode)))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)