Add fixer for end-of-line characters.
This commit is contained in:
31
editorconfig/full_file_fixers.go
Normal file
31
editorconfig/full_file_fixers.go
Normal 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
|
||||
}
|
||||
24
editorconfig/full_file_fixers_test.go
Normal file
24
editorconfig/full_file_fixers_test.go
Normal 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))
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user