origin-go-tools

module
v0.0.32 Latest Latest
Warning

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

Go to latest
Published: May 13, 2021 License: BSD-3-Clause

README

Go Tools -> Go Pointer Analysis

This branch is for call back funcs shown in app func but called after several level of lib calls

We want to skip the analysis of lib calls, too expensive. If we are going to create synthetic ssa for lib functions, we start here.

  1. write a native.xml file with all irs we want
  2. preload all irs in native.xml
  3. when reach here @ssa/create.go CreatePackage(), we check if it is in preload, if yes, use this synthetic

Key files: ssa/create.go ssa/builder.go

Standard libraries: https://pkg.go.dev/std

Update

====================================================================================

Git clone from https://github.com/golang/tools, start from commit 146a0deefdd11b942db7520f68c117335329271a (around v0.5.0-pre1).

The default go pointer analysis algorithm (v0.5.0-pre1) is at go_tools/go/pointer_default.

For any panic, please submit an issue with copy/paste crash stack. Thanks.

How to Use?

Go to go_tools/main, and run go build. Then, run ./main with the following flags and the directory of the go project that you want to analyze. It will go through all of your main files and analyze them one by one.

Flags
  • path: default value = "", Designated project filepath.
  • doLog: default value = false, Do a log to record all procedure, so verbose.
  • doCompare: default value = false, Do comparison with default pta about performance and result.

For example,

./main -doLog -doCompare ../grpc-go/benchmark/server

This will run the origin-sensitive pointer analysis on all main files under directory ../grpc-go/benchmark/server, as well as generate a full log and a comparison with the default algorithm about performance and result.

Note that -doLog is very verbose and significantly slowdown the analysis.

User APIs (for detector)

Go to https://github.com/april1989/origin-go-tools/main/main.go, check how to use the callgraph and queries.

Origin-sensitive

What is Origin?

We treat a go routine instruction as an origin entry point, and all variables/function calls inside this go rountine share the same context as their belonging go routine.

Main Changes from Default

Instead of pre-computing all cgnodes and their constraints before actually propagating changes among points-to constraints, we start from the reachable cgnodes init and main and gradually compute reachable cgnodes and their constraints.

kCFA

Main Changes from Default
  • Create k-callsite-sensitive contexts for static/invoke calls
  • Generate constraints/cgnode online for invoke calls and targets when it is necessary
  • Currently, skip the creation of reflection and dynamic calls due to the huge number

========================================================================

Doc of Default Algorithm

The most recent doc is https://pkg.go.dev/golang.org/x/tools/go/pointer#pkg-overview, quoted:

"SOUNDNESS

The analysis is fully sound when invoked on pure Go programs that do not use reflection or unsafe.Pointer conversions. In other words, if there is any possible execution of the program in which pointer P may point to object O, the analysis will report that fact."

However, over soundness is unnecessary.

========================================================================

Major differences between the results of mine and default

1. Queries and Points-to Set (pts)

All example below based on race_checker/tests/cg.go

Why my query has two pointers for one ssa.Value:

There are two pointers involved in one constraint, both of which are stored under the same ssa.Value in my queries.

Why default query is empty but mines is not:

Default has tracked less types than mine, of which constraints and invoke calls are missing in the default result. Hence, it has empty pts while mine has non-empty pts. For example,

SSA:  &t57[41:int]
My Query: (#obj:  1 )
   n597&[0:shared contour; ] : [slicelit[*]]
   n2266&[0:shared contour; ] : []
Default Query: (#obj:  0 )
   n36563 : []

In default log:
; t181 = &t57[41:int]
	localobj[t181] = n37034
	type not tracked: *strconv.leftCheat

In my log:
; t181 = &t57[41:int]
	localobj[t181] = n2266
	addr n597 <- {&n2266}
Why my query is empty but default is not:

Due to the default algorithm (pre-compute all constraints for all functions), it generates a lot of unreachable functions/cgnodes (they have no callers), as well as their constraints. This also affect the pts of the reachable part in cg and pts, since they may be polluted. For example,

SSA:  (*internal/reflectlite.rtype).Size  //-> (*internal/reflectlite.rtype).Size is not reachable function
My Query: (#obj:  0 )
   n8971&(Global/Local) : []
Default Query: (#obj:  1 )
   n6354 : [(*internal/reflectlite.rtype).Size]
Why my query is non-empty but no corresponding pointer in default:

Default does not create queries for those types (not tracked types). For example,

654.
SSA:  io.ErrClosedPipe
My Query: (#obj:  1 )
   n4448&(Global/Local) : [makeinterface:*errors.errorString]
Default Query: nil)

In default log:
; *ErrClosedPipe = t10
	copy n19413 <- n39471

In my log:
; *ErrClosedPipe = t10
	create n4448 error for global
	globalobj[io.ErrClosedPipe] = n4448
	copy n4448 <- n4431
Why default query is empty but no corresponding pointer in mine:

IDK. For example,

SSA:  &r.peekRune [#4]
My Query: nil
Default Query: (#obj:  0 )
   n44378 : []
and
SSA:  ssa:wrapnilchk(v, "internal/reflectl...":string, "IsNil":string)
My Query: nil)
Default Query: (#obj:  0 )
   n44378 : []
and
	val[t115] = n44377  (*ssa.FieldAddr)
	create n44378 *[16]byte for query
	copy n44378 <- n44377
Why my query has less objs in pts than the default:

All missing objs in my pts are due to objs and constraints introduced by unreachable functions. This is the pollution we mentioned before. For example,

SSA:  *t49
My Query: (#obj:  27 )
   n11815&[0:shared contour; ] : [makeinterface:int makeinterface:[]int makeinterface:int makeinterface:*internal/reflectlite.ValueError makeinterface:*internal/reflectlite.ValueError makeinterface:string makeinterface:string makeinterface:*internal/reflectlite.ValueError makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string]
Default Query: (#obj:  79 )
   n18076 : [makeinterface:int makeinterface:[]int makeinterface:string makeinterface:*internal/reflectlite.ValueError makeinterface:*internal/reflectlite.ValueError makeinterface:*internal/reflectlite.ValueError makeinterface:*internal/reflectlite.ValueError makeinterface:string makeinterface:*internal/reflectlite.ValueError makeinterface:string makeinterface:string makeinterface:string makeinterface:fmt.scanError makeinterface:fmt.scanError makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:*internal/reflectlite.ValueError makeinterface:string makeinterface:string makeinterface:*internal/reflectlite.ValueError makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:int makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:*internal/reflectlite.ValueError makeinterface:fmt.scanError makeinterface:fmt.scanError makeinterface:fmt.scanError makeinterface:fmt.scanError makeinterface:fmt.scanError makeinterface:fmt.scanError makeinterface:fmt.scanError makeinterface:fmt.scanError makeinterface:fmt.scanError makeinterface:fmt.scanError makeinterface:fmt.scanError makeinterface:fmt.scanError makeinterface:fmt.scanError makeinterface:fmt.scanError makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:*errors.errorString makeinterface:string makeinterface:string makeinterface:*internal/reflectlite.ValueError makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string makeinterface:string]
2. CG
Why are the cgs from default and my pta different?

The default algorithm create cgnodes for functions that are not reachable from the main entry. For example, when analyzing the main entry google.golang.org/grpc/benchmark/server, the default algorithm pre-generate constraints and cgnodes for function:

(*google.golang.org/grpc/credentials.tlsCreds).ServerHandshake

which is not reachable from the main entry (it has no caller in cg).

This can be reflected in the default analysis data:

Call Graph: (function based) 
#Nodes:  14740
#Edges:  45550
#Unreach Nodes:  7698
#Reach Nodes:  7042
#Unreach Functions:  7698
#Reach Functions:  7042

Done  -- PTA/CG Build; Using  5m13.058385739s . 

Default generates 14740 functions and their constraints, however, only 7042 (at most) of them can be reachable from the main.

While my analysis data is:

Call Graph: (cgnode based: function + context) 
#Nodes:  6306
#Edges:  23291
#Unreach Nodes:  39
#Reach Nodes:  6267
#Unreach Functions:  39
#Reach Functions:  5870

#Unreach Nodes from Pre-Gen Nodes:  39
#Unreach Functions from Pre-Gen Nodes:  39
#(Pre-Gen are created for reflections)

Done  -- PTA/CG Build; Using 10.279403083s. 

My analysis traverse 6267 functions that can be reached after extended the traced types.

This not only introduce differences in cg, but also unreachable constraints and objs, which can be propagated to the cgnodes and constraints that can be reached from the main entry. This causes false call edges and callees in default cg.

Most CG DIFFs from comparing mine with default result are due to this reason.

Why the unreachable function/cgnode will be generated?

This is because the default algorithm creates nodes and constraints for all methods of all types that are dynamically accessible via reflection or interfaces (no matter it will be reached or not).

Why the cgnodes from default not include some callees as mine?

Because default algo has less type tracked than mine (no constraints generated for them and hence no propagation), Hence, some invoke calls has no base instance that will exist if we track those types. Consequently, no callee functions/cgs generated as well as constraints.

Directories

Path Synopsis
_tests_callback
lib
testcases/Grpc/1862
TestGrpc1862
TestGrpc1862
testcases/Istio/8144
TestIstio8144
TestIstio8144
benchmark
parse
Package parse provides support for parsing benchmark results as generated by 'go test -bench'.
Package parse provides support for parsing benchmark results as generated by 'go test -bench'.
Package blog implements a web server for articles written in present format.
Package blog implements a web server for articles written in present format.
atom
Package atom defines XML data structures for an Atom feed.
Package atom defines XML data structures for an Atom feed.
cmd
auth/authtest
authtest is a diagnostic tool for implementations of the GOAUTH protocol described in https://golang.org/issue/26232.
authtest is a diagnostic tool for implementations of the GOAUTH protocol described in https://golang.org/issue/26232.
auth/cookieauth
cookieauth uses a “Netscape cookie file” to implement the GOAUTH protocol described in https://golang.org/issue/26232.
cookieauth uses a “Netscape cookie file” to implement the GOAUTH protocol described in https://golang.org/issue/26232.
auth/gitauth
gitauth uses 'git credential' to implement the GOAUTH protocol described in https://golang.org/issue/26232.
gitauth uses 'git credential' to implement the GOAUTH protocol described in https://golang.org/issue/26232.
auth/netrcauth
netrcauth uses a .netrc file (or _netrc file on Windows) to implement the GOAUTH protocol described in https://golang.org/issue/26232.
netrcauth uses a .netrc file (or _netrc file on Windows) to implement the GOAUTH protocol described in https://golang.org/issue/26232.
benchcmp
The benchcmp command displays performance changes between benchmarks.
The benchcmp command displays performance changes between benchmarks.
bundle
Bundle creates a single-source-file version of a source package suitable for inclusion in a particular target package.
Bundle creates a single-source-file version of a source package suitable for inclusion in a particular target package.
callgraph
callgraph: a tool for reporting the call graph of a Go program.
callgraph: a tool for reporting the call graph of a Go program.
compilebench
Compilebench benchmarks the speed of the Go compiler.
Compilebench benchmarks the speed of the Go compiler.
cover
Cover is a program for analyzing the coverage profiles generated by 'go test -coverprofile=cover.out'.
Cover is a program for analyzing the coverage profiles generated by 'go test -coverprofile=cover.out'.
digraph
The digraph command performs queries over unlabelled directed graphs represented in text form.
The digraph command performs queries over unlabelled directed graphs represented in text form.
eg
The eg command performs example-based refactoring.
The eg command performs example-based refactoring.
fiximports
The fiximports command fixes import declarations to use the canonical import path for packages that have an "import comment" as defined by https://golang.org/s/go14customimport.
The fiximports command fixes import declarations to use the canonical import path for packages that have an "import comment" as defined by https://golang.org/s/go14customimport.
getgo
The getgo command installs Go to the user's system.
The getgo command installs Go to the user's system.
getgo/server
Command server serves get.golang.org, redirecting users to the appropriate getgo installer based on the request path.
Command server serves get.golang.org, redirecting users to the appropriate getgo installer based on the request path.
go-contrib-init
The go-contrib-init command helps new Go contributors get their development environment set up for the Go contribution process.
The go-contrib-init command helps new Go contributors get their development environment set up for the Go contribution process.
godex
The godex command prints (dumps) exported information of packages or selected package objects.
The godex command prints (dumps) exported information of packages or selected package objects.
godoc
Godoc extracts and generates documentation for Go programs.
Godoc extracts and generates documentation for Go programs.
goimports
Command goimports updates your Go import lines, adding missing ones and removing unreferenced ones.
Command goimports updates your Go import lines, adding missing ones and removing unreferenced ones.
gomvpkg
The gomvpkg command moves go packages, updating import declarations.
The gomvpkg command moves go packages, updating import declarations.
gorename
The gorename command performs precise type-safe renaming of identifiers in Go source code.
The gorename command performs precise type-safe renaming of identifiers in Go source code.
gotype
The gotype command, like the front-end of a Go compiler, parses and type-checks a single Go package.
The gotype command, like the front-end of a Go compiler, parses and type-checks a single Go package.
goyacc
Goyacc is a version of yacc for Go.
Goyacc is a version of yacc for Go.
guru
guru: a tool for answering questions about Go source code.
guru: a tool for answering questions about Go source code.
guru/serial
Package serial defines the guru's schema for -json output.
Package serial defines the guru's schema for -json output.
html2article
This program takes an HTML file and outputs a corresponding article file in present format.
This program takes an HTML file and outputs a corresponding article file in present format.
present
Present displays slide presentations and articles.
Present displays slide presentations and articles.
present2md
Present2md converts legacy-syntax present files to Markdown-syntax present files.
Present2md converts legacy-syntax present files to Markdown-syntax present files.
splitdwarf
Splitdwarf uncompresses and copies the DWARF segment of a Mach-O executable into the "dSYM" file expected by lldb and ports of gdb on OSX.
Splitdwarf uncompresses and copies the DWARF segment of a Mach-O executable into the "dSYM" file expected by lldb and ports of gdb on OSX.
splitdwarf/internal/macho
Package macho implements access to Mach-O object files.
Package macho implements access to Mach-O object files.
ssadump
ssadump: a tool for displaying and interpreting the SSA form of Go programs.
ssadump: a tool for displaying and interpreting the SSA form of Go programs.
stress
The stress utility is intended for catching sporadic failures.
The stress utility is intended for catching sporadic failures.
stringer
Stringer is a tool to automate the creation of methods that satisfy the fmt.Stringer interface.
Stringer is a tool to automate the creation of methods that satisfy the fmt.Stringer interface.
toolstash
Toolstash provides a way to save, run, and restore a known good copy of the Go toolchain and to compare the object files generated by two toolchains.
Toolstash provides a way to save, run, and restore a known good copy of the Go toolchain and to compare the object files generated by two toolchains.
container
intsets
Package intsets provides Sparse, a compact and fast representation for sparse sets of int values.
Package intsets provides Sparse, a compact and fast representation for sparse sets of int values.
Package cover provides support for parsing coverage profiles generated by "go test -coverprofile=cover.out".
Package cover provides support for parsing coverage profiles generated by "go test -coverprofile=cover.out".
go
analysis
Package analysis defines the interface between a modular static analysis and an analysis driver program.
Package analysis defines the interface between a modular static analysis and an analysis driver program.
analysis/analysistest
Package analysistest provides utilities for golibexec_testing analyzers.
Package analysistest provides utilities for golibexec_testing analyzers.
analysis/internal/analysisflags
Package analysisflags defines helpers for processing flags of analysis driver tools.
Package analysisflags defines helpers for processing flags of analysis driver tools.
analysis/internal/checker
Package checker defines the implementation of the checker commands.
Package checker defines the implementation of the checker commands.
analysis/internal/facts
Package facts defines a serializable set of analysis.Fact.
Package facts defines a serializable set of analysis.Fact.
analysis/multichecker
Package multichecker defines the main function for an analysis driver with several analyzers.
Package multichecker defines the main function for an analysis driver with several analyzers.
analysis/passes/asmdecl
Package asmdecl defines an Analyzer that reports mismatches between assembly files and Go declarations.
Package asmdecl defines an Analyzer that reports mismatches between assembly files and Go declarations.
analysis/passes/assign
Package assign defines an Analyzer that detects useless assignments.
Package assign defines an Analyzer that detects useless assignments.
analysis/passes/atomic
Package atomic defines an Analyzer that checks for common mistakes using the sync/atomic package.
Package atomic defines an Analyzer that checks for common mistakes using the sync/atomic package.
analysis/passes/atomicalign
Package atomicalign defines an Analyzer that checks for non-64-bit-aligned arguments to sync/atomic functions.
Package atomicalign defines an Analyzer that checks for non-64-bit-aligned arguments to sync/atomic functions.
analysis/passes/bools
Package bools defines an Analyzer that detects common mistakes involving boolean operators.
Package bools defines an Analyzer that detects common mistakes involving boolean operators.
analysis/passes/buildssa
Package buildssa defines an Analyzer that constructs the SSA representation of an error-free package and returns the set of all functions within it.
Package buildssa defines an Analyzer that constructs the SSA representation of an error-free package and returns the set of all functions within it.
analysis/passes/buildtag
Package buildtag defines an Analyzer that checks build tags.
Package buildtag defines an Analyzer that checks build tags.
analysis/passes/cgocall
Package cgocall defines an Analyzer that detects some violations of the cgo pointer passing rules.
Package cgocall defines an Analyzer that detects some violations of the cgo pointer passing rules.
analysis/passes/composite
Package composite defines an Analyzer that checks for unkeyed composite literals.
Package composite defines an Analyzer that checks for unkeyed composite literals.
analysis/passes/copylock
Package copylock defines an Analyzer that checks for locks erroneously passed by value.
Package copylock defines an Analyzer that checks for locks erroneously passed by value.
analysis/passes/ctrlflow
Package ctrlflow is an analysis that provides a syntactic control-flow graph (CFG) for the body of a function.
Package ctrlflow is an analysis that provides a syntactic control-flow graph (CFG) for the body of a function.
analysis/passes/deepequalerrors
Package deepequalerrors defines an Analyzer that checks for the use of reflect.DeepEqual with error values.
Package deepequalerrors defines an Analyzer that checks for the use of reflect.DeepEqual with error values.
analysis/passes/errorsas
The errorsas package defines an Analyzer that checks that the second argument to errors.As is a pointer to a type implementing error.
The errorsas package defines an Analyzer that checks that the second argument to errors.As is a pointer to a type implementing error.
analysis/passes/findcall
Package findcall defines an Analyzer that serves as a trivial example and test of the Analysis API.
Package findcall defines an Analyzer that serves as a trivial example and test of the Analysis API.
analysis/passes/findcall/cmd/findcall
The findcall command runs the findcall analyzer.
The findcall command runs the findcall analyzer.
analysis/passes/httpresponse
Package httpresponse defines an Analyzer that checks for mistakes using HTTP responses.
Package httpresponse defines an Analyzer that checks for mistakes using HTTP responses.
analysis/passes/ifaceassert
Package ifaceassert defines an Analyzer that flags impossible interface-interface type assertions.
Package ifaceassert defines an Analyzer that flags impossible interface-interface type assertions.
analysis/passes/ifaceassert/cmd/ifaceassert
The ifaceassert command runs the ifaceassert analyzer.
The ifaceassert command runs the ifaceassert analyzer.
analysis/passes/inspect
Package inspect defines an Analyzer that provides an AST inspector (github.com/april1989/origin-go-tools/go/ast/inspect.Inspect) for the syntax trees of a package.
Package inspect defines an Analyzer that provides an AST inspector (github.com/april1989/origin-go-tools/go/ast/inspect.Inspect) for the syntax trees of a package.
analysis/passes/internal/analysisutil
Package analysisutil defines various helper functions used by two or more packages beneath go/analysis.
Package analysisutil defines various helper functions used by two or more packages beneath go/analysis.
analysis/passes/loopclosure
Package loopclosure defines an Analyzer that checks for references to enclosing loop variables from within nested functions.
Package loopclosure defines an Analyzer that checks for references to enclosing loop variables from within nested functions.
analysis/passes/lostcancel
Package lostcancel defines an Analyzer that checks for failure to call a context cancellation function.
Package lostcancel defines an Analyzer that checks for failure to call a context cancellation function.
analysis/passes/lostcancel/cmd/lostcancel
The lostcancel command applies the github.com/april1989/origin-go-tools/go/analysis/passes/lostcancel analysis to the specified packages of Go source code.
The lostcancel command applies the github.com/april1989/origin-go-tools/go/analysis/passes/lostcancel analysis to the specified packages of Go source code.
analysis/passes/nilfunc
Package nilfunc defines an Analyzer that checks for useless comparisons against nil.
Package nilfunc defines an Analyzer that checks for useless comparisons against nil.
analysis/passes/nilness
Package nilness inspects the control-flow graph of an SSA function and reports errors such as nil pointer dereferences and degenerate nil pointer comparisons.
Package nilness inspects the control-flow graph of an SSA function and reports errors such as nil pointer dereferences and degenerate nil pointer comparisons.
analysis/passes/nilness/cmd/nilness
The nilness command applies the github.com/april1989/origin-go-tools/go/analysis/passes/nilness analysis to the specified packages of Go source code.
The nilness command applies the github.com/april1989/origin-go-tools/go/analysis/passes/nilness analysis to the specified packages of Go source code.
analysis/passes/pkgfact
The pkgfact package is a demonstration and test of the package fact mechanism.
The pkgfact package is a demonstration and test of the package fact mechanism.
analysis/passes/printf
Package printf defines an Analyzer that checks consistency of Printf format strings and arguments.
Package printf defines an Analyzer that checks consistency of Printf format strings and arguments.
analysis/passes/shadow
Package shadow defines an Analyzer that checks for shadowed variables.
Package shadow defines an Analyzer that checks for shadowed variables.
analysis/passes/shadow/cmd/shadow
The shadow command runs the shadow analyzer.
The shadow command runs the shadow analyzer.
analysis/passes/shift
Package shift defines an Analyzer that checks for shifts that exceed the width of an integer.
Package shift defines an Analyzer that checks for shifts that exceed the width of an integer.
analysis/passes/sortslice
Package sortslice defines an Analyzer that checks for calls to sort.Slice that do not use a slice type as first argument.
Package sortslice defines an Analyzer that checks for calls to sort.Slice that do not use a slice type as first argument.
analysis/passes/stdmethods
Package stdmethods defines an Analyzer that checks for misspellings in the signatures of methods similar to well-known interfaces.
Package stdmethods defines an Analyzer that checks for misspellings in the signatures of methods similar to well-known interfaces.
analysis/passes/stringintconv
Package stringintconv defines an Analyzer that flags type conversions from integers to strings.
Package stringintconv defines an Analyzer that flags type conversions from integers to strings.
analysis/passes/stringintconv/cmd/stringintconv
The stringintconv command runs the stringintconv analyzer.
The stringintconv command runs the stringintconv analyzer.
analysis/passes/structtag
Package structtag defines an Analyzer that checks struct field tags are well formed.
Package structtag defines an Analyzer that checks struct field tags are well formed.
analysis/passes/tests
Package tests defines an Analyzer that checks for common mistaken usages of tests and examples.
Package tests defines an Analyzer that checks for common mistaken usages of tests and examples.
analysis/passes/unmarshal
The unmarshal package defines an Analyzer that checks for passing non-pointer or non-interface types to unmarshal and decode functions.
The unmarshal package defines an Analyzer that checks for passing non-pointer or non-interface types to unmarshal and decode functions.
analysis/passes/unmarshal/cmd/unmarshal
The unmarshal command runs the unmarshal analyzer.
The unmarshal command runs the unmarshal analyzer.
analysis/passes/unreachable
Package unreachable defines an Analyzer that checks for unreachable code.
Package unreachable defines an Analyzer that checks for unreachable code.
analysis/passes/unsafeptr
Package unsafeptr defines an Analyzer that checks for invalid conversions of uintptr to unsafe.Pointer.
Package unsafeptr defines an Analyzer that checks for invalid conversions of uintptr to unsafe.Pointer.
analysis/passes/unusedresult
Package unusedresult defines an analyzer that checks for unused results of calls to certain pure functions.
Package unusedresult defines an analyzer that checks for unused results of calls to certain pure functions.
analysis/singlechecker
Package singlechecker defines the main function for an analysis driver with only a single analysis.
Package singlechecker defines the main function for an analysis driver with only a single analysis.
analysis/unitchecker
The unitchecker package defines the main function for an analysis driver that analyzes a single compilation unit during a build.
The unitchecker package defines the main function for an analysis driver that analyzes a single compilation unit during a build.
ast/astutil
Package astutil contains common utilities for working with the Go AST.
Package astutil contains common utilities for working with the Go AST.
ast/inspector
Package inspector provides helper functions for traversal over the syntax trees of a package, including node filtering by type, and materialization of the traversal stack.
Package inspector provides helper functions for traversal over the syntax trees of a package, including node filtering by type, and materialization of the traversal stack.
buildutil
Package buildutil provides utilities related to the go/build package in the standard library.
Package buildutil provides utilities related to the go/build package in the standard library.
callgraph
Package callgraph defines the call graph and various algorithms and utilities to operate on it.
Package callgraph defines the call graph and various algorithms and utilities to operate on it.
callgraph/cha
Package cha computes the call graph of a Go program using the Class Hierarchy Analysis (CHA) algorithm.
Package cha computes the call graph of a Go program using the Class Hierarchy Analysis (CHA) algorithm.
callgraph/rta
This package provides Rapid Type Analysis (RTA) for Go, a fast algorithm for call graph construction and discovery of reachable code (and hence dead code) and runtime types.
This package provides Rapid Type Analysis (RTA) for Go, a fast algorithm for call graph construction and discovery of reachable code (and hence dead code) and runtime types.
callgraph/static
Package static computes the call graph of a Go program containing only static call edges.
Package static computes the call graph of a Go program containing only static call edges.
cfg
Package cfg constructs a simple control-flow graph (CFG) of the statements and expressions within a single function.
Package cfg constructs a simple control-flow graph (CFG) of the statements and expressions within a single function.
expect
Package expect provides support for interpreting structured comments in Go source code as test expectations.
Package expect provides support for interpreting structured comments in Go source code as test expectations.
gccgoexportdata
Package gccgoexportdata provides functions for reading export data files containing type information produced by the gccgo compiler.
Package gccgoexportdata provides functions for reading export data files containing type information produced by the gccgo compiler.
gcexportdata
Package gcexportdata provides functions for locating, reading, and writing export data files containing type information produced by the gc compiler.
Package gcexportdata provides functions for locating, reading, and writing export data files containing type information produced by the gc compiler.
internal/gccgoimporter
Package gccgoimporter implements Import for gccgo-generated object files.
Package gccgoimporter implements Import for gccgo-generated object files.
internal/gcimporter
Package gcimporter provides various functions for reading gc-generated object files that can be used to implement the Importer interface defined by the Go 1.5 standard library package.
Package gcimporter provides various functions for reading gc-generated object files that can be used to implement the Importer interface defined by the Go 1.5 standard library package.
internal/packagesdriver
Package packagesdriver fetches type sizes for go/packages and go/analysis.
Package packagesdriver fetches type sizes for go/packages and go/analysis.
loader
Package loader loads a complete Go program from source code, parsing and type-checking the initial packages plus their transitive closure of dependencies.
Package loader loads a complete Go program from source code, parsing and type-checking the initial packages plus their transitive closure of dependencies.
packages
Package packages loads Go packages for inspection and analysis.
Package packages loads Go packages for inspection and analysis.
packages/gopackages
The gopackages command is a diagnostic tool that demonstrates how to use github.com/april1989/origin-go-tools/go/packages to load, parse, type-check, and print one or more Go packages.
The gopackages command is a diagnostic tool that demonstrates how to use github.com/april1989/origin-go-tools/go/packages to load, parse, type-check, and print one or more Go packages.
packages/packagestest
Package packagestest creates temporary projects on disk for golibexec_testing go tools on.
Package packagestest creates temporary projects on disk for golibexec_testing go tools on.
pointer
Package pointer implements Andersen's analysis, an inclusion-based pointer analysis algorithm first described in (Andersen, 1994).
Package pointer implements Andersen's analysis, an inclusion-based pointer analysis algorithm first described in (Andersen, 1994).
pointer_default
Package pointer implements Andersen's analysis, an inclusion-based pointer analysis algorithm first described in (Andersen, 1994).
Package pointer implements Andersen's analysis, an inclusion-based pointer analysis algorithm first described in (Andersen, 1994).
ssa
Package ssa defines a representation of the elements of Go programs (packages, types, functions, variables and constants) using a static single-assignment (SSA) form intermediate representation (IR) for the bodies of functions.
Package ssa defines a representation of the elements of Go programs (packages, types, functions, variables and constants) using a static single-assignment (SSA) form intermediate representation (IR) for the bodies of functions.
ssa/interp
Package ssa/interp defines an interpreter for the SSA representation of Go programs.
Package ssa/interp defines an interpreter for the SSA representation of Go programs.
types/objectpath
Package objectpath defines a naming scheme for types.Objects (that is, named entities in Go programs) relative to their enclosing package.
Package objectpath defines a naming scheme for types.Objects (that is, named entities in Go programs) relative to their enclosing package.
types/typeutil
Package typeutil defines various utilities for types, such as Map, a mapping from types.Type to interface{} values.
Package typeutil defines various utilities for types, such as Map, a mapping from types.Type to interface{} values.
vcs
Package vcs exposes functions for resolving import paths and using version control systems, which can be used to implement behavior similar to the standard "go get" command.
Package vcs exposes functions for resolving import paths and using version control systems, which can be used to implement behavior similar to the standard "go get" command.
Package godoc is a work-in-progress (2013-07-17) package to begin splitting up the godoc binary into multiple pieces.
Package godoc is a work-in-progress (2013-07-17) package to begin splitting up the godoc binary into multiple pieces.
analysis
Package analysis performs type and pointer analysis and generates mark-up for the Go source view.
Package analysis performs type and pointer analysis and generates mark-up for the Go source view.
golangorgenv
Package golangorgenv provides environment information for programs running at golang.org and its subdomains.
Package golangorgenv provides environment information for programs running at golang.org and its subdomains.
redirect
Package redirect provides hooks to register HTTP handlers that redirect old godoc paths to their new equivalents and assist in accessing the issue tracker, wiki, code review system, etc.
Package redirect provides hooks to register HTTP handlers that redirect old godoc paths to their new equivalents and assist in accessing the issue tracker, wiki, code review system, etc.
static
Package static exports a map of static file content that supports the godoc user interface.
Package static exports a map of static file content that supports the godoc user interface.
util
Package util contains utility types and functions for godoc.
Package util contains utility types and functions for godoc.
vfs
Package vfs defines types for abstract file system access and provides an implementation accessing the file system of the underlying OS.
Package vfs defines types for abstract file system access and provides an implementation accessing the file system of the underlying OS.
vfs/gatefs
Package gatefs provides an implementation of the FileSystem interface that wraps another FileSystem and limits its concurrency.
Package gatefs provides an implementation of the FileSystem interface that wraps another FileSystem and limits its concurrency.
vfs/httpfs
Package httpfs implements http.FileSystem using a godoc vfs.FileSystem.
Package httpfs implements http.FileSystem using a godoc vfs.FileSystem.
vfs/mapfs
Package mapfs file provides an implementation of the FileSystem interface based on the contents of a map[string]string.
Package mapfs file provides an implementation of the FileSystem interface based on the contents of a map[string]string.
vfs/zipfs
Package zipfs file provides an implementation of the FileSystem interface based on the contents of a .zip file.
Package zipfs file provides an implementation of the FileSystem interface based on the contents of a .zip file.
Package imports implements a Go pretty-printer (like package "go/format") that also adds or removes import statements as necessary.
Package imports implements a Go pretty-printer (like package "go/format") that also adds or removes import statements as necessary.
internal
analysisinternal
Package analysisinternal exposes internal-only fields from go/analysis.
Package analysisinternal exposes internal-only fields from go/analysis.
event
Package event provides a set of packages that cover the main concepts of telemetry in an implementation agnostic way.
Package event provides a set of packages that cover the main concepts of telemetry in an implementation agnostic way.
event/core
Package core provides support for event based telemetry.
Package core provides support for event based telemetry.
event/export/eventtest
Package eventtest supports logging events to a test.
Package eventtest supports logging events to a test.
event/export/metric
Package metric aggregates events into metrics that can be exported.
Package metric aggregates events into metrics that can be exported.
event/export/ocagent
Package ocagent adds the ability to export all telemetry to an ocagent.
Package ocagent adds the ability to export all telemetry to an ocagent.
fastwalk
Package fastwalk provides a faster version of filepath.Walk for file system scanning tools.
Package fastwalk provides a faster version of filepath.Walk for file system scanning tools.
gocommand
Package gocommand is a helper for calling the go command.
Package gocommand is a helper for calling the go command.
gopathwalk
Package gopathwalk is like filepath.Walk but specialized for finding Go packages, particularly in $GOPATH and $GOROOT.
Package gopathwalk is like filepath.Walk but specialized for finding Go packages, particularly in $GOPATH and $GOROOT.
imports
Package imports implements a Go pretty-printer (like package "go/format") that also adds or removes import statements as necessary.
Package imports implements a Go pretty-printer (like package "go/format") that also adds or removes import statements as necessary.
jsonrpc2
Package jsonrpc2 is a minimal implementation of the JSON RPC 2 spec.
Package jsonrpc2 is a minimal implementation of the JSON RPC 2 spec.
jsonrpc2/servertest
Package servertest provides utilities for running tests against a remote LSP server.
Package servertest provides utilities for running tests against a remote LSP server.
lsp
Package lsp implements LSP for gopls.
Package lsp implements LSP for gopls.
lsp/analysis/fillreturns
Package fillreturns defines an Analyzer that will attempt to automatically fill in a return statement that has missing values with zero value elements.
Package fillreturns defines an Analyzer that will attempt to automatically fill in a return statement that has missing values with zero value elements.
lsp/analysis/fillstruct
Package fillstruct defines an Analyzer that automatically fills in a struct declaration with zero value elements for each field.
Package fillstruct defines an Analyzer that automatically fills in a struct declaration with zero value elements for each field.
lsp/analysis/nonewvars
Package nonewvars defines an Analyzer that applies suggested fixes to errors of the type "no new variables on left side of :=".
Package nonewvars defines an Analyzer that applies suggested fixes to errors of the type "no new variables on left side of :=".
lsp/analysis/noresultvalues
Package noresultvalues defines an Analyzer that applies suggested fixes to errors of the type "no result values expected".
Package noresultvalues defines an Analyzer that applies suggested fixes to errors of the type "no result values expected".
lsp/analysis/simplifycompositelit
Package simplifycompositelit defines an Analyzer that simplifies composite literals.
Package simplifycompositelit defines an Analyzer that simplifies composite literals.
lsp/analysis/simplifyrange
Package simplifyrange defines an Analyzer that simplifies range statements.
Package simplifyrange defines an Analyzer that simplifies range statements.
lsp/analysis/simplifyslice
Package simplifyslice defines an Analyzer that simplifies slice statements.
Package simplifyslice defines an Analyzer that simplifies slice statements.
lsp/analysis/undeclaredname
Package undeclaredname defines an Analyzer that applies suggested fixes to errors of the type "undeclared name: %s".
Package undeclaredname defines an Analyzer that applies suggested fixes to errors of the type "undeclared name: %s".
lsp/analysis/unusedparams
Package unusedparams defines an analyzer that checks for unused parameters of functions.
Package unusedparams defines an analyzer that checks for unused parameters of functions.
lsp/browser
Package browser provides utilities for interacting with users' browsers.
Package browser provides utilities for interacting with users' browsers.
lsp/cache
Package cache implements the caching layer for gopls.
Package cache implements the caching layer for gopls.
lsp/cmd
Package cmd handles the gopls command line.
Package cmd handles the gopls command line.
lsp/cmd/test
Package cmdtest contains the test suite for the command line behavior of gopls.
Package cmdtest contains the test suite for the command line behavior of gopls.
lsp/debug
Package debug exports debug information for gopls.
Package debug exports debug information for gopls.
lsp/debug/tag
Package tag provides the labels used for telemetry throughout gopls.
Package tag provides the labels used for telemetry throughout gopls.
lsp/diff
Package diff supports a pluggable diff algorithm.
Package diff supports a pluggable diff algorithm.
lsp/diff/difftest
Package difftest supplies a set of tests that will operate on any implementation of a diff algorithm as exposed by "github.com/april1989/origin-go-tools/internal/lsp/diff"
Package difftest supplies a set of tests that will operate on any implementation of a diff algorithm as exposed by "github.com/april1989/origin-go-tools/internal/lsp/diff"
lsp/diff/myers
Package myers implements the Myers diff algorithm.
Package myers implements the Myers diff algorithm.
lsp/fake
Package fake provides fake implementations of a text editor, LSP client plugin, and Sandbox environment for use in tests.
Package fake provides fake implementations of a text editor, LSP client plugin, and Sandbox environment for use in tests.
lsp/fuzzy
Package fuzzy implements a fuzzy matching algorithm.
Package fuzzy implements a fuzzy matching algorithm.
lsp/helper
Invoke with //go:generate helper/helper -t Server -d protocol/tsserver.go -u lsp -o server_gen.go invoke in internal/lsp
Invoke with //go:generate helper/helper -t Server -d protocol/tsserver.go -u lsp -o server_gen.go invoke in internal/lsp
lsp/lsprpc
Package lsprpc implements a jsonrpc2.StreamServer that may be used to serve the LSP on a jsonrpc2 channel.
Package lsprpc implements a jsonrpc2.StreamServer that may be used to serve the LSP on a jsonrpc2 channel.
lsp/mod
Package mod provides core features related to go.mod file handling for use by Go editors and tools.
Package mod provides core features related to go.mod file handling for use by Go editors and tools.
lsp/protocol
Package protocol contains the structs that map directly to the wire format of the "Language Server Protocol".
Package protocol contains the structs that map directly to the wire format of the "Language Server Protocol".
lsp/snippet
Package snippet implements the specification for the LSP snippet format.
Package snippet implements the specification for the LSP snippet format.
lsp/source
Package source provides core features for use by Go editors and tools.
Package source provides core features for use by Go editors and tools.
lsp/tests
Package tests exports functionality to be used across a variety of gopls tests.
Package tests exports functionality to be used across a variety of gopls tests.
memoize
Package memoize supports memoizing the return values of functions with idempotent results that are expensive to compute.
Package memoize supports memoizing the return values of functions with idempotent results that are expensive to compute.
packagesinternal
Package packagesinternal exposes internal-only fields from go/packages.
Package packagesinternal exposes internal-only fields from go/packages.
proxydir
Package proxydir provides functions for writing module data to a directory in proxy format, so that it can be used as a module proxy by setting GOPROXY="file://<dir>".
Package proxydir provides functions for writing module data to a directory in proxy format, so that it can be used as a module proxy by setting GOPROXY="file://<dir>".
span
Package span contains support for representing with positions and ranges in text files.
Package span contains support for representing with positions and ranges in text files.
stack
Package stack provides support for parsing standard goroutine stack traces.
Package stack provides support for parsing standard goroutine stack traces.
stack/gostacks
The gostacks command processes stdin looking for things that look like stack traces and simplifying them to make the log more readable.
The gostacks command processes stdin looking for things that look like stack traces and simplifying them to make the log more readable.
testenv
Package testenv contains helper functions for skipping tests based on which tools are present in the environment.
Package testenv contains helper functions for skipping tests based on which tools are present in the environment.
tool
Package tool is a harness for writing Go tools.
Package tool is a harness for writing Go tools.
xcontext
Package xcontext is a package to offer the extra functionality we need from contexts that is not available from the standard context package.
Package xcontext is a package to offer the extra functionality we need from contexts that is not available from the standard context package.
Package playground registers HTTP handlers at "/compile" and "/share" that proxy requests to the golang.org playground service.
Package playground registers HTTP handlers at "/compile" and "/share" that proxy requests to the golang.org playground service.
socket
Package socket implements an WebSocket-based playground backend.
Package socket implements an WebSocket-based playground backend.
Package present implements parsing and rendering of present files, which can be slide presentations as in github.com/april1989/origin-go-tools/cmd/present or articles as in golang.org/x/blog (the Go blog).
Package present implements parsing and rendering of present files, which can be slide presentations as in github.com/april1989/origin-go-tools/cmd/present or articles as in golang.org/x/blog (the Go blog).
refactor
eg
Package eg implements the example-based refactoring tool whose command-line is defined in github.com/april1989/origin-go-tools/cmd/eg.
Package eg implements the example-based refactoring tool whose command-line is defined in github.com/april1989/origin-go-tools/cmd/eg.
importgraph
Package importgraph computes the forward and reverse import dependency graphs for all packages in a Go workspace.
Package importgraph computes the forward and reverse import dependency graphs for all packages in a Go workspace.
rename
Package rename contains the implementation of the 'gorename' command whose main function is in github.com/april1989/origin-go-tools/cmd/gorename.
Package rename contains the implementation of the 'gorename' command whose main function is in github.com/april1989/origin-go-tools/cmd/gorename.
satisfy
Package satisfy inspects the type-checked ASTs of Go packages and reports the set of discovered type constraints of the form (lhs, rhs Type) where lhs is a non-trivial interface, rhs satisfies this interface, and this fact is necessary for the package to be well-typed.
Package satisfy inspects the type-checked ASTs of Go packages and reports the set of discovered type constraints of the form (lhs, rhs Type) where lhs is a non-trivial interface, rhs satisfies this interface, and this fact is necessary for the package to be well-typed.
Package txtar implements a trivial text-based file archive format.
Package txtar implements a trivial text-based file archive format.

Jump to

Keyboard shortcuts

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