Move runtime execution context into add_reference calls (#6003)

This commit is contained in:
Charlie Marsh 2023-07-22 22:37:51 -04:00 committed by GitHub
parent 4aac801277
commit 4b2ec7d562
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 27 deletions

View file

@ -49,9 +49,9 @@ use ruff_python_ast::visitor::{walk_except_handler, walk_pattern, Visitor};
use ruff_python_ast::{cast, helpers, str, visitor}; use ruff_python_ast::{cast, helpers, str, visitor};
use ruff_python_semantic::analyze::{branch_detection, typing, visibility}; use ruff_python_semantic::analyze::{branch_detection, typing, visibility};
use ruff_python_semantic::{ use ruff_python_semantic::{
Binding, BindingFlags, BindingId, BindingKind, ContextualizedDefinition, Exceptions, Binding, BindingFlags, BindingId, BindingKind, ContextualizedDefinition, Exceptions, Export,
ExecutionContext, Export, FromImport, Globals, Import, Module, ModuleKind, ScopeId, ScopeKind, FromImport, Globals, Import, Module, ModuleKind, ScopeId, ScopeKind, SemanticModel,
SemanticModel, SemanticModelFlags, StarImport, SubmoduleImport, SemanticModelFlags, StarImport, SubmoduleImport,
}; };
use ruff_python_stdlib::builtins::{BUILTINS, MAGIC_GLOBALS}; use ruff_python_stdlib::builtins::{BUILTINS, MAGIC_GLOBALS};
use ruff_python_stdlib::path::is_python_stub_file; use ruff_python_stdlib::path::is_python_stub_file;
@ -1835,11 +1835,7 @@ where
for name in names { for name in names {
if let Some((scope_id, binding_id)) = self.semantic.nonlocal(name) { if let Some((scope_id, binding_id)) = self.semantic.nonlocal(name) {
// Mark the binding as "used". // Mark the binding as "used".
self.semantic.add_local_reference( self.semantic.add_local_reference(binding_id, name.range());
binding_id,
name.range(),
ExecutionContext::Runtime,
);
// Mark the binding in the enclosing scope as "rebound" in the current // Mark the binding in the enclosing scope as "rebound" in the current
// scope. // scope.
@ -4826,8 +4822,7 @@ impl<'a> Checker<'a> {
for (name, range) in exports { for (name, range) in exports {
if let Some(binding_id) = self.semantic.global_scope().get(name) { if let Some(binding_id) = self.semantic.global_scope().get(name) {
// Mark anything referenced in `__all__` as used. // Mark anything referenced in `__all__` as used.
self.semantic self.semantic.add_global_reference(binding_id, range);
.add_global_reference(binding_id, range, ExecutionContext::Runtime);
} else { } else {
if self.semantic.global_scope().uses_star_imports() { if self.semantic.global_scope().uses_star_imports() {
if self.enabled(Rule::UndefinedLocalWithImportStarUsage) { if self.enabled(Rule::UndefinedLocalWithImportStarUsage) {

View file

@ -257,7 +257,7 @@ impl<'a> SemanticModel<'a> {
.get(symbol) .get(symbol)
.map_or(true, |binding_id| { .map_or(true, |binding_id| {
// Treat the deletion of a name as a reference to that name. // Treat the deletion of a name as a reference to that name.
self.add_local_reference(binding_id, range, ExecutionContext::Runtime); self.add_local_reference(binding_id, range);
self.bindings[binding_id].is_unbound() self.bindings[binding_id].is_unbound()
}); });
@ -917,26 +917,18 @@ impl<'a> SemanticModel<'a> {
} }
/// Add a reference to the given [`BindingId`] in the local scope. /// Add a reference to the given [`BindingId`] in the local scope.
pub fn add_local_reference( pub fn add_local_reference(&mut self, binding_id: BindingId, range: TextRange) {
&mut self, let reference_id =
binding_id: BindingId, self.resolved_references
range: TextRange, .push(self.scope_id, range, ExecutionContext::Runtime);
context: ExecutionContext,
) {
let reference_id = self.resolved_references.push(self.scope_id, range, context);
self.bindings[binding_id].references.push(reference_id); self.bindings[binding_id].references.push(reference_id);
} }
/// Add a reference to the given [`BindingId`] in the global scope. /// Add a reference to the given [`BindingId`] in the global scope.
pub fn add_global_reference( pub fn add_global_reference(&mut self, binding_id: BindingId, range: TextRange) {
&mut self, let reference_id =
binding_id: BindingId, self.resolved_references
range: TextRange, .push(ScopeId::global(), range, ExecutionContext::Runtime);
context: ExecutionContext,
) {
let reference_id = self
.resolved_references
.push(ScopeId::global(), range, context);
self.bindings[binding_id].references.push(reference_id); self.bindings[binding_id].references.push(reference_id);
} }