mustinit

package module
v0.0.0-...-8025540 Latest Latest
Warning

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

Go to latest
Published: Mar 16, 2020 License: BSD-3-Clause Imports: 13 Imported by: 0

README

mustinit

A simple go analysis pass that reports on uninitialized variables and fields. Initialization requirements are specified via mustinit comments or struct tags and automatically inferred from common golang patterns.

$ go get github.com/rpetrich/mustinit/cmd/mustinit
$ go vet -vettool=`which mustinit` ./samples
# github.com/rpetrich/mustinit/samples
samples/all.go:19:3: bare return of type literal requiring initialization
samples/all.go:21:9: missing required fields in literal literal: required
samples/all.go:27:9: literal fields must be specified by key since literal has required fields: required
samples/all.go:31:6: type literal requires initialization
samples/all.go:40:9: missing required fields in embedded literal: lit
samples/all.go:46:6: type initializedInt requires initialization
samples/all.go:51:6: type io.PipeWriter requires initialization
samples/all.go:56:9: missing required fields in mustinit.TypeRequirements literal: IsRequired, RequiredFields

Documentation

Index

Constants

This section is empty.

Variables

View Source
var Analyzer = &analysis.Analyzer{
	Name:      "mustinit",
	Doc:       "checks for initialization of required fields",
	Flags:     *flag.NewFlagSet("", flag.ExitOnError),
	Requires:  []*analysis.Analyzer{inspect.Analyzer},
	Run:       run,
	FactTypes: []analysis.Fact{new(PackageFact)},
}

Functions

This section is empty.

Types

type PackageFact

type PackageFact struct {
	// Requirements stores the requirements of all types in the package
	Requirements map[string]TypeRequirements `mustinit:"true"`
}

PackageFact is used to transfer data on packages between passes

func (*PackageFact) AFact

func (*PackageFact) AFact()

AFact is a type tag required to conform to analysis.Fact

type TypeRequirements

type TypeRequirements struct {
	// IsRequired indicates the type must be initialized
	IsRequired bool `mustinit:"true"`
	// RequiredFIelds indicates which subfields must be initialized
	RequiredFields map[string]struct{} `mustinit:"true"`
}

TypeRequiremends describe whether a type and its subfields must be initialized

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

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