Skip to content

[2.9.0] 2024-12-09

Compare
Choose a tag to compare
@david-yz-liu david-yz-liu released this 09 Dec 20:55

✨ Enhancements

  • Added include_frames filter to snapshot
  • Added exclude_frames filter to snapshot
  • Added exclude_vars filter to snapshot
  • Added new python_ta.debug module with an SnapshotTracer context manager for generating memory models
  • Added z3 option to inconsistent-or-missing-returns, redundant-assignment, and possibly-undefined checkers to only check for feasible code blocks based on edge z3 constraints
  • Included the name of redundant variable in E9959 redundant-assignment message
  • Update to pylint v3.3 and and astroid v3.3. This added support for Python 3.13 and dropped support for Python 3.8. (No new checkers are enabled by default.)
  • Added a STRICT_NUMERIC_TYPES configuration to python_ta.contracts allowing to enable/disable stricter type checking of numeric types
  • Added integration with MemoryViz Webstepper
  • Added z3 option to one-iteration-checker to only check for feasible code blocks based on edge z3 constraints
  • Added reporting for errors raised by custom transforms (Z3Visitor, CFGVisitor)
  • Ensured SnapshotTracer does not include the _trace_func stack frame
  • Enabled SnapshotTracer to create its output_directory argument if it doesn't already exist
  • Changed SnapshotTracer's Webstepper code line number to align with the source code line number

💫 New checkers

  • unmentioned-parameter: Provide error message when a function parameter is not mentioned by name in the function's docstring. By default, this checker is disabled.

🐛 Bug fixes

  • Fixed issue where snapshot errors on unserializable values
  • Fixed issue within Snapshot.py where the memory_viz_version parameter was not respected
  • Fixed issue where parallel assignment statements and assignment to multiple targets were not checked by redundant_assignment_checker
  • Fixed issue where annotated assignment statements were not checked by redundant_assignment_checker
  • Fixed issue where empty preconditions were preventing CFGs from being generated
  • Added strict numeric type checking to enforce type distinctions across the entire numeric hierarchy, including complex numbers.
  • Added strict type checking support for nested and union types (e.g., list[int], dict[float, int], Union[int, float])
  • Fixed issue where CFG edges from loop body to loop condition block was ignored during augmenting edge z3 constraints
  • Fixed issue in one-iteration-checker where the message was not correctly reported for while loops when z3 option is on
  • Fixed crash when z3-solver is not installed
  • Fixed crash when an inline comment had no spaces after the #

🔧 Internal changes

  • Renamed ExprWrapper class to Z3Parser
  • Renamed ExprWrapper module to z3_parser and moved it to new directory python_ta.z3
  • Removed node attribute for Z3Parser
  • Renamed reduce method of Z3Parser to parse
  • Renamed test_expr_wrapper to test_z3_parser
  • Added is_feasible attribute for CFGEdge and implemented update to edge feasibility based on lists of Z3 constraints
  • Refactored codebase to use modern type annotations. Replaced List with list, Dict with dict, Set with set, and Tuple with tuple
  • Checked for variable reassignment in AugAssign and AnnAssign node in parsing edge Z3 constraints
  • Rendered logically infeasible control flow graph edges in light grey
  • Modified test_snapshot_to_json_sets_primitive for Python 3.8 compatibility
  • Added unit tests for one_iteration_checker
  • Added mock webbrowser.open in tests to prevent browser tabs and HTTP requests during python_ta.check_all() executions.
  • Added pytest-mock as a development dependency
  • Make test_snapshot.py::test_snapshot_serializes_unserializable_value able to run on Windows.
  • Added GitHub Action workflow for automatically publishing releases to PyPI
  • Update SnapshotTracer tests to use [email protected] and prevent browser from opening
  • Updated bundled webstepper version and removed source map, and excluded the bundle from prettier pre-commit check