on 175ce34 help sign in
36 lines 895 B history raw
1package diffdetect
3import "strings"
5// Signal describes which unified-diff markers were found while scanning text.
6type Signal struct {
7 HasHunk bool
8 HasFileHeader bool
9 HasGitHeader bool
12// Inspect scans content for unified-diff markers.
13func Inspect(content string) Signal {
14 var signal Signal
15 for line := range strings.SplitSeq(content, "\n") {
16 if strings.HasPrefix(line, "@@") {
17 signal.HasHunk = true
18 }
19 if strings.HasPrefix(line, "--- ") || strings.HasPrefix(line, "+++ ") {
20 signal.HasFileHeader = true
21 }
22 if strings.HasPrefix(line, "diff --git ") {
23 signal.HasGitHeader = true
24 }
25 }
26 return signal
29// IsUnifiedDiff reports whether content appears to be a unified diff.
30func IsUnifiedDiff(content string) bool {
31 signal := Inspect(content)
32 if signal.HasGitHeader && signal.HasFileHeader {
33 return true
34 }
35 return signal.HasHunk && signal.HasFileHeader