Skip to content

Commit 3afde47

Browse files
Merge pull request #39 from denis-tingaikin/fix-issue-22
PoC: Fix skipping files that were not modified in the current calendar year
2 parents 8715c00 + b1b6274 commit 3afde47

File tree

5 files changed

+57
-25
lines changed

5 files changed

+57
-25
lines changed

.go-header.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
values:
22
regexp:
3-
copyright-holder: Copyright \(c\) {{year-range}} Denis Tingaikin
3+
copyright-holder: Copyright \(c\) {{mod-year-range}} Denis Tingaikin
44
template: |
55
{{copyright-holder}}
66

analyzer.go

+21-11
Original file line numberDiff line numberDiff line change
@@ -52,15 +52,31 @@ type Analyzer struct {
5252
template string
5353
}
5454

55+
func (a *Analyzer) processPerTargetValues(target *Target) error {
56+
a.values["mod-year"] = a.values["year"]
57+
a.values["mod-year-range"] = a.values["year-range"]
58+
if t, err := target.ModTime(); err == nil {
59+
a.values["mod-year"] = &ConstValue{RawValue: fmt.Sprint(t.Year())}
60+
a.values["mod-year-range"] = &RegexpValue{RawValue: `((20\d\d\-{{mod-year}})|({{mod-year}}))`}
61+
}
62+
63+
for _, v := range a.values {
64+
if err := v.Calculate(a.values); err != nil {
65+
return err
66+
}
67+
}
68+
return nil
69+
}
70+
5571
func (a *Analyzer) Analyze(target *Target) (i Issue) {
5672
if a.template == "" {
5773
return NewIssue("Missed template for check")
5874
}
59-
if t, err := target.ModTime(); err == nil {
60-
if t.Year() != time.Now().Year() {
61-
return nil
62-
}
75+
76+
if err := a.processPerTargetValues(target); err != nil {
77+
return &issue{msg: err.Error()}
6378
}
79+
6480
file := target.File
6581
var header string
6682
var offset = Location{
@@ -142,16 +158,10 @@ func (a *Analyzer) readField(reader *Reader) string {
142158
}
143159

144160
func New(options ...Option) *Analyzer {
145-
a := &Analyzer{}
161+
a := &Analyzer{values: make(map[string]Value)}
146162
for _, o := range options {
147163
o.apply(a)
148164
}
149-
for _, v := range a.values {
150-
err := v.Calculate(a.values)
151-
if err != nil {
152-
panic(err.Error())
153-
}
154-
}
155165
return a
156166
}
157167

config.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) 2020-2022 Denis Tingaikin
1+
// Copyright (c) 2020-2024 Denis Tingaikin
22
//
33
// SPDX-License-Identifier: Apache-2.0
44
//
@@ -19,7 +19,7 @@ package goheader
1919
import (
2020
"errors"
2121
"fmt"
22-
"io/ioutil"
22+
"os"
2323
"strings"
2424
"time"
2525

@@ -40,7 +40,7 @@ func (c *Configuration) builtInValues() map[string]Value {
4040
var result = make(map[string]Value)
4141
year := fmt.Sprint(time.Now().Year())
4242
result["year-range"] = &RegexpValue{
43-
RawValue: strings.ReplaceAll(`((20\d\d\-YEAR)|(YEAR))`, "YEAR", year),
43+
RawValue: `((20\d\d\-{{YEAR}})|({{YEAR}}))`,
4444
}
4545
result["year"] = &ConstValue{
4646
RawValue: year,
@@ -82,7 +82,7 @@ func (c *Configuration) GetTemplate() (string, error) {
8282
if c.TemplatePath == "" {
8383
return "", errors.New("template has not passed")
8484
}
85-
if b, err := ioutil.ReadFile(c.TemplatePath); err != nil {
85+
if b, err := os.ReadFile(c.TemplatePath); err != nil {
8686
return "", err
8787
} else {
8888
c.Template = strings.TrimSpace(string(b))
@@ -91,7 +91,7 @@ func (c *Configuration) GetTemplate() (string, error) {
9191
}
9292

9393
func (c *Configuration) Parse(p string) error {
94-
b, err := ioutil.ReadFile(p)
94+
b, err := os.ReadFile(p)
9595
if err != nil {
9696
return err
9797
}

value.go

+28-6
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) 2020-2022 Denis Tingaikin
1+
// Copyright (c) 2020-2024 Denis Tingaikin
22
//
33
// SPDX-License-Identifier: Apache-2.0
44
//
@@ -26,6 +26,7 @@ import (
2626
type Calculable interface {
2727
Calculate(map[string]Value) error
2828
Get() string
29+
Raw() string
2930
}
3031

3132
type Value interface {
@@ -35,7 +36,7 @@ type Value interface {
3536

3637
func calculateValue(calculable Calculable, values map[string]Value) (string, error) {
3738
sb := strings.Builder{}
38-
r := calculable.Get()
39+
r := calculable.Raw()
3940
var endIndex int
4041
var startIndex int
4142
for startIndex = strings.Index(r, "{{"); startIndex >= 0; startIndex = strings.Index(r, "{{") {
@@ -61,22 +62,33 @@ func calculateValue(calculable Calculable, values map[string]Value) (string, err
6162
}
6263

6364
type ConstValue struct {
64-
RawValue string
65+
RawValue, Value string
6566
}
6667

6768
func (c *ConstValue) Calculate(values map[string]Value) error {
6869
v, err := calculateValue(c, values)
6970
if err != nil {
7071
return err
7172
}
72-
c.RawValue = v
73+
c.Value = v
7374
return nil
7475
}
7576

77+
func (c *ConstValue) Raw() string {
78+
return c.RawValue
79+
}
80+
7681
func (c *ConstValue) Get() string {
82+
if c.Value != "" {
83+
return c.Value
84+
}
7785
return c.RawValue
7886
}
7987

88+
func (c *ConstValue) String() string {
89+
return c.Get()
90+
}
91+
8092
func (c *ConstValue) Read(s *Reader) Issue {
8193
l := s.Location()
8294
p := s.Position()
@@ -94,22 +106,32 @@ func (c *ConstValue) Read(s *Reader) Issue {
94106
}
95107

96108
type RegexpValue struct {
97-
RawValue string
109+
RawValue, Value string
98110
}
99111

100112
func (r *RegexpValue) Calculate(values map[string]Value) error {
101113
v, err := calculateValue(r, values)
102114
if err != nil {
103115
return err
104116
}
105-
r.RawValue = v
117+
r.Value = v
106118
return nil
107119
}
108120

121+
func (r *RegexpValue) Raw() string {
122+
return r.RawValue
123+
}
109124
func (r *RegexpValue) Get() string {
125+
if r.Value != "" {
126+
return r.Value
127+
}
110128
return r.RawValue
111129
}
112130

131+
func (r *RegexpValue) String() string {
132+
return r.Get()
133+
}
134+
113135
func (r *RegexpValue) Read(s *Reader) Issue {
114136
l := s.Location()
115137
p := regexp.MustCompile(r.Get())

version/version.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) 2020-2022 Denis Tingaikin
1+
// Copyright (c) 2020-2024 Denis Tingaikin
22
//
33
// SPDX-License-Identifier: Apache-2.0
44
//
@@ -17,5 +17,5 @@
1717
package version
1818

1919
func Value() string {
20-
return "v0.4.3"
20+
return "v0.5.0"
2121
}

0 commit comments

Comments
 (0)