Age | Commit message (Collapse) | Author |
|
I had previously hard-coded the variable name "err" as the recommended
name declaration in the function signature for simplicity.
Now, use the name assigned in the `defer` instead, which is more
correct.
|
|
Based on the code from 'gocapturedrefrace'.
|
|
This reports diagnostics when using `return nil` instead of `return err`
when `err` is an error variable assigned in the first `defer` closure.
|
|
|
|
Ensure the name of the returned error variable matches the name of the
error variable assigned in the `defer` statement.
|
|
Want to check that the `return` statement uses the same variable used in
the `defer` closure. Start inspecting the values to figure out how we
can narrow that down.
Add a test case for a "good" assignment of a returned error in `defer`.
|
|
|
|
|
|
|
|
Since `ident.Obj.Decl` is a `*ast.ValueSpec` in
`shouldDeclareErrInSignature` but a `*ast.Field` in
`doesDeclareErrInSignature`, we need to handle both declaration types.
Turn the value into an `ast.Node`, which covers both, and use that to
determine whether the variable is declared in the closure.
|
|
We were looking for a `*ast.ValueSpec`, but it looks like when `err` is
declared in the function signature, the type is `*ast.Field`.
|
|
Show me which function the debug print statements belong to.
|
|
The idea is to store the end position of the first defer closure that
assigns an error variable from the outer scope. Then, we can check the
`return` statements in the rest of the function after that position to
ensure they use the error variable.
|
|
Clarify intended contents.
|
|
|
|
|
|
|
|
Give the check a name.
|
|
We don't want to report error variables that were declared inside the
closure, as those don't depend on the outside scope.
|
|
|
|
Give it a name.
|
|
Trying to make this easier to read.
|
|
|
|
While looking at the assignments in the `defer`, if we encounter an
`error`-type assignment, emit a diagnostic if the error named in the lhs
of the assignment is not present in the return signature's names.
Not sure if this makes sense to me yet. I probably only want to report a
problem for a non-declare assignment of an error value when the error
type in the return signature is _not_ named at all.
|
|
Store the index where we find the `error` type in the function
signature's return list so we can use it later to get the corresponding
variable names, if any.
|
|
And add a test function that does have named returned values.
|
|
|
|
|
|
|
|
I didn't read the docs carefully, it turns out `FuncType` only gives us
the signature. If we want access to the function body as well to be able
to walk its AST, we need a `FuncDecl`.
|
|
I was having a hard time figuring out how to get the function where a
`defer` occurs from the defer, so I decided to look at all functions
first instead, and find out if they contain `defer`s.
|
|
Still working out how to traverse the AST to be able to see the objects
I need.
|
|
Idea for a new linter for ensuring errors are returned from `defer`
closures.
|