Implement proper try/except/finally handling in TIFA visitor #158
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
TIFA (Type Inference and Flow Analysis) was not correctly handling try/except/finally constructs, leading to missed variable initialization issues. The visitor used the default
generic_visitmethod which doesn't properly track control flow through exception handling blocks.Problem
Consider this code:
Previously, TIFA would not detect that
xmight be uninitialized because it wasn't analyzing the different execution paths through try/except blocks.Solution
Added proper AST visitor methods for try/except/finally constructs:
visit_Try: Handles the main try statement by creating separate execution paths for:visit_except_handler: Handles individual except clauses including:except Exception as e:)The implementation properly merges all possible execution paths to ensure variable initialization is tracked across all branches.
Key Features
asclauseTesting
Added comprehensive test cases covering:
All tests pass and no regressions were introduced (526 total tests, same 16 expected failures as baseline).
Fixes #157.
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.