improve the style.fish script

If there are uncommitted changes use `git-clang-format` to limit the style
fixups to the lines being modified.

Refuse to do a `make style-all` if there are uncommitted changes.

Include a fix for the parsing of `git status` output that was recently
incorporated into the lint.fish script.
This commit is contained in:
Kurtis Rader 2016-04-12 19:57:07 -07:00
parent 8e103c231e
commit 706bfa70c1
2 changed files with 36 additions and 12 deletions

View File

@ -40,7 +40,9 @@ The following sections discuss the specific rules for the style that should be u
make style
```
before commiting your change. If you've already committed your changes that's okay since it will then check the files in the most recent commit. This can be useful after you've merged someone elses change and want to check that it's style is acceptable.
before commiting your change. That will run `git-clang-format` to rewrite just the lines you're modifying.
If you've already committed your changes that's okay since it will then check the files in the most recent commit. This can be useful after you've merged someone elses change and want to check that it's style is acceptable. However, in that case it will run `clang-format` to ensure the entire file, not just the lines modified by the commit, conform to the style.
If you want to check the style of the entire code base run
@ -48,6 +50,8 @@ If you want to check the style of the entire code base run
make style-all
```
That command will refuse to restyle any files if you have uncommitted changes.
### Suppressing Reformatting of the Code
If you have a good reason for doing so you can tell `clang-format` to not reformat a block of code by enclosing it in comments like this:

View File

@ -6,6 +6,7 @@
# This runs C++ files and fish scripts (*.fish) through their respective code
# formatting programs.
#
set git_clang_format no
set c_files
set f_files
set all no
@ -21,17 +22,21 @@ if set -q argv[1]
end
if test $all = yes
set files (git status --porcelain --short --untracked-files=all | sed -e 's/^ *[^ ]* *//')
if set -q files[1]
echo
echo You have uncommited changes. Cowardly refusing to restyle the entire code base.
echo
exit 1
end
set c_files src/*.h src/*.cpp
set f_files ***.fish
else
# We haven't been asked to reformat all the source. If there are uncommitted
# changes reformat those, else reformat the files in the most recent commit.
set pending (git status --porcelain --short --untracked-files=all | sed -e 's/^ *//')
if count $pending > /dev/null
# There are pending changes so lint those files.
for arg in $pending
set files $files (string split -m 1 ' ' $arg)[2]
end
# We haven't been asked to reformat all the source. If there are uncommitted changes reformat
# those using `git clang-format`. Else reformat the files in the most recent commit.
set files (git status --porcelain --short --untracked-files=all | sed -e 's/^ *[^ ]* *//')
if set -q files[1]
set git_clang_format yes
else
# No pending changes so lint the files in the most recent commit.
set files (git show --name-only --pretty=oneline head | tail --lines=+2)
@ -45,18 +50,32 @@ end
# Run the C++ reformatter if we have any C++ files.
if set -q c_files[1]
if type -q clang-format
if test $git_clang_format = yes
if type -q git-clang-format
echo
echo ========================================
echo Running git-clang-format
echo ========================================
git add $c_files
git-clang-format
else
echo
echo 'WARNING: Cannot find git-clang-format command'
echo
end
else if type -q clang-format
echo
echo ========================================
echo Running clang-format
echo ========================================
for file in $c_files
clang-format $file > $file.new
clang-format $file >$file.new
if cmp --quiet $file $file.new
echo $file was correctly formatted
rm $file.new
else
echo $file was NOT correctly formatted
chmod --reference=$file $file.new
mv $file.new $file
end
end
@ -78,12 +97,13 @@ if set -q f_files[1]
echo Running fish_indent
echo ========================================
for file in $f_files
fish_indent < $file > $file.new
fish_indent <$file >$file.new
if cmp --quiet $file $file.new
echo $file was correctly formatted
rm $file.new
else
echo $file was NOT correctly formatted
chmod --reference=$file $file.new
mv $file.new $file
end
end