mirror of
https://github.com/vbatts/git-validation.git
synced 2024-11-18 06:18:37 +00:00
50 lines
1.2 KiB
Go
50 lines
1.2 KiB
Go
|
package danglingwhitespace
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"fmt"
|
||
|
|
||
|
"github.com/vbatts/git-validation/git"
|
||
|
"github.com/vbatts/git-validation/validate"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
// DanglingWhitespace is the rule for checking the presence of dangling
|
||
|
// whitespaces on line endings.
|
||
|
DanglingWhitespace = validate.Rule{
|
||
|
Name: "dangling-whitespace",
|
||
|
Description: "checking the presence of dangling whitespaces on line endings",
|
||
|
Run: ValidateDanglingWhitespace,
|
||
|
}
|
||
|
)
|
||
|
|
||
|
func init() {
|
||
|
validate.RegisterRule(DanglingWhitespace)
|
||
|
}
|
||
|
|
||
|
func ValidateDanglingWhitespace(c git.CommitEntry) (vr validate.Result) {
|
||
|
diff, err := git.Show(c["commit"])
|
||
|
if err != nil {
|
||
|
return validate.Result{Pass: false, Msg: err.Error(), CommitEntry: c}
|
||
|
}
|
||
|
|
||
|
vr.CommitEntry = c
|
||
|
vr.Pass = true
|
||
|
for _, line := range bytes.Split(diff, newLine) {
|
||
|
if !bytes.HasPrefix(line, diffAddLine) || bytes.Equal(line, diffAddLine) {
|
||
|
continue
|
||
|
}
|
||
|
if len(bytes.TrimSpace(line)) != len(line) {
|
||
|
vr.Pass = false
|
||
|
vr.Msg = fmt.Sprintf("line %q has trailiing spaces", string(line))
|
||
|
}
|
||
|
}
|
||
|
vr.Msg = "all added diff lines do not have trailing spaces"
|
||
|
return
|
||
|
}
|
||
|
|
||
|
var (
|
||
|
newLine = []byte("\n")
|
||
|
diffAddLine = []byte("+ ")
|
||
|
)
|