git-validation/rules/danglingwhitespace/rule.go

50 lines
1.2 KiB
Go
Raw Normal View History

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("+ ")
)