[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/geiser-guile b20a784 010/284: Better arg lists.
From: |
Philip Kaludercic |
Subject: |
[nongnu] elpa/geiser-guile b20a784 010/284: Better arg lists. |
Date: |
Sun, 1 Aug 2021 18:29:06 -0400 (EDT) |
branch: elpa/geiser-guile
commit b20a784d45ac741443e2a2ed6f81178aab93ea63
Author: Jose Antonio Ortega Ruiz <jao@gnu.org>
Commit: Jose Antonio Ortega Ruiz <jao@gnu.org>
Better arg lists.
---
geiser/introspection.scm | 38 +++++++++++++++++++++++++-------------
1 file changed, 25 insertions(+), 13 deletions(-)
diff --git a/geiser/introspection.scm b/geiser/introspection.scm
index 7fce4c9..38c0b79 100644
--- a/geiser/introspection.scm
+++ b/geiser/introspection.scm
@@ -30,6 +30,9 @@
#:use-module (ice-9 session)
#:use-module (srfi srfi-1))
+(define (proc-args proc)
+ (obj-args (resolve-symbol proc)))
+
(define (resolve-symbol sym)
(and (symbol? sym)
(module-bound? (current-module) sym)
@@ -52,15 +55,25 @@
(program-module program))))
(define (procedure-args proc)
- (let* ((arity (procedure-property proc 'arity))
- (req (first arity))
- (opt (third arity))
- (env (procedure-environment proc)))
- (format-args (map (lambda (n)
- (string->symbol (format "arg~A" (+ 1 n))))
- (iota req))
- (and opt 'rest)
- (and (not (null? env)) env))))
+ (let ((name (procedure-name proc)))
+ (cond ((procedure-source proc) => (lambda (src)
+ (procedure-args-from-source name src)))
+ (else (let* ((arity (procedure-property proc 'arity))
+ (req (first arity))
+ (opt (third arity)))
+ (format-args (map (lambda (n)
+ (string->symbol (format "arg~A" (+ 1
n))))
+ (iota req))
+ (and opt 'rest)
+ (and name (symbol-module name))))))))
+
+(define (procedure-args-from-source name src)
+ (let ((formals (cadr src)))
+ (cond ((list? formals) (format-args formals #f (symbol-module name)))
+ ((pair? formals) (format-args (car formals)
+ (cdr formals)
+ (symbol-module name)))
+ (else '()))))
(define (macro-args macro)
(let ((prog (macro-transformer macro)))
@@ -71,10 +84,9 @@
(define (format-args args opt module)
(list (cons 'required args)
(cons 'optional (or opt '()))
- (cons 'module (if module (module-name module) '()))))
-
-(define (proc-args proc)
- (obj-args (resolve-symbol proc)))
+ (cons 'module (cond ((module? module) (module-name module))
+ ((list? module) module)
+ (else '())))))
(define (completions prefix)
(sort! (map symbol->string
- [nongnu] branch elpa/geiser-guile created (now 8dda28f), Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile 3bb2a98 006/284: Don't let (ice-9 history) confuse the evaluator., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile 849fc5f 002/284: Compile file., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile 3fa6b34 004/284: Load file commands., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile 1b60c6f 003/284: * scheme/guile/geiser/eval.scm: missing file in previous commit, Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile 475fab3 005/284: README stuff., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile 7d50479 001/284: Guile scheme files moved to scheme/guile., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile b20a784 010/284: Better arg lists.,
Philip Kaludercic <=
- [nongnu] elpa/geiser-guile b853bac 009/284: Faster M-., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile 9ff1f7e 033/284: Eval/load file in the correct module., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile 441cc2a 037/284: Refactoring: local bindings discovery moved to schemeland., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile ceca3e5 038/284: Display (quote foo) as 'foo in autodoc strings., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile 4ab2e9c 016/284: Autodoc: try symbol at point first. Some cleanups., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile a64467d 022/284: New command to open module file., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile 8c8790c 029/284: Capture backtrace. Fix load/compile from Emacs., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile 8db7920 030/284: Better stack delimitation: include only frames relevant to the eval'd expression., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile c60b2e0 035/284: Put new procedure-arguments into (geiser introspection) until it goes upstream., Philip Kaludercic, 2021/08/01
- [nongnu] elpa/geiser-guile 0d62495 048/284: Fix autodoc support for multiline arities in documentation., Philip Kaludercic, 2021/08/01