From b3e98f51828d698db44d543475c562d577c5ead5 Mon Sep 17 00:00:00 2001 From: USAMI Kenta Date: Sun, 6 Jan 2019 02:03:09 +0900 Subject: [PATCH 01/12] Add customize variable phpactor-package-directory --- phpactor.el | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/phpactor.el b/phpactor.el index db39365..2ce1e17 100644 --- a/phpactor.el +++ b/phpactor.el @@ -51,6 +51,21 @@ (require 'subr-x) (require 'composer) +;; Custom variables +;;;###autoload +(defgroup phpactor nil + "PHP refactoring and introspection" + :prefix "phpactor-" + :group 'tools + :group 'php) + +;;;###autoload +(defcustom phpactor-package-directory + (eval-when-compile + (expand-file-name (locate-user-emacs-file "phpactor/"))) + "Directory for setup Phactor." + :type 'directory) + ;; Variables ;;;###autoload (progn From 88c735e9ad7041d3a5c29e9d88a913fd9f25d370 Mon Sep 17 00:00:00 2001 From: USAMI Kenta Date: Sun, 6 Jan 2019 02:21:09 +0900 Subject: [PATCH 02/12] Require php-runtime package for PHP's copy() function --- phpactor.el | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/phpactor.el b/phpactor.el index 2ce1e17..ae51756 100644 --- a/phpactor.el +++ b/phpactor.el @@ -7,7 +7,7 @@ ;; Created: 8 Apr 2018 ;; Version: 0.1.0 ;; Keywords: tools, php -;; Package-Requires: ((emacs "24.4") (cl-lib "0.5") (f "0.17") (composer "0.1")) +;; Package-Requires: ((emacs "24.4") (cl-lib "0.5") (f "0.17") (php-runtime "0.2") (composer "0.1")) ;; URL: https://github.com/emacs-php/phpactor.el ;; License: GPL-3.0-or-later @@ -45,8 +45,10 @@ ;; go--apply-rcs-patch go--goto-line go--delete-whole-line ;;; Code: +(require 'cl-lib) (require 'json) (require 'php-project) +(require 'php-runtime) (require 'ring) (require 'subr-x) (require 'composer) From 4136409233af50f5282f22bb8d4819a71d0a3e4e Mon Sep 17 00:00:00 2001 From: USAMI Kenta Date: Sun, 6 Jan 2019 02:22:51 +0900 Subject: [PATCH 03/12] Add constant phpactor--base-directory and prioritize it to locate-library --- phpactor.el | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/phpactor.el b/phpactor.el index ae51756..08f63a3 100644 --- a/phpactor.el +++ b/phpactor.el @@ -94,12 +94,19 @@ (defvar phpactor--buffer-name "*Phpactor*") +;;; Constants (defconst phpactor-command-name "phpactor") (defconst phpactor--supported-rpc-version "1.0.0") +(defconst phpactor--base-directory + (eval-when-compile + (when (and (boundp 'byte-compile-current-file) byte-compile-current-file) + (file-name-directory byte-compile-current-file)))) +(defconst phpactor--remote-composer-file-url-dir + "https://raw.githubusercontent.com/emacs-php/phpactor.el/master/") ;; Special variables (defvar phpactor--execute-async nil) - + ;; Utility functions (defun phpactor-find-executable () "Return Phpactor command or path to executable." @@ -121,7 +128,8 @@ (defun phpactor--get-package-directory () "Return the folder where phpactor.el is installed." - (file-name-directory(locate-library "phpactor.el"))) + (or phpactor-package-directory + (file-name-directory (locate-library "phpactor.el")))) (defun phpactor-get-working-dir () "Return working directory of Phpactor." From 45bf6cc201cfb65b196523039ec3c3ef8250c42d Mon Sep 17 00:00:00 2001 From: USAMI Kenta Date: Sun, 6 Jan 2019 02:25:18 +0900 Subject: [PATCH 04/12] Rename and refactor phpactor-install-or-update Instead of the package's directory, copy the file to the user's .emacs.d directory and install it. --- phpactor.el | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/phpactor.el b/phpactor.el index 08f63a3..b8464b5 100644 --- a/phpactor.el +++ b/phpactor.el @@ -117,14 +117,23 @@ vendor-executable)) (error "Phpactor not found. Please run phpactor-update"))) -(defun phpactor-update () +;;;###autoload +(defun phpactor-install-or-update () "Install or update phpactor inside phpactor.el's folder." (interactive) - (let ((package-folder (phpactor--get-package-directory)) - (composer-executable (car (composer--find-executable)))) - (unless composer-executable (error "`composer' not found")) - (setq default-directory package-folder) - (call-process composer-executable nil (get-buffer-create phpactor--buffer-name) nil "install" "--no-dev"))) + (let* ((default-directory (phpactor--get-package-directory)) + (directory (or phpactor--base-directory + phpactor--remote-composer-file-url-dir))) + (unless (file-directory-p phpactor-package-directory) + (make-directory phpactor-package-directory)) + (cl-loop for file in '("composer.json" "composer.lock") + for code = (format "copy(%s, %s)" + (php-runtime-quote-string (concat directory file)) + (php-runtime-quote-string (concat phpactor-package-directory file))) + do (message code) + do (php-runtime-expr code)) + (composer nil "install" "--no-dev"))) +(defalias 'phpactor-update #'phpactor-install-or-update) (defun phpactor--get-package-directory () "Return the folder where phpactor.el is installed." From 72d25842d16a1d263b8474930e68980159909bdb Mon Sep 17 00:00:00 2001 From: USAMI Kenta Date: Wed, 6 Feb 2019 01:29:39 +0900 Subject: [PATCH 05/12] Modify doc comment to clarify intent --- phpactor.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/phpactor.el b/phpactor.el index b8464b5..fa2e687 100644 --- a/phpactor.el +++ b/phpactor.el @@ -65,7 +65,7 @@ (defcustom phpactor-package-directory (eval-when-compile (expand-file-name (locate-user-emacs-file "phpactor/"))) - "Directory for setup Phactor." + "Directory for setup Phactor. (default `~/.emacs.d/phpactor/')." :type 'directory) ;; Variables @@ -136,7 +136,7 @@ (defalias 'phpactor-update #'phpactor-install-or-update) (defun phpactor--get-package-directory () - "Return the folder where phpactor.el is installed." + "Return the folder where Phpactor is installed." (or phpactor-package-directory (file-name-directory (locate-library "phpactor.el")))) From 52bff67a999acebe9dc9f9696713fc4983538b55 Mon Sep 17 00:00:00 2001 From: USAMI Kenta Date: Wed, 6 Feb 2019 01:31:53 +0900 Subject: [PATCH 06/12] Rename phpactor-package-directory to phpactor-install-directory The term "Package" is ambiguous for both Lisp package (ELPA) and PHP package (Composer). Here we used Composer to try to set up Phpactor in a different directory with package.el, which meant Composer package. --- phpactor.el | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/phpactor.el b/phpactor.el index fa2e687..6344c8f 100644 --- a/phpactor.el +++ b/phpactor.el @@ -62,7 +62,7 @@ :group 'php) ;;;###autoload -(defcustom phpactor-package-directory +(defcustom phpactor-install-directory (eval-when-compile (expand-file-name (locate-user-emacs-file "phpactor/"))) "Directory for setup Phactor. (default `~/.emacs.d/phpactor/')." @@ -124,12 +124,12 @@ (let* ((default-directory (phpactor--get-package-directory)) (directory (or phpactor--base-directory phpactor--remote-composer-file-url-dir))) - (unless (file-directory-p phpactor-package-directory) - (make-directory phpactor-package-directory)) + (unless (file-directory-p phpactor-install-directory) + (make-directory phpactor-install-directory)) (cl-loop for file in '("composer.json" "composer.lock") for code = (format "copy(%s, %s)" (php-runtime-quote-string (concat directory file)) - (php-runtime-quote-string (concat phpactor-package-directory file))) + (php-runtime-quote-string (concat phpactor-install-directory file))) do (message code) do (php-runtime-expr code)) (composer nil "install" "--no-dev"))) @@ -137,7 +137,7 @@ (defun phpactor--get-package-directory () "Return the folder where Phpactor is installed." - (or phpactor-package-directory + (or phpactor-install-directory (file-name-directory (locate-library "phpactor.el")))) (defun phpactor-get-working-dir () From 664815c4fc1ecfcbc65c69a8ea3449b38228f561 Mon Sep 17 00:00:00 2001 From: USAMI Kenta Date: Wed, 6 Feb 2019 01:38:49 +0900 Subject: [PATCH 07/12] Expand phpactor--get-package-directory call to a variable Before the change, when phpactor-install-directory was NIL, it falls back to the directory of the Lisp package. However, there is no demand for that function, so we no longer have such an option. --- phpactor.el | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/phpactor.el b/phpactor.el index 6344c8f..d21b432 100644 --- a/phpactor.el +++ b/phpactor.el @@ -112,7 +112,7 @@ "Return Phpactor command or path to executable." (or (when phpactor-executable (php-project--eval-bootstrap-scripts phpactor-executable)) - (let ((vendor-executable (f-join (phpactor--get-package-directory) "vendor/bin/phpactor"))) + (let ((vendor-executable (f-join phpactor-install-directory "vendor/bin/phpactor"))) (when (file-exists-p vendor-executable) vendor-executable)) (error "Phpactor not found. Please run phpactor-update"))) @@ -121,7 +121,7 @@ (defun phpactor-install-or-update () "Install or update phpactor inside phpactor.el's folder." (interactive) - (let* ((default-directory (phpactor--get-package-directory)) + (let* ((default-directory phpactor-install-directory) (directory (or phpactor--base-directory phpactor--remote-composer-file-url-dir))) (unless (file-directory-p phpactor-install-directory) @@ -135,11 +135,6 @@ (composer nil "install" "--no-dev"))) (defalias 'phpactor-update #'phpactor-install-or-update) -(defun phpactor--get-package-directory () - "Return the folder where Phpactor is installed." - (or phpactor-install-directory - (file-name-directory (locate-library "phpactor.el")))) - (defun phpactor-get-working-dir () "Return working directory of Phpactor." (directory-file-name From 7694639d7e6581bef3af6bf5b41149b71435686f Mon Sep 17 00:00:00 2001 From: USAMI Kenta Date: Wed, 6 Feb 2019 02:13:11 +0900 Subject: [PATCH 08/12] Refactory phpactor--base-directory and modify doc comment --- phpactor.el | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/phpactor.el b/phpactor.el index d21b432..0bf2f63 100644 --- a/phpactor.el +++ b/phpactor.el @@ -98,11 +98,28 @@ (defconst phpactor-command-name "phpactor") (defconst phpactor--supported-rpc-version "1.0.0") (defconst phpactor--base-directory - (eval-when-compile - (when (and (boundp 'byte-compile-current-file) byte-compile-current-file) - (file-name-directory byte-compile-current-file)))) + (let ((byte-compiled-dir + (eval-when-compile + (when (and (boundp 'byte-compile-current-file) byte-compile-current-file) + byte-compile-current-file))) + lib-dir) + (if (and byte-compiled-dir (file-directory-p byte-compiled-dir)) + (file-name-directory byte-compiled-dir) + (setq lib-dir (locate-library "phpactor.el")) + (when (and lib-dir (file-directory-p lib-dir)) + (file-name-directory lib-dir)))) + "Path to phpactor.el installed directory. +Byte compilation information or `locate-library' function is referenced. + +NOTE: If you can not acquire either of them when you run Emacs, you will get +the necessary files from the Web.") + (defconst phpactor--remote-composer-file-url-dir - "https://raw.githubusercontent.com/emacs-php/phpactor.el/master/") + "https://raw.githubusercontent.com/emacs-php/phpactor.el/master/" + "Path of the URL for getting the files for Phpactor. +Please be aware that this files refers to the latest version regardless of +version. It is also affected by changes in the distribution URL structure +of GitHub.") ;; Special variables (defvar phpactor--execute-async nil) From 7372826c2d77064d8a63c6f283c176ae6e2fa5a9 Mon Sep 17 00:00:00 2001 From: USAMI Kenta Date: Wed, 6 Feb 2019 02:13:55 +0900 Subject: [PATCH 09/12] Rename phpactor--lisp-directory and add strict check of file system The purpose of this change is to resolve the "package" ambiguity between Lisp and PHP. --- phpactor.el | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/phpactor.el b/phpactor.el index 0bf2f63..e75e650 100644 --- a/phpactor.el +++ b/phpactor.el @@ -97,7 +97,7 @@ ;;; Constants (defconst phpactor-command-name "phpactor") (defconst phpactor--supported-rpc-version "1.0.0") -(defconst phpactor--base-directory +(defconst phpactor--lisp-directory (let ((byte-compiled-dir (eval-when-compile (when (and (boundp 'byte-compile-current-file) byte-compile-current-file) @@ -139,8 +139,12 @@ of GitHub.") "Install or update phpactor inside phpactor.el's folder." (interactive) (let* ((default-directory phpactor-install-directory) - (directory (or phpactor--base-directory - phpactor--remote-composer-file-url-dir))) + (directory (if (and phpactor--lisp-directory + (file-directory-p phpactor--lisp-directory) + (file-exists-p (expand-file-name "composer.json" phpactor--lisp-directory)) + (file-exists-p (expand-file-name "composer.lock" phpactor--lisp-directory))) + phpactor--lisp-directory + phpactor--remote-composer-file-url-dir))) (unless (file-directory-p phpactor-install-directory) (make-directory phpactor-install-directory)) (cl-loop for file in '("composer.json" "composer.lock") From d96a722fa11087f4e63d5792b6f3aa614b1c39b4 Mon Sep 17 00:00:00 2001 From: USAMI Kenta Date: Wed, 6 Feb 2019 02:36:15 +0900 Subject: [PATCH 10/12] Add comment about reason not to use f-join --- phpactor.el | 1 + 1 file changed, 1 insertion(+) diff --git a/phpactor.el b/phpactor.el index e75e650..7682c20 100644 --- a/phpactor.el +++ b/phpactor.el @@ -149,6 +149,7 @@ of GitHub.") (make-directory phpactor-install-directory)) (cl-loop for file in '("composer.json" "composer.lock") for code = (format "copy(%s, %s)" + ;; Do not use `f-join' as this string may be a URL. (php-runtime-quote-string (concat directory file)) (php-runtime-quote-string (concat phpactor-install-directory file))) do (message code) From 4f84002fbe3802f7e93a186aaa4fc50fe9c95a31 Mon Sep 17 00:00:00 2001 From: Mikael Kermorgant Date: Sun, 20 Jan 2019 15:10:35 +0200 Subject: [PATCH 11/12] removal of redundant or unused code --- phpactor.el | 1 - 1 file changed, 1 deletion(-) diff --git a/phpactor.el b/phpactor.el index 7682c20..051c249 100644 --- a/phpactor.el +++ b/phpactor.el @@ -152,7 +152,6 @@ of GitHub.") ;; Do not use `f-join' as this string may be a URL. (php-runtime-quote-string (concat directory file)) (php-runtime-quote-string (concat phpactor-install-directory file))) - do (message code) do (php-runtime-expr code)) (composer nil "install" "--no-dev"))) (defalias 'phpactor-update #'phpactor-install-or-update) From 2c5f79b121eae6286530e3ed93f0b313fad5b9d8 Mon Sep 17 00:00:00 2001 From: USAMI Kenta Date: Wed, 6 Feb 2019 02:52:37 +0900 Subject: [PATCH 12/12] Create .gitignore to prevent unnecessary files from being copied --- phpactor.el | 3 +++ 1 file changed, 3 insertions(+) diff --git a/phpactor.el b/phpactor.el index 051c249..7338065 100644 --- a/phpactor.el +++ b/phpactor.el @@ -147,6 +147,9 @@ of GitHub.") phpactor--remote-composer-file-url-dir))) (unless (file-directory-p phpactor-install-directory) (make-directory phpactor-install-directory)) + ;; Create .gitignore to prevent unnecessary files from being copied to GitHub + (unless (file-exists-p (expand-file-name ".gitignore" phpactor-install-directory)) + (f-write-text "*\n" 'utf-8 (expand-file-name ".gitignore" phpactor-install-directory))) (cl-loop for file in '("composer.json" "composer.lock") for code = (format "copy(%s, %s)" ;; Do not use `f-join' as this string may be a URL.