Function: semantic-symref-rename-local-variable
semantic-symref-rename-local-variable is an interactive and
byte-compiled function defined in filter.el.gz.
Signature
(semantic-symref-rename-local-variable)
Documentation
Fancy way to rename the local variable under point.
Depends on the SRecode Field editing API.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/cedet/semantic/symref/filter.el.gz
(defun semantic-symref-rename-local-variable ()
"Fancy way to rename the local variable under point.
Depends on the SRecode Field editing API."
(interactive)
;; Do the replacement as needed.
(let* ((ctxt (semantic-analyze-current-context))
(target (car (reverse (oref ctxt prefix))))
(tag (semantic-current-tag))
)
(when (or (not target)
(not (semantic-tag-with-position-p target)))
(error "Cannot identify symbol under point"))
(when (not (semantic-tag-of-class-p target 'variable))
(error "Can only rename variables"))
(when (or (< (semantic-tag-start target) (semantic-tag-start tag))
(> (semantic-tag-end target) (semantic-tag-end tag)))
(error "Can only rename variables declared in %s"
(semantic-tag-name tag)))
;; I think we're good for this example. Give it a go through
;; our fancy interface from SRecode.
(require 'srecode/fields)
;; Make sure there is nothing active.
(let ((ar (srecode-active-template-region)))
(when ar (srecode-delete ar)))
(let ((srecode-field-archive nil)
(region nil)
)
(semantic-symref-hits-in-region
target (lambda (start end _prefix)
;; For every valid hit, create one field.
(srecode-field "LOCAL" :name "LOCAL" :start start :end end))
(semantic-tag-start tag) (semantic-tag-end tag))
;; Now that the fields are setup, create the region.
(setq region (srecode-template-inserted-region
"REGION" :start (semantic-tag-start tag)
:end (semantic-tag-end tag)))
;; Activate the region.
(srecode-overlaid-activate region)
)
))