Skip to content

Commit 6c67697

Browse files
feat!: add Parser and New method
1 parent dac48bf commit 6c67697

6 files changed

Lines changed: 27 additions & 21 deletions

File tree

commit.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ func (c *Commit) Notes() []Note {
5656
return c.notes
5757
}
5858

59-
// IsBreakingChange returns true if breaking change
59+
// IsBreakingChange returns true if commit is breaking change
6060
func (c *Commit) IsBreakingChange() bool {
6161
return c.isBreakingChange
6262
}

example_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ Ref #123
1717
Date: 01-01-2021
1818
By: John Doe`
1919

20-
commit, err := parser.Parse(msg)
20+
p := parser.New()
21+
commit, err := p.Parse(msg)
2122
if err != nil {
2223
fmt.Printf("Error: %s", err.Error())
2324
}

parser.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,28 +18,28 @@ const (
1818
footRegExStr = `^(?:(BREAKING[- ]CHANGE|(?:[A-Za-z-])+): |((?:[A-Za-z-])+) #)(.+)$`
1919
)
2020

21-
var defParser = newParser()
22-
23-
// Parse attempts to parse a commit message to a conventional commit
24-
func Parse(message string) (*Commit, error) {
25-
return defParser.parse(message)
26-
}
27-
28-
type parser struct {
21+
// Parser represent a conventional commit message parser
22+
type Parser struct {
2923
headerRegex, footerRegex *regexp.Regexp
3024
}
3125

32-
func newParser() *parser {
26+
// New returns a new parser
27+
func New() *Parser {
3328
headerRegex := regexp.MustCompile(headRegExStr)
3429
footerRegex := regexp.MustCompile(footRegExStr)
3530

36-
return &parser{
31+
return &Parser{
3732
headerRegex: headerRegex,
3833
footerRegex: footerRegex,
3934
}
4035
}
4136

42-
func (p *parser) parse(message string) (*Commit, error) {
37+
// Parse attempts to parse a commit message to a conventional commit
38+
func (p *Parser) Parse(message string) (*Commit, error) {
39+
return p.parse(message)
40+
}
41+
42+
func (p *Parser) parse(message string) (*Commit, error) {
4343
c := &Commit{
4444
message: message,
4545
}
@@ -124,7 +124,7 @@ func (p *parser) parse(message string) (*Commit, error) {
124124

125125
// parseLineAsFooter attempts to parse the given line as a footer, returning both the key and the value of the header.
126126
// If the line cannot be parsed then isFooter is false
127-
func (p *parser) parseLineAsFooter(line string) (key, value string, isFooter bool) {
127+
func (p *Parser) parseLineAsFooter(line string) (key, value string, isFooter bool) {
128128
matches := p.footerRegex.FindStringSubmatch(line)
129129
if len(matches) != 4 {
130130
return "", "", false
@@ -137,7 +137,7 @@ func (p *parser) parseLineAsFooter(line string) (key, value string, isFooter boo
137137
}
138138

139139
// parseHeader attempts to parse the commit description line and set the appropriate values in the the given commit
140-
func (p *parser) parseHeader(c *Commit, header string) error {
140+
func (p *Parser) parseHeader(c *Commit, header string) error {
141141
matches := p.headerRegex.FindStringSubmatch(header)
142142
if matches == nil {
143143
return errHeader

parser_bench_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,11 @@ By: John Doe`
3131

3232
var dumpRes *Commit
3333

34+
var p = New()
35+
3436
func BenchmarkParser(b *testing.B) {
3537
for i := 0; i < b.N; i++ {
36-
r, err := Parse(sampleCommit)
38+
r, err := p.Parse(sampleCommit)
3739
if err != nil {
3840
b.Error(err)
3941
return

parser_header_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ func TestParseHeaderValid(t *testing.T) {
1919
"1245#feat1234(@scope/scope1,scope2): description, \n\n body 1 2, 3 and 4?",
2020
}
2121

22-
p := newParser()
22+
p := New()
2323

2424
for index, validCase := range validCases {
2525

@@ -50,7 +50,7 @@ func TestParseHeaderInvalid(t *testing.T) {
5050
`feat(scope))!: A description with name.txt`,
5151
}
5252

53-
p := newParser()
53+
p := New()
5454

5555
for index, validCase := range validCases {
5656
testName := "case#" + strconv.Itoa(index+1)

parser_test.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,8 @@ func TestParserErrNoBlankLine(t *testing.T) {
224224
t.Error(err)
225225
}
226226

227-
_, err = Parse(commitMsg)
227+
p := New()
228+
_, err = p.Parse(commitMsg)
228229
if err == nil {
229230
t.Errorf("no error: test file %v passed", fileName)
230231
return
@@ -243,7 +244,8 @@ func TestParserErrHeaderLine(t *testing.T) {
243244
t.Error(err)
244245
}
245246

246-
_, err = Parse(commitMsg)
247+
p := New()
248+
_, err = p.Parse(commitMsg)
247249
if err == nil {
248250
t.Errorf("no error: test file %v passed", fileName)
249251
return
@@ -261,7 +263,8 @@ func parseMsgAndCompare(t *testing.T, fileName string, expectedCommit *Commit) {
261263
return
262264
}
263265

264-
actualCommit, err := Parse(commitMsg)
266+
p := New()
267+
actualCommit, err := p.Parse(commitMsg)
265268
if err != nil {
266269
t.Errorf("Received unexpected error:\n%+v", err)
267270
return

0 commit comments

Comments
 (0)