mirror of https://github.com/astral-sh/ruff
[red-knot] Add cycle handling to narrow constraints queries (#17209)
## Summary This PR fixes the cycle issue that was causing problems in the `support super` PR. ### Affected queries - `all_narrowing_constraints_for_expression` - `all_negative_narrowing_constraints_for_expression` -- Additionally, `bidict` and `werkzeug` have been added to the project-selection list in `mypy_primer`. This PR also addresses the panics that occurred while analyzing those packages: - `bidict`: panic triggered by `all_narrowing_constraints_for_expression` - `werkzeug`: panic triggered by `all_negative_narrowing_constraints_for_expression` I think the mypy-primer results for this PR can serve as sufficient test :)
This commit is contained in:
parent
1a6a10b30f
commit
7e6d3838bd
|
|
@ -68,7 +68,7 @@ jobs:
|
||||||
--type-checker knot \
|
--type-checker knot \
|
||||||
--old base_commit \
|
--old base_commit \
|
||||||
--new "$GITHUB_SHA" \
|
--new "$GITHUB_SHA" \
|
||||||
--project-selector '/(mypy_primer|black|pyp|git-revise|zipp|arrow|isort|itsdangerous|rich|packaging|pybind11|pyinstrument|typeshed-stats|scrapy)$' \
|
--project-selector '/(mypy_primer|black|pyp|git-revise|zipp|arrow|isort|itsdangerous|rich|packaging|pybind11|pyinstrument|typeshed-stats|scrapy|werkzeug|bidict)$' \
|
||||||
--output concise \
|
--output concise \
|
||||||
--debug > mypy_primer.diff || [ $? -eq 1 ]
|
--debug > mypy_primer.diff || [ $? -eq 1 ]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,11 @@ fn all_narrowing_constraints_for_pattern<'db>(
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(clippy::ref_option)]
|
#[allow(clippy::ref_option)]
|
||||||
#[salsa::tracked(return_ref)]
|
#[salsa::tracked(
|
||||||
|
return_ref,
|
||||||
|
cycle_fn=constraints_for_expression_cycle_recover,
|
||||||
|
cycle_initial=constraints_for_expression_cycle_initial,
|
||||||
|
)]
|
||||||
fn all_narrowing_constraints_for_expression<'db>(
|
fn all_narrowing_constraints_for_expression<'db>(
|
||||||
db: &'db dyn Db,
|
db: &'db dyn Db,
|
||||||
expression: Expression<'db>,
|
expression: Expression<'db>,
|
||||||
|
|
@ -78,7 +82,11 @@ fn all_narrowing_constraints_for_expression<'db>(
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(clippy::ref_option)]
|
#[allow(clippy::ref_option)]
|
||||||
#[salsa::tracked(return_ref)]
|
#[salsa::tracked(
|
||||||
|
return_ref,
|
||||||
|
cycle_fn=negative_constraints_for_expression_cycle_recover,
|
||||||
|
cycle_initial=negative_constraints_for_expression_cycle_initial,
|
||||||
|
)]
|
||||||
fn all_negative_narrowing_constraints_for_expression<'db>(
|
fn all_negative_narrowing_constraints_for_expression<'db>(
|
||||||
db: &'db dyn Db,
|
db: &'db dyn Db,
|
||||||
expression: Expression<'db>,
|
expression: Expression<'db>,
|
||||||
|
|
@ -86,6 +94,40 @@ fn all_negative_narrowing_constraints_for_expression<'db>(
|
||||||
NarrowingConstraintsBuilder::new(db, PredicateNode::Expression(expression), false).finish()
|
NarrowingConstraintsBuilder::new(db, PredicateNode::Expression(expression), false).finish()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(clippy::ref_option)]
|
||||||
|
fn constraints_for_expression_cycle_recover<'db>(
|
||||||
|
_db: &'db dyn Db,
|
||||||
|
_value: &Option<NarrowingConstraints<'db>>,
|
||||||
|
_count: u32,
|
||||||
|
_expression: Expression<'db>,
|
||||||
|
) -> salsa::CycleRecoveryAction<Option<NarrowingConstraints<'db>>> {
|
||||||
|
salsa::CycleRecoveryAction::Iterate
|
||||||
|
}
|
||||||
|
|
||||||
|
fn constraints_for_expression_cycle_initial<'db>(
|
||||||
|
_db: &'db dyn Db,
|
||||||
|
_expression: Expression<'db>,
|
||||||
|
) -> Option<NarrowingConstraints<'db>> {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
|
||||||
|
#[allow(clippy::ref_option)]
|
||||||
|
fn negative_constraints_for_expression_cycle_recover<'db>(
|
||||||
|
_db: &'db dyn Db,
|
||||||
|
_value: &Option<NarrowingConstraints<'db>>,
|
||||||
|
_count: u32,
|
||||||
|
_expression: Expression<'db>,
|
||||||
|
) -> salsa::CycleRecoveryAction<Option<NarrowingConstraints<'db>>> {
|
||||||
|
salsa::CycleRecoveryAction::Iterate
|
||||||
|
}
|
||||||
|
|
||||||
|
fn negative_constraints_for_expression_cycle_initial<'db>(
|
||||||
|
_db: &'db dyn Db,
|
||||||
|
_expression: Expression<'db>,
|
||||||
|
) -> Option<NarrowingConstraints<'db>> {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||||
pub enum KnownConstraintFunction {
|
pub enum KnownConstraintFunction {
|
||||||
/// `builtins.isinstance`
|
/// `builtins.isinstance`
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue