goheader

package module
v0.4.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 11, 2022 License: GPL-3.0 Imports: 14 Imported by: 0

README

go-header

Actions Status

Go source code linter providing checks for license headers.

Installation

For installation you can simply use go get.

go get github.com/denis-tingajkin/go-header/cmd/go-header

Configuration

To configuring .go-header.yml linter you simply need to fill the next fields:

---
temaplte: # expects header template string.
tempalte-path: # expects path to file with license header string. 
values: # expects `const` or `regexp` node with values where values is a map string to string.
  const:
    key1: value1 # const value just checks equality. Note `key1` should be used in template string as {{ key1 }} or {{ KEY1 }}.
  regexp:
    key2: value2 # regexp value just checks regex match. The value should be a valid regexp pattern. Note `key2` should be used in template string as {{ key2 }} or {{ KEY2 }}.

Where values also can be used recursively. Example:

values:
  const:
    key1: "value" 
  regexp:
    key2: "{{key1}} value1" # Reads as regex pattern "value value1"

Bult-in values

  • YEAR - Expects current year. Example header value: 2020. Example of template using: {{YEAR}} or {{year}}.
  • YEAR-RANGE - Expects any valid year interval or current year. Example header value: 2020 or 2000-2020. Example of template using: {{year-range}} or {{YEAR-RANGE}}.

Execution

go-header linter expects file paths on input. If you want to run go-header only on diff files, then you can use this command:

go-header $(git diff --name-only | grep -E '.*\.go')

Setup example

Step 1

Create configuration file .go-header.yml in the root of project.

---
values:
  const:
    MY COMPANY: mycompany.com
template: |
  {{ MY COMPANY }}
  SPDX-License-Identifier: Apache-2.0

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at:

  	  http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
Step 2

You are ready! Execute go-header ${PATH_TO_FILES} from the root of the project.

Documentation

Overview

Copyright (c) 2020 Denis Tingajkin

SPDX-License-Identifier: Apache-2.0

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at:

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Analyzer

type Analyzer struct {
	// contains filtered or unexported fields
}

func New

func New(options ...Option) *Analyzer

func (*Analyzer) Analyze

func (a *Analyzer) Analyze(target *Target) Issue

type Calculable

type Calculable interface {
	Calculate(map[string]Value) error
	Get() string
}

type Configuration

type Configuration struct {
	// Values is map of values. Supports two types 'const` and `regexp`. Values can be used recursively.
	Values map[string]map[string]string `yaml:"values"'`
	// Template is template for checking. Uses values.
	Template string `yaml:"template"`
	// TemplatePath path to the template file. Useful if need to load the template from a specific file.
	TemplatePath string `yaml:"template-path"`
}

Configuration represents go-header linter setup parameters

func (*Configuration) GetTemplate

func (c *Configuration) GetTemplate() (string, error)

func (*Configuration) GetValues

func (c *Configuration) GetValues() (map[string]Value, error)

func (*Configuration) Parse

func (c *Configuration) Parse(p string) error

type ConstValue

type ConstValue struct {
	RawValue string
}

func (*ConstValue) Calculate

func (c *ConstValue) Calculate(values map[string]Value) error

func (*ConstValue) Get

func (c *ConstValue) Get() string

func (*ConstValue) Read

func (c *ConstValue) Read(s *Reader) Issue

type Issue

type Issue interface {
	Location() Location
	Message() string
}

func NewIssue

func NewIssue(msg string) Issue

func NewIssueWithLocation

func NewIssueWithLocation(msg string, location Location) Issue

type Location

type Location struct {
	Line     int
	Position int
}

func (Location) Add

func (l Location) Add(other Location) Location

func (Location) String

func (l Location) String() string

type Option

type Option interface {
	// contains filtered or unexported methods
}

func WithTemplate

func WithTemplate(template string) Option

func WithValues

func WithValues(values map[string]Value) Option

type Reader

type Reader struct {
	// contains filtered or unexported fields
}

func NewReader

func NewReader(text string) *Reader

func (*Reader) Done

func (r *Reader) Done() bool

func (*Reader) Finish

func (r *Reader) Finish() string

func (*Reader) Location

func (r *Reader) Location() Location

func (*Reader) Next

func (r *Reader) Next() rune

func (*Reader) Peek

func (r *Reader) Peek() rune

func (*Reader) Position

func (r *Reader) Position() int

func (*Reader) ReadWhile

func (r *Reader) ReadWhile(match func(rune) bool) string

func (*Reader) SetOffset

func (r *Reader) SetOffset(offset Location)

func (*Reader) SetPosition

func (r *Reader) SetPosition(pos int)

type RegexpValue

type RegexpValue struct {
	RawValue string
}

func (*RegexpValue) Calculate

func (r *RegexpValue) Calculate(values map[string]Value) error

func (*RegexpValue) Get

func (r *RegexpValue) Get() string

func (*RegexpValue) Read

func (r *RegexpValue) Read(s *Reader) Issue

type Target

type Target struct {
	Path string
	File *ast.File
}

func (*Target) ModTime

func (t *Target) ModTime() (time.Time, error)

type Value

type Value interface {
	Calculable
	Read(*Reader) Issue
}

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL