emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/phpinspect b573369fe5 1/2: Add interactive function to


From: ELPA Syncer
Subject: [elpa] externals/phpinspect b573369fe5 1/2: Add interactive function to insert a type name and auto-import it
Date: Tue, 10 Sep 2024 18:58:47 -0400 (EDT)

branch: externals/phpinspect
commit b573369fe58f0248bb71c8d6666ae71661777c2c
Author: Hugo Thunnissen <devel@hugot.nl>
Commit: Hugo Thunnissen <devel@hugot.nl>

    Add interactive function to insert a type name and auto-import it
---
 phpinspect-autoload.el |  3 +++
 phpinspect-imports.el  | 17 +++++++++++++++++
 phpinspect-project.el  | 21 +++++++++++++++++++++
 phpinspect-type.el     |  3 +++
 4 files changed, 44 insertions(+)

diff --git a/phpinspect-autoload.el b/phpinspect-autoload.el
index ef00061197..78adb664ab 100644
--- a/phpinspect-autoload.el
+++ b/phpinspect-autoload.el
@@ -202,6 +202,9 @@ the vendor directory."
       (push type-fqn bag)
       (puthash type-name bag (phpinspect-autoloader-type-name-fqn-bags al)))))
 
+(defun phpinspect-autoloader-get-type-names (al)
+  (hash-table-keys (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)))
 
diff --git a/phpinspect-imports.el b/phpinspect-imports.el
index db34b4d2ed..9e2505f025 100644
--- a/phpinspect-imports.el
+++ b/phpinspect-imports.el
@@ -398,4 +398,21 @@ that there are import (\"use\") statements for them."
               (phpinspect-format-use-statements buffer 
(phpinspect-find-first-use parent))
               (phpinspect-buffer-parse buffer 'no-interrupt)))))))
 
+(defun phpinspect-insert-type (type-name)
+  "Insert TYPE-NAME as string into current buffer.
+
+This function adds a use statement for TYPE-NAME when none is found."
+  (interactive (list (phpinspect-project-read-type-name "Select a Type: ")))
+  (if phpinspect-current-buffer
+      (let* ((rctx (phpinspect-buffer-get-resolvecontext
+                    phpinspect-current-buffer (point)))
+             (type-resolver (phpinspect--make-type-resolver-for-resolvecontext 
rctx)))
+        (unless (phpinspect-type-resolver-get-import type-resolver type-name)
+          (phpinspect-add-use-interactive
+           type-name phpinspect-current-buffer
+           (phpinspect-buffer-project phpinspect-current-buffer)
+           (phpinspect-buffer-namespace-at-point phpinspect-current-buffer 
(point))))
+        (insert (phpinspect-name-string type-name)))
+    (phpinspect-message "Not a phpinspect buffer")))
+
 (provide 'phpinspect-imports)
diff --git a/phpinspect-project.el b/phpinspect-project.el
index 32f05609e3..79ba9909ba 100644
--- a/phpinspect-project.el
+++ b/phpinspect-project.el
@@ -358,6 +358,27 @@ before the search is executed."
     (or (phpinspect-project-get-typedef-or-extra project type)
         (phpinspect-project-get-typedef-create project type))))
 
+(defvar phpinspect--project-type-name-history nil
+  "History list to use for `phpinspect-project-read-type-name'")
+
+(defun phpinspect-project-read-type-name (prompt &optional project)
+  "Read a non-fully-qualified type-name using `completing-read'.
+
+PROMPT is passed to `completing-read'.
+
+PROJECT, if provided should be an instance of
+`phpinspect-project'.  If PROJECT is nil, the active project is
+determined using `phpinspect-current-project'."
+  (unless project (setq project (phpinspect-current-project)))
+
+  (phpinspect-intern-name
+   (completing-read
+    prompt
+    (phpinspect-names-to-alist
+     (phpinspect-autoloader-get-type-names
+      (phpinspect-project-autoload project)))
+    nil 'require-match nil 'phpinspect--project-type-name-history)))
+
 ;;; INDEX TASK
 (cl-defstruct (phpinspect-index-task
                (:constructor phpinspect-make-index-task-generated))
diff --git a/phpinspect-type.el b/phpinspect-type.el
index bf5af9b61b..a164ed0c51 100644
--- a/phpinspect-type.el
+++ b/phpinspect-type.el
@@ -222,6 +222,9 @@ NAMESPACE may be nil, or a string with a namespace FQN."
   (types :mutable nil :type list)
   (namespace :mutable nil :type string))
 
+(defun phpinspect-type-resolver-get-import (resolver name)
+  (assoc-default name (phpinspect-type-resolver--types resolver) #'eq nil))
+
 (defun phpinspect--make-type-resolver (types &optional token-tree namespace)
   "Little wrapper closure to pass around and resolve types with."
   (let* ((inside-class



reply via email to

[Prev in Thread] Current Thread [Next in Thread]