Add fixer for end-of-line characters.

This commit is contained in:
Amy Boyd
2016-07-04 13:54:44 +01:00
parent 03eddbde0c
commit 3463ab7d0f
3 changed files with 62 additions and 0 deletions

View File

@@ -0,0 +1,31 @@
package editorconfig
import (
"regexp"
"strings"
)
type FullFileFixer func(ruleValue string, fileContent string) string
func FixEndOfLineRule(ruleValue string, fileContent string) string {
ruleValueLowercase := strings.ToLower(ruleValue)
if ruleValueLowercase == "lf" {
fileContent = crlfRegexp.ReplaceAllString(fileContent, "\n")
fileContent = crRegexp.ReplaceAllString(fileContent, "\n")
return fileContent
}
if ruleValueLowercase == "cr" {
fileContent = crlfRegexp.ReplaceAllString(fileContent, "\r")
fileContent = lfRegexp.ReplaceAllString(fileContent, "\r")
return fileContent
}
if ruleValueLowercase == "crlf" {
fileContent = regexp.MustCompile("(\r\n|\r|\n)").ReplaceAllString(fileContent, "\r\n")
return fileContent
}
return fileContent
}

View File

@@ -0,0 +1,24 @@
package editorconfig
import (
"testing"
)
func TestFixEndOfLineRule(t *testing.T) {
input := "\nline\nline 2\rline 3 \n \r\n\r"
toLfResult := FixEndOfLineRule("lF", input)
if toLfResult != "\nline\nline 2\nline 3 \n \n\n" {
t.Error("Converting to LF did not work, got: " + GetErrorWithLineBreaksVisible(toLfResult))
}
toCrResult := FixEndOfLineRule("Cr", input)
if toCrResult != "\rline\rline 2\rline 3 \r \r\r" {
t.Error("Converting to CR did not work, got: " + GetErrorWithLineBreaksVisible(toCrResult))
}
toCrlfResult := FixEndOfLineRule("CrlF", input)
if toCrlfResult != "\r\nline\r\nline 2\r\nline 3 \r\n \r\n\r\n" {
t.Error("Converting to CRLR did not work, got: " + GetErrorWithLineBreaksVisible(toCrlfResult))
}
}

View File

@@ -47,3 +47,10 @@ func ExitBecauseOfInternalError(err string) {
fmt.Println(err)
os.Exit(2)
}
func GetErrorWithLineBreaksVisible(s string) string {
s = lfRegexp.ReplaceAllString(s, `\n`)
s = crRegexp.ReplaceAllString(s, `\r`)
s = crlfRegexp.ReplaceAllString(s, `\r\n`)
return s
}