taskw scan
Preview what will be generated from your codebase
taskw scan
Scan the codebase and display what handlers, routes, and providers would be generated. This is useful for previewing changes before running generate.
Usage
taskw scan
Description
The scan
command analyzes your Go codebase to identify:
- Handler Functions - Functions with
@Router
annotations - Provider Functions - Functions with
@Provider
annotations - Route Definitions - HTTP method and path combinations
- Dependency Relationships - How providers are connected
This command is particularly useful for:
- Debugging annotation issues
- Previewing what will be generated
- Validating your code structure
- Understanding the generation process
Examples
Basic Scan
taskw scan
Example output:
🔍 Scanning codebase...
📋 Found 3 handlers:
• HealthHandler.GetHealth (GET /health)
• UserHandler.GetUser (GET /users/:id)
• UserHandler.CreateUser (POST /users)
📦 Found 2 providers:
• NewHealthHandler() -> *HealthHandler
• NewUserHandler() -> *UserHandler
✅ Scan completed successfully
Scan with Validation
The scan command also validates your annotations and reports any issues:
taskw scan
Example output with errors:
🔍 Scanning codebase...
❌ Validation errors:
• UserHandler.GetUser: Invalid route path "/users/:id" (should use {id})
• Missing @Provider annotation for NewOrderHandler
📋 Found 2 handlers:
• HealthHandler.GetHealth (GET /health)
• UserHandler.CreateUser (POST /users)
📦 Found 1 provider:
• NewHealthHandler() -> *HealthHandler
⚠️ Scan completed with validation errors
What Gets Scanned
Handler Functions
Functions with @Router
annotations are identified and their route information is extracted:
// @Router GET /health
func (h *HealthHandler) GetHealth(c *fiber.Ctx) error {
return c.JSON(fiber.Map{"status": "ok"})
}
// @Router POST /users
func (h *UserHandler) CreateUser(c *fiber.Ctx) error {
// handler implementation
}
Provider Functions
Functions with @Provider
annotations are identified for dependency injection:
// @Provider
func NewHealthHandler() *HealthHandler {
return &HealthHandler{}
}
// @Provider
func NewUserHandler(userService *UserService) *UserHandler {
return &UserHandler{service: userService}
}
Scan Configuration
The scan behavior is controlled by the taskw.yaml
configuration:
paths:
scan_dirs: ["./internal", "./cmd"] # Directories to scan
output_dir: "." # Output directory
Scan Directories
By default, Taskw scans the current directory (.
). You can configure specific directories to scan:
paths:
scan_dirs:
- "./internal"
- "./cmd"
- "./pkg"
Validation Rules
The scan command validates your annotations against these rules:
Route Annotations
- ✅ Valid HTTP methods:
GET
,POST
,PUT
,DELETE
,PATCH
,HEAD
,OPTIONS
- ✅ Valid path formats:
/path
,/path/{param}
,/path/{param}/subpath
- ❌ Invalid path formats:
/path/:param
(use{param}
instead)
Provider Annotations
- ✅ Functions with
@Provider
annotation - ✅ Functions that return a concrete type
- ❌ Functions without
@Provider
annotation - ❌ Functions that return interfaces
Error Types
Validation Errors
- Invalid Route Path - Route paths don't follow the expected format
- Missing Annotations - Functions that should have annotations but don't
- Malformed Annotations - Annotations that can't be parsed
Scan Errors
- File Read Errors - Cannot read Go files
- Parse Errors - Go code has syntax errors
- Configuration Errors - Invalid
taskw.yaml
configuration
Debugging with Scan
Check Annotation Syntax
taskw scan
Look for validation errors in the output to identify annotation issues.
Verify File Inclusion
The scan only processes .go
files in the configured scan directories. Make sure your files are included:
paths:
scan_dirs: ["./internal", "./cmd", "./pkg"]
Check for Missing Annotations
The scan will report functions that should have annotations but don't:
❌ Missing @Provider annotation for NewOrderHandler
Integration with Generate
The scan command is designed to work seamlessly with the generate workflow:
# 1. Scan to preview changes
taskw scan
# 2. Fix any validation errors
# ... edit your code ...
# 3. Scan again to verify
taskw scan
# 4. Generate the code
taskw generate
Exit Codes
0
- Scan completed successfully (with or without validation warnings)1
- Scan failed due to errors2
- Configuration error3
- File system error
Performance
The scan command is designed to be fast and efficient:
- Only processes
.go
files - Skips vendor directories
- Uses Go's built-in AST parser
- Caches results when possible
For large codebases, the scan typically completes in under a second.