mirror of
https://github.com/astral-sh/ruff.git
synced 2025-08-03 18:28:24 +00:00
Remove separate ReferenceContext
enum (#4631)
This commit is contained in:
parent
86ced3516b
commit
fcdc7bdd33
7 changed files with 30 additions and 61 deletions
|
@ -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,
|
||||
}
|
||||
|
|
7
crates/ruff_python_semantic/src/context.rs
Normal file
7
crates/ruff_python_semantic/src/context.rs
Normal 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,
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
pub mod analyze;
|
||||
pub mod binding;
|
||||
pub mod context;
|
||||
pub mod definition;
|
||||
pub mod model;
|
||||
pub mod node;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue