detect.go

 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}