From e37818255a885a5bada14bd9eb6bbfa919f73aa3 Mon Sep 17 00:00:00 2001 From: Ary Borenszweig Date: Thu, 6 Mar 2025 09:03:34 -0300 Subject: [PATCH 1/2] fix: TokensPrettyPrinter was missing some spaces between tokens --- .../src/hir/comptime/display.rs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/compiler/noirc_frontend/src/hir/comptime/display.rs b/compiler/noirc_frontend/src/hir/comptime/display.rs index c0283d9701b..737e44bfdfe 100644 --- a/compiler/noirc_frontend/src/hir/comptime/display.rs +++ b/compiler/noirc_frontend/src/hir/comptime/display.rs @@ -86,6 +86,9 @@ pub(super) fn tokens_to_string(tokens: &[LocatedToken], interner: &NodeInterner) struct TokenPrettyPrinter<'interner> { interner: &'interner NodeInterner, indent: usize, + /// Determines whether the last outputted byte was alphanumeric. + /// This is used to add a space after the last token and before another token + /// that starts with an alphanumeric byte. last_was_alphanumeric: bool, last_was_right_brace: bool, last_was_semicolon: bool, @@ -169,7 +172,10 @@ impl<'interner> TokenPrettyPrinter<'interner> { } match token { - Token::QuotedType(id) => write!(f, "{}", self.interner.get_quoted_type(*id)), + Token::QuotedType(id) => { + let value = Value::Type(self.interner.get_quoted_type(*id).clone()); + self.print_value(&value, f) + } Token::InternedExpr(id) => { let value = Value::expression(ExpressionKind::Interned(*id)); self.print_value(&value, f) @@ -293,6 +299,15 @@ impl<'interner> TokenPrettyPrinter<'interner> { fn print_value(&mut self, value: &Value, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { let string = value.display(self.interner).to_string(); + if string.is_empty() { + return Ok(()); + } + + let starts_with_alphanumeric = string.bytes().next().unwrap().is_ascii_alphanumeric(); + if starts_with_alphanumeric { + write!(f, " ")?; + } + for (index, line) in string.lines().enumerate() { if index > 0 { writeln!(f)?; @@ -301,7 +316,7 @@ impl<'interner> TokenPrettyPrinter<'interner> { line.fmt(f)?; } - self.last_was_alphanumeric = string.bytes().all(|byte| byte.is_ascii_alphanumeric()); + self.last_was_alphanumeric = string.bytes().last().unwrap().is_ascii_alphanumeric(); self.last_was_right_brace = string.ends_with('}'); self.last_was_semicolon = string.ends_with(';'); From 8570b2ed108f976fea770c703ca031ea2de47b40 Mon Sep 17 00:00:00 2001 From: Ary Borenszweig Date: Thu, 6 Mar 2025 09:14:27 -0300 Subject: [PATCH 2/2] Fix use of `last_was_alphanumeric` --- .../src/hir/comptime/display.rs | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/compiler/noirc_frontend/src/hir/comptime/display.rs b/compiler/noirc_frontend/src/hir/comptime/display.rs index 737e44bfdfe..33390b110c2 100644 --- a/compiler/noirc_frontend/src/hir/comptime/display.rs +++ b/compiler/noirc_frontend/src/hir/comptime/display.rs @@ -174,31 +174,31 @@ impl<'interner> TokenPrettyPrinter<'interner> { match token { Token::QuotedType(id) => { let value = Value::Type(self.interner.get_quoted_type(*id).clone()); - self.print_value(&value, f) + self.print_value(&value, last_was_alphanumeric, f) } Token::InternedExpr(id) => { let value = Value::expression(ExpressionKind::Interned(*id)); - self.print_value(&value, f) + self.print_value(&value, last_was_alphanumeric, f) } Token::InternedStatement(id) => { let value = Value::statement(StatementKind::Interned(*id)); - self.print_value(&value, f) + self.print_value(&value, last_was_alphanumeric, f) } Token::InternedLValue(id) => { let value = Value::lvalue(LValue::Interned(*id, Location::dummy())); - self.print_value(&value, f) + self.print_value(&value, last_was_alphanumeric, f) } Token::InternedUnresolvedTypeData(id) => { let value = Value::UnresolvedType(UnresolvedTypeData::Interned(*id)); - self.print_value(&value, f) + self.print_value(&value, last_was_alphanumeric, f) } Token::InternedPattern(id) => { let value = Value::pattern(Pattern::Interned(*id, Location::dummy())); - self.print_value(&value, f) + self.print_value(&value, last_was_alphanumeric, f) } Token::UnquoteMarker(id) => { let value = Value::TypedExpr(TypedExpr::ExprId(*id)); - self.print_value(&value, f) + self.print_value(&value, last_was_alphanumeric, f) } Token::Keyword(..) | Token::Ident(..) @@ -297,14 +297,18 @@ impl<'interner> TokenPrettyPrinter<'interner> { } } - fn print_value(&mut self, value: &Value, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + fn print_value( + &mut self, + value: &Value, + last_was_alphanumeric: bool, + f: &mut std::fmt::Formatter<'_>, + ) -> std::fmt::Result { let string = value.display(self.interner).to_string(); if string.is_empty() { return Ok(()); } - let starts_with_alphanumeric = string.bytes().next().unwrap().is_ascii_alphanumeric(); - if starts_with_alphanumeric { + if last_was_alphanumeric && string.bytes().next().unwrap().is_ascii_alphanumeric() { write!(f, " ")?; }