56 lines
1.4 KiB
Go
56 lines
1.4 KiB
Go
package editorconfig
|
|
|
|
import (
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
type LineFixer func(ruleValue string, line string) string
|
|
|
|
func FixTabIndentationToSpaces(ruleValueNumberOfSpaces string, line string) string {
|
|
numberOfSpaces, _ := strconv.Atoi(ruleValueNumberOfSpaces)
|
|
|
|
line = indentedWithTabsRegexp.ReplaceAllStringFunc(line, func(tabs string) string {
|
|
return strings.Repeat(" ", len(tabs)*numberOfSpaces)
|
|
})
|
|
|
|
return line
|
|
}
|
|
|
|
func FixMixedIndentationToSpaces(ruleValueNumberOfSpaces string, line string) string {
|
|
numberOfSpaces, _ := strconv.Atoi(ruleValueNumberOfSpaces)
|
|
|
|
for indentedWithMixedTabsAndSpacesRegexp.MatchString(line) {
|
|
line = indentedWithMixedTabsAndSpacesRegexp.ReplaceAllStringFunc(line, func(tabsAndSpaces string) string {
|
|
tabs := strings.Replace(tabsAndSpaces, " ", "", -1)
|
|
spaces := strings.Replace(tabsAndSpaces, "\t", "", -1)
|
|
|
|
return strings.Repeat(" ", (len(tabs)*numberOfSpaces)+len(spaces))
|
|
})
|
|
}
|
|
|
|
return line
|
|
}
|
|
|
|
func FixUndividableIndentationToNearestSpacesAmount(ruleValueNumberOfSpaces string, line string) string {
|
|
numberOfSpaces, _ := strconv.Atoi(ruleValueNumberOfSpaces)
|
|
if numberOfSpaces < 1 {
|
|
ExitBecauseOfInternalError("Number of spaces must be integer greater than 0, is: " + ruleValueNumberOfSpaces)
|
|
}
|
|
|
|
if GetNumberOfLeftSpaces(line) == 0 {
|
|
return line
|
|
}
|
|
|
|
for true {
|
|
leftSpaces := GetNumberOfLeftSpaces(line)
|
|
if leftSpaces%numberOfSpaces != 0 {
|
|
line = " " + line
|
|
} else {
|
|
break
|
|
}
|
|
}
|
|
|
|
return line
|
|
}
|