mirror of https://github.com/astral-sh/ruff
[ty] hotfix panic in semantic tokens (#21632)
Fixes https://github.com/astral-sh/ty/issues/1637
This commit is contained in:
parent
81c97e9e94
commit
5364256190
|
|
@ -1579,6 +1579,8 @@ z = "int"
|
||||||
w1: "int | str" = "hello"
|
w1: "int | str" = "hello"
|
||||||
w2: "int | sr" = "hello"
|
w2: "int | sr" = "hello"
|
||||||
w3: "int | " = "hello"
|
w3: "int | " = "hello"
|
||||||
|
w4: "float"
|
||||||
|
w5: "float
|
||||||
"#,
|
"#,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -1604,6 +1606,10 @@ w3: "int | " = "hello"
|
||||||
"w3" @ 86..88: Variable [definition]
|
"w3" @ 86..88: Variable [definition]
|
||||||
"\"int | \"" @ 90..98: String
|
"\"int | \"" @ 90..98: String
|
||||||
"\"hello\"" @ 101..108: String
|
"\"hello\"" @ 101..108: String
|
||||||
|
"w4" @ 109..111: Variable [definition]
|
||||||
|
"float" @ 114..119: Class
|
||||||
|
"w5" @ 121..123: Variable [definition]
|
||||||
|
"float" @ 126..131: Class
|
||||||
"#);
|
"#);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -408,7 +408,13 @@ pub trait HasDefinition {
|
||||||
impl HasType for ast::ExprRef<'_> {
|
impl HasType for ast::ExprRef<'_> {
|
||||||
fn inferred_type<'db>(&self, model: &SemanticModel<'db>) -> Type<'db> {
|
fn inferred_type<'db>(&self, model: &SemanticModel<'db>) -> Type<'db> {
|
||||||
let index = semantic_index(model.db, model.file);
|
let index = semantic_index(model.db, model.file);
|
||||||
let file_scope = index.expression_scope_id(&model.expr_ref_in_ast(*self));
|
// TODO(#1637): semantic tokens is making this crash even with
|
||||||
|
// `try_expr_ref_in_ast` guarding this, for now just use `try_expression_scope_id`.
|
||||||
|
// The problematic input is `x: "float` (with a dangling quote). I imagine the issue
|
||||||
|
// is we're too eagerly setting `is_string_annotation` in inference.
|
||||||
|
let Some(file_scope) = index.try_expression_scope_id(&model.expr_ref_in_ast(*self)) else {
|
||||||
|
return Type::unknown();
|
||||||
|
};
|
||||||
let scope = file_scope.to_scope_id(model.db, model.file);
|
let scope = file_scope.to_scope_id(model.db, model.file);
|
||||||
|
|
||||||
infer_scope_types(model.db, scope).expression_type(*self)
|
infer_scope_types(model.db, scope).expression_type(*self)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue