Home | History | Annotate | Line # | Download | only in clang-rename
      1 '''
      2 Minimal clang-rename integration with Vim.
      3 
      4 Before installing make sure one of the following is satisfied:
      5 
      6 * clang-rename is in your PATH
      7 * `g:clang_rename_path` in ~/.vimrc points to valid clang-rename executable
      8 * `binary` in clang-rename.py points to valid to clang-rename executable
      9 
     10 To install, simply put this into your ~/.vimrc for python2 support
     11 
     12     noremap <leader>cr :pyf <path-to>/clang-rename.py<cr>
     13 
     14 For python3 use the following command (note the change from :pyf to :py3f)
     15 
     16     noremap <leader>cr :py3f <path-to>/clang-rename.py<cr>
     17 
     18 IMPORTANT NOTE: Before running the tool, make sure you saved the file.
     19 
     20 All you have to do now is to place a cursor on a variable/function/class which
     21 you would like to rename and press '<leader>cr'. You will be prompted for a new
     22 name if the cursor points to a valid symbol.
     23 '''
     24 
     25 from __future__ import absolute_import, division, print_function
     26 import vim
     27 import subprocess
     28 import sys
     29 
     30 def main():
     31     binary = 'clang-rename'
     32     if vim.eval('exists("g:clang_rename_path")') == "1":
     33         binary = vim.eval('g:clang_rename_path')
     34 
     35     # Get arguments for clang-rename binary.
     36     offset = int(vim.eval('line2byte(line("."))+col(".")')) - 2
     37     if offset < 0:
     38         print('Couldn\'t determine cursor position. Is your file empty?',
     39               file=sys.stderr)
     40         return
     41     filename = vim.current.buffer.name
     42 
     43     new_name_request_message = 'type new name:'
     44     new_name = vim.eval("input('{}\n')".format(new_name_request_message))
     45 
     46     # Call clang-rename.
     47     command = [binary,
     48                filename,
     49                '-i',
     50                '-offset', str(offset),
     51                '-new-name', str(new_name)]
     52     # FIXME: make it possible to run the tool on unsaved file.
     53     p = subprocess.Popen(command,
     54                          stdout=subprocess.PIPE,
     55                          stderr=subprocess.PIPE)
     56     stdout, stderr = p.communicate()
     57 
     58     if stderr:
     59         print(stderr)
     60 
     61     # Reload all buffers in Vim.
     62     vim.command("checktime")
     63 
     64 
     65 if __name__ == '__main__':
     66     main()
     67