lintpack

package module
v0.5.2 Latest Latest
Warning

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

Go to latest
Published: Jan 3, 2019 License: BSD-3-Clause Imports: 9 Imported by: 10

README

Build Status Go Report Card

Quick start / Installation / Usage

Install lintpack:

go get -v -u github.com/go-lintpack/lintpack/...

Install checkers from go-critic/checkers:

# You'll need to have sources under your Go workspace first:
go get -v -u github.com/go-critic/checkers
# Now build a linter that includes all checks from that package:
lintpack build -o gocritic github.com/go-critic/checkers
# Executable gocritic is created and can be used as a standalone linter.

Produced binary includes basic help as well as supported checks documentation.

So, the process is simple:

  • Get the lintpack linter builder
  • Build linter from checks implemented in different repos, by various vendors

Documentation

Overview

Package lintpack provides shared API between the linter and its checkers.

Linter is usually implemented by creating instances of registered checkers. Checkers are registered by the AddChecker call.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Checker

type Checker struct {
	// Info is an info object that was used to instantiate this checker.
	Info *CheckerInfo
	// contains filtered or unexported fields
}

Checker is an implementation of a check that is described by the associated info.

func NewChecker

func NewChecker(ctx *Context, info *CheckerInfo) *Checker

NewChecker returns initialized checker identified by an info. info must be non-nil. Panics if info describes a checker that was not properly registered.

func (*Checker) Check

func (c *Checker) Check(f *ast.File) []Warning

Check runs rule checker over file f.

type CheckerCollection added in v0.5.1

type CheckerCollection struct {
	// URL is a link for a main source of information on the collection.
	URL string
}

CheckerCollection provides additional information for a group of checkers.

func (*CheckerCollection) AddChecker added in v0.5.1

func (coll *CheckerCollection) AddChecker(info *CheckerInfo, constructor func(*CheckerContext) FileWalker)

AddChecker registers a new checker into a checkers pool. Constructor is used to create a new checker instance. Checker name (defined in CheckerInfo.Name) must be unique.

CheckerInfo.Collection is automatically set to the coll (the receiver).

If checker is never needed, for example if it is disabled, constructor will not be called.

type CheckerContext

type CheckerContext struct {
	*Context
	// contains filtered or unexported fields
}

CheckerContext is checker-local context copy. Fields that are not from Context itself are writeable.

func (*CheckerContext) Warn

func (ctx *CheckerContext) Warn(node ast.Node, format string, args ...interface{})

Warn adds a Warning to checker output.

type CheckerInfo

type CheckerInfo struct {
	// Name is a checker name.
	Name string

	// Tags is a list of labels that can be used to enable or disable checker.
	// Common tags are "experimental" and "performance".
	Tags []string

	// Params declares checker-specific parameters. Optional.
	Params CheckerParams

	// Summary is a short one sentence description.
	// Should not end with a period.
	Summary string

	// Details extends summary with additional info. Optional.
	Details string

	// Before is a code snippet of code that will violate rule.
	Before string

	// After is a code snippet of fixed code that complies to the rule.
	After string

	// Note is an optional caution message or advice.
	Note string

	// Collection establishes a checker-to-collection relationship.
	Collection *CheckerCollection
}

CheckerInfo holds checker metadata and structured documentation.

func GetCheckersInfo

func GetCheckersInfo() []*CheckerInfo

GetCheckersInfo returns a checkers info list for all registered checkers. The slice is sorted by a checker name.

Info objects can be used to instantiate checkers with NewChecker function.

func (*CheckerInfo) HasTag

func (info *CheckerInfo) HasTag(tag string) bool

HasTag reports whether checker described by the info has specified tag.

type CheckerParam added in v0.5.1

type CheckerParam struct {
	// Value holds parameter bound value.
	// It might be overwritten by the integrating linter.
	//
	// Permitted types include:
	//	- int
	//	- bool
	//	- string
	Value interface{}

	// Usage gives an overview about what parameter does.
	Usage string
}

CheckerParam describes a single checker customizable parameter.

type CheckerParams added in v0.5.1

type CheckerParams map[string]*CheckerParam

CheckerParams holds all checker-specific parameters.

Provides convenient access to the loosely typed underlying map.

func (CheckerParams) Bool added in v0.5.1

func (params CheckerParams) Bool(pname string) bool

Bool lookups pname key in underlying map and type-asserts it to bool.

func (CheckerParams) Int added in v0.5.1

func (params CheckerParams) Int(pname string) int

Int lookups pname key in underlying map and type-asserts it to int.

func (CheckerParams) String added in v0.5.1

func (params CheckerParams) String(pname string) string

String lookups pname key in underlying map and type-asserts it to string.

type Context

type Context struct {
	// TypesInfo carries parsed packages types information.
	TypesInfo *types.Info

	// SizesInfo carries alignment and type size information.
	// Arch-dependent.
	SizesInfo types.Sizes

	// FileSet is a file set that was used during the program loading.
	FileSet *token.FileSet

	// Pkg describes package that is being checked.
	Pkg *types.Package

	// Filename is a currently checked file name.
	Filename string

	// Require records what optional resources are required
	// by the checkers set that use this context.
	//
	// Every require fields makes associated context field
	// to be properly initialized.
	// For example, Context.require.PkgObjects => Context.PkgObjects.
	Require struct {
		PkgObjects bool
		PkgRenames bool
	}

	// PkgObjects stores all imported packages and their local names.
	PkgObjects map[*types.PkgName]string

	// PkgRenames maps package path to its local renaming.
	// Contains no entries for packages that were imported without
	// explicit local names.
	PkgRenames map[string]string
}

Context is a readonly state shared among every checker.

func NewContext

func NewContext(fset *token.FileSet, sizes types.Sizes) *Context

NewContext returns new shared context to be used by every checker.

All data carried by the context is readonly for checkers, but can be modified by the integrating application.

func (*Context) SetFileInfo

func (c *Context) SetFileInfo(name string, f *ast.File)

SetFileInfo sets file-related metadata.

Must be called for every source code file being checked.

func (*Context) SetPackageInfo

func (c *Context) SetPackageInfo(info *types.Info, pkg *types.Package)

SetPackageInfo sets package-related metadata.

Must be called for every package being checked.

type FileWalker

type FileWalker interface {
	WalkFile(*ast.File)
}

FileWalker is an interface every checker should implement.

The WalkFile method is executed for every Go file inside the package that is being checked.

type Warning

type Warning struct {
	// Node is an AST node that caused warning to trigger.
	// Can be used to obtain proper error location.
	Node ast.Node

	// Text is warning message without source location info.
	Text string
}

Warning represents issue that is found by checker.

Jump to

Keyboard shortcuts

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