Documentation ¶
Overview ¶
Package core holds the central scanning logic used by GAS
(c) Copyright 2016 Hewlett Packard Enterprise Development LP
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Index ¶
- func GetCallInfo(n ast.Node, ctx *Context) (string, string, error)
- func GetCallObject(n ast.Node, ctx *Context) (*ast.CallExpr, types.Object)
- func GetChar(n ast.Node) (byte, error)
- func GetFloat(n ast.Node) (float64, error)
- func GetImportPath(name string, ctx *Context) (string, bool)
- func GetImportedName(path string, ctx *Context) (string, bool)
- func GetInt(n ast.Node) (int64, error)
- func GetLocation(n ast.Node, ctx *Context) (string, int)
- func GetString(n ast.Node) (string, error)
- func MatchCall(n ast.Node, r *regexp.Regexp) *ast.CallExpr
- func MatchCallByPackage(n ast.Node, c *Context, pkg string, names ...string) (*ast.CallExpr, bool)
- func MatchCallByType(n ast.Node, ctx *Context, requiredType string, calls ...string) (*ast.CallExpr, bool)
- func MatchCompLit(n ast.Node, r *regexp.Regexp) *ast.CompositeLit
- func Select(s Selector, n ast.Node, bits ...reflect.Type)
- func SimpleSelect(n ast.Node, bits ...reflect.Type) ast.Node
- func TryResolve(n ast.Node, c *Context) bool
- type Analyzer
- type CallList
- type Context
- type ImportInfo
- type Issue
- type MetaData
- type Metrics
- type Rule
- type RuleSet
- type Score
- type SelectFunc
- type Selector
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GetCallInfo ¶
GetCallInfo returns the package or type and name associated with a call expression.
func GetCallObject ¶
GetCallObject returns the object and call expression and associated object for a given AST node. nil, nil will be returned if the object cannot be resolved.
func GetImportPath ¶
GetImportPath resolves the full import path of an identifer based on the imports in the current context.
func GetImportedName ¶
GetImportedName returns the name used for the package within the code. It will resolve aliases and ignores initalization only imports.
func GetLocation ¶
GetLocation returns the filename and line number of an ast.Node
func MatchCallByPackage ¶
MatchCallByPackage ensures that the specified package is imported, adjusts the name for any aliases and ignores cases that are initialization only imports.
Usage:
node, matched := MatchCallByPackage(n, ctx, "math/rand", "Read")
func MatchCallByType ¶
func MatchCallByType(n ast.Node, ctx *Context, requiredType string, calls ...string) (*ast.CallExpr, bool)
MatchCallByType ensures that the node is a call expression to a specific object type.
Usage:
node, matched := MatchCallByType(n, ctx, "bytes.Buffer", "WriteTo", "Write")
func MatchCompLit ¶
MatchCompLit will match an ast.CompositeLit if its string value obays the given regex.
func SimpleSelect ¶
SimpleSelect will try to match a path through a sub-tree starting at a given AST node. The type of each node in the path at a given depth must match its entry in list of node types given.
Types ¶
type Analyzer ¶
type Analyzer struct { Issues []*Issue `json:"issues"` Stats *Metrics `json:"metrics"` // contains filtered or unexported fields }
The Analyzer object is the main object of GAS. It has methods traverse an AST and invoke the correct checking rules as on each node as required.
func NewAnalyzer ¶
NewAnalyzer builds a new anaylzer.
func (*Analyzer) AddRule ¶
AddRule adds a rule into a rule set list mapped to the given AST node's type. The node is only needed for its type and is not otherwise used.
func (*Analyzer) Process ¶
Process reads in a source file, convert it to an AST and traverse it. Rule methods added with AddRule will be invoked as necessary.
func (*Analyzer) ProcessSource ¶
ProcessSource will convert a source code string into an AST and traverse it. Rule methods added with AddRule will be invoked as necessary. The string is identified by the filename given but no file IO will be done.
type CallList ¶
type CallList map[string]set
/ CallList is used to check for usage of specific packages / and functions.
type Context ¶
type Context struct { FileSet *token.FileSet Comments ast.CommentMap Info *types.Info Pkg *types.Package Root *ast.File Config map[string]interface{} Imports *ImportInfo }
The Context is populated with data parsed from the source code as it is scanned. It is passed through to all rule functions as they are called. Rules may use this data in conjunction withe the encoutered AST node.
type ImportInfo ¶
type ImportInfo struct { Imported map[string]string Aliased map[string]string InitOnly map[string]bool }
ImportInfo is used to track aliased and initialization only imports.
func NewImportInfo ¶
func NewImportInfo() *ImportInfo
type Issue ¶
type Issue struct { Severity Score `json:"severity"` // issue severity (how problematic it is) Confidence Score `json:"confidence"` // issue confidence (how sure we are we found it) What string `json:"details"` // Human readable explanation File string `json:"file"` // File name we found it in Code string `json:"code"` // Impacted code line Line int `json:"line"` // Line number in file }
An Issue is returnd by a GAS rule if it discovers an issue with the scanned code.
type MetaData ¶
MetaData is embedded in all GAS rules. The Severity, Confidence and What message will be passed tbhrough to reported issues.
type Metrics ¶
type Metrics struct { NumFiles int `json:"files"` NumLines int `json:"lines"` NumNosec int `json:"nosec"` NumFound int `json:"found"` }
Metrics used when reporting information about a scanning run.
type RuleSet ¶
A RuleSet maps lists of rules to the type of AST node they should be run on. The anaylzer will only invoke rules contained in the list associated with the type of AST node it is currently visiting.
type Score ¶
type Score int
Score type used by severity and confidence values
func (Score) MarshalJSON ¶
MarshalJSON is used convert a Score object into a JSON representation
type SelectFunc ¶
SelectFunc is like an AST visitor, but has a richer interface. It is called with the current ast.Node being visitied and that nodes depth in the tree. The function can return true to continue traversing the tree, or false to end traversal here.