-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathheader.go
42 lines (36 loc) · 1.06 KB
/
header.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package conventionalcommitparser
import (
"regexp"
"strings"
)
type Header struct {
Type string
Scope string
Subject string
Important bool
}
var (
headerPattern = regexp.MustCompile(`^(?i)([\s\w-]*)(\((.*)\))?(!?):\s+(.*)$`)
revertHeaderPattern = regexp.MustCompile(`^(?i)revert\s(.*)$`)
)
func parseHeader(txt string) Header {
headerMatchers := headerPattern.FindStringSubmatch(txt)
revertHeaderMatchers := revertHeaderPattern.FindStringSubmatch(txt)
header := Header{}
if len(headerMatchers) != 0 { // conventional commit
header.Type = strings.TrimSpace(strings.ToLower(headerMatchers[1]))
header.Scope = strings.TrimSpace(headerMatchers[3])
header.Important = headerMatchers[4] == "!"
header.Subject = headerMatchers[5]
} else if len(revertHeaderMatchers) != 0 { // revert commit
subject := strings.Trim(revertHeaderMatchers[1], "\"")
subject = strings.Trim(subject, "'")
header.Type = "revert"
header.Subject = subject
} else { // commom commit
header.Type = ""
header.Scope = ""
header.Subject = txt
}
return header
}