Skip to content

Commit

Permalink
on newer versions of clang-format, use builtin --check handling
Browse files Browse the repository at this point in the history
Due to a deficiency in upstream clang-format, our automatic target for
`ninja clang-format-check` runs clang-format, then compares the bytes of
the file before and after to see if anything changed. If it did change,
we rewrite the file back to its original form and error out.

Since clang-format 10, there is an option to report warnings instead of
writing the reformatted file, and also, to make those warnings fatal.
This is a much better user experience, to see *what* is wrong, not just
that something is wrong, and also gets rid of a pretty gross "modify
your files when you didn't ask for it" behavior that is vulnerable to
getting interrupted.

Let's switch over to the new approach, if we can.
  • Loading branch information
eli-schwartz authored and dcbaker committed Dec 5, 2022
1 parent bb87528 commit ce120ff
Showing 1 changed file with 10 additions and 2 deletions.
12 changes: 10 additions & 2 deletions mesonbuild/scripts/clangformat.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,25 @@

from .run_tool import run_tool
from ..environment import detect_clangformat
from ..mesonlib import version_compare
from ..programs import ExternalProgram
import typing as T

def run_clang_format(fname: Path, exelist: T.List[str], check: bool) -> subprocess.CompletedProcess:
clangformat_10 = False
if check:
original = fname.read_bytes()
cformat_ver = ExternalProgram('clang-format', exelist).get_version()
if version_compare(cformat_ver, '>=10'):
clangformat_10 = True
exelist = exelist + ['--dry-run', '--Werror']
else:
original = fname.read_bytes()
before = fname.stat().st_mtime
ret = subprocess.run(exelist + ['-style=file', '-i', str(fname)])
after = fname.stat().st_mtime
if before != after:
print('File reformatted: ', fname)
if check:
if check and not clangformat_10:
# Restore the original if only checking.
fname.write_bytes(original)
ret.returncode = 1
Expand Down

0 comments on commit ce120ff

Please sign in to comment.