diff --git a/etc/yasnippet/snippets/python-mode/.yas-setup.el b/etc/yasnippet/snippets/python-mode/.yas-setup.el new file mode 100644 index 0000000..0c9b857 --- /dev/null +++ b/etc/yasnippet/snippets/python-mode/.yas-setup.el @@ -0,0 +1,76 @@ +(defun python-defun-doc-string-indent-offset () + "Find the doc-string indentation offset within a class or function." + (save-excursion + (python-nav-beginning-of-defun) + ;; (skip-syntax-forward " ") + (+ (current-column) python-indent-offset))) + +(defun python-split-arguments (arg-string) + "Split a python argument string into ((name, default)..) tuples." + (delq nil (mapcar (lambda (x) + (unless (or (string= x "/") (string= x "*")) + (split-string x "[[:blank:]]*=[[:blank:]]*" t))) + (split-string arg-string "[[:blank:]]*,[[:blank:]]*" t)))) + +(defun python-arguments-to-sphinx-doc-string () + "Format arguments into a Sphinx (reST) style Python docstring." + (let* ((indent + (concat "\n" (make-string (python-defun-doc-string-indent-offset) 32))) + (arguments (python-split-arguments yas-text)) + (text (mapconcat + (lambda (x) + (concat ":arg XXX " (nth 0 x) ": XXX")) + arguments + indent))) + (unless (string= text "") + (mapconcat 'identity (list "" "" text "") indent)))) + +(defun python-arguments-to-numpy-doc-string () + "Format arguments into a NumPy style Python docstring." + (let* ((indent + (concat "\n" (make-string (python-defun-doc-string-indent-offset) 32))) + (arguments (python-split-arguments yas-text)) + (text (mapconcat + (lambda (x) + (concat (nth 0 x) " : XXX" (if (nth 1 x) ", optional") + (concat indent " XXX." ))) + arguments + indent))) + (unless (string= text "") + (mapconcat 'identity + (list "" "" "Parameters" "----------" text "") indent)))) + +(defun python-arguments-to-google-doc-string () + "Format arguments into a Google style Python docstring." + (let* ((indent + (concat "\n" (make-string (python-defun-doc-string-indent-offset) 32))) + (arguments (python-split-arguments yas-text)) + (text (mapconcat + (lambda (x) + (concat " " (nth 0 x) + (if (nth 1 x) " (Optional[XXX]): XXX." + " (XXX): XXX."))) + arguments + indent))) + (unless (string= text "") + (mapconcat 'identity + (list "" "" "Arguments:" text "") indent)))) + +(defun python-arguments-to-doc-string () + (python-arguments-to-numpy-doc-string)) + +(defun python-arguments-to-self-init-string () + "Format each argument into 'self.argument = argument' statements." + (let* ((indent (concat "\n" (make-string (current-column) 32))) + (arguments (python-split-arguments yas-text)) + (text (mapconcat + (lambda (x) + (concat "self." (nth 0 x) " = " (nth 0 x))) + arguments + indent))) + (unless (string= text "") + (mapconcat 'identity (list text "") indent)))) + +;;; Begin Variables: +;;; mode: emacs-lisp +;;; End: