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

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

[nongnu] elpa/go-mode 366ada1 011/495: add tab completion for go-import-


From: ELPA Syncer
Subject: [nongnu] elpa/go-mode 366ada1 011/495: add tab completion for go-import-add
Date: Sat, 7 Aug 2021 09:04:33 -0400 (EDT)

branch: elpa/go-mode
commit 366ada187cce335b878c11374ecaebba12e2daa1
Author: Dominik Honnef <dominikh@fork-bomb.org>
Commit: Dominik Honnef <dominikh@fork-bomb.org>

    add tab completion for go-import-add
---
 go-mode.el | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 55 insertions(+), 2 deletions(-)

diff --git a/go-mode.el b/go-mode.el
index 95d8410..3a2e864 100644
--- a/go-mode.el
+++ b/go-mode.el
@@ -556,7 +556,10 @@ When called with a prefix argument asks for an alternative 
name
 to import the package as.
 
 If no list exists yet, one will be created if possible."
-  (interactive "P\nMPackage: ")
+  (interactive
+   (list
+    current-prefix-arg
+    (completing-read "Package: " (go-packages))))
   (save-excursion
     (let (as line)
       (if arg
@@ -570,5 +573,55 @@ If no list exists yet, one will be created if possible."
         ('single (insert "import " line "\n"))
         ('none (insert "\nimport (\n\t" line "\n)\n"))))))
 
-(provide 'go-mode)
+(defun go-directory-dirs (dir)
+  (unless (file-directory-p dir)
+    (error "Not a directory `%s'" dir))
+  (let ((dir (directory-file-name dir))
+        (dirs '())
+        (files (directory-files dir nil nil t)))
+    (dolist (file files)
+      (unless (member file '("." ".."))
+        (let ((file (concat dir "/" file)))
+          (when (file-directory-p file)
+            (setq dirs (append (cons file
+                                     (go-directory-dirs file))
+                               dirs))))))
+    dirs))
+
+(defun go-flatten (lst)
+  (if (atom lst)
+      (list lst)
+    (let ((item (car lst))
+          (rest (cdr lst)))
+      (if (not (atom item))
+          (if rest
+              (append (go-flatten item) (go-flatten rest))
+            (let ((item-rest (cdr item)))
+              (if item-rest
+                  (append (go-flatten (car item))(go-flatten item-rest))
+                (go-flatten (car item)))))
+        (if rest
+            (if item
+                (append (list item) (go-flatten rest))
+              (go-flatten rest))
+          (if item
+              (list item)
+            nil))))))
+
+(defun go-packages ()
+  (sort (delete-dups (go-flatten (mapcar (lambda (topdir)
+            (let ((pkgdir (concat topdir "/pkg/")))
+            (mapcar (lambda (dir)
+                                (mapcar (lambda (file)
+                                          (let ((sub (substring file (length 
pkgdir) -2)))
+                                            (unless (or (string-prefix-p 
"obj/" sub) (string-prefix-p "tool/" sub))
+                                              (mapconcat 'identity (cdr 
(split-string sub "/")) "/")
+                                            )
+                                          ))
+                                        (directory-files dir t "\\.a$")))
+                              (go-directory-dirs pkgdir))
+            ))
+          (list (getenv "GOROOT") (getenv "GOPATH"))))) 'string<))
+
 
+(provide 'go-mode)



reply via email to

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