Remove separate ReferenceContext enum (#4631)

This commit is contained in:
Charlie Marsh 2023-05-24 11:12:38 -04:00 committed by GitHub
parent 86ced3516b
commit fcdc7bdd33
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 30 additions and 61 deletions

View file

@ -7,6 +7,7 @@ use ruff_index::{newtype_index, IndexSlice, IndexVec};
use ruff_python_ast::helpers;
use ruff_python_ast::source_code::Locator;
use crate::context::ExecutionContext;
use crate::model::SemanticModel;
use crate::node::NodeId;
use crate::reference::ReferenceId;
@ -272,9 +273,3 @@ bitflags! {
const IMPORT_ERROR = 0b0000_0100;
}
}
#[derive(Copy, Debug, Clone, is_macro::Is)]
pub enum ExecutionContext {
Runtime,
Typing,
}

View file

@ -0,0 +1,7 @@
#[derive(Debug, Copy, Clone, is_macro::Is)]
pub enum ExecutionContext {
/// The reference occurs in a runtime context.
Runtime,
/// The reference occurs in a typing-only context.
Typing,
}

View file

@ -1,5 +1,6 @@
pub mod analyze;
pub mod binding;
pub mod context;
pub mod definition;
pub mod model;
pub mod node;

View file

@ -13,12 +13,13 @@ use ruff_python_stdlib::path::is_python_stub_file;
use ruff_python_stdlib::typing::TYPING_EXTENSIONS;
use crate::binding::{
Binding, BindingId, BindingKind, Bindings, Exceptions, ExecutionContext, FromImportation,
Importation, SubmoduleImportation,
Binding, BindingId, BindingKind, Bindings, Exceptions, FromImportation, Importation,
SubmoduleImportation,
};
use crate::context::ExecutionContext;
use crate::definition::{Definition, DefinitionId, Definitions, Member, Module};
use crate::node::{NodeId, Nodes};
use crate::reference::{ReferenceContext, References};
use crate::reference::References;
use crate::scope::{Scope, ScopeId, ScopeKind, Scopes};
/// A semantic model for a Python module, to enable querying the module's semantic information.
@ -126,26 +127,12 @@ impl<'a> SemanticModel<'a> {
if let Some(binding_id) = self.scopes.global().get(symbol).copied() {
// Mark the binding as used.
let context = self.execution_context();
let reference_id = self.references.push(
ScopeId::global(),
range,
match context {
ExecutionContext::Runtime => ReferenceContext::Runtime,
ExecutionContext::Typing => ReferenceContext::Typing,
},
);
let reference_id = self.references.push(ScopeId::global(), range, context);
self.bindings[binding_id].references.push(reference_id);
// Mark any submodule aliases as used.
if let Some(binding_id) = self.resolve_submodule(ScopeId::global(), binding_id) {
let reference_id = self.references.push(
ScopeId::global(),
range,
match context {
ExecutionContext::Runtime => ReferenceContext::Runtime,
ExecutionContext::Typing => ReferenceContext::Typing,
},
);
let reference_id = self.references.push(ScopeId::global(), range, context);
self.bindings[binding_id].references.push(reference_id);
}
@ -176,26 +163,12 @@ impl<'a> SemanticModel<'a> {
if let Some(binding_id) = scope.get(symbol).copied() {
// Mark the binding as used.
let context = self.execution_context();
let reference_id = self.references.push(
self.scope_id,
range,
match context {
ExecutionContext::Runtime => ReferenceContext::Runtime,
ExecutionContext::Typing => ReferenceContext::Typing,
},
);
let reference_id = self.references.push(self.scope_id, range, context);
self.bindings[binding_id].references.push(reference_id);
// Mark any submodule aliases as used.
if let Some(binding_id) = self.resolve_submodule(scope_id, binding_id) {
let reference_id = self.references.push(
self.scope_id,
range,
match context {
ExecutionContext::Runtime => ReferenceContext::Runtime,
ExecutionContext::Typing => ReferenceContext::Typing,
},
);
let reference_id = self.references.push(self.scope_id, range, context);
self.bindings[binding_id].references.push(reference_id);
}
@ -585,7 +558,7 @@ impl<'a> SemanticModel<'a> {
&mut self,
binding_id: BindingId,
range: TextRange,
context: ReferenceContext,
context: ExecutionContext,
) {
let reference_id = self.references.push(self.scope_id, range, context);
self.bindings[binding_id].references.push(reference_id);
@ -596,7 +569,7 @@ impl<'a> SemanticModel<'a> {
&mut self,
binding_id: BindingId,
range: TextRange,
context: ReferenceContext,
context: ExecutionContext,
) {
let reference_id = self.references.push(ScopeId::global(), range, context);
self.bindings[binding_id].references.push(reference_id);

View file

@ -2,6 +2,7 @@ use ruff_text_size::TextRange;
use ruff_index::{newtype_index, IndexVec};
use crate::context::ExecutionContext;
use crate::scope::ScopeId;
#[derive(Debug, Clone)]
@ -11,7 +12,7 @@ pub struct Reference {
/// The range of the reference in the source code.
range: TextRange,
/// The context in which the reference occurs.
context: ReferenceContext,
context: ExecutionContext,
}
impl Reference {
@ -23,19 +24,11 @@ impl Reference {
self.range
}
pub const fn context(&self) -> &ReferenceContext {
pub const fn context(&self) -> &ExecutionContext {
&self.context
}
}
#[derive(Debug, Clone, is_macro::Is)]
pub enum ReferenceContext {
/// The reference occurs in a runtime context.
Runtime,
/// The reference occurs in a typing-only context.
Typing,
}
/// Id uniquely identifying a read reference in a program.
#[newtype_index]
pub struct ReferenceId;
@ -50,7 +43,7 @@ impl References {
&mut self,
scope_id: ScopeId,
range: TextRange,
context: ReferenceContext,
context: ExecutionContext,
) -> ReferenceId {
self.0.push(Reference {
scope_id,