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

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

[nongnu] elpa/geiser-guile fe48642 008/284: M-. working for any symbol w


From: Philip Kaludercic
Subject: [nongnu] elpa/geiser-guile fe48642 008/284: M-. working for any symbol whose module can be located.
Date: Sun, 1 Aug 2021 18:29:06 -0400 (EDT)

branch: elpa/geiser-guile
commit fe4864246c62fbdab1eb5606ba27aaeb3a9ab7cc
Author: Jose Antonio Ortega Ruiz <jao@gnu.org>
Commit: Jose Antonio Ortega Ruiz <jao@gnu.org>

    M-. working for any symbol whose module can be located.
---
 geiser/introspection.scm | 29 ++++++++++++++++-------------
 1 file changed, 16 insertions(+), 13 deletions(-)

diff --git a/geiser/introspection.scm b/geiser/introspection.scm
index 03d5796..136ada3 100644
--- a/geiser/introspection.scm
+++ b/geiser/introspection.scm
@@ -89,16 +89,7 @@
   (let ((src (program-source prog 0)))
     (and src (source:line src))))
 
-(define (module-filename name)
-  (let* ((name (map symbol->string name))
-         (reverse-name (reverse name))
-        (leaf (car reverse-name))
-        (dir-hint-module-name (reverse (cdr reverse-name)))
-        (dir-hint (apply string-append
-                          (map (lambda (elt)
-                                 (string-append elt "/"))
-                               dir-hint-module-name))))
-    (%search-load-path (in-vicinity dir-hint leaf))))
+(define module-filename (@@ (ice-9 session) module-filename))
 
 (define (program-file prog)
   (let* ((mod (and prog (program-module prog)))
@@ -108,10 +99,22 @@
 (define (program-location prog)
   (make-location (program-file prog) (program-line prog)))
 
+(define (symbol-module sym)
+  (call/cc
+   (lambda (k)
+     (apropos-fold (lambda (module name var init)
+                     (if (eq? name sym) (k (module-name module)) init))
+                   #f
+                   (symbol->string sym)
+                   (apropos-fold-accessible (current-module))))))
+
+(define (make-location-from-module-name name)
+  (make-location (module-filename name) #f))
+
 (define (symbol-location sym)
   (let ((prog (resolve-symbol sym)))
-    (if (program? prog)
-        (program-location prog)
-        '())))
+    (cond ((program? prog) (program-location prog))
+          ((symbol-module sym) => make-location-from-module-name)
+          (else '()))))
 
 ;;; introspection.scm ends here



reply via email to

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