1package diffdetect
2
3import "strings"
4
5// Signal describes which unified-diff markers were found while scanning text.
6type Signal struct {
7 HasHunk bool
8 HasFileHeader bool
9 HasGitHeader bool
10}
11
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
27}
28
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
36}