0fa60c68fb
* Drop the iso_checksum_type & iso_checksum_url fields In favor of simply using iso_checksum that will know what to do. * fix after master merge * Update builder_test.go * Update builder_test.go * Update builder_test.go * Update builder_test.go * Update builder_test.go * remove checksum lowercasing tests * Update builder_test.go * Update builder_test.go * better docs * Update builder_test.go * even better docs * Update config.go * Update builder_test.go * Update step_create_vmx_test.go * make generate * better docs * fix imports * up tests * Update _ISOConfig-required.html.md * Update builder_test.go * don't use sha1.Sum("none") as a caching path * Update builder_test.go * better docs * Update iso_config_test.go remove ISOChecksumType/ISOChecksumURL references * Update step_download_test.go * add iso_checksum_url and iso_checksum_type fixers + tests * add concrete examples of checksum values * add examples of checksumming from local file * update go-getter dep * up deps * use new go-getter version * up ESX5Driver.VerifyChecksum: use go-getter's checksumming * ISOConfig.Prepare: get checksum there in case we need it as a string in ESX5Driver.VerifyChecksum * Update iso_config.go * get go-getter from v2 branch * Update driver_esx5.go add more comments * Update driver_esx5.go * show better error message when the checksum is invalid * Update builder_test.go put in a valid checksum to fix tests, checksum is md5("packer") * Update builder_test.go test invalid and valid checksum * more test updating * fix default md5 string to be a valid md5 * TestChecksumFileNameMixedCaseBug: use 'file:' prefix for file checksumming * Update iso_config_test.go * Update iso_config_test.go * Update builder_test.go * Update builder_test.go * Update builder_test.go * Update CHANGELOG.md * Update CHANGELOG.md * Update go.mod * Update go.mod * Update CHANGELOG.md
59 lines
1.5 KiB
Go
59 lines
1.5 KiB
Go
// Package lintdsl provides helpers for implementing static analysis
|
||
// checks. Dot-importing this package is encouraged.
|
||
package lintdsl
|
||
|
||
import (
|
||
"bytes"
|
||
"fmt"
|
||
"go/ast"
|
||
"go/format"
|
||
|
||
"golang.org/x/tools/go/analysis"
|
||
"honnef.co/go/tools/pattern"
|
||
)
|
||
|
||
func Inspect(node ast.Node, fn func(node ast.Node) bool) {
|
||
if node == nil {
|
||
return
|
||
}
|
||
ast.Inspect(node, fn)
|
||
}
|
||
|
||
func Match(pass *analysis.Pass, q pattern.Pattern, node ast.Node) (*pattern.Matcher, bool) {
|
||
// Note that we ignore q.Relevant – callers of Match usually use
|
||
// AST inspectors that already filter on nodes we're interested
|
||
// in.
|
||
m := &pattern.Matcher{TypesInfo: pass.TypesInfo}
|
||
ok := m.Match(q.Root, node)
|
||
return m, ok
|
||
}
|
||
|
||
func MatchAndEdit(pass *analysis.Pass, before, after pattern.Pattern, node ast.Node) (*pattern.Matcher, []analysis.TextEdit, bool) {
|
||
m, ok := Match(pass, before, node)
|
||
if !ok {
|
||
return m, nil, false
|
||
}
|
||
r := pattern.NodeToAST(after.Root, m.State)
|
||
buf := &bytes.Buffer{}
|
||
format.Node(buf, pass.Fset, r)
|
||
edit := []analysis.TextEdit{{
|
||
Pos: node.Pos(),
|
||
End: node.End(),
|
||
NewText: buf.Bytes(),
|
||
}}
|
||
return m, edit, true
|
||
}
|
||
|
||
func Selector(x, sel string) *ast.SelectorExpr {
|
||
return &ast.SelectorExpr{
|
||
X: &ast.Ident{Name: x},
|
||
Sel: &ast.Ident{Name: sel},
|
||
}
|
||
}
|
||
|
||
// ExhaustiveTypeSwitch panics when called. It can be used to ensure
|
||
// that type switches are exhaustive.
|
||
func ExhaustiveTypeSwitch(v interface{}) {
|
||
panic(fmt.Sprintf("internal error: unhandled case %T", v))
|
||
}
|