40 lines
1.7 KiB
EmacsLisp
40 lines
1.7 KiB
EmacsLisp
(require 'yasnippet)
|
|
(defvar yas-text)
|
|
|
|
(defun python-split-args (arg-string)
|
|
"Split a python argument string into ((name, default)..) tuples"
|
|
(mapcar (lambda (x)
|
|
(split-string x "[[:blank:]]*=[[:blank:]]*" t))
|
|
(split-string arg-string "[[:blank:]]*,[[:blank:]]*" t)))
|
|
|
|
(defun python-args-to-docstring ()
|
|
"return docstring format for the python arguments in yas-text"
|
|
(let* ((indent (concat "\n" (make-string (current-column) 32)))
|
|
(args (python-split-args yas-text))
|
|
(max-len (if args (apply 'max (mapcar (lambda (x) (length (nth 0 x))) args)) 0))
|
|
(formatted-args (mapconcat
|
|
(lambda (x)
|
|
(concat (nth 0 x) (make-string (- max-len (length (nth 0 x))) ? ) " -- "
|
|
(if (nth 1 x) (concat "\(default " (nth 1 x) "\)"))))
|
|
args
|
|
indent)))
|
|
(unless (string= formatted-args "")
|
|
(mapconcat 'identity (list "Keyword Arguments:" formatted-args) indent))))
|
|
|
|
(defun python-args-to-docstring-numpy ()
|
|
"return docstring format for the python arguments in yas-text"
|
|
(let* ((args (python-split-args yas-text))
|
|
(format-arg (lambda(arg)
|
|
(concat (nth 0 arg) " : " (if (nth 1 arg) ", optional") "\n")))
|
|
(formatted-params (mapconcat format-arg args "\n"))
|
|
(formatted-ret (mapconcat format-arg (list (list "out")) "\n")))
|
|
(unless (string= formatted-params "")
|
|
(mapconcat 'identity
|
|
(list "\nParameters\n----------" formatted-params
|
|
"\nReturns\n-------" formatted-ret)
|
|
"\n"))))
|
|
|
|
|
|
(add-hook 'python-mode-hook
|
|
'(lambda () (set (make-local-variable 'yas-indent-line) 'fixed)))
|