aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
2023-05-20Clarify why we skip non-local functionsv0.0.1Teddy Wing
2023-05-20Clean up panic debugging from c064b2142aa81488e32be387393c494d98696a55Teddy Wing
2023-05-20Fix panic when go statement calls non-function-literalTeddy Wing
2023-05-20Clean up 'function literal in variable' codeTeddy Wing
* Remove the test code where I was looking for how to get the function literal from the ident specified in the `go` statement. * Clean up `funcLitFromIdent`.
2023-05-20Add support for function literals defined in local variablesTeddy Wing
In addition to checking function literals after the `go` statement, also check closures assigned to variables.
2023-05-20Ideas for getting a FuncLit from an `*ast.Ident` variableTeddy Wing
2023-05-20Find `*ast.FuncLit` in local assignmentTeddy Wing
Get the FuncLit from the rhs of the local variable.
2023-05-19Inspect `go` statement call function to try to find local closuresTeddy Wing
2023-05-19Add test for local closure assigned to variableTeddy Wing
Try to catch local closures not run directly from the `go` statement, but assigned to a variable first.
2023-05-18README: Add install instructionsTeddy Wing
2023-05-18Add READMETeddy Wing
2023-05-18Add package documentationTeddy Wing
2023-05-18testdata: Add missing license headersTeddy Wing
2023-05-18gocapturedrefrace/main: Add version command line argumentTeddy Wing
I don't need to use the `flags` package here for a single boolean option. Previously I had tried with `flags` but it conflicted with the flags defined by `analyzer.Analyzer`.
2023-05-18Rename package to "capturedrefrace"Teddy Wing
I decided I don't like the "go" prefix for a Go package name. It doesn't make sense. Rename the module and package accordingly. I do like the "go" prefix in the command line program, so leave it there.
2023-05-18Remove version flag TODOTeddy Wing
Can't figure out a way to do this while preserving the default flags of the analyser.
2023-05-18Use `passes/inspect` to find `go` statementsTeddy Wing
I originally thought that I could save on the two additional `ast.Inspect` calls in this file by using the `passes/inspect` library, but it doesn't replace those calls. It seems to help more when you have multiple analysers to run at once. Not sure how much it helps us here.
2023-05-18findLocalVarDeclarations: Remove unused `pass` argumentTeddy Wing
I though I might need it when I first wrote the function.
2023-05-18Remove shadowing variable TODOTeddy Wing
This is now handled.
2023-05-18checkClosure: Update `localAssignments` variable nameTeddy Wing
Now that the slice contains both assignment and declaration identifiers, update the variable names to be more representative.
2023-05-18findLocalVarDeclarations: Move AssignStmt handling to functionTeddy Wing
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`.
2023-05-18varDeclaration: Return all identifiers in declarationTeddy Wing
Declarations can include multiple identifiers. Return all of these from the function and rename it accordingly.
2023-05-18Find variable declarations in function closureTeddy Wing
Treat these as shadowed variables and ignore them.
2023-05-18Add test for shadowing declarationTeddy Wing
This doesn't pass yet.
2023-05-18Clean up checkShadowingTeddy Wing
* Add descriptive comments. * Remove old in-progress code. * Change the function name to `findLocalAssignments` which made more sense given what the function now does.
2023-05-18Ignore shadowed variablesTeddy Wing
In order to ignore shadowed variables, we first build a list of all local assignments in the closure, and ignore any ident in that list.
2023-05-18Create a new plan for checking shadowingTeddy Wing
2023-05-18Try to ignore shadowed assignmentsTeddy Wing
Not working yet. Does print the right thing, but since we're also matching `*ast.Ident`s, we must be getting the shadowed declarations as Idents and including them in the reported diagnostics.
2023-05-18Find shadowed variable assignmentsTeddy Wing
We don't want to report shadowed variables.
2023-05-17Separate `isVariableTypeSignature` conditionTeddy Wing
It doesn't need to be attached to the `funcScope` condition as it's a separate check. Wasn't thinking carefully when I added the check.
2023-05-17Add test for shadowingTeddy Wing
2023-05-17Ignore captured variables containing functionsTeddy Wing
2023-05-17function_argument: Add a test for local function variablesTeddy Wing
2023-05-17Add test for function argumentsTeddy Wing
Don't report captured function values: $ go test --- FAIL: Test (1.26s) analysistest.go:459: ./testdata/function_argument.go:5:3: unexpected diagnostic: captured reference callback in goroutine closure
2023-05-17Add note for package documentationTeddy Wing
2023-05-17Add note for version flagTeddy Wing
2023-05-17struct_reference.go: Test multiple diagnostics on one lineTeddy Wing
2023-05-17Add notes about false positives that should be correctedTeddy Wing
2023-05-16Add license (GNU GPLv3+)Teddy Wing
2023-05-16checkClosure: Move `funcScope` inside this functionTeddy Wing
It's not used in `run()`, so we can move it here.
2023-05-16checkClosure: Add function doc commentTeddy Wing
2023-05-16checkClosure: Clean up old codeTeddy Wing
* Remove old in-progress code now that we have a working implementation. * Add explanatory comments. * Remove `assignmentsInFunc()` which is unused.
2023-05-16run: Add a few explanatory commentsTeddy Wing
2023-05-16run: Clean up old codeTeddy Wing
Remove old unused in-progress code.
2023-05-16Report reference-type closure argumentsTeddy Wing
2023-05-16Get arguments of closure with `funcLit.Type.Params.List`Teddy Wing
Easier to use than `goStmt.Call.Args` because we don't have to handle both `*ast.Expr` and `*ast.UnaryExpr`.
2023-05-16Try to get the arguments of the closure from `goStmt.Call.Args`Teddy Wing
2023-05-16Ignore any identifier that isn't a *types.VarTeddy Wing
Otherwise we can get `*types.TypeName` identifiers, like the variable types in the closure's argument list. We only want to inspect variables.
2023-05-16Add notes for next things to add and fixTeddy Wing
These items don't pass our tests.
2023-05-16Ignore variables defined in the function closureTeddy Wing
This correctly ignores local variables.