Function: wisent-python-reconstitute-function-tag
wisent-python-reconstitute-function-tag is a byte-compiled function
defined in python.el.gz.
Signature
(wisent-python-reconstitute-function-tag TAG SUITE)
Documentation
Move a docstring from TAG's members into its :documentation attribute.
Set attributes for constructors, special, private and static methods.
Source Code
;; Defined in /usr/src/emacs/lisp/cedet/semantic/wisent/python.el.gz
;;; Parsing
;;
(defun wisent-python-reconstitute-function-tag (tag suite)
"Move a docstring from TAG's members into its :documentation attribute.
Set attributes for constructors, special, private and static methods."
;; Analyze first statement to see whether it is a documentation
;; string.
(let ((first-statement (car suite)))
(when (semantic-python-docstring-p first-statement)
(semantic-tag-put-attribute
tag :documentation
(semantic-python-extract-docstring first-statement))))
;; TODO HACK: we try to identify methods using the following
;; heuristic:
;; + at least one argument
;; + first argument is self
(when (and (> (length (semantic-tag-function-arguments tag)) 0)
(string= (semantic-tag-name
(car (semantic-tag-function-arguments tag)))
"self"))
(semantic-tag-put-attribute tag :parent "dummy"))
;; Identify constructors, special and private functions
(cond
;; TODO only valid when the function resides inside a class
((string= (semantic-tag-name tag) "__init__")
(semantic-tag-put-attribute tag :constructor-flag t)
(semantic-tag-put-attribute tag :suite suite))
((semantic-python-special-p tag)
(semantic-tag-put-attribute tag :special-flag t))
((semantic-python-private-p tag)
(semantic-tag-put-attribute tag :protection "private")))
;; If there is a staticmethod decorator, add a static typemodifier
;; for the function.
(when (semantic-find-tags-by-name
"staticmethod"
(semantic-tag-get-attribute tag :decorators))
(semantic-tag-put-attribute
tag :typemodifiers
(cons "static"
(semantic-tag-get-attribute tag :typemodifiers))))
;; TODO
;; + check for decorators classmethod
;; + check for operators
tag)