forked from JuliaLang/julia
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
whitespace check: rewrite in Julia, add checks
This now checks for: - trailing non-ASCII whitespace - non-breaking spaces anywhere - non-UNIX line endings - trailing blank lines - no trailing newline Git can't handle this, largely because whether it interprets files as UTF-8 or Latin-1 depends on how system libraries that it uses for regex matching are compiled, which is inconsistent and hard to fix. The end of file checks are also quite awkard and inefficient to implement with Git and shell scripting. Julia is fast and lets us present results clearly.
- Loading branch information
1 parent
100a741
commit b07b5ba
Showing
4 changed files
with
57 additions
and
41 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
#!/usr/bin/env julia | ||
|
||
const patterns = split(""" | ||
*.1 | ||
*.c | ||
*.cpp | ||
*.h | ||
*.inc | ||
*.jl | ||
*.lsp | ||
*.make | ||
*.md | ||
*.mk | ||
*.rst | ||
*.scm | ||
*.sh | ||
*.yml | ||
*Makefile | ||
""") | ||
|
||
const errors = Set{Tuple{String,Int,String}}() | ||
|
||
for path in eachline(`git ls-files -- $patterns`) | ||
lineno = 0 | ||
non_blank = 0 | ||
|
||
file_err(msg) = push!(errors, (path, 0, msg)) | ||
line_err(msg) = push!(errors, (path, lineno, msg)) | ||
|
||
for line in eachline(path, keep=true) | ||
lineno += 1 | ||
contains(line, '\r') && file_err("non-UNIX line endings") | ||
contains(line, '\ua0') && line_err("non-breaking space") | ||
endswith(line, '\n') || line_err("no trailing newline") | ||
line = chomp(line) | ||
endswith(line, r"\s") && line_err("trailing whitespace") | ||
contains(line, r"\S") && (non_blank = lineno) | ||
end | ||
non_blank < lineno && line_err("trailing blank lines") | ||
end | ||
|
||
if isempty(errors) | ||
println(stderr, "Whitespace check found no issues.") | ||
exit(0) | ||
else | ||
println(stderr, "Whitespace check found $(length(errors)) issues:") | ||
for (path, lineno, msg) in sort!(collect(errors)) | ||
if lineno == 0 | ||
println(stderr, "$path -- $msg") | ||
else | ||
println(stderr, "$path:$lineno -- $msg") | ||
end | ||
end | ||
exit(1) | ||
end |
This file was deleted.
Oops, something went wrong.