Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[red-knot] use reachable definitions in infer_expression_type #11670

Merged
merged 10 commits into from
Jun 3, 2024
Merged

Conversation

carljm
Copy link
Contributor

@carljm carljm commented Jun 1, 2024

Summary

Switch name resolution in infer_expression_type from resolving the public type of a symbol, to resolving the reachable definitions of that symbol from the reference point, using the flow graph.

This surfaced a bug in the flow graph implementation and a bug in symbol table building, both of which are also fixed here.

The bug in flow graph implementation was that when we pushed and popped scopes, we didn't maintain a stack of "current flow nodes" in all stacked scopes, to be restored when we returned to that scope. Now we do.

The bug in symbol table building that we didn't visit the parts of functions and class definitions in the correct scopes. E.g. decorators should be visited in the outer scope, arguments should be visited inside the type-params scope (if any) but not inside the function body scope, and only the body itself should actually be visited inside the body scope. Fixing this requires that we no longer use walk_stmt here, instead we have to visit each individual component.

Test Plan

Added test.

@carljm carljm added the red-knot Multi-file analysis & type inference label Jun 1, 2024
@carljm carljm requested a review from AlexWaygood June 1, 2024 01:59
@carljm carljm requested a review from MichaReiser as a code owner June 1, 2024 01:59
crates/red_knot/src/symbols.rs Outdated Show resolved Hide resolved
crates/red_knot/src/symbols.rs Show resolved Hide resolved
crates/red_knot/src/symbols.rs Outdated Show resolved Hide resolved
* main: (25 commits)
  Isolate non-breaking whitespace indentation test case (#11721)
  Generator should add a newline before type statement (#11720)
  Remove less used parser dependencies (#11718)
  Use string expression for parsing type annotation (#11717)
  Re-order lexer methods (#11716)
  Maintain synchronicity between the lexer and the parser (#11457)
  Update NPM Development dependencies (#11713)
  Update pre-commit dependencies (#11712)
  Update cloudflare/wrangler-action action to v3.6.1 (#11709)
  Update dependency monaco-editor to ^0.49.0 (#11710)
  Update Rust crate tracing-tree to v0.3.1 (#11703)
  Update Rust crate libcst to v1.4.0 (#11707)
  Update Rust crate itertools to 0.13.0 (#11706)
  Update Rust crate insta to v1.39.0 (#11705)
  Update Rust crate proc-macro2 to v1.0.85 (#11700)
  Update Rust crate toml to v0.8.13 (#11702)
  Update Rust crate strum_macros to v0.26.3 (#11701)
  Update UP035 for Python 3.13 and the latest version of typing_extensions (#11693)
  Add RDJson support. (#11682)
  [`pyupgrade`] Write empty string in lieu of panic (#11696)
  ...
* cjm/cfg1: (26 commits)
  review comments
  Isolate non-breaking whitespace indentation test case (#11721)
  Generator should add a newline before type statement (#11720)
  Remove less used parser dependencies (#11718)
  Use string expression for parsing type annotation (#11717)
  Re-order lexer methods (#11716)
  Maintain synchronicity between the lexer and the parser (#11457)
  Update NPM Development dependencies (#11713)
  Update pre-commit dependencies (#11712)
  Update cloudflare/wrangler-action action to v3.6.1 (#11709)
  Update dependency monaco-editor to ^0.49.0 (#11710)
  Update Rust crate tracing-tree to v0.3.1 (#11703)
  Update Rust crate libcst to v1.4.0 (#11707)
  Update Rust crate itertools to 0.13.0 (#11706)
  Update Rust crate insta to v1.39.0 (#11705)
  Update Rust crate proc-macro2 to v1.0.85 (#11700)
  Update Rust crate toml to v0.8.13 (#11702)
  Update Rust crate strum_macros to v0.26.3 (#11701)
  Update UP035 for Python 3.13 and the latest version of typing_extensions (#11693)
  Add RDJson support. (#11682)
  ...
Base automatically changed from cjm/cfg1 to main June 3, 2024 23:27
Copy link
Contributor

github-actions bot commented Jun 3, 2024

ruff-ecosystem results

Linter (stable)

✅ ecosystem check detected no linter changes.

Linter (preview)

✅ ecosystem check detected no linter changes.

* main:
  [red-knot] infer_symbol_public_type infers union of all definitions (#11669)
@carljm carljm merged commit 3f9ee31 into main Jun 3, 2024
19 checks passed
@carljm carljm deleted the cjm/cfg2 branch June 3, 2024 23:45
carljm added a commit that referenced this pull request Jun 3, 2024
* main:
  [red-knot] extract helper functions in inference tests (#11671)
  [red-knot] use reachable definitions in infer_expression_type (#11670)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
red-knot Multi-file analysis & type inference
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants