Classic static analysis reads the syntax tree; CodePilot reads the syntax tree and the intent around it. That is why it flags the branch that returns early without releasing the lock, and not just the branch that fails to compile.
Every finding arrives with the path that reaches it, the value that causes it, and a suggested fix you can apply in one keystroke. Findings you dismiss stop appearing for that pattern in that repository.
The pre-commit hook runs the same analysis the editor does, so a finding never appears for the first time in continuous integration.