detect.go 895 B

123456789101112131415161718192021222324252627282930313233343536
  1. package diffdetect
  2. import "strings"
  3. // Signal describes which unified-diff markers were found while scanning text.
  4. type Signal struct {
  5. HasHunk bool
  6. HasFileHeader bool
  7. HasGitHeader bool
  8. }
  9. // Inspect scans content for unified-diff markers.
  10. func Inspect(content string) Signal {
  11. var signal Signal
  12. for line := range strings.SplitSeq(content, "\n") {
  13. if strings.HasPrefix(line, "@@") {
  14. signal.HasHunk = true
  15. }
  16. if strings.HasPrefix(line, "--- ") || strings.HasPrefix(line, "+++ ") {
  17. signal.HasFileHeader = true
  18. }
  19. if strings.HasPrefix(line, "diff --git ") {
  20. signal.HasGitHeader = true
  21. }
  22. }
  23. return signal
  24. }
  25. // IsUnifiedDiff reports whether content appears to be a unified diff.
  26. func IsUnifiedDiff(content string) bool {
  27. signal := Inspect(content)
  28. if signal.HasGitHeader && signal.HasFileHeader {
  29. return true
  30. }
  31. return signal.HasHunk && signal.HasFileHeader
  32. }