1
Fork 0
mirror of https://github.com/RGBCube/cstree synced 2025-07-28 09:37:44 +00:00

add debug implementations for nodes/tokens with resolver

This commit is contained in:
Domenic Quirl 2021-01-14 15:08:09 +01:00
parent 424a86d8cc
commit 911775b731
2 changed files with 49 additions and 1 deletions

View file

@ -1,6 +1,6 @@
use std::{ use std::{
cell::UnsafeCell, cell::UnsafeCell,
fmt::Write, fmt::{self, Write},
hash::{Hash, Hasher}, hash::{Hash, Hasher},
iter, ptr, iter, ptr,
sync::atomic::{AtomicU32, Ordering}, sync::atomic::{AtomicU32, Ordering},
@ -872,6 +872,24 @@ where
} }
} }
impl<L: Language, D, R> fmt::Debug for SyntaxNode<L, D, R>
where
R: Resolver,
{
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", Self::debug(self, self.resolver().as_ref(), f.alternate()))
}
}
impl<L: Language, D, R> fmt::Display for SyntaxNode<L, D, R>
where
R: Resolver,
{
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", Self::display(self, self.resolver().as_ref()))
}
}
impl<L: Language, D, R> SyntaxToken<L, D, R> { impl<L: Language, D, R> SyntaxToken<L, D, R> {
fn new(parent: &SyntaxNode<L, D, R>, index: u32, offset: TextSize) -> SyntaxToken<L, D, R> { fn new(parent: &SyntaxNode<L, D, R>, index: u32, offset: TextSize) -> SyntaxToken<L, D, R> {
Self { Self {
@ -1000,6 +1018,24 @@ where
} }
} }
impl<L: Language, D, R> fmt::Debug for SyntaxToken<L, D, R>
where
R: Resolver,
{
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", Self::debug(self, self.parent().resolver().as_ref()))
}
}
impl<L: Language, D, R> fmt::Display for SyntaxToken<L, D, R>
where
R: Resolver,
{
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", Self::display(self, self.parent().resolver().as_ref()))
}
}
impl<L: Language, D, R> SyntaxElement<L, D, R> { impl<L: Language, D, R> SyntaxElement<L, D, R> {
fn new( fn new(
element: GreenElementRef<'_>, element: GreenElementRef<'_>,

View file

@ -147,11 +147,23 @@ fn inline_resolver() {
let leaf1_0 = leaf1_0.into_token().unwrap(); let leaf1_0 = leaf1_0.into_token().unwrap();
assert_eq!(leaf1_0.text(), "1.0"); assert_eq!(leaf1_0.text(), "1.0");
assert_eq!(leaf1_0.text_range(), TextRange::at(6.into(), 3.into())); 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(); let node2 = tree.children().nth(2).unwrap();
assert_eq!(node2.text(), "2.02.12.2"); assert_eq!(node2.text(), "2.02.12.2");
let resolver = node2.resolver(); let resolver = node2.resolver();
assert_eq!(node2.resolve_text(resolver.as_ref()), node2.text()); 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"
"#
);
} }
} }