summaryrefslogtreecommitdiffhomepage
path: root/internal/diff
diff options
context:
space:
mode:
authoradamdottv <[email protected]>2025-05-01 09:02:14 -0500
committeradamdottv <[email protected]>2025-05-01 09:02:14 -0500
commite760d28c5a125f7f4de30cf0491be53e32bb897d (patch)
tree6e69c1a995655dc7c4c8df4365685c08e8387301 /internal/diff
parent7d5f0f9d18f327d0df89270a3b581ce4812f7638 (diff)
downloadopencode-e760d28c5a125f7f4de30cf0491be53e32bb897d.tar.gz
opencode-e760d28c5a125f7f4de30cf0491be53e32bb897d.zip
feat: show hunk headers
Diffstat (limited to 'internal/diff')
-rw-r--r--internal/diff/diff.go25
1 files changed, 12 insertions, 13 deletions
diff --git a/internal/diff/diff.go b/internal/diff/diff.go
index 8f5e669d3..151c105d7 100644
--- a/internal/diff/diff.go
+++ b/internal/diff/diff.go
@@ -563,18 +563,6 @@ func createStyles(t theme.Theme) (removedLineStyle, addedLineStyle, contextLineS
// Rendering Functions
// -------------------------------------------------------------------------
-func lipglossToHex(color lipgloss.Color) string {
- r, g, b, a := color.RGBA()
-
- // Scale uint32 values (0-65535) to uint8 (0-255).
- r8 := uint8(r >> 8)
- g8 := uint8(g >> 8)
- b8 := uint8(b >> 8)
- a8 := uint8(a >> 8)
-
- return fmt.Sprintf("#%02x%02x%02x%02x", r8, g8, b8, a8)
-}
-
// applyHighlighting applies intra-line highlighting to a piece of text
func applyHighlighting(content string, segments []Segment, segmentType LineType, highlightBg lipgloss.AdaptiveColor) string {
// Find all ANSI sequences in the content
@@ -833,13 +821,22 @@ func RenderSideBySideHunk(fileName string, h Hunk, opts ...SideBySideOption) str
// FormatDiff creates a side-by-side formatted view of a diff
func FormatDiff(diffText string, opts ...SideBySideOption) (string, error) {
+ t := theme.CurrentTheme()
diffResult, err := ParseUnifiedDiff(diffText)
if err != nil {
return "", err
}
var sb strings.Builder
+ config := NewSideBySideConfig(opts...)
for _, h := range diffResult.Hunks {
+ sb.WriteString(
+ lipgloss.NewStyle().
+ Background(t.DiffHunkHeader()).
+ Foreground(t.Background()).
+ Width(config.TotalWidth).
+ Render(h.Header) + "\n",
+ )
sb.WriteString(RenderSideBySideHunk(diffResult.OldFile, h, opts...))
}
@@ -854,8 +851,10 @@ func GenerateDiff(beforeContent, afterContent, fileName string) (string, int, in
fileName = strings.TrimPrefix(fileName, cwd)
fileName = strings.TrimPrefix(fileName, "/")
+ edits := udiff.Strings(beforeContent, afterContent)
+ unified, _ := udiff.ToUnified("a/"+fileName, "b/"+fileName, beforeContent, edits, 8)
+
var (
- unified = udiff.Unified("a/"+fileName, "b/"+fileName, beforeContent, afterContent)
additions = 0
removals = 0
)