Skip to content

Commit 9d47d3d

Browse files
authored
specialize ConversionFlag (#42)
* specialize ConversionFlag * Change value of ConversionFlag to i8 and None to -1 * is_* methods to ConversionFlag
1 parent 611dcc2 commit 9d47d3d

29 files changed

+60
-104
lines changed

ast/asdl_rs.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
BUILTIN_INT_NAMES = {
2929
"simple": "bool",
3030
"is_async": "bool",
31+
"conversion": "ConversionFlag",
3132
}
3233

3334
RUST_KEYWORDS = {

ast/src/fold_helpers.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::{builtin, fold::Fold};
1+
use crate::{builtin, fold::Fold, ConversionFlag};
22

33
pub trait Foldable<T, U> {
44
type Mapped;
@@ -67,5 +67,6 @@ simple_fold!(
6767
builtin::String,
6868
builtin::Identifier,
6969
bool,
70+
ConversionFlag,
7071
builtin::Constant
7172
);

ast/src/gen/generic.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -931,7 +931,7 @@ impl<R> From<ExprCall<R>> for Expr<R> {
931931
pub struct ExprFormattedValue<R = TextRange> {
932932
pub range: R,
933933
pub value: Box<Expr<R>>,
934-
pub conversion: Int,
934+
pub conversion: ConversionFlag,
935935
pub format_spec: Option<Box<Expr<R>>>,
936936
}
937937

ast/src/generic.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#![allow(clippy::derive_partial_eq_without_eq)]
2-
pub use crate::{builtin::*, text_size::TextSize, Node};
2+
pub use crate::{builtin::*, text_size::TextSize, ConversionFlag, Node};
33
use std::fmt::{Debug, Display, Formatter};
44
use std::marker::PhantomData;
55

ast/src/pyo3.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::{source_code::SourceRange, text_size::TextRange, Node};
1+
use crate::{source_code::SourceRange, text_size::TextRange, ConversionFlag, Node};
22
use num_complex::Complex64;
33
use once_cell::sync::OnceCell;
44
use pyo3::prelude::*;
@@ -73,6 +73,13 @@ impl ToPyo3Ast for bool {
7373
}
7474
}
7575

76+
impl ToPyo3Ast for ConversionFlag {
77+
#[inline]
78+
fn to_pyo3_ast(&self, py: Python) -> PyResult<Py<PyAny>> {
79+
Ok((*self as i8).to_object(py))
80+
}
81+
}
82+
7683
impl ToPyo3Ast for crate::Constant {
7784
#[inline]
7885
fn to_pyo3_ast(&self, py: Python) -> PyResult<Py<PyAny>> {

ast/src/unparse.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,7 @@ impl<'a> Unparser<'a> {
346346
conversion,
347347
format_spec,
348348
range: _range,
349-
}) => self.unparse_formatted(value, conversion.to_u32(), format_spec.as_deref())?,
349+
}) => self.unparse_formatted(value, *conversion, format_spec.as_deref())?,
350350
Expr::JoinedStr(crate::ExprJoinedStr {
351351
values,
352352
range: _range,
@@ -519,7 +519,7 @@ impl<'a> Unparser<'a> {
519519
fn unparse_formatted<U>(
520520
&mut self,
521521
val: &Expr<U>,
522-
conversion: u32,
522+
conversion: ConversionFlag,
523523
spec: Option<&Expr<U>>,
524524
) -> fmt::Result {
525525
let buffered = to_string_fmt(|f| Unparser::new(f).unparse_expr(val, precedence::TEST + 1));
@@ -533,7 +533,7 @@ impl<'a> Unparser<'a> {
533533
self.p(&buffered)?;
534534
drop(buffered);
535535

536-
if conversion != ConversionFlag::None as u32 {
536+
if conversion != ConversionFlag::None {
537537
self.p("!")?;
538538
let buf = &[conversion as u8];
539539
let c = std::str::from_utf8(buf).unwrap();
@@ -568,7 +568,7 @@ impl<'a> Unparser<'a> {
568568
conversion,
569569
format_spec,
570570
range: _range,
571-
}) => self.unparse_formatted(value, conversion.to_u32(), format_spec.as_deref()),
571+
}) => self.unparse_formatted(value, *conversion, format_spec.as_deref()),
572572
_ => unreachable!(),
573573
}
574574
}

core/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ ruff_text_size = { path = "../ruff_text_size" }
1313
ruff_source_location = { path = "../ruff_source_location", optional = true }
1414

1515
serde = { version = "1.0.133", optional = true, default-features = false, features = ["derive"] }
16+
is-macro.workspace = true
1617

1718
[features]
1819
default = []

core/src/format.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
/// Transforms a value prior to formatting it.
2-
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
3-
#[repr(u8)]
2+
#[derive(Copy, Clone, Debug, PartialEq, Eq, is_macro::Is)]
3+
#[repr(i8)]
44
pub enum ConversionFlag {
55
/// No conversion
6-
None = 0, // CPython uses -1 but not pleasure for us
6+
None = -1, // CPython uses -1
77
/// Converts by calling `str(<value>)`.
8-
Str = b's',
8+
Str = b's' as i8,
99
/// Converts by calling `ascii(<value>)`.
10-
Ascii = b'a',
10+
Ascii = b'a' as i8,
1111
/// Converts by calling `repr(<value>)`.
12-
Repr = b'r',
12+
Repr = b'r' as i8,
1313
}

parser/src/snapshots/rustpython_parser__parser__tests__try.snap

Lines changed: 2 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

parser/src/snapshots/rustpython_parser__parser__tests__try_star.snap

Lines changed: 4 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

parser/src/snapshots/rustpython_parser__string__tests__fstring_escaped_character.snap

Lines changed: 1 addition & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

parser/src/snapshots/rustpython_parser__string__tests__fstring_escaped_newline.snap

Lines changed: 1 addition & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

parser/src/snapshots/rustpython_parser__string__tests__fstring_line_continuation.snap

Lines changed: 1 addition & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

parser/src/snapshots/rustpython_parser__string__tests__fstring_parse_self_documenting_base.snap

Lines changed: 1 addition & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

parser/src/snapshots/rustpython_parser__string__tests__fstring_parse_self_documenting_base_more.snap

Lines changed: 2 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

parser/src/snapshots/rustpython_parser__string__tests__fstring_parse_self_documenting_format.snap

Lines changed: 1 addition & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

parser/src/snapshots/rustpython_parser__string__tests__fstring_unescaped_newline.snap

Lines changed: 1 addition & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

parser/src/snapshots/rustpython_parser__string__tests__parse_f_string_concat_3.snap

Lines changed: 1 addition & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

parser/src/snapshots/rustpython_parser__string__tests__parse_fstring.snap

Lines changed: 2 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_equals.snap

Lines changed: 1 addition & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_nested_spec.snap

Lines changed: 2 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_not_equals.snap

Lines changed: 1 addition & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_not_nested_spec.snap

Lines changed: 1 addition & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_self_doc_prec_space.snap

Lines changed: 1 addition & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_self_doc_trailing_space.snap

Lines changed: 1 addition & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

parser/src/snapshots/rustpython_parser__string__tests__parse_fstring_yield_expr.snap

Lines changed: 1 addition & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)