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