1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#![forbid(
missing_debug_implementations,
unconditional_recursion,
future_incompatible,
missing_docs,
)]
extern crate parking_lot;
extern crate smol_str;
extern crate text_unit;
mod green;
mod red;
mod roots;
mod syntax;
use std::fmt::Debug;
pub use crate::{
green::{GreenNode, GreenNodeBuilder},
roots::{OwnedRoot, RefRoot, TreeRoot},
smol_str::SmolStr,
syntax::{SyntaxNode, SyntaxNodeChildren, WalkEvent, LeafAtOffset},
text_unit::{TextRange, TextUnit},
};
pub trait Types: Send + Sync + 'static {
type Kind: Debug + Copy + Eq + Send + Sync;
type RootData: Debug + Send + Sync;
}
#[cfg(test)]
mod tests {
use super::*;
use crate::red::RedNode;
#[derive(Clone, Copy)]
enum SillyTypes {}
impl Types for SillyTypes {
type Kind = u8;
type RootData = ();
}
#[test]
fn assert_send_sync() {
fn f<T: Send + Sync>() {}
f::<GreenNode<SillyTypes>>();
f::<RedNode<SillyTypes>>();
}
#[test]
fn syntax_node_ref_is_copy() {
fn assert_copy<T: Copy>() {}
assert_copy::<SyntaxNode<SillyTypes, RefRoot<SillyTypes>>>()
}
}