Use SmallVec for binding references

This commit is contained in:
Charlie Marsh 2023-05-23 20:23:43 -04:00
parent 17d938f078
commit 4b3488b5b2
2 changed files with 23 additions and 21 deletions

View File

@ -9,6 +9,7 @@ use rustpython_parser::ast::{
self, Arg, Arguments, Comprehension, Constant, Excepthandler, Expr, ExprContext, Keyword, self, Arg, Arguments, Comprehension, Constant, Excepthandler, Expr, ExprContext, Keyword,
Operator, Pattern, Ranged, Stmt, Suite, Unaryop, Operator, Pattern, Ranged, Stmt, Suite, Unaryop,
}; };
use smallvec::SmallVec;
use ruff_diagnostics::{Diagnostic, Fix}; use ruff_diagnostics::{Diagnostic, Fix};
use ruff_python_ast::all::{extract_all_names, AllNamesFlags}; use ruff_python_ast::all::{extract_all_names, AllNamesFlags};
@ -248,7 +249,7 @@ where
let binding_id = self.semantic_model.bindings.push(Binding { let binding_id = self.semantic_model.bindings.push(Binding {
kind: BindingKind::Global, kind: BindingKind::Global,
range: *range, range: *range,
references: Vec::new(), references: SmallVec::new(),
source: self.semantic_model.stmt_id, source: self.semantic_model.stmt_id,
context, context,
exceptions, exceptions,
@ -276,7 +277,7 @@ where
let binding_id = self.semantic_model.bindings.push(Binding { let binding_id = self.semantic_model.bindings.push(Binding {
kind: BindingKind::Nonlocal, kind: BindingKind::Nonlocal,
range: *range, range: *range,
references: Vec::new(), references: SmallVec::new(),
source: self.semantic_model.stmt_id, source: self.semantic_model.stmt_id,
context, context,
exceptions, exceptions,
@ -812,7 +813,7 @@ where
Binding { Binding {
kind: BindingKind::FutureImportation, kind: BindingKind::FutureImportation,
range: alias.range(), range: alias.range(),
references: Vec::new(), references: SmallVec::new(),
source: self.semantic_model.stmt_id, source: self.semantic_model.stmt_id,
context: self.semantic_model.execution_context(), context: self.semantic_model.execution_context(),
exceptions: self.semantic_model.exceptions(), exceptions: self.semantic_model.exceptions(),
@ -841,7 +842,7 @@ where
full_name, full_name,
}), }),
range: alias.range(), range: alias.range(),
references: Vec::new(), references: SmallVec::new(),
source: self.semantic_model.stmt_id, source: self.semantic_model.stmt_id,
context: self.semantic_model.execution_context(), context: self.semantic_model.execution_context(),
exceptions: self.semantic_model.exceptions(), exceptions: self.semantic_model.exceptions(),
@ -856,7 +857,7 @@ where
Binding { Binding {
kind: BindingKind::Importation(Importation { name, full_name }), kind: BindingKind::Importation(Importation { name, full_name }),
range: alias.range(), range: alias.range(),
references: Vec::new(), references: SmallVec::new(),
source: self.semantic_model.stmt_id, source: self.semantic_model.stmt_id,
context: self.semantic_model.execution_context(), context: self.semantic_model.execution_context(),
exceptions: self.semantic_model.exceptions(), exceptions: self.semantic_model.exceptions(),
@ -1091,7 +1092,7 @@ where
Binding { Binding {
kind: BindingKind::FutureImportation, kind: BindingKind::FutureImportation,
range: alias.range(), range: alias.range(),
references: Vec::new(), references: SmallVec::new(),
source: self.semantic_model.stmt_id, source: self.semantic_model.stmt_id,
context: self.semantic_model.execution_context(), context: self.semantic_model.execution_context(),
exceptions: self.semantic_model.exceptions(), exceptions: self.semantic_model.exceptions(),
@ -1161,7 +1162,7 @@ where
full_name, full_name,
}), }),
range: alias.range(), range: alias.range(),
references: Vec::new(), references: SmallVec::new(),
source: self.semantic_model.stmt_id, source: self.semantic_model.stmt_id,
context: self.semantic_model.execution_context(), context: self.semantic_model.execution_context(),
exceptions: self.semantic_model.exceptions(), exceptions: self.semantic_model.exceptions(),
@ -1882,7 +1883,7 @@ where
Binding { Binding {
kind: BindingKind::FunctionDefinition, kind: BindingKind::FunctionDefinition,
range: stmt.range(), range: stmt.range(),
references: Vec::new(), references: SmallVec::new(),
source: self.semantic_model.stmt_id, source: self.semantic_model.stmt_id,
context: self.semantic_model.execution_context(), context: self.semantic_model.execution_context(),
exceptions: self.semantic_model.exceptions(), exceptions: self.semantic_model.exceptions(),
@ -1906,7 +1907,7 @@ where
let id = self.semantic_model.bindings.push(Binding { let id = self.semantic_model.bindings.push(Binding {
kind: BindingKind::Assignment, kind: BindingKind::Assignment,
range: stmt.range(), range: stmt.range(),
references: Vec::new(), references: SmallVec::new(),
source: self.semantic_model.stmt_id, source: self.semantic_model.stmt_id,
context: self.semantic_model.execution_context(), context: self.semantic_model.execution_context(),
exceptions: self.semantic_model.exceptions(), exceptions: self.semantic_model.exceptions(),
@ -1970,7 +1971,7 @@ where
let id = self.semantic_model.bindings.push(Binding { let id = self.semantic_model.bindings.push(Binding {
kind: BindingKind::Assignment, kind: BindingKind::Assignment,
range: stmt.range(), range: stmt.range(),
references: Vec::new(), references: SmallVec::new(),
source: self.semantic_model.stmt_id, source: self.semantic_model.stmt_id,
context: self.semantic_model.execution_context(), context: self.semantic_model.execution_context(),
exceptions: self.semantic_model.exceptions(), exceptions: self.semantic_model.exceptions(),
@ -2157,7 +2158,7 @@ where
Binding { Binding {
kind: BindingKind::ClassDefinition, kind: BindingKind::ClassDefinition,
range: stmt.range(), range: stmt.range(),
references: Vec::new(), references: SmallVec::new(),
source: self.semantic_model.stmt_id, source: self.semantic_model.stmt_id,
context: self.semantic_model.execution_context(), context: self.semantic_model.execution_context(),
exceptions: self.semantic_model.exceptions(), exceptions: self.semantic_model.exceptions(),
@ -4111,7 +4112,7 @@ where
Binding { Binding {
kind: BindingKind::Argument, kind: BindingKind::Argument,
range: arg.range(), range: arg.range(),
references: Vec::new(), references: SmallVec::new(),
source: self.semantic_model.stmt_id, source: self.semantic_model.stmt_id,
context: self.semantic_model.execution_context(), context: self.semantic_model.execution_context(),
exceptions: self.semantic_model.exceptions(), exceptions: self.semantic_model.exceptions(),
@ -4159,7 +4160,7 @@ where
Binding { Binding {
kind: BindingKind::Assignment, kind: BindingKind::Assignment,
range: pattern.range(), range: pattern.range(),
references: Vec::new(), references: SmallVec::new(),
source: self.semantic_model.stmt_id, source: self.semantic_model.stmt_id,
context: self.semantic_model.execution_context(), context: self.semantic_model.execution_context(),
exceptions: self.semantic_model.exceptions(), exceptions: self.semantic_model.exceptions(),
@ -4441,7 +4442,7 @@ impl<'a> Checker<'a> {
kind: BindingKind::Builtin, kind: BindingKind::Builtin,
range: TextRange::default(), range: TextRange::default(),
source: None, source: None,
references: Vec::new(), references: SmallVec::new(),
context: ExecutionContext::Runtime, context: ExecutionContext::Runtime,
exceptions: Exceptions::empty(), exceptions: Exceptions::empty(),
flags: BindingFlags::empty(), flags: BindingFlags::empty(),
@ -4560,7 +4561,7 @@ impl<'a> Checker<'a> {
Binding { Binding {
kind: BindingKind::Annotation, kind: BindingKind::Annotation,
range: expr.range(), range: expr.range(),
references: Vec::new(), references: SmallVec::new(),
source: self.semantic_model.stmt_id, source: self.semantic_model.stmt_id,
context: self.semantic_model.execution_context(), context: self.semantic_model.execution_context(),
exceptions: self.semantic_model.exceptions(), exceptions: self.semantic_model.exceptions(),
@ -4576,7 +4577,7 @@ impl<'a> Checker<'a> {
Binding { Binding {
kind: BindingKind::LoopVar, kind: BindingKind::LoopVar,
range: expr.range(), range: expr.range(),
references: Vec::new(), references: SmallVec::new(),
source: self.semantic_model.stmt_id, source: self.semantic_model.stmt_id,
context: self.semantic_model.execution_context(), context: self.semantic_model.execution_context(),
exceptions: self.semantic_model.exceptions(), exceptions: self.semantic_model.exceptions(),
@ -4592,7 +4593,7 @@ impl<'a> Checker<'a> {
Binding { Binding {
kind: BindingKind::Binding, kind: BindingKind::Binding,
range: expr.range(), range: expr.range(),
references: Vec::new(), references: SmallVec::new(),
source: self.semantic_model.stmt_id, source: self.semantic_model.stmt_id,
context: self.semantic_model.execution_context(), context: self.semantic_model.execution_context(),
exceptions: self.semantic_model.exceptions(), exceptions: self.semantic_model.exceptions(),
@ -4672,7 +4673,7 @@ impl<'a> Checker<'a> {
Binding { Binding {
kind: BindingKind::Export(Export { names: all_names }), kind: BindingKind::Export(Export { names: all_names }),
range: expr.range(), range: expr.range(),
references: Vec::new(), references: SmallVec::new(),
source: self.semantic_model.stmt_id, source: self.semantic_model.stmt_id,
context: self.semantic_model.execution_context(), context: self.semantic_model.execution_context(),
exceptions: self.semantic_model.exceptions(), exceptions: self.semantic_model.exceptions(),
@ -4693,7 +4694,7 @@ impl<'a> Checker<'a> {
Binding { Binding {
kind: BindingKind::NamedExprAssignment, kind: BindingKind::NamedExprAssignment,
range: expr.range(), range: expr.range(),
references: Vec::new(), references: SmallVec::new(),
source: self.semantic_model.stmt_id, source: self.semantic_model.stmt_id,
context: self.semantic_model.execution_context(), context: self.semantic_model.execution_context(),
exceptions: self.semantic_model.exceptions(), exceptions: self.semantic_model.exceptions(),
@ -4708,7 +4709,7 @@ impl<'a> Checker<'a> {
Binding { Binding {
kind: BindingKind::Assignment, kind: BindingKind::Assignment,
range: expr.range(), range: expr.range(),
references: Vec::new(), references: SmallVec::new(),
source: self.semantic_model.stmt_id, source: self.semantic_model.stmt_id,
context: self.semantic_model.execution_context(), context: self.semantic_model.execution_context(),
exceptions: self.semantic_model.exceptions(), exceptions: self.semantic_model.exceptions(),

View File

@ -2,6 +2,7 @@ use std::ops::{Deref, DerefMut};
use bitflags::bitflags; use bitflags::bitflags;
use ruff_text_size::TextRange; use ruff_text_size::TextRange;
use smallvec::SmallVec;
use ruff_index::{newtype_index, IndexSlice, IndexVec}; use ruff_index::{newtype_index, IndexSlice, IndexVec};
use ruff_python_ast::helpers; use ruff_python_ast::helpers;
@ -20,7 +21,7 @@ pub struct Binding<'a> {
/// The statement in which the [`Binding`] was defined. /// The statement in which the [`Binding`] was defined.
pub source: Option<NodeId>, pub source: Option<NodeId>,
/// The references to the [`Binding`]. /// The references to the [`Binding`].
pub references: Vec<ReferenceId>, pub references: SmallVec<[ReferenceId; 4]>,
/// The exceptions that were handled when the [`Binding`] was defined. /// The exceptions that were handled when the [`Binding`] was defined.
pub exceptions: Exceptions, pub exceptions: Exceptions,
/// Flags for the [`Binding`]. /// Flags for the [`Binding`].