mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-30 13:51:37 +00:00
[red-knot] Improve symbol-lookup tracing (#14907)
## Summary When debugging, I frequently want to know which symbols are being looked up. `symbol_by_id` adds tracing information, but it only shows the `ScopedSymbolId`. Since `symbol_by_id` is only called from `symbol`, it seems reasonable to move the tracing call one level up from `symbol_by_id` to `symbol`, where we can also show the name of the symbol. **Before**: ``` 6 └─┐red_knot_python_semantic::types::infer::infer_expression_types{expression=Id(60de), file=/home/shark/tomllib_modified/_parser.py} 6 └─┐red_knot_python_semantic::types::symbol_by_id{symbol=ScopedSymbolId(33)} 6 ┌─┘ 6 └─┐red_knot_python_semantic::types::symbol_by_id{symbol=ScopedSymbolId(123)} 6 ┌─┘ 6 └─┐red_knot_python_semantic::types::symbol_by_id{symbol=ScopedSymbolId(54)} 6 ┌─┘ 6 └─┐red_knot_python_semantic::types::symbol_by_id{symbol=ScopedSymbolId(122)} 6 ┌─┘ 6 └─┐red_knot_python_semantic::types::symbol_by_id{symbol=ScopedSymbolId(165)} 6 ┌─┘ 6 ┌─┘ 6 └─┐red_knot_python_semantic::types::symbol_by_id{symbol=ScopedSymbolId(32)} 6 ┌─┘ 6 └─┐red_knot_python_semantic::types::symbol_by_id{symbol=ScopedSymbolId(232)} 6 ┌─┘ 6 ┌─┘ 6 ┌─┘ 6┌─┘ ``` **After**: ``` 5 └─┐red_knot_python_semantic::types::infer::infer_expression_types{expression=Id(60de), file=/home/shark/tomllib_modified/_parser.py} 5 └─┐red_knot_python_semantic::types::symbol{name="dict"} 5 ┌─┘ 5 └─┐red_knot_python_semantic::types::symbol{name="dict"} 5 ┌─┘ 5 └─┐red_knot_python_semantic::types::symbol{name="list"} 5 ┌─┘ 5 └─┐red_knot_python_semantic::types::symbol{name="list"} 5 ┌─┘ 5 └─┐red_knot_python_semantic::types::symbol{name="isinstance"} 5 ┌─┘ 5 └─┐red_knot_python_semantic::types::symbol{name="isinstance"} 5 ┌─┘ 5 ┌─┘ 5 └─┐red_knot_python_semantic::types::symbol{name="ValueError"} 5 ┌─┘ 5 └─┐red_knot_python_semantic::types::symbol{name="ValueError"} 5 ┌─┘ 5 ┌─┘ 5 ┌─┘ 5┌─┘ ``` ## Test Plan ``` cargo run --bin red_knot -- --current-directory path/to/tomllib -vvv ```
This commit is contained in:
parent
066239fe5b
commit
ce9c4968ae
1 changed files with 59 additions and 56 deletions
|
@ -74,10 +74,13 @@ pub fn check_types(db: &dyn Db, file: File) -> TypeCheckDiagnostics {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Infer the public type of a symbol (its type as seen from outside its scope).
|
/// Infer the public type of a symbol (its type as seen from outside its scope).
|
||||||
|
fn symbol<'db>(db: &'db dyn Db, scope: ScopeId<'db>, name: &str) -> Symbol<'db> {
|
||||||
#[salsa::tracked]
|
#[salsa::tracked]
|
||||||
fn symbol_by_id<'db>(db: &'db dyn Db, scope: ScopeId<'db>, symbol: ScopedSymbolId) -> Symbol<'db> {
|
fn symbol_by_id<'db>(
|
||||||
let _span = tracing::trace_span!("symbol_by_id", ?symbol).entered();
|
db: &'db dyn Db,
|
||||||
|
scope: ScopeId<'db>,
|
||||||
|
symbol: ScopedSymbolId,
|
||||||
|
) -> Symbol<'db> {
|
||||||
let use_def = use_def_map(db, scope);
|
let use_def = use_def_map(db, scope);
|
||||||
|
|
||||||
// If the symbol is declared, the public type is based on declarations; otherwise, it's based
|
// If the symbol is declared, the public type is based on declarations; otherwise, it's based
|
||||||
|
@ -138,8 +141,8 @@ fn symbol_by_id<'db>(db: &'db dyn Db, scope: ScopeId<'db>, symbol: ScopedSymbolI
|
||||||
// every path has either a binding or a declaration for it.)
|
// every path has either a binding or a declaration for it.)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Shorthand for `symbol_by_id` that takes a symbol name instead of an ID.
|
let _span = tracing::trace_span!("symbol", ?name).entered();
|
||||||
fn symbol<'db>(db: &'db dyn Db, scope: ScopeId<'db>, name: &str) -> Symbol<'db> {
|
|
||||||
// We don't need to check for `typing_extensions` here, because `typing_extensions.TYPE_CHECKING`
|
// We don't need to check for `typing_extensions` here, because `typing_extensions.TYPE_CHECKING`
|
||||||
// is just a re-export of `typing.TYPE_CHECKING`.
|
// is just a re-export of `typing.TYPE_CHECKING`.
|
||||||
if name == "TYPE_CHECKING"
|
if name == "TYPE_CHECKING"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue