Skip to content

Commit

Permalink
PoC: Solve ticket #22
Browse files Browse the repository at this point in the history
Signed-off-by: denis-tingaikin <denis.tingajkin@xored.com>
  • Loading branch information
denis-tingaikin committed Feb 18, 2024
1 parent 8715c00 commit 262498f
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 23 deletions.
2 changes: 1 addition & 1 deletion .go-header.yml
@@ -1,6 +1,6 @@
values:
regexp:
copyright-holder: Copyright \(c\) {{year-range}} Denis Tingaikin
copyright-holder: Copyright \(c\) {{mod-year-range}} Denis Tingaikin
template: |
{{copyright-holder}}
Expand Down
32 changes: 21 additions & 11 deletions analyzer.go
Expand Up @@ -52,15 +52,31 @@ type Analyzer struct {
template string
}

func (a *Analyzer) processPerTargetValues(target *Target) error {
a.values["mod-year"] = a.values["year"]
a.values["mod-year-range"] = a.values["year-range"]
if t, err := target.ModTime(); err == nil {
a.values["mod-year"] = &ConstValue{RawValue: fmt.Sprint(t.Year())}
a.values["mod-year-range"] = &RegexpValue{RawValue: `((20\d\d\-{{mod-year}})|({{mod-year}}))`}
}

for _, v := range a.values {
if err := v.Calculate(a.values); err != nil {
return err
}
}
return nil
}

func (a *Analyzer) Analyze(target *Target) (i Issue) {
if a.template == "" {
return NewIssue("Missed template for check")
}
if t, err := target.ModTime(); err == nil {
if t.Year() != time.Now().Year() {
return nil
}

if err := a.processPerTargetValues(target); err != nil {
return &issue{msg: err.Error()}
}

file := target.File
var header string
var offset = Location{
Expand Down Expand Up @@ -142,16 +158,10 @@ func (a *Analyzer) readField(reader *Reader) string {
}

func New(options ...Option) *Analyzer {
a := &Analyzer{}
a := &Analyzer{values: make(map[string]Value)}
for _, o := range options {
o.apply(a)
}
for _, v := range a.values {
err := v.Calculate(a.values)
if err != nil {
panic(err.Error())
}
}
return a
}

Expand Down
8 changes: 4 additions & 4 deletions config.go
Expand Up @@ -19,7 +19,7 @@ package goheader
import (
"errors"
"fmt"
"io/ioutil"
"os"
"strings"
"time"

Expand All @@ -40,7 +40,7 @@ func (c *Configuration) builtInValues() map[string]Value {
var result = make(map[string]Value)
year := fmt.Sprint(time.Now().Year())
result["year-range"] = &RegexpValue{
RawValue: strings.ReplaceAll(`((20\d\d\-YEAR)|(YEAR))`, "YEAR", year),
RawValue: `((20\d\d\-{{YEAR}})|({{YEAR}}))`,
}
result["year"] = &ConstValue{
RawValue: year,
Expand Down Expand Up @@ -82,7 +82,7 @@ func (c *Configuration) GetTemplate() (string, error) {
if c.TemplatePath == "" {
return "", errors.New("template has not passed")
}
if b, err := ioutil.ReadFile(c.TemplatePath); err != nil {
if b, err := os.ReadFile(c.TemplatePath); err != nil {
return "", err
} else {
c.Template = strings.TrimSpace(string(b))
Expand All @@ -91,7 +91,7 @@ func (c *Configuration) GetTemplate() (string, error) {
}

func (c *Configuration) Parse(p string) error {
b, err := ioutil.ReadFile(p)
b, err := os.ReadFile(p)
if err != nil {
return err
}
Expand Down
32 changes: 27 additions & 5 deletions value.go
Expand Up @@ -26,6 +26,7 @@ import (
type Calculable interface {
Calculate(map[string]Value) error
Get() string
Raw() string
}

type Value interface {
Expand All @@ -35,7 +36,7 @@ type Value interface {

func calculateValue(calculable Calculable, values map[string]Value) (string, error) {
sb := strings.Builder{}
r := calculable.Get()
r := calculable.Raw()
var endIndex int
var startIndex int
for startIndex = strings.Index(r, "{{"); startIndex >= 0; startIndex = strings.Index(r, "{{") {
Expand All @@ -61,22 +62,33 @@ func calculateValue(calculable Calculable, values map[string]Value) (string, err
}

type ConstValue struct {
RawValue string
RawValue, Value string
}

func (c *ConstValue) Calculate(values map[string]Value) error {
v, err := calculateValue(c, values)
if err != nil {
return err
}
c.RawValue = v
c.Value = v
return nil
}

func (c *ConstValue) Raw() string {
return c.RawValue
}

func (c *ConstValue) Get() string {
if c.Value != "" {
return c.Value
}
return c.RawValue
}

func (c *ConstValue) String() string {
return c.Get()
}

func (c *ConstValue) Read(s *Reader) Issue {
l := s.Location()
p := s.Position()
Expand All @@ -94,22 +106,32 @@ func (c *ConstValue) Read(s *Reader) Issue {
}

type RegexpValue struct {
RawValue string
RawValue, Value string
}

func (r *RegexpValue) Calculate(values map[string]Value) error {
v, err := calculateValue(r, values)
if err != nil {
return err
}
r.RawValue = v
r.Value = v
return nil
}

func (r *RegexpValue) Raw() string {
return r.RawValue
}
func (r *RegexpValue) Get() string {
if r.Value != "" {
return r.Value
}
return r.RawValue
}

func (r *RegexpValue) String() string {
return r.Get()
}

func (r *RegexpValue) Read(s *Reader) Issue {
l := s.Location()
p := regexp.MustCompile(r.Get())
Expand Down
4 changes: 2 additions & 2 deletions version/version.go
@@ -1,4 +1,4 @@
// Copyright (c) 2020-2022 Denis Tingaikin
// Copyright (c) 2020-2024 Denis Tingaikin
//
// SPDX-License-Identifier: Apache-2.0
//
Expand All @@ -17,5 +17,5 @@
package version

func Value() string {
return "v0.4.3"
return "v0.5.0"
}

0 comments on commit 262498f

Please sign in to comment.