diff --git a/llm/common.go b/llm/common.go index 039d0df..e88e376 100644 --- a/llm/common.go +++ b/llm/common.go @@ -4,6 +4,10 @@ import ( "strings" ) +const ( + newlineLiteral = "<|newline-literal|>" +) + // File represents a file in a git repository. type File struct { Path string @@ -56,6 +60,7 @@ func parseFiles(filesSection string) []File { replacer := strings.NewReplacer( "\\n", "\n", + newlineLiteral, "\\n", "\\\"", "\"", "```", "", ) diff --git a/llm/diffcomment.go b/llm/diffcomment.go index 468e8f4..14f9562 100644 --- a/llm/diffcomment.go +++ b/llm/diffcomment.go @@ -26,6 +26,11 @@ func (req DiffCommentRequest) GetPrompt() (string, error) { return "", err } + replacer := strings.NewReplacer( + "\\n", newlineLiteral, + ) + req.File.Contents = replacer.Replace(req.File.Contents) + var result bytes.Buffer err = tmpl.Execute(&result, req) if err != nil { diff --git a/llm/issue.go b/llm/issue.go index 15d78ed..19aaad1 100644 --- a/llm/issue.go +++ b/llm/issue.go @@ -27,6 +27,16 @@ func (req CodeChangeRequest) GetPrompt() (string, error) { return "", err } + replacer := strings.NewReplacer( + "\\n", newlineLiteral, + ) + newFiles := make([]File, len(req.Files)) + for i, f := range req.Files { + f.Contents = replacer.Replace(f.Contents) + newFiles[i] = f + } + req.Files = newFiles + var result bytes.Buffer err = tmpl.Execute(&result, req) if err != nil {