Skip to content

Conversation

@chelout
Copy link

@chelout chelout commented Oct 27, 2025

Summary

Adds support for detecting SELECT * usage in const and var declarations at package and function levels.

Problem

Previously, the analyzer only detected SELECT * in:

  • Short variable declarations: query := "SELECT * FROM users"
  • Function call arguments: db.Query("SELECT * FROM users")

But missed a common pattern of storing SQL queries in constants:

const UserQuery = "SELECT * FROM users"  // ❌ Not detected
var OrderQuery = "SELECT * FROM orders"  // ❌ Not detected

Solution

Core Changes

  • Added checkGenDecl() function to process *ast.GenDecl nodes (const/var declarations)
  • Integrated into both entry points: run() and RunWithConfig()
  • Now detects:
    • ✅ Package-level constants: const Query = "SELECT * FROM users"
    • ✅ Package-level variables: var Query = "SELECT * FROM users"
    • ✅ Declaration blocks: const (...) and var (...)
    • ✅ Local constants inside functions

Documentation Updates

  • Updated README.md with new feature description
  • Added examples for constants and variables

Examples

❌ Will be detected:

const QueryUsers = "SELECT * FROM users"
var DynamicQuery = "SELECT * FROM logs"

const (
    GetAllUsers = "SELECT * FROM users"
    GetOrders   = "SELECT * FROM orders"
)

func example() {
    const localQuery = "SELECT * FROM categories"
}

✅ Good practices:

const GoodQuery = "SELECT id, name, email FROM users"
const CountQuery = "SELECT COUNT(*) FROM users"
const SchemaQuery = "SELECT * FROM information_schema.tables"

Technical Details

AST Analysis confirms no duplication:

  • checkAssignStmt handles *ast.AssignStmt: short declarations (:=) and assignments (=)
  • checkGenDecl (new) handles *ast.GenDecl: const and var declarations
  • Functions are complementary with no overlap

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant