From 911775b73159ee0580950ec81a6ac40401694774 Mon Sep 17 00:00:00 2001 From: Domenic Quirl Date: Thu, 14 Jan 2021 15:08:09 +0100 Subject: [PATCH] add debug implementations for nodes/tokens with resolver --- src/syntax.rs | 38 +++++++++++++++++++++++++++++++++++++- tests/basic.rs | 12 ++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/src/syntax.rs b/src/syntax.rs index c25e14a..0e93588 100644 --- a/src/syntax.rs +++ b/src/syntax.rs @@ -1,6 +1,6 @@ use std::{ cell::UnsafeCell, - fmt::Write, + fmt::{self, Write}, hash::{Hash, Hasher}, iter, ptr, sync::atomic::{AtomicU32, Ordering}, @@ -872,6 +872,24 @@ where } } +impl fmt::Debug for SyntaxNode +where + R: Resolver, +{ + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}", Self::debug(self, self.resolver().as_ref(), f.alternate())) + } +} + +impl fmt::Display for SyntaxNode +where + R: Resolver, +{ + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}", Self::display(self, self.resolver().as_ref())) + } +} + impl SyntaxToken { fn new(parent: &SyntaxNode, index: u32, offset: TextSize) -> SyntaxToken { Self { @@ -1000,6 +1018,24 @@ where } } +impl fmt::Debug for SyntaxToken +where + R: Resolver, +{ + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}", Self::debug(self, self.parent().resolver().as_ref())) + } +} + +impl fmt::Display for SyntaxToken +where + R: Resolver, +{ + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{}", Self::display(self, self.parent().resolver().as_ref())) + } +} + impl SyntaxElement { fn new( element: GreenElementRef<'_>, diff --git a/tests/basic.rs b/tests/basic.rs index cd950d0..54ea9f5 100644 --- a/tests/basic.rs +++ b/tests/basic.rs @@ -147,11 +147,23 @@ fn inline_resolver() { let leaf1_0 = leaf1_0.into_token().unwrap(); assert_eq!(leaf1_0.text(), "1.0"); assert_eq!(leaf1_0.text_range(), TextRange::at(6.into(), 3.into())); + assert_eq!(format!("{}", leaf1_0), leaf1_0.text()); + assert_eq!(format!("{:?}", leaf1_0), "SyntaxKind(5)@6..9 \"1.0\""); } { let node2 = tree.children().nth(2).unwrap(); assert_eq!(node2.text(), "2.02.12.2"); let resolver = node2.resolver(); assert_eq!(node2.resolve_text(resolver.as_ref()), node2.text()); + assert_eq!(format!("{}", node2).as_str(), node2.text()); + assert_eq!(format!("{:?}", node2), "SyntaxKind(6)@9..18"); + assert_eq!( + format!("{:#?}", node2), + r#"SyntaxKind(6)@9..18 + SyntaxKind(7)@9..12 "2.0" + SyntaxKind(8)@12..15 "2.1" + SyntaxKind(9)@15..18 "2.2" +"# + ); } }