[clang-format] Support new file formatting with vim
authorJi, Jinsong <jinsong.ji@intel.com>
Mon, 21 Nov 2022 21:11:24 +0000 (13:11 -0800)
committerJi, Jinsong <jinsong.ji@intel.com>
Mon, 21 Nov 2022 21:12:31 +0000 (13:12 -0800)
The vim Formatonsave integration is not working if we create a new file directly using vim.
eg: vi -V9t.log t.cpp

It will not able to format the buffer.

> Traceback (most recent call last):
>   File "<string>", line 1, in <module>
>   File "...clang/tools/clang-format/clang-format.py", line 156, in <module>
>     main()
>   File "...clang/tools/clang-format/clang-format.py", line 80, in main
>     with open(vim.current.buffer.name, 'r') as f:
> FileNotFoundError: [Errno 2] No such file or directory: '...t.cpp'

This patch check the file before we try to open it.

Reviewed By: owenpan

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

clang/tools/clang-format/clang-format.py

index 5bc108b..7933dbc 100644 (file)
@@ -41,6 +41,7 @@ from __future__ import absolute_import, division, print_function
 
 import difflib
 import json
+import os.path
 import platform
 import subprocess
 import sys
@@ -76,7 +77,8 @@ def main():
   # Determine range to format.
   if vim.eval('exists("l:lines")') == '1':
     lines = ['-lines', vim.eval('l:lines')]
-  elif vim.eval('exists("l:formatdiff")') == '1':
+  elif vim.eval('exists("l:formatdiff")') == '1' and \
+       os.path.exists(vim.current.buffer.name):
     with open(vim.current.buffer.name, 'r') as f:
       ondisk = f.read().splitlines();
     sequence = difflib.SequenceMatcher(None, ondisk, vim.current.buffer)