mirror of
https://github.com/astral-sh/ruff.git
synced 2025-08-22 19:34:23 +00:00
Red-knot: Track scopes per expression (#11754)
This commit is contained in:
parent
a8cf7096ff
commit
b0b4706e2d
5 changed files with 118 additions and 26 deletions
|
@ -2,7 +2,7 @@ use crate::vec::IndexVec;
|
|||
use crate::Idx;
|
||||
use std::fmt::{Debug, Formatter};
|
||||
use std::marker::PhantomData;
|
||||
use std::ops::{Index, IndexMut};
|
||||
use std::ops::{Index, IndexMut, Range};
|
||||
|
||||
/// A view into contiguous `T`s, indexed by `I` rather than by `usize`.
|
||||
#[derive(PartialEq, Eq, Hash)]
|
||||
|
@ -131,6 +131,15 @@ impl<I: Idx, T> Index<I> for IndexSlice<I, T> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<I: Idx, T> Index<Range<I>> for IndexSlice<I, T> {
|
||||
type Output = [T];
|
||||
|
||||
#[inline]
|
||||
fn index(&self, range: Range<I>) -> &[T] {
|
||||
&self.raw[range.start.index()..range.end.index()]
|
||||
}
|
||||
}
|
||||
|
||||
impl<I: Idx, T> IndexMut<I> for IndexSlice<I, T> {
|
||||
#[inline]
|
||||
fn index_mut(&mut self, index: I) -> &mut T {
|
||||
|
@ -138,6 +147,13 @@ impl<I: Idx, T> IndexMut<I> for IndexSlice<I, T> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<I: Idx, T> IndexMut<Range<I>> for IndexSlice<I, T> {
|
||||
#[inline]
|
||||
fn index_mut(&mut self, range: Range<I>) -> &mut [T] {
|
||||
&mut self.raw[range.start.index()..range.end.index()]
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, I: Idx, T> IntoIterator for &'a IndexSlice<I, T> {
|
||||
type IntoIter = std::slice::Iter<'a, T>;
|
||||
type Item = &'a T;
|
||||
|
|
|
@ -69,6 +69,11 @@ impl<I: Idx, T> IndexVec<I, T> {
|
|||
pub fn next_index(&self) -> I {
|
||||
I::new(self.raw.len())
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn shrink_to_fit(&mut self) {
|
||||
self.raw.shrink_to_fit();
|
||||
}
|
||||
}
|
||||
|
||||
impl<I, T> Debug for IndexVec<I, T>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue