|
|
- (defun elpy-snippet-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 elpy-snippet-current-method-and-args ()
- "Return information on the current definition."
- (let ((current-defun (python-info-current-defun))
- (current-arglist
- (save-excursion
- (python-nav-beginning-of-defun)
- (when (re-search-forward "(" nil t)
- (let* ((start (point))
- (end (progn
- (forward-char -1)
- (forward-sexp)
- (- (point) 1))))
- (elpy-snippet-split-args
- (buffer-substring-no-properties start end))))))
- class method args)
- (when (not current-arglist)
- (setq current-arglist '(("self"))))
- (if (and current-defun
- (string-match "^\\(.*\\)\\.\\(.*\\)$" current-defun))
- (setq class (match-string 1 current-defun)
- method (match-string 2 current-defun))
- (setq class "Class"
- method "method"))
- (setq args (mapcar #'car current-arglist))
- (list class method args)))
-
- (defun elpy-snippet-init-assignments (arg-string)
- "Return the typical __init__ assignments for arguments."
- (let ((indentation (make-string (save-excursion
- (goto-char start-point)
- (current-indentation))
- ?\s)))
- (mapconcat (lambda (arg)
- (if (string-match "^\\*" (car arg))
- ""
- (format "self.%s = %s\n%s"
- (car arg)
- (car arg)
- indentation)))
- (elpy-snippet-split-args arg-string)
- "")))
-
- (defun elpy-snippet-super-form ()
- "Return (Class, first-arg).method if Py2.
- Else return ().method for Py3."
- (let* ((defun-info (elpy-snippet-current-method-and-args))
- (class (nth 0 defun-info))
- (method (nth 1 defun-info))
- (args (nth 2 defun-info))
- (first-arg (nth 0 args))
- (py-version-command " -c 'import sys ; print(sys.version_info.major)'")
- ;; Get the python version. Either 2 or 3
- (py-version-num (substring (shell-command-to-string (concat elpy-rpc-python-command py-version-command))0 1)))
- (if (string-match py-version-num "2")
- (format "(%s, %s).%s" class first-arg method)
- (format "().%s" method))))
-
- (defun elpy-snippet-super-arguments ()
- "Return the argument list for the current method."
- (mapconcat (lambda (x) x)
- (cdr (nth 2 (elpy-snippet-current-method-and-args)))
- ", "))
|