mirror of
https://github.com/jesseduffield/lazygit.git
synced 2024-12-04 10:34:55 +02:00
42 lines
1.4 KiB
Go
42 lines
1.4 KiB
Go
|
package mergeconflicts
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
|
||
|
"github.com/fatih/color"
|
||
|
"github.com/jesseduffield/lazygit/pkg/theme"
|
||
|
"github.com/jesseduffield/lazygit/pkg/utils"
|
||
|
)
|
||
|
|
||
|
func ColoredConflictFile(content string, state *State, hasFocus bool) string {
|
||
|
if len(state.conflicts) == 0 {
|
||
|
return content
|
||
|
}
|
||
|
conflict, remainingConflicts := shiftConflict(state.conflicts)
|
||
|
var outputBuffer bytes.Buffer
|
||
|
for i, line := range utils.SplitLines(content) {
|
||
|
colourAttr := theme.DefaultTextColor
|
||
|
if i == conflict.start || i == conflict.middle || i == conflict.end {
|
||
|
colourAttr = color.FgRed
|
||
|
}
|
||
|
colour := color.New(colourAttr)
|
||
|
if hasFocus && state.conflictIndex < len(state.conflicts) && *state.conflicts[state.conflictIndex] == *conflict && shouldHighlightLine(i, conflict, state.conflictTop) {
|
||
|
colour.Add(color.Bold)
|
||
|
colour.Add(theme.SelectedRangeBgColor)
|
||
|
}
|
||
|
if i == conflict.end && len(remainingConflicts) > 0 {
|
||
|
conflict, remainingConflicts = shiftConflict(remainingConflicts)
|
||
|
}
|
||
|
outputBuffer.WriteString(utils.ColoredStringDirect(line, colour) + "\n")
|
||
|
}
|
||
|
return outputBuffer.String()
|
||
|
}
|
||
|
|
||
|
func shiftConflict(conflicts []*mergeConflict) (*mergeConflict, []*mergeConflict) {
|
||
|
return conflicts[0], conflicts[1:]
|
||
|
}
|
||
|
|
||
|
func shouldHighlightLine(index int, conflict *mergeConflict, top bool) bool {
|
||
|
return (index >= conflict.start && index <= conflict.middle && top) || (index >= conflict.middle && index <= conflict.end && !top)
|
||
|
}
|