diff options
| author | Teddy Wing | 2023-05-18 03:57:48 +0200 | 
|---|---|---|
| committer | Teddy Wing | 2023-05-18 03:57:48 +0200 | 
| commit | a0e54f27ebad9c46112a36dfed7b0d4b4e8da99b (patch) | |
| tree | 4562d48ffb9037cd35eb49997acd3e3f05a84f80 | |
| parent | c76dd021f7a3df0f524b8c9e8e710950a0b31fb6 (diff) | |
| download | gocapturedrefrace-a0e54f27ebad9c46112a36dfed7b0d4b4e8da99b.tar.bz2 | |
findLocalVarDeclarations: Move AssignStmt handling to function
Match the `varDeclarations` function splitting this into a more
self-contained block.
Also don't return in the loop to ensure we look at all assignments in
`assignStmt`.
| -rw-r--r-- | gocapturedrefrace.go | 52 | 
1 files changed, 30 insertions, 22 deletions
| diff --git a/gocapturedrefrace.go b/gocapturedrefrace.go index 5be3656..f53e4d3 100644 --- a/gocapturedrefrace.go +++ b/gocapturedrefrace.go @@ -156,28 +156,8 @@ func findLocalVarDeclarations(  		func(node ast.Node) bool {  			switch node := node.(type) {  			case *ast.AssignStmt: -				// assignStmt, ok := node.(*ast.AssignStmt) -				// if !ok { -				// 	return true -				// } -				assignStmt := node - -				if assignStmt.Tok != token.DEFINE { -					return true -				} - -				for _, lhs := range assignStmt.Lhs { -					ident, ok := lhs.(*ast.Ident) -					if !ok { -						return true -					} - -					if ident == nil { -						return true -					} - -					declarations = append(declarations, ident) -				} +				assignments := assignmentDefinitions(node) +				declarations = append(declarations, assignments...)  			case *ast.GenDecl:  				decls := varDeclarations(node) @@ -193,6 +173,34 @@ func findLocalVarDeclarations(  	return declarations  } +// assignmentDefinitions returns the identifiers corresponding to variable +// assignments in assignStmt, or nil if assignStmt does not declare any +// variables. +func assignmentDefinitions( +	assignStmt *ast.AssignStmt, +) (assignments []*ast.Ident) { +	assignments = []*ast.Ident{} + +	if assignStmt.Tok != token.DEFINE { +		return nil +	} + +	for _, lhs := range assignStmt.Lhs { +		ident, ok := lhs.(*ast.Ident) +		if !ok { +			continue +		} + +		if ident == nil { +			continue +		} + +		assignments = append(assignments, ident) +	} + +	return assignments +} +  // varDeclarations returns the identifiers corresponding to variable  // declarations in decl, or nil if decl is not a variable declaration.  func varDeclarations(decl *ast.GenDecl) (declarations []*ast.Ident) { | 
