test: warden react best practices review #33
Annotations
4 errors and 12 warnings
|
Event listener leak: missing cleanup:
web/src/components/Sidebar.tsx#L105
Window resize listener is never removed, creating a memory leak. Add cleanup function to useEffect.
|
|
Missing event listener cleanup causes memory leak:
web/src/components/Sidebar.tsx#L105
The resize event listener is added but never removed (lines 105-111). Add cleanup to prevent memory leaks.
|
|
review
Process completed with exit code 1.
|
|
review
react-best-practices: Found 1 high+ severity issues; code-simplifier: Found 1 high+ severity issues
|
|
Unnecessary effect for deriving workspace count:
web/src/components/Sidebar.tsx#L49
workspaceCount is derived from workspaces.length and should be calculated during render, not in useEffect. Use `const workspaceCount = workspaces?.length || 0` directly instead of state + effect.
|
|
Missing dependencies in useCallback:
web/src/components/Sidebar.tsx#L88
handleNavigate depends on navigate, isOpen, and onToggle but only declares empty deps, causing stale closures.
|
|
Unnecessary effect for derived state (workspaceCount):
web/src/components/Sidebar.tsx#L49
workspaceCount can be derived directly from workspaces?.length during render instead of using useEffect with setState, avoiding unnecessary re-renders.
|
|
Missing dependencies in handleNavigate callback:
web/src/components/Sidebar.tsx#L88
handleNavigate useCallback is missing navigate and onToggle dependencies, which can cause stale closures. Add them or remove useCallback.
|
|
Event listener not cleaned up in effect:
web/src/components/Sidebar.tsx#L105
The resize event listener is added but never removed, causing memory leaks. Add a cleanup function to remove the listener.
|
|
Redundant state: workspaceCount is never used:
web/src/components/Sidebar.tsx#L35
The workspaceCount state is set but never read. Remove the state and effect (lines 35, 49-51) to eliminate unnecessary complexity.
|
|
Redundant state: sidebarWidth is never used:
web/src/components/Sidebar.tsx#L36
The sidebarWidth state is set but never read. Remove the state and effects (lines 36, 54-59, 105-111) to eliminate unnecessary complexity.
|
|
Remove debug console.log from production code:
web/src/components/Sidebar.tsx#L61
Debug logging on every render (lines 62-64) should be removed to reduce unnecessary complexity and improve performance.
|
|
useCallback missing dependency array values:
web/src/components/Sidebar.tsx#L88
handleNavigate (lines 88-91) uses navigate, isOpen, and onToggle but doesn't list them in dependencies. This creates stale closures.
|
|
Using array index as React key is an anti-pattern:
web/src/components/Sidebar.tsx#L161
Changed from `key={ws.name}` to `key={index}`. Using index as key can cause rendering issues and breaks React's reconciliation.
|
|
useCallback missing required dependencies:
web/src/components/Sidebar.tsx#L88
handleNavigate callback at line 88 is missing `navigate` and `onToggle` in dependency array, causing stale closure bugs.
|
|
review
Failed to update skill check for security-review: HttpError: Server Error
|