fix(processor): preserve indentation and implement proper line deletion
This commit is contained in:
@@ -155,6 +155,7 @@ func (p *Processor) processFileWithLineRanges(filename string, lineRanges []git.
|
|||||||
|
|
||||||
processEntireFile := len(lineRanges) == 0
|
processEntireFile := len(lineRanges) == 0
|
||||||
modified := false
|
modified := false
|
||||||
|
var processedLines []string
|
||||||
|
|
||||||
for i, line := range lines {
|
for i, line := range lines {
|
||||||
lineNum := i + 1
|
lineNum := i + 1
|
||||||
@@ -163,9 +164,17 @@ func (p *Processor) processFileWithLineRanges(filename string, lineRanges []git.
|
|||||||
if shouldProcess {
|
if shouldProcess {
|
||||||
newLine := p.removeCommentsFromLine(line, language, cfg)
|
newLine := p.removeCommentsFromLine(line, language, cfg)
|
||||||
if newLine != line {
|
if newLine != line {
|
||||||
lines[i] = newLine
|
|
||||||
modified = true
|
modified = true
|
||||||
|
|
||||||
|
if newLine != "" {
|
||||||
|
processedLines = append(processedLines, newLine)
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
processedLines = append(processedLines, line)
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
processedLines = append(processedLines, line)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -176,7 +185,7 @@ func (p *Processor) processFileWithLineRanges(filename string, lineRanges []git.
|
|||||||
}
|
}
|
||||||
defer outFile.Close()
|
defer outFile.Close()
|
||||||
|
|
||||||
for _, line := range lines {
|
for _, line := range processedLines {
|
||||||
if _, err := fmt.Fprintln(outFile, line); err != nil {
|
if _, err := fmt.Fprintln(outFile, line); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -193,6 +202,7 @@ func (p *Processor) processFileWithLineRanges(filename string, lineRanges []git.
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *Processor) removeCommentsFromLine(line string, language types.Language, cfg *config.Config) string {
|
func (p *Processor) removeCommentsFromLine(line string, language types.Language, cfg *config.Config) string {
|
||||||
|
originalLine := line
|
||||||
result := line
|
result := line
|
||||||
hasChanges := false
|
hasChanges := false
|
||||||
|
|
||||||
@@ -204,7 +214,7 @@ func (p *Processor) removeCommentsFromLine(line string, language types.Language,
|
|||||||
|
|
||||||
|
|
||||||
if cfg.ShouldPreserveComment(comment) {
|
if cfg.ShouldPreserveComment(comment) {
|
||||||
return line
|
return originalLine
|
||||||
}
|
}
|
||||||
|
|
||||||
result = result[:idx]
|
result = result[:idx]
|
||||||
@@ -228,7 +238,7 @@ return line
|
|||||||
|
|
||||||
comment := strings.TrimSpace(result[startIdx:])
|
comment := strings.TrimSpace(result[startIdx:])
|
||||||
if cfg.ShouldPreserveComment(comment) {
|
if cfg.ShouldPreserveComment(comment) {
|
||||||
return line
|
return originalLine
|
||||||
}
|
}
|
||||||
|
|
||||||
result = result[:startIdx]
|
result = result[:startIdx]
|
||||||
@@ -239,7 +249,7 @@ return line
|
|||||||
|
|
||||||
blockComment := strings.TrimSpace(result[startIdx:startIdx+endIdx+len(endComment)])
|
blockComment := strings.TrimSpace(result[startIdx:startIdx+endIdx+len(endComment)])
|
||||||
if cfg.ShouldPreserveComment(blockComment) {
|
if cfg.ShouldPreserveComment(blockComment) {
|
||||||
return line
|
return originalLine
|
||||||
}
|
}
|
||||||
|
|
||||||
endIdx += startIdx + len(endComment)
|
endIdx += startIdx + len(endComment)
|
||||||
@@ -249,7 +259,23 @@ return line
|
|||||||
}
|
}
|
||||||
|
|
||||||
if hasChanges {
|
if hasChanges {
|
||||||
result = strings.TrimSpace(result)
|
result = strings.TrimRight(result, " \t")
|
||||||
|
|
||||||
|
if strings.TrimSpace(result) == "" {
|
||||||
|
if p.cli.PreserveLines {
|
||||||
|
leadingWhitespace := ""
|
||||||
|
for _, char := range originalLine {
|
||||||
|
if char == ' ' || char == '\t' {
|
||||||
|
leadingWhitespace += string(char)
|
||||||
|
} else {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return leadingWhitespace
|
||||||
|
} else {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
@@ -306,8 +332,10 @@ func (p *Processor) showGitPreviewWithTotals(filename string, lineRanges []git.L
|
|||||||
newLine := p.removeCommentsFromLine(line, language, cfg)
|
newLine := p.removeCommentsFromLine(line, language, cfg)
|
||||||
if newLine != line {
|
if newLine != line {
|
||||||
changedCount++
|
changedCount++
|
||||||
fmt.Printf("%s %s %s\n", lineNumStr, red.Sprint("~"), red.Sprint(line))
|
if newLine == "" {
|
||||||
if strings.TrimSpace(newLine) != "" {
|
fmt.Printf("%s %s %s\n", lineNumStr, red.Sprint("-"), red.Sprint(line))
|
||||||
|
} else {
|
||||||
|
fmt.Printf("%s %s %s\n", lineNumStr, red.Sprint("~"), red.Sprint(line))
|
||||||
fmt.Printf("%s %s %s\n", lineNumStr, green.Sprint("+"), green.Sprint(newLine))
|
fmt.Printf("%s %s %s\n", lineNumStr, green.Sprint("+"), green.Sprint(newLine))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -319,12 +347,10 @@ func (p *Processor) showGitPreviewWithTotals(filename string, lineRanges []git.L
|
|||||||
fmt.Printf("%s %s %s\n", lineNumStr, cyan.Sprint("P"), line)
|
fmt.Printf("%s %s %s\n", lineNumStr, cyan.Sprint("P"), line)
|
||||||
} else {
|
} else {
|
||||||
keptCount++
|
keptCount++
|
||||||
fmt.Printf("%s %s %s\n", lineNumStr, green.Sprint(" "), line)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
keptCount++
|
keptCount++
|
||||||
fmt.Printf("%s %s %s\n", lineNumStr, gray.Sprint(" "), gray.Sprint(line))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -155,11 +155,19 @@ func (p *Processor) processFileInMemory(filename string, language types.Language
|
|||||||
}
|
}
|
||||||
|
|
||||||
modified := false
|
modified := false
|
||||||
for i, line := range lines {
|
var processedLines []string
|
||||||
|
|
||||||
|
for _, line := range lines {
|
||||||
newLine := p.removeCommentsFromLine(line, language, cfg)
|
newLine := p.removeCommentsFromLine(line, language, cfg)
|
||||||
if newLine != line {
|
if newLine != line {
|
||||||
lines[i] = newLine
|
|
||||||
modified = true
|
modified = true
|
||||||
|
|
||||||
|
if newLine != "" {
|
||||||
|
processedLines = append(processedLines, newLine)
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
processedLines = append(processedLines, line)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -170,7 +178,7 @@ func (p *Processor) processFileInMemory(filename string, language types.Language
|
|||||||
}
|
}
|
||||||
defer outFile.Close()
|
defer outFile.Close()
|
||||||
|
|
||||||
for _, line := range lines {
|
for _, line := range processedLines {
|
||||||
if _, err := fmt.Fprintln(outFile, line); err != nil {
|
if _, err := fmt.Fprintln(outFile, line); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -257,19 +265,19 @@ func (p *Processor) showPreview(filename string, language types.Language) error
|
|||||||
|
|
||||||
if newLine != line {
|
if newLine != line {
|
||||||
changedCount++
|
changedCount++
|
||||||
fmt.Printf("%s %s %s\n", lineNumStr, red.Sprint("~"), red.Sprint(line))
|
if newLine == "" {
|
||||||
if strings.TrimSpace(newLine) != "" {
|
fmt.Printf("%s %s %s\n", lineNumStr, red.Sprint("-"), red.Sprint(line))
|
||||||
|
} else {
|
||||||
|
fmt.Printf("%s %s %s\n", lineNumStr, red.Sprint("~"), red.Sprint(line))
|
||||||
fmt.Printf("%s %s %s\n", lineNumStr, green.Sprint("+"), green.Sprint(newLine))
|
fmt.Printf("%s %s %s\n", lineNumStr, green.Sprint("+"), green.Sprint(newLine))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
hasComment := p.lineHasComment(line, language)
|
hasComment := p.lineHasComment(line, language)
|
||||||
if hasComment {
|
if hasComment {
|
||||||
preservedCount++
|
preservedCount++
|
||||||
fmt.Printf("%s %s %s\n", lineNumStr, cyan.Sprint("P"), line)
|
fmt.Printf("%s %s %s\n", lineNumStr, cyan.Sprint("P"), line)
|
||||||
} else {
|
} else {
|
||||||
keptCount++
|
keptCount++
|
||||||
fmt.Printf("%s %s %s\n", lineNumStr, green.Sprint(" "), line)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user