fix(ui): glamour line wrapping

Ayman Bagabas created

Change summary

ui/components/code/code.go | 59 +++++++++++++++++++++------------------
1 file changed, 32 insertions(+), 27 deletions(-)

Detailed changes

ui/components/code/code.go 🔗

@@ -198,39 +198,44 @@ func (r *Code) renderFile(path, content string, width int) (string, error) {
 	if lexer != nil && lexer.Config() != nil {
 		lang = lexer.Config().Name
 	}
+	var c string
 	if lang == "markdown" {
 		md, err := r.glamourize(width, content)
 		if err != nil {
 			return "", err
 		}
-		return md, nil
-	}
-	formatter := &gansi.CodeBlockElement{
-		Code:     content,
-		Language: lang,
-	}
-	s := strings.Builder{}
-	rc := r.renderContext
-	if r.showLineNumber {
-		st := common.StyleConfig()
-		m := uint(0)
-		st.CodeBlock.Margin = &m
-		rc = gansi.NewRenderContext(gansi.Options{
-			ColorProfile: termenv.TrueColor,
-			Styles:       st,
-		})
-	}
-	err := formatter.Render(&s, rc)
-	if err != nil {
-		return "", err
-	}
-	c := s.String()
-	if r.showLineNumber {
-		var ml int
-		c, ml = withLineNumber(c)
-		width -= ml
+		c = md
+	} else {
+		formatter := &gansi.CodeBlockElement{
+			Code:     content,
+			Language: lang,
+		}
+		s := strings.Builder{}
+		rc := r.renderContext
+		if r.showLineNumber {
+			st := common.StyleConfig()
+			m := uint(0)
+			st.CodeBlock.Margin = &m
+			rc = gansi.NewRenderContext(gansi.Options{
+				ColorProfile: termenv.TrueColor,
+				Styles:       st,
+			})
+		}
+		err := formatter.Render(&s, rc)
+		if err != nil {
+			return "", err
+		}
+		c = s.String()
+		if r.showLineNumber {
+			var ml int
+			c, ml = withLineNumber(c)
+			width -= ml
+		}
 	}
-	// fix styling when after line breaks.
+	// Fix styling when after line breaks.
+	// https://github.com/muesli/reflow/issues/43
+	//
+	// TODO: solve this upstream in Glamour/Reflow.
 	return lipgloss.NewStyle().Width(width).Render(c), nil
 }