Add full file checker CheckInsertFinalNewLineRule.

This commit is contained in:
Amy Boyd
2016-06-25 12:50:53 +01:00
parent 583c4bd49b
commit ab50da66d4
2 changed files with 65 additions and 1 deletions

View File

@@ -6,7 +6,10 @@ import (
)
var fullFileCheckers = map[string]FullFileChecker{
"end_of_line": CheckEndOfLineRule,
"end_of_line": CheckEndOfLineRule,
"insert_final_newline": CheckInsertFinalNewLineRule,
// @todo - add checker for charset.
// "charset": CheckCharsetRule,
}
type FullFileChecker func(ruleValue string, fileContent string) *FullFileCheckResult
@@ -59,3 +62,36 @@ func CheckEndOfLineRule(ruleValue string, fileContent string) *FullFileCheckResu
return &FullFileCheckResult{isOk: true}
}
var endsWithFinalNewLineRegexp = regexp.MustCompile(`(\n|\r|\r\n)$`)
func CheckInsertFinalNewLineRule(ruleValue string, fileContent string) *FullFileCheckResult {
// Valid rules values are "true" or "false". The values are case insensitive.
ruleValueLowercase := strings.ToLower(ruleValue)
if ruleValueLowercase != "true" && ruleValueLowercase != "false" {
return &FullFileCheckResult{isOk: false, messageIfNotOk: "insert_final_new_line value should be true or false, is: " + ruleValue}
}
if len(fileContent) == 0 {
return &FullFileCheckResult{isOk: true}
}
if ruleValueLowercase == "true" {
if endsWithFinalNewLineRegexp.MatchString(fileContent) {
return &FullFileCheckResult{isOk: true}
} else {
return &FullFileCheckResult{isOk: false, messageIfNotOk: "should end with an empty line but it does not"}
}
}
if ruleValueLowercase == "false" {
if !endsWithFinalNewLineRegexp.MatchString(fileContent) {
return &FullFileCheckResult{isOk: true}
} else {
return &FullFileCheckResult{isOk: false, messageIfNotOk: "should not end with an empty line but it does"}
}
}
return &FullFileCheckResult{isOk: false, messageIfNotOk: "unexpected condition"}
}