@@ -9,9 +9,10 @@ import (
99)
1010
1111const  (
12- 	rowsName     =  "Rows" 
13- 	stmtName     =  "Stmt" 
14- 	closeMethod  =  "Close" 
12+ 	rowsName       =  "Rows" 
13+ 	stmtName       =  "Stmt" 
14+ 	namedStmtName  =  "NamedStmt" 
15+ 	closeMethod    =  "Close" 
1516)
1617
1718type  action  uint8 
3940func  NewAnalyzer () * analysis.Analyzer  {
4041	return  & analysis.Analyzer {
4142		Name : "sqlclosecheck" ,
42- 		Doc :  "Checks that sql.Rows, sql.Stmt, pgx.Query are closed." ,
43+ 		Doc :  "Checks that sql.Rows, sql.Stmt, sqlx.NamedStmt,  pgx.Query are closed." ,
4344		Run :  run ,
4445		Requires : []* analysis.Analyzer {
4546			buildssa .Analyzer ,
@@ -76,7 +77,7 @@ func run(pass *analysis.Pass) (interface{}, error) {
7677					refs  :=  (* targetValue .value ).Referrers ()
7778					isClosed  :=  checkClosed (refs , targetTypes )
7879					if  ! isClosed  {
79- 						pass .Reportf ((targetValue .instr ).Pos (), "Rows/Stmt was not closed" )
80+ 						pass .Reportf ((targetValue .instr ).Pos (), "Rows/Stmt/NamedStmt  was not closed" )
8081					}
8182
8283					checkDeferred (pass , refs , targetTypes , false )
@@ -112,6 +113,11 @@ func getTargetTypes(pssa *buildssa.SSA, targetPackages []string) []any {
112113		if  stmtType  !=  nil  {
113114			targets  =  append (targets , stmtType )
114115		}
116+ 
117+ 		namedStmtType  :=  getTypePointerFromName (pkg , namedStmtName )
118+ 		if  namedStmtType  !=  nil  {
119+ 			targets  =  append (targets , namedStmtType )
120+ 		}
115121	}
116122
117123	return  targets 
@@ -120,7 +126,7 @@ func getTargetTypes(pssa *buildssa.SSA, targetPackages []string) []any {
120126func  getTypePointerFromName (pkg  * ssa.Package , name  string ) * types.Pointer  {
121127	pkgType  :=  pkg .Type (name )
122128	if  pkgType  ==  nil  {
123- 		// this package does not use Rows/Stmt 
129+ 		// this package does not use Rows/Stmt/NamedStmt  
124130		return  nil 
125131	}
126132
0 commit comments