NavigaraNavigara
OrganizationsDistributionCompareResearch
NavigaraNavigara
OrganizationsDistributionCompareResearch
All developers

Tianhan Lu

Developer

Tianhan Lu

tianhanlu@meta.com

102 commits~2 files/commit

Performance

2026Previous year

Insights

Key patterns and highlights from this developer's activity.

Peak MonthOct'25295 performance
Growth Trend↓74%vs prior period
Avg Files/Commit2files per commit
Active Days56of 455 days
Top Repopyrefly102 commits

Effort Over Time

Breakdown of growth, maintenance, and fixes effort over time.

Bug Behavior

Beta

Bugs introduced vs. fixed over time.

Investment Quality

Beta

Reclassifies engineering effort based on bug attribution. Commits that introduced bugs are retrospectively counted as poor investments.

53%Productive TimeGrowth 78% + Fixes 22%
29%Maintenance Time
19%Wasted Time
How it works

Methodology

Investment Quality reclassifies engineering effort based on bug attribution data. Commits identified as buggy origins (those that introduced bugs later fixed by someone) have their grow and maintenance time moved into the Wasted Time category. Their waste (fix commits) remains counted as productive. All other commits retain their standard classification: grow is productive, maintenance is maintenance, and waste (fixes) is productive.

Relationship to Growth / Maintenance / Fixes

The standard model classifies commits as Growth, Maintenance, or Fixes. Investment Quality adds a quality lens: a commit that introduced a bug is retrospectively counted as a poor investment — the engineering time spent on it was wasted because it ultimately required additional fix work. Fix commits (Fixes in the standard model) are reframed as productive, because fixing bugs is valuable work.

Proposed API Endpoint

Currently computed client-side from commit and bug attribution data. Ideal server-side endpoint:

POST /v1/organizations/{orgId}/investment-quality
Content-Type: application/json

Request:
{
  "startTime": "2025-01-01T00:00:00Z",
  "endTime": "2025-12-31T23:59:59Z",
  "bucketSize": "BUCKET_SIZE_MONTH",
  "groupBy": ["repository_id" | "deliverer_email"]
}

Response:
{
  "productivePct": 74,
  "maintenancePct": 18,
  "wastedPct": 8,
  "buckets": [
    {
      "bucketStart": "2025-01-01T00:00:00Z",
      "productive": 4.2,
      "maintenance": 1.8,
      "wasted": 0.6
    }
  ]
}

Recent Activity

Latest analyzed commits from this developer.

HashMessageDateFilesEffort
af7396bThis commit introduces a **fix** to the **Pyrefly Pysa analysis module** by ensuring that all exported source code locations are correctly handled with **UTF-8 encoding**. It refactors various components, including AST visitors, call graph generation, class and function exporters, and error reporting, to utilize a new `PysaLocation::from_text_range` method. This change prevents potential data corruption or incorrect display of locations when source files contain non-ASCII characters, significantly improving the reliability of **Pysa reports** generated by Pyrefly. The old `PysaLocation::new` method is now restricted to test environments, solidifying the new encoding standard across the `pyrefly/lib/report/pysa` subsystem.Feb 810waste
ab9e4d2This commit **adds a new test case** to `pyrefly/lib/test/pysa/call_graph.rs` to specifically address discrepancies in **location parsing** for string literals containing special symbols. This **maintenance** work aims to expose a bug where the Python parsers used by Pyrefly and Pyre produce different locations for such literals. The inconsistency can lead to **call graph lookup failures** within the **Pysa analysis subsystem** due to mismatched callee locations. This new test will help ensure consistent location reporting and prevent future crashes related to this parsing difference.Feb 81maint
fa6007aThis commit **fixes a crash** in the **Pysa call graph builder** by enhancing the global variable access checking logic. Previously, the `visit_global_variable_access` function in `pyrefly/lib/report/pysa/call_graph.rs` would crash if it encountered a module that was not type-checked or whose ID was not found during analysis. This **bug fix** now allows the system to **gracefully handle such modules**, preventing failures during call graph construction, particularly when running on internal systems like IG. The change improves the **robustness and stability of Pysa's static analysis**.Feb 51waste
8a1f40cThis commit introduces **debug logging** within the **Pysa call graph generation** process in the `pyrefly` tool. It modifies the `visit_expression` function in `pyrefly/lib/report/pysa/call_graph.rs` to print the resolved callees for `ExprName` and `ExprAttribute` expressions. This **chore** is a **maintenance improvement** designed to facilitate **easier debugging of call graph resolution logic**. The added visibility helps developers understand how expressions are resolved into callable targets, without impacting the functional output of Pysa analyses.Feb 41maint
f7f3714This commit **fixes** a semantic issue within the **Pysa static analysis framework** by explicitly setting the `implicit_receiver` flag to `false` for **return shim callees** during call graph generation. This ensures accurate interpretation of these specific function calls, preventing potential misclassifications. Additionally, **debug logging** has been introduced for GraphQL decorator matching within `pyrefly/lib/report/pysa/call_graph.rs` to improve diagnostic capabilities. The corresponding tests in `pyrefly/lib/test/pysa/call_graph.rs` have been updated to align with this corrected behavior, ensuring the integrity of the analysis.Feb 42waste
6c1bdf5This commit introduces a **bug fix** to the **Pysa static analysis tool** by correcting how its **call graph construction** handles `__init__` and `__new__` methods. Previously, the analysis incorrectly considered subclass overrides for these special methods when the call was directed at a superclass, misinterpreting Python's method resolution order. This **refinement** ensures that the call graph accurately reflects dynamic dispatch for `__init__` and `__new__` targets, preventing incorrect override considerations. The change primarily affects the `pyrefly/lib/report/pysa/call_graph.rs` module, leading to more precise static analysis results and improved accuracy in security vulnerability detection.Feb 22waste
9133f85This commit **fixes a bug** in the **Pysa call graph generation** by correctly resolving overrides for explicitly annotated class types. It updates the logic within `pyrefly/lib/report/pysa/call_graph.rs` to ensure that `is_dynamic_dispatch` and `receiver_class_from_type` accurately handle `ClassType` instances. This **improves the precision of static analysis** by ensuring correct dynamic dispatch and receiver class resolution, leading to a more accurate representation of call flows. A new test case has been added to `pyrefly/lib/test/pysa/call_graph.rs` to validate this enhanced override resolution.Jan 292maint
ee730b7This commit **enhances the Pysa call graph generation** within the `pyrefly` library by **improving callee resolution for attribute access expressions**. It introduces a new helper function, `resolve_callees_from_expression_type`, to semantically resolve callees via type information when direct go-to-definition lookups are empty, mirroring existing logic for `ExprName`. This **refactoring** of the `call_graph.rs` visitor, specifically `visit_expr_attr`, ensures more accurate and complete call graphs, particularly for implicit dunder calls. The change addresses a previous limitation, leading to **more robust static analysis** for Python code.Jan 282waste
0cf71baThis commit introduces a **bug fix** to **Pyrefly's Pysa call graph generation** and **function resolution logic**, addressing an issue where property setters were incorrectly resolved as property getters. The changes modify the call graph visitor in `pyrefly/lib/report/pysa/call_graph.rs` to detect assignment left-hand sides and pass a new flag to the function resolution. A `skip_property_getter` parameter is added to functions like `get_exported_decorated_function` in `pyrefly/lib/report/pysa/function.rs` to ensure correct identification of setters. This improves the accuracy of static analysis tools that rely on Pyrefly's call graphs, particularly for `go-to-definitions` functionality. Test cases in `pyrefly/lib/test/pysa/call_graph.rs` are updated to reflect this correct behavior.Jan 273waste
e7b7fd0This commit **enhances Pyrefly's call graph reporting** by introducing and exporting an `is_attribute` field within `AttributeAccessCallees`. This new field, determined during Pyrefly's analysis, precisely indicates whether a call graph node represents a regular attribute access rather than a method call. The change primarily affects **Pyrefly's Pysa integration**, specifically the `pyrefly/lib/report/pysa/call_graph.rs` module, ensuring more accurate information is available for downstream static analysis. It also includes a minor update to `crates/pyrefly_python/src/dunder.rs` to recognize `__class__` as a magic method. This **new capability** provides greater fidelity for tools consuming Pyrefly's call graphs, enabling more nuanced analysis of Python code.Jan 233maint
108a2d4This commit performs **maintenance auto-formatting** on the Python test files `taint_in_taint_out.py`, `supers.py`, and `string_conversion.py`. This effort, aimed at making it easier to debug model mismatches, has clarified the expected differences in `first-field` breadcrumb generation between **Pyre** and **Pyrefly** for AST nodes like `TitoClassMethod.a`. As a direct result, **two additional tests are now passing**, specifically `taint_in_taint_out.py`. This work significantly **improves the debugging process for model mismatches** within the **taint analysis** subsystem, enhancing the overall **reliability and accuracy of the taint analysis test suite**.Jan 221maint
7bff11fThis commit **enhances Pysa's call graph analysis** by introducing support for `TypedDict` types. It **improves the resolution of method call targets and constructors** when these operations are performed on `TypedDict` instances, specifically within the `pyrefly/lib/report/pysa/call_graph.rs` module. This **new capability** ensures that Pysa can more accurately trace control flow and data dependencies involving `TypedDict` objects, thereby **improving the overall completeness and reliability of static analysis** for Python codebases. New test cases have been added to validate this correct resolution.Jan 212grow
14aab0dThis commit introduces a **new feature** to the **PyreFly type reporting** mechanism, specifically for its `pysa` integration. It implements new logic and type modifiers, such as `strip_typevar`, to **strip type variables** along with their bounds and constraints when types are exported. This enhancement, primarily affecting `pyrefly/lib/report/pysa/types.rs`, ensures a cleaner and more focused representation of types for downstream analysis. The change improves the clarity and utility of reported type information by simplifying complex type variable structures, with new test cases verifying the correct behavior.Jan 212grow
885be32This commit introduces a **new capability** to **Pysa's call graph generation** by enhancing how it handles return type stripping. It extends the `resolve_and_register_return_shim` function in `pyrefly/lib/report/pysa/call_graph.rs` to support stripping return types from various **collection and optional types**, such as lists, sequences, sets, and optionals. This is achieved by introducing the `ReturnShimArgumentMapping` enum, which improves the accuracy of `ReturnShimCallees` registration. The change ensures more precise static analysis by correctly identifying the underlying types, and new tests confirm this expanded functionality.Jan 152maint
1cb1206This commit **migrates** the final set of **call graph unit tests**, specifically addressing previously unmigrated tests by clarifying that certain scenarios, such as object targets and `functools.partial` shimming, are now correctly handled by **Pysa**. As part of this **test suite refinement**, a new test case is **added** to `pyrefly/lib/test/pysa/call_graph.rs` to **verify decorator and identity function behavior**. This **maintenance** effort streamlines the testing strategy for call graphs, ensuring comprehensive coverage while eliminating redundant tests within the `pyrefly` component.Jan 151maint
8828cd0This commit **implements the registration and resolution of `ReturnShimCallees`** within the **Pysa static analysis call graph**, specifically targeting function calls wrapped by **GraphQL decorators**. It introduces new logic in `pyrefly/lib/report/pysa/call_graph.rs` to correctly identify and track these shimmed calls, integrating them into the call graph visitor. This is a **critical refinement** and **new feature** that enhances the precision of static analysis reports by correctly modeling these complex call patterns. The change addresses issues that arose from the initial introduction of `ReturnShimCallees`, preventing 150 new findings. New tests in `pyrefly/lib/test/pysa/call_graph.rs` validate this functionality.Jan 142grow
30345d1This commit introduces a **new capability** to **Pysa's static analysis** by enabling the accurate tracking and resolution of **nonlocal (captured) variables** within call graphs. It adds `nonlocal_targets` to `IdentifierCallees` in `pyrefly/lib/report/pysa/call_graph.rs` and significantly **refactors** the underlying mechanism for managing captured variables in `pyrefly/lib/report/pysa/captured_variable.rs`. This refactoring replaces scope-based tracking with a more robust function-based approach, introducing a new `CapturedVariableRef` struct to uniquely identify captured variables by their defining function. The change improves the precision of **Pysa's data flow analysis** by ensuring that calls involving captured variables are correctly identified and included in the generated call graphs.Dec 1010grow
5fd8e84This commit **simplifies Pyrefly's call graph generation** by **removing special handling for `lru_cache`** decorated functions. Pyrefly's improved call resolution now correctly handles these cases inherently, making the previous explicit logic redundant. Additionally, it clarifies that the `recognized_call` field, present in Pysa's `CallCallees`, is not necessary for Pyrefly's call graphs. This **refactoring** primarily impacts the **`pyrefly/lib/test/pysa/call_graph.rs`** module, where existing unit tests are migrated to reflect this streamlined approach, ensuring continued correctness without the need for specialized `lru_cache` logic.Dec 41maint
b6e1536This commit **optimizes the serialization** process within the **Pysa call graph reporting library** by conditionally omitting the `return_type` field. Specifically, it introduces a `skip_serializing_if` attribute to the `return_type` field in `pyrefly/lib/report/pysa/call_graph.rs`, preventing its serialization when the value is "none". To support this, a new public method `is_none` was added to `ScalarTypeProperties` in `pyrefly/lib/report/pysa/types.rs`. This **refactoring** aims to **reduce the size of serialized data** and **improve performance** during the serialization and deserialization of Pysa analysis results.Dec 32grow
818b6efThis commit **migrates and expands unit tests** for the **Pysa call graph analysis**, specifically within `pyrefly/lib/test/pysa/call_graph.rs`. It introduces new test cases to cover scenarios involving **type variables, global objects, and the `global` keyword**, enhancing the robustness of the call graph generation. This **maintenance** work is part of an ongoing effort to migrate existing tests, significantly improving the **test coverage and reliability** of the Pysa static analysis tool.Dec 31maint
af7396bFeb 8

This commit introduces a **fix** to the **Pyrefly Pysa analysis module** by ensuring that all exported source code locations are correctly handled with **UTF-8 encoding**. It refactors various components, including AST visitors, call graph generation, class and function exporters, and error reporting, to utilize a new `PysaLocation::from_text_range` method. This change prevents potential data corruption or incorrect display of locations when source files contain non-ASCII characters, significantly improving the reliability of **Pysa reports** generated by Pyrefly. The old `PysaLocation::new` method is now restricted to test environments, solidifying the new encoding standard across the `pyrefly/lib/report/pysa` subsystem.

10 fileswaste
ab9e4d2Feb 8

This commit **adds a new test case** to `pyrefly/lib/test/pysa/call_graph.rs` to specifically address discrepancies in **location parsing** for string literals containing special symbols. This **maintenance** work aims to expose a bug where the Python parsers used by Pyrefly and Pyre produce different locations for such literals. The inconsistency can lead to **call graph lookup failures** within the **Pysa analysis subsystem** due to mismatched callee locations. This new test will help ensure consistent location reporting and prevent future crashes related to this parsing difference.

1 filesmaint
fa6007aFeb 5

This commit **fixes a crash** in the **Pysa call graph builder** by enhancing the global variable access checking logic. Previously, the `visit_global_variable_access` function in `pyrefly/lib/report/pysa/call_graph.rs` would crash if it encountered a module that was not type-checked or whose ID was not found during analysis. This **bug fix** now allows the system to **gracefully handle such modules**, preventing failures during call graph construction, particularly when running on internal systems like IG. The change improves the **robustness and stability of Pysa's static analysis**.

1 fileswaste
8a1f40cFeb 4

This commit introduces **debug logging** within the **Pysa call graph generation** process in the `pyrefly` tool. It modifies the `visit_expression` function in `pyrefly/lib/report/pysa/call_graph.rs` to print the resolved callees for `ExprName` and `ExprAttribute` expressions. This **chore** is a **maintenance improvement** designed to facilitate **easier debugging of call graph resolution logic**. The added visibility helps developers understand how expressions are resolved into callable targets, without impacting the functional output of Pysa analyses.

1 filesmaint
f7f3714Feb 4

This commit **fixes** a semantic issue within the **Pysa static analysis framework** by explicitly setting the `implicit_receiver` flag to `false` for **return shim callees** during call graph generation. This ensures accurate interpretation of these specific function calls, preventing potential misclassifications. Additionally, **debug logging** has been introduced for GraphQL decorator matching within `pyrefly/lib/report/pysa/call_graph.rs` to improve diagnostic capabilities. The corresponding tests in `pyrefly/lib/test/pysa/call_graph.rs` have been updated to align with this corrected behavior, ensuring the integrity of the analysis.

2 fileswaste
6c1bdf5Feb 2

This commit introduces a **bug fix** to the **Pysa static analysis tool** by correcting how its **call graph construction** handles `__init__` and `__new__` methods. Previously, the analysis incorrectly considered subclass overrides for these special methods when the call was directed at a superclass, misinterpreting Python's method resolution order. This **refinement** ensures that the call graph accurately reflects dynamic dispatch for `__init__` and `__new__` targets, preventing incorrect override considerations. The change primarily affects the `pyrefly/lib/report/pysa/call_graph.rs` module, leading to more precise static analysis results and improved accuracy in security vulnerability detection.

2 fileswaste
9133f85Jan 29

This commit **fixes a bug** in the **Pysa call graph generation** by correctly resolving overrides for explicitly annotated class types. It updates the logic within `pyrefly/lib/report/pysa/call_graph.rs` to ensure that `is_dynamic_dispatch` and `receiver_class_from_type` accurately handle `ClassType` instances. This **improves the precision of static analysis** by ensuring correct dynamic dispatch and receiver class resolution, leading to a more accurate representation of call flows. A new test case has been added to `pyrefly/lib/test/pysa/call_graph.rs` to validate this enhanced override resolution.

2 filesmaint
ee730b7Jan 28

This commit **enhances the Pysa call graph generation** within the `pyrefly` library by **improving callee resolution for attribute access expressions**. It introduces a new helper function, `resolve_callees_from_expression_type`, to semantically resolve callees via type information when direct go-to-definition lookups are empty, mirroring existing logic for `ExprName`. This **refactoring** of the `call_graph.rs` visitor, specifically `visit_expr_attr`, ensures more accurate and complete call graphs, particularly for implicit dunder calls. The change addresses a previous limitation, leading to **more robust static analysis** for Python code.

2 fileswaste
0cf71baJan 27

This commit introduces a **bug fix** to **Pyrefly's Pysa call graph generation** and **function resolution logic**, addressing an issue where property setters were incorrectly resolved as property getters. The changes modify the call graph visitor in `pyrefly/lib/report/pysa/call_graph.rs` to detect assignment left-hand sides and pass a new flag to the function resolution. A `skip_property_getter` parameter is added to functions like `get_exported_decorated_function` in `pyrefly/lib/report/pysa/function.rs` to ensure correct identification of setters. This improves the accuracy of static analysis tools that rely on Pyrefly's call graphs, particularly for `go-to-definitions` functionality. Test cases in `pyrefly/lib/test/pysa/call_graph.rs` are updated to reflect this correct behavior.

3 fileswaste
e7b7fd0Jan 23

This commit **enhances Pyrefly's call graph reporting** by introducing and exporting an `is_attribute` field within `AttributeAccessCallees`. This new field, determined during Pyrefly's analysis, precisely indicates whether a call graph node represents a regular attribute access rather than a method call. The change primarily affects **Pyrefly's Pysa integration**, specifically the `pyrefly/lib/report/pysa/call_graph.rs` module, ensuring more accurate information is available for downstream static analysis. It also includes a minor update to `crates/pyrefly_python/src/dunder.rs` to recognize `__class__` as a magic method. This **new capability** provides greater fidelity for tools consuming Pyrefly's call graphs, enabling more nuanced analysis of Python code.

3 filesmaint
108a2d4Jan 22

This commit performs **maintenance auto-formatting** on the Python test files `taint_in_taint_out.py`, `supers.py`, and `string_conversion.py`. This effort, aimed at making it easier to debug model mismatches, has clarified the expected differences in `first-field` breadcrumb generation between **Pyre** and **Pyrefly** for AST nodes like `TitoClassMethod.a`. As a direct result, **two additional tests are now passing**, specifically `taint_in_taint_out.py`. This work significantly **improves the debugging process for model mismatches** within the **taint analysis** subsystem, enhancing the overall **reliability and accuracy of the taint analysis test suite**.

1 filesmaint
7bff11fJan 21

This commit **enhances Pysa's call graph analysis** by introducing support for `TypedDict` types. It **improves the resolution of method call targets and constructors** when these operations are performed on `TypedDict` instances, specifically within the `pyrefly/lib/report/pysa/call_graph.rs` module. This **new capability** ensures that Pysa can more accurately trace control flow and data dependencies involving `TypedDict` objects, thereby **improving the overall completeness and reliability of static analysis** for Python codebases. New test cases have been added to validate this correct resolution.

2 filesgrow
14aab0dJan 21

This commit introduces a **new feature** to the **PyreFly type reporting** mechanism, specifically for its `pysa` integration. It implements new logic and type modifiers, such as `strip_typevar`, to **strip type variables** along with their bounds and constraints when types are exported. This enhancement, primarily affecting `pyrefly/lib/report/pysa/types.rs`, ensures a cleaner and more focused representation of types for downstream analysis. The change improves the clarity and utility of reported type information by simplifying complex type variable structures, with new test cases verifying the correct behavior.

2 filesgrow
885be32Jan 15

This commit introduces a **new capability** to **Pysa's call graph generation** by enhancing how it handles return type stripping. It extends the `resolve_and_register_return_shim` function in `pyrefly/lib/report/pysa/call_graph.rs` to support stripping return types from various **collection and optional types**, such as lists, sequences, sets, and optionals. This is achieved by introducing the `ReturnShimArgumentMapping` enum, which improves the accuracy of `ReturnShimCallees` registration. The change ensures more precise static analysis by correctly identifying the underlying types, and new tests confirm this expanded functionality.

2 filesmaint
1cb1206Jan 15

This commit **migrates** the final set of **call graph unit tests**, specifically addressing previously unmigrated tests by clarifying that certain scenarios, such as object targets and `functools.partial` shimming, are now correctly handled by **Pysa**. As part of this **test suite refinement**, a new test case is **added** to `pyrefly/lib/test/pysa/call_graph.rs` to **verify decorator and identity function behavior**. This **maintenance** effort streamlines the testing strategy for call graphs, ensuring comprehensive coverage while eliminating redundant tests within the `pyrefly` component.

1 filesmaint
8828cd0Jan 14

This commit **implements the registration and resolution of `ReturnShimCallees`** within the **Pysa static analysis call graph**, specifically targeting function calls wrapped by **GraphQL decorators**. It introduces new logic in `pyrefly/lib/report/pysa/call_graph.rs` to correctly identify and track these shimmed calls, integrating them into the call graph visitor. This is a **critical refinement** and **new feature** that enhances the precision of static analysis reports by correctly modeling these complex call patterns. The change addresses issues that arose from the initial introduction of `ReturnShimCallees`, preventing 150 new findings. New tests in `pyrefly/lib/test/pysa/call_graph.rs` validate this functionality.

2 filesgrow
30345d1Dec 10

This commit introduces a **new capability** to **Pysa's static analysis** by enabling the accurate tracking and resolution of **nonlocal (captured) variables** within call graphs. It adds `nonlocal_targets` to `IdentifierCallees` in `pyrefly/lib/report/pysa/call_graph.rs` and significantly **refactors** the underlying mechanism for managing captured variables in `pyrefly/lib/report/pysa/captured_variable.rs`. This refactoring replaces scope-based tracking with a more robust function-based approach, introducing a new `CapturedVariableRef` struct to uniquely identify captured variables by their defining function. The change improves the precision of **Pysa's data flow analysis** by ensuring that calls involving captured variables are correctly identified and included in the generated call graphs.

10 filesgrow
5fd8e84Dec 4

This commit **simplifies Pyrefly's call graph generation** by **removing special handling for `lru_cache`** decorated functions. Pyrefly's improved call resolution now correctly handles these cases inherently, making the previous explicit logic redundant. Additionally, it clarifies that the `recognized_call` field, present in Pysa's `CallCallees`, is not necessary for Pyrefly's call graphs. This **refactoring** primarily impacts the **`pyrefly/lib/test/pysa/call_graph.rs`** module, where existing unit tests are migrated to reflect this streamlined approach, ensuring continued correctness without the need for specialized `lru_cache` logic.

1 filesmaint
b6e1536Dec 3

This commit **optimizes the serialization** process within the **Pysa call graph reporting library** by conditionally omitting the `return_type` field. Specifically, it introduces a `skip_serializing_if` attribute to the `return_type` field in `pyrefly/lib/report/pysa/call_graph.rs`, preventing its serialization when the value is "none". To support this, a new public method `is_none` was added to `ScalarTypeProperties` in `pyrefly/lib/report/pysa/types.rs`. This **refactoring** aims to **reduce the size of serialized data** and **improve performance** during the serialization and deserialization of Pysa analysis results.

2 filesgrow
818b6efDec 3

This commit **migrates and expands unit tests** for the **Pysa call graph analysis**, specifically within `pyrefly/lib/test/pysa/call_graph.rs`. It introduces new test cases to cover scenarios involving **type variables, global objects, and the `global` keyword**, enhancing the robustness of the call graph generation. This **maintenance** work is part of an ongoing effort to migrate existing tests, significantly improving the **test coverage and reliability** of the Pysa static analysis tool.

1 filesmaint

Work Patterns

Beta

Commit activity distribution by hour and day of week. Shows when this developer is most active.

Collaboration

Beta

Developers who frequently work on the same files and symbols. Higher score means stronger code collaboration.

NavigaraNavigara
OrganizationsDistributionCompareResearch