mirror of
https://github.com/romdo/go-conventionalcommit.git
synced 2026-02-19 08:06:41 +00:00
feat(parser): add Comment method to check if a line is a comment
This commit is contained in:
18
line.go
18
line.go
@@ -6,8 +6,10 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
lf = 10 // linefeed ("\n") character
|
lf = 10 // ASCII linefeed ("\n") character.
|
||||||
cr = 13 // carriage return ("\r") character
|
cr = 13 // ASCII carriage return ("\r") character.
|
||||||
|
hash = 35 // ASCII hash ("#") character.
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Line represents a single line of text defined as; A continuous sequence of
|
// Line represents a single line of text defined as; A continuous sequence of
|
||||||
@@ -36,6 +38,18 @@ func (s *Line) Blank() bool {
|
|||||||
return len(bytes.TrimSpace(s.Content)) == 0
|
return len(bytes.TrimSpace(s.Content)) == 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Comment returns true if line content is a commit comment, where the first
|
||||||
|
// non-whitespace character in the line is a hash (#).
|
||||||
|
func (s *Line) Comment() bool {
|
||||||
|
trimmed := bytes.TrimSpace(s.Content)
|
||||||
|
|
||||||
|
if len(trimmed) == 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return trimmed[0] == hash
|
||||||
|
}
|
||||||
|
|
||||||
// Lines is a slice of *Line types with some helper methods attached.
|
// Lines is a slice of *Line types with some helper methods attached.
|
||||||
type Lines []*Line
|
type Lines []*Line
|
||||||
|
|
||||||
|
|||||||
93
line_test.go
93
line_test.go
@@ -156,6 +156,99 @@ func TestLine_Blank(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestLine_Comment(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
line *Line
|
||||||
|
want bool
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "nil",
|
||||||
|
line: &Line{},
|
||||||
|
want: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "empty",
|
||||||
|
line: &Line{
|
||||||
|
Number: 1,
|
||||||
|
Content: []byte(""),
|
||||||
|
Break: []byte{},
|
||||||
|
},
|
||||||
|
want: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "space only",
|
||||||
|
line: &Line{
|
||||||
|
Number: 1,
|
||||||
|
Content: []byte(" "),
|
||||||
|
Break: []byte{},
|
||||||
|
},
|
||||||
|
want: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "tab only",
|
||||||
|
line: &Line{
|
||||||
|
Number: 1,
|
||||||
|
Content: []byte("\t\t"),
|
||||||
|
Break: []byte{},
|
||||||
|
},
|
||||||
|
want: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "spaces and tabs",
|
||||||
|
line: &Line{
|
||||||
|
Number: 1,
|
||||||
|
Content: []byte(" \t "),
|
||||||
|
Break: []byte{},
|
||||||
|
},
|
||||||
|
want: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "text",
|
||||||
|
line: &Line{
|
||||||
|
Number: 1,
|
||||||
|
Content: []byte("foobar"),
|
||||||
|
Break: []byte{},
|
||||||
|
},
|
||||||
|
want: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "beings with hash",
|
||||||
|
line: &Line{
|
||||||
|
Number: 1,
|
||||||
|
Content: []byte("# foo bar"),
|
||||||
|
Break: []byte{},
|
||||||
|
},
|
||||||
|
want: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "beings with hash after whitespace",
|
||||||
|
line: &Line{
|
||||||
|
Number: 1,
|
||||||
|
Content: []byte(" \t # foo bar"),
|
||||||
|
Break: []byte{},
|
||||||
|
},
|
||||||
|
want: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "has hash in middle of text",
|
||||||
|
line: &Line{
|
||||||
|
Number: 1,
|
||||||
|
Content: []byte(" foo # bar"),
|
||||||
|
Break: []byte{},
|
||||||
|
},
|
||||||
|
want: false,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
got := tt.line.Comment()
|
||||||
|
|
||||||
|
assert.Equal(t, tt.want, got)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestNewLines(t *testing.T) {
|
func TestNewLines(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
|
|||||||
Reference in New Issue
Block a user