go-jsonnet/linter/internal/common/common.go
2021-05-19 15:10:49 +02:00

55 lines
1.5 KiB
Go

// Package common provides utilities to be used in multiple linter
// subpackages.
package common
import (
"github.com/google/go-jsonnet/ast"
"github.com/google/go-jsonnet/internal/errors"
)
// VariableKind allows distinguishing various kinds of variables.
type VariableKind int
const (
// VarRegular is a "normal" variable with a definition in the code.
VarRegular VariableKind = iota
// VarParam is a function parameter.
VarParam
// VarStdlib is a special `std` variable.
VarStdlib
)
// Variable is a representation of a variable somewhere in the code.
type Variable struct {
Name ast.Identifier
BindNode ast.Node
Occurences []ast.Node
VariableKind VariableKind
LocRange ast.LocationRange
}
// VariableInfo holds information about a variables from one file
type VariableInfo struct {
Variables []*Variable
// Variable information at every use site.
// More precisely it maps every *ast.Var to the variable.
VarAt map[ast.Node]*Variable
}
// ErrCollector is a struct for accumulating warnings / errors from the linter.
// It is slightly more convenient and more clear than passing pointers to slices around.
type ErrCollector struct {
Errs []errors.StaticError
}
// Collect adds an error to the list
func (ec *ErrCollector) Collect(err errors.StaticError) {
ec.Errs = append(ec.Errs, err)
}
// StaticErr constructs a static error from msg and loc and adds it to the list.
func (ec *ErrCollector) StaticErr(msg string, loc *ast.LocationRange) {
ec.Collect(errors.MakeStaticError(msg, *loc))
}