|
7 | 7 | ;; Created: 8 Apr 2018 |
8 | 8 | ;; Version: 0.1.0 |
9 | 9 | ;; Keywords: tools, php |
10 | | -;; Package-Requires: ((emacs "24.3") (cl-lib "0.5") (f "0.17")) |
| 10 | +;; Package-Requires: ((emacs "24.3") (cl-lib "0.5") (f "0.17") (composer "0.1")) |
11 | 11 | ;; URL: https://github.com/emacs-php/phpactor.el |
12 | 12 | ;; License: GPL-3.0-or-later |
13 | 13 |
|
|
48 | 48 | (require 'json) |
49 | 49 | (require 'php-project) |
50 | 50 | (require 'ring) |
| 51 | +(require 'composer) |
51 | 52 |
|
52 | 53 | ;; Variables |
53 | 54 | ;;;###autoload |
|
86 | 87 | "Return Phpactor command or path to executable." |
87 | 88 | (or (when phpactor-executable |
88 | 89 | (php-project--eval-bootstrap-scripts phpactor-executable)) |
89 | | - (executable-find phpactor-command-name) |
90 | | - (let ((vendor-executable (f-join (phpactor-get-working-dir) "vendor/bin/phpactor"))) |
| 90 | + (let ((vendor-executable (f-join (phpactor-package-directory) "vendor/bin/phpactor"))) |
91 | 91 | (when (file-exists-p vendor-executable) |
92 | | - vendor-executable)))) |
| 92 | + vendor-executable)) |
| 93 | + (error "Phpactor not found. Please run phpactor-update"))) |
| 94 | + |
| 95 | +(defun phpactor-update () |
| 96 | + "Install or update phpactor inside phpactor.el's folder." |
| 97 | + (interactive) |
| 98 | + (let ((package-folder (phpactor-package-directory)) |
| 99 | + (composer-executable (car (composer--find-executable)))) |
| 100 | + (unless composer-executable (error ("composer not found."))) |
| 101 | + (setq default-directory package-folder) |
| 102 | + (call-process composer-executable nil (get-buffer-create phpactor-action--buffer-name) nil "install" "--no-dev"))) |
| 103 | + |
| 104 | +(defun phpactor-package-directory () |
| 105 | + "Return the folder where phpactor.el is installed." |
| 106 | + (file-name-directory(locate-library "phpactor.el"))) |
93 | 107 |
|
94 | 108 | (defun phpactor-get-working-dir () |
95 | 109 | "Return working directory of Phpactor." |
@@ -464,7 +478,9 @@ function." |
464 | 478 | (cl-defun phpactor-action-dispatch (&key action parameters version) |
465 | 479 | "Execite action by `NAME' and `PARAMETERS'." |
466 | 480 | (when (and version (not (equal phpactor--supported-rpc-version version))) |
467 | | - (error "Phpactor uses rpc protocol %s whereas this package requires %s" version phpactor--supported-rpc-version)) |
| 481 | + (if (phpactor-executable) |
| 482 | + (error "Phpactor uses rpc protocol %s but this package requires %s" version phpactor--supported-rpc-version) |
| 483 | + (error "Phpactor should be upgraded. Please run phpactor-update"))) |
468 | 484 | (phpactor--add-history 'phpactor-action-dispatch (list :action action :parameters parameters :version version)) |
469 | 485 | (let ((func (cdr-safe (assq (intern action) phpactor-action-table)))) |
470 | 486 | (if func |
|
0 commit comments