clang-format.bash: Use Git attributes to mark files for formatting

This commit is contained in:
Brad King 2017-02-22 15:01:23 -05:00
parent f6986ee479
commit d5f39a56a4
9 changed files with 27 additions and 32 deletions

6
.gitattributes vendored
View File

@ -2,11 +2,11 @@
.hooks* export-ignore
# Custom attribute to mark sources as using our C code style.
[attr]our-c-style whitespace=tab-in-indent
[attr]our-c-style whitespace=tab-in-indent format.clang-format
# Custom attribute to mark sources as generated.
# Do not perform whitespace checks.
[attr]generated whitespace=-tab-in-indent,-indent-with-non-tab
# Do not perform whitespace checks. Do not format.
[attr]generated whitespace=-tab-in-indent,-indent-with-non-tab -format.clang-format
bootstrap crlf=input
configure crlf=input

View File

@ -15,3 +15,7 @@
/cmFortranParser.cxx generated
/cmFortranParserTokens.h generated
/cmListFileLexer.c generated
# Do not format third-party sources.
/bindexplib.* -format.clang-format
/kwsys/** -format.clang-format

View File

@ -0,0 +1 @@
* -format.clang-format

2
Tests/CompileFeatures/.gitattributes vendored Normal file
View File

@ -0,0 +1,2 @@
# Do not format a source containing C++11 '>>' syntax as C++98.
cxx_right_angle_brackets.cpp -format.clang-format

View File

@ -0,0 +1,2 @@
# Do not format a source where we want a long line preserved.
pic_test.h -format.clang-format

View File

@ -0,0 +1,2 @@
# Do not format a source encoded in UTF-16.
test_UTF-16LE.h -format.clang-format

View File

@ -0,0 +1,2 @@
# Exclude reference content from formatting.
* -format.clang-format

View File

@ -1,3 +1,7 @@
/Git export-ignore
/GitSetup export-ignore
SetupForDevelopment.sh export-ignore
# Do not format third-party sources.
/KWIML/** -format.clang-format
/cm*/** -format.clang-format

View File

@ -1,6 +1,6 @@
#!/usr/bin/env bash
#=============================================================================
# Copyright 2015-2016 Kitware, Inc.
# Copyright 2015-2017 Kitware, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@ -106,34 +106,12 @@ case "$mode" in
*) die "invalid mode: $mode" ;;
esac
# Filter sources to which our style should apply.
$git_ls -z -- '*.c' '*.cc' '*.cpp' '*.cxx' '*.h' '*.hh' '*.hpp' '*.hxx' '*.cu' '*.notcu' |
# List files as selected above.
$git_ls |
# Exclude lexer/parser generator input and output.
egrep -z -v '^Source/cmCommandArgumentLexer\.' |
egrep -z -v '^Source/cmCommandArgumentParser(\.y|\.cxx|Tokens\.h)' |
egrep -z -v '^Source/cmDependsJavaLexer\.' |
egrep -z -v '^Source/cmDependsJavaParser(\.y|\.cxx|Tokens\.h)' |
egrep -z -v '^Source/cmExprLexer\.' |
egrep -z -v '^Source/cmExprParser(\.y|\.cxx|Tokens\.h)' |
egrep -z -v '^Source/cmFortranLexer\.' |
egrep -z -v '^Source/cmFortranParser(\.y|\.cxx|Tokens\.h)' |
egrep -z -v '^Source/cmListFileLexer(\.in\.l|\.c)' |
# Exclude third-party sources.
egrep -z -v '^Source/bindexplib' |
egrep -z -v '^Source/(kwsys|CursesDialog/form)/' |
egrep -z -v '^Utilities/(KW|cm).*/' |
# Exclude reference content.
egrep -z -v '^Tests/RunCMake/GenerateExportHeader/reference/' |
# Exclude manually-formatted sources (e.g. with long lines).
egrep -z -v '^Tests/PositionIndependentTargets/pic_test.h' |
egrep -z -v '^Tests/CompileFeatures/cxx_right_angle_brackets.cpp' |
# Exclude sources with encoding not suported by clang-format.
egrep -z -v '^Tests/RunCMake/CommandLine/cmake_depends/test_UTF-16LE.h' |
# Select sources with our attribute.
git check-attr --stdin format.clang-format |
sed -n '/: format\.clang-format: set$/ {s/:[^:]*:[^:]*$//p}' |
# Update sources in-place.
xargs -0 "$clang_format" -i
xargs -d '\n' "$clang_format" -i