diff --git a/phpinspect-autoload.el b/phpinspect-autoload.el index 49f0d5b..95043bf 100644 --- a/phpinspect-autoload.el +++ b/phpinspect-autoload.el @@ -173,10 +173,13 @@ bareword typenames.")) (car (last (split-string (phpinspect-name-string type-fqn) "\\\\"))))) (bag (gethash type-name (phpinspect-autoloader-type-name-fqn-bags al)))) (if bag - (push type-fqn bag) + (setcdr bag (cons type-fqn (cdr bag))) (push type-fqn bag) (puthash type-name bag (phpinspect-autoloader-type-name-fqn-bags al))))) +(cl-defmethod phpinspect-autoloader-get-type-bag ((al phpinspect-autoloader) (type-name (head phpinspect-name))) + (gethash type-name (phpinspect-autoloader-type-name-fqn-bags al))) + (cl-defmethod phpinspect-iterate-composer-jsons ((al phpinspect-autoloader) file) (let* ((fs (phpinspect-autoloader-fs al)) diff --git a/phpinspect-imports.el b/phpinspect-imports.el index 943abdc..03c23fe 100644 --- a/phpinspect-imports.el +++ b/phpinspect-imports.el @@ -96,15 +96,13 @@ buffer position to insert the use statement at." (defun phpinspect-add-use-interactive (typename buffer project &optional namespace-token) (let* ((autoloader (phpinspect-project-autoload project)) - (fqn-bags (phpinspect-autoloader-type-name-fqn-bags autoloader))) - - (let ((fqns (gethash typename fqn-bags))) - (cond ((= 1 (length fqns)) - (phpinspect-add-use (phpinspect-name-string (car fqns)) buffer namespace-token)) - ((> (length fqns) 1) - (phpinspect-add-use (completing-read "Class: " fqns) - buffer namespace-token)) - (t (phpinspect-message "No import found for type %s" typename)))))) + (fqns (phpinspect-autoloader-get-type-bag autoloader typename))) + (cond ((= 1 (length fqns)) + (phpinspect-add-use (phpinspect-name-string (car fqns)) buffer namespace-token)) + ((> (length fqns) 1) + (phpinspect-add-use (completing-read "Class: " fqns) + buffer namespace-token)) + (t (phpinspect-message "No import found for type %s" typename))))) (defun phpinspect-namespace-part-of-typename (typename) (string-trim-right typename "\\\\?[^\\]+")) diff --git a/test/test-autoload.el b/test/test-autoload.el index c9737a5..e7f8663 100644 --- a/test/test-autoload.el +++ b/test/test-autoload.el @@ -100,6 +100,15 @@ (should (= 2 (length (seq-filter #'phpinspect-psr0-p result)))) (should (= 2 (length (seq-filter #'phpinspect-psr4-p result)))))) +(ert-deftest phpinspect-al-put-type-bag () + (let ((al (phpinspect-make-autoloader))) + (phpinspect-autoloader-put-type-bag al (phpinspect-intern-name "\\App\\Place\\Mountain")) + (phpinspect-autoloader-put-type-bag al (phpinspect-intern-name "\\App\\Earth\\Mountain")) + + (should (equal `(,(phpinspect-intern-name "\\App\\Place\\Mountain") + ,(phpinspect-intern-name "\\App\\Earth\\Mountain")) + (phpinspect-autoloader-get-type-bag al (phpinspect-intern-name "Mountain")))))) + (ert-deftest phpinspect-al-strategy-execute () (let* ((fs (phpinspect-make-virtual-fs)) (project (phpinspect--make-project :root "/project/root" :fs fs))