[clang-tools-extra] r277433 - [clang-rename] add basic Emacs integration

Kirill Bobyrev via cfe-commits cfe-commits at lists.llvm.org
Tue Aug 2 01:51:27 PDT 2016

Author: omtcyfz
Date: Tue Aug  2 03:51:26 2016
New Revision: 277433

URL: http://llvm.org/viewvc/llvm-project?rev=277433&view=rev
[clang-rename] add basic Emacs integration

This patch aims to add very basic Emacs integration.

Reviewers: hokein, alexfh

Differential Revision: https://reviews.llvm.org/D23006


Modified: clang-tools-extra/trunk/clang-rename/tool/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-rename/tool/CMakeLists.txt?rev=277433&r1=277432&r2=277433&view=diff
--- clang-tools-extra/trunk/clang-rename/tool/CMakeLists.txt (original)
+++ clang-tools-extra/trunk/clang-rename/tool/CMakeLists.txt Tue Aug  2 03:51:26 2016
@@ -10,3 +10,10 @@ target_link_libraries(clang-rename
 install(TARGETS clang-rename RUNTIME DESTINATION bin)
+install(PROGRAMS clang-rename.py
+  DESTINATION share/clang
+  COMPONENT clang-rename)
+install(PROGRAMS clang-rename.el
+  DESTINATION share/clang
+  COMPONENT clang-rename)

Added: clang-tools-extra/trunk/clang-rename/tool/clang-rename.el
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-rename/tool/clang-rename.el?rev=277433&view=auto
--- clang-tools-extra/trunk/clang-rename/tool/clang-rename.el (added)
+++ clang-tools-extra/trunk/clang-rename/tool/clang-rename.el Tue Aug  2 03:51:26 2016
@@ -0,0 +1,45 @@
+;;; clang-rename.el --- Renames every occurrence of a symbol found at <offset>.
+;; Keywords: tools, c
+;;; Commentary:
+;; To install clang-rename.el make sure the directory of this file is in your
+;; 'load-path' and add
+;;   (require 'clang-rename)
+;; to your .emacs configuration.
+;;; Code:
+(defcustom clang-rename-binary "clang-rename"
+  "Path to clang-rename executable."
+  :type 'hook
+  :options '(turn-on-auto-fill flyspell-mode)
+  :group 'wp)
+(defun clang-rename (new-name)
+  "Rename all instances of the symbol at the point using clang-rename"
+  (interactive "sEnter a new name: ")
+  (let (;; Emacs offset is 1-based.
+        (offset (- (point) 1))
+        (orig-buf (current-buffer))
+        (file-name (buffer-file-name)))
+    (let ((rename-command
+          (format "bash -f -c '%s -offset=%s -new-name=%s -i %s'"
+                               clang-rename-binary offset new-name file-name)))
+          (message (format "Running clang-rename command %s" rename-command))
+          ;; Run clang-rename via bash.
+          (shell-command rename-command)
+          ;; Reload buffer.
+          (interactive)
+          (revert-buffer t t)
+    )
+  )
+(provide 'clang-rename)
+;;; clang-rename.el ends here

Modified: clang-tools-extra/trunk/docs/clang-rename.rst
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/docs/clang-rename.rst?rev=277433&r1=277432&r2=277433&view=diff
--- clang-tools-extra/trunk/docs/clang-rename.rst (original)
+++ clang-tools-extra/trunk/docs/clang-rename.rst Tue Aug  2 03:51:26 2016
@@ -20,7 +20,7 @@ to `the LLVM bugtracker <https://llvm.or
 project. If you have any ideas or suggestions, you might want to put a feature
 request there.
-Using clang-rename
+Using Clang-Rename
 :program:`clang-rename` is a `LibTooling
@@ -28,7 +28,7 @@ Using clang-rename
 work with if you set up a compile command database for your project (for an
 example of how to do this see `How To Setup Tooling For LLVM
 <http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html>`_). You can also
-specify compilation options on the command line after ``--``:
+specify compilation options on the command line after `--`:
 .. code-block:: console
@@ -47,7 +47,7 @@ only. It is planned to extend the tool's
 renaming actions in the future.
 :program:`clang-rename` also aims to be easily integrated into popular text
-editors, such as Vim, and improve the workflow of users.
+editors, such as Vim and Emacs, and improve the workflow of users.
 Although a command line interface exists, it is highly recommended to use the
 text editor interface instead for better experience.
@@ -84,8 +84,8 @@ text editor interface instead for better
     -version                   - Display the version of this program
-clang-rename Vim integration
+Vim Integration
 You can call :program:`clang-rename` directly from Vim! To set up
 :program:`clang-rename` integration for Vim see
@@ -96,7 +96,21 @@ Please note that **you have to save all
 happen before running the tool**.
 Once installed, you can point your cursor to symbols you want to rename, press
-``<leader>cr`` and print new desired name. The
-[``<leader> key``](http://vim.wikia.com/wiki/Mapping_keys_in_Vim_-_Tutorial_(Part_3)#Map_leader)
+`<leader>cr` and type new desired name. The [`<leader> key`]
 is a reference to a specific key defined by the mapleader variable and is bound
 to backslash by default.
+Emacs Integration
+You can also use :program:`clang-rename` while using Emacs! To set up
+:program:`clang-rename` integration for Emacs see
+Once installed, you can point your cursor to symbols you want to rename, press
+`M-X`, type `clang-rename` and new desired name.
+Please note that **you have to save all buffers, in which the replacement will
+happen before running the tool**.

More information about the cfe-commits mailing list