+}
+
+impl fmt::Debug for Lifetime {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ write!(f, "lifetime({}: {})", self.id, pprust::lifetime_to_string(self))
+ }
+}
+impl<'a> PartialEq<&'a str> for Path {
+ fn eq(&self, string: &&'a str) -> bool {
+ self.segments.len() == 1 && self.segments[0].identifier.name == *string
+ }
+}
+
+enum TraitBoundModifier {
+ None,
+ Maybe,
+}
+
+union tests {
+ a: i128,
+ b: isize,
+}
+
+#[valid types]
+fn types() {
+ let num = 333_3_;
+ let num_u8: u8 = 333u8;
+ let num_u16: u16 = 333u16;
+ let num_u32: u32 = 333u32;
+ let num_u64: u64 = 333u64;
+ let num_u128: u128 = 333u128;
+ let num_usize: usize = 333usize;
+ let num_float: f32 = 333.45f32;
+
+ let binary = 0b1_010;
+ let invalid_binary= 0b1_015;
+
+ let octal = 0o21535;
+ let invalid_octal = 0o64_92;
+
+ let hexadecimal = 0x73A2_F;
+ let invalid_hexadecimal = 0x7_3AY;
+
+ let char1: char = 'a';
+ let char2: char = '\n';
+ let char3: char = '\u{123_AF}';
+ let invalid_char1: char = '\y';
+ let invalid_char2: char = '\324';
+ let invalid_char3: char = '%%';
+ let invalid_char4: char = '\n\dfd';
+ let invalid_char5: char = 'aaaaa';
+ let open_char: char = '&&&;
+
+ let byte1: u8 = b'a';
+ let byte2: u8 = b'\x13';
+ let invalid_byte1: u8 = b'ab';
+ let invalid_byte2: u8 = b'\b';
+ let invalid_byte2: u8 = b'\u{123}';
+
+ let string: str = "hello \n \r \u{123_________fd_} \
+ bye";
+ let invalid_string: str = "hello \b \u{_123} \u{1234567} \ bye";
+ let byte_string: str = b"hello \t \0 \u{123} \b bye";
+ let raw_string1: str = r"hello \t \b";
+ let raw_string2: str = r####"hello \n "### bye"########;
+ let raw_string3: str = br####"hello \n"####;
+}
diff --git a/autotests/html/test.rs.html b/autotests/html/test.rs.html
new file mode 100644
index 0000000..dd4da52
--- /dev/null
+++ b/autotests/html/test.rs.html
@@ -0,0 +1,94 @@
+
+
+
+test.rs
+
+
+// Comment
+/* Comment
+ */
+
+// Identifiers
+hellóñαωΑΩµo!();
+HellóñαωΑΩµ::Hello;
+'hellóñαωΑΩµo
+
+pub use self::PathParameters::*;
+pub use symbol::{Ident, Symbol as Name};
+use serialize::{self, Encoder, Decoder};
+use std::u32;
+
+#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Copy)]
+
+pub struct Lifetime {
+ pub id: NodeId,
+ pub span: Span,
+ pub bounds: Vec<PathSegment>
+}
+
+impl fmt::Debug for Lifetime {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ write!(f, "lifetime({}: {})", self.id, pprust::lifetime_to_string(self))
+ }
+}
+impl<'a> PartialEq<&'a str> for Path {
+ fn eq(&self, string: &&'a str) -> bool {
+ self.segments.len() == 1 && self.segments[0].identifier.name == *string
+ }
+}
+
+enum TraitBoundModifier {
+ None,
+ Maybe,
+}
+
+union tests {
+ a: i128,
+ b: isize,
+}
+
+#[valid types]
+fn types() {
+ let num = 333_3_;
+ let num_u8: u8 = 333u8;
+ let num_u16: u16 = 333u16;
+ let num_u32: u32 = 333u32;
+ let num_u64: u64 = 333u64;
+ let num_u128: u128 = 333u128;
+ let num_usize: usize = 333usize;
+ let num_float: f32 = 333.45f32;
+
+ let binary = 0b1_010;
+ let invalid_binary= 0b1_015;
+
+ let octal = 0o21535;
+ let invalid_octal = 0o64_92;
+
+ let hexadecimal = 0x73A2_F;
+ let invalid_hexadecimal = 0x7_3AY;
+
+ let char1: char = 'a';
+ let char2: char = '\n';
+ let char3: char = '\u{123_AF}';
+ let invalid_char1: char = '\y';
+ let invalid_char2: char = '\324';
+ let invalid_char3: char = '%%';
+ let invalid_char4: char = '\n\dfd';
+ let invalid_char5: char = 'aaaaa';
+ let open_char: char = '&&&;
+
+ let byte1: u8 = b'a';
+ let byte2: u8 = b'\x13';
+ let invalid_byte1: u8 = b'ab';
+ let invalid_byte2: u8 = b'\b';
+ let invalid_byte2: u8 = b'\u{123}';
+
+ let string: str = "hello \n \r \u{123_________fd_} \
+ bye";
+ let invalid_string: str = "hello \b \u{_123} \u{1234567} \ bye";
+ let byte_string: str = b"hello \t \0 \u{123} \b bye";
+ let raw_string1: str = r"hello \t \b";
+ let raw_string2: str = r####"hello \n "### bye"########;
+ let raw_string3: str = br####"hello \n"####;
+}
+
diff --git a/autotests/input/test.rs b/autotests/input/test.rs
new file mode 100644
index 0000000..ec0d188
--- /dev/null
+++ b/autotests/input/test.rs
@@ -0,0 +1,87 @@
+// Comment
+/* Comment
+ */
+
+// Identifiers
+hellóñαωΑΩµo!();
+HellóñαωΑΩµ::Hello;
+'hellóñαωΑΩµo
+
+pub use self::PathParameters::*;
+pub use symbol::{Ident, Symbol as Name};
+use serialize::{self, Encoder, Decoder};
+use std::u32;
+
+#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Copy)]
+
+pub struct Lifetime {
+ pub id: NodeId,
+ pub span: Span,
+ pub bounds: Vec
+}
+
+impl fmt::Debug for Lifetime {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ write!(f, "lifetime({}: {})", self.id, pprust::lifetime_to_string(self))
+ }
+}
+impl<'a> PartialEq<&'a str> for Path {
+ fn eq(&self, string: &&'a str) -> bool {
+ self.segments.len() == 1 && self.segments[0].identifier.name == *string
+ }
+}
+
+enum TraitBoundModifier {
+ None,
+ Maybe,
+}
+
+union tests {
+ a: i128,
+ b: isize,
+}
+
+#[valid types]
+fn types() {
+ let num = 333_3_;
+ let num_u8: u8 = 333u8;
+ let num_u16: u16 = 333u16;
+ let num_u32: u32 = 333u32;
+ let num_u64: u64 = 333u64;
+ let num_u128: u128 = 333u128;
+ let num_usize: usize = 333usize;
+ let num_float: f32 = 333.45f32;
+
+ let binary = 0b1_010;
+ let invalid_binary= 0b1_015;
+
+ let octal = 0o21535;
+ let invalid_octal = 0o64_92;
+
+ let hexadecimal = 0x73A2_F;
+ let invalid_hexadecimal = 0x7_3AY;
+
+ let char1: char = 'a';
+ let char2: char = '\n';
+ let char3: char = '\u{123_AF}';
+ let invalid_char1: char = '\y';
+ let invalid_char2: char = '\324';
+ let invalid_char3: char = '%%';
+ let invalid_char4: char = '\n\dfd';
+ let invalid_char5: char = 'aaaaa';
+ let open_char: char = '&&&;
+
+ let byte1: u8 = b'a';
+ let byte2: u8 = b'\x13';
+ let invalid_byte1: u8 = b'ab';
+ let invalid_byte2: u8 = b'\b';
+ let invalid_byte2: u8 = b'\u{123}';
+
+ let string: str = "hello \n \r \u{123_________fd_} \
+ bye";
+ let invalid_string: str = "hello \b \u{_123} \u{1234567} \ bye";
+ let byte_string: str = b"hello \t \0 \u{123} \b bye";
+ let raw_string1: str = r"hello \t \b";
+ let raw_string2: str = r####"hello \n "### bye"########;
+ let raw_string3: str = br####"hello \n"####;
+}
diff --git a/autotests/reference/test.rs.ref b/autotests/reference/test.rs.ref
new file mode 100644
index 0000000..c2b8ba3
--- /dev/null
+++ b/autotests/reference/test.rs.ref
@@ -0,0 +1,87 @@
+// Comment
+/* Comment
+ */
+
+// Identifiers
+hellóñαωΑΩµo!();
+HellóñαωΑΩµ::Hello;
+'hellóñαωΑΩµo
+
+pub use self::PathParameters::*;
+pub use symbol::{Ident, Symbol as Name};
+use serialize::{self, Encoder, Decoder};
+use std::u32;
+
+#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Copy)]
+
+pub struct Lifetime {
+ pub id: NodeId,
+ pub span: Span,
+ pub bounds: Vec
+}
+
+impl fmt::Debug for Lifetime {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ write!(f, "lifetime({}: {})", self.id, pprust::lifetime_to_string(self))
+ }
+}
+impl<'a> PartialEq<&'a str> for Path {
+ fn eq(&self, string: &&'a str) -> bool {
+ self.segments.len() == 1 && self.segments[0].identifier.name == *string
+ }
+}
+
+enum TraitBoundModifier {
+ None,
+ Maybe,
+}
+
+union tests {
+ a: i128,
+ b: isize,
+}
+
+#[valid types]
+fn types() {
+ let num = 333_3_;
+ let num_u8: u8 = 333u8;
+ let num_u16: u16 = 333u16;
+ let num_u32: u32 = 333u32;
+ let num_u64: u64 = 333u64;
+ let num_u128: u128 = 333u128;
+ let num_usize: usize = 333usize;
+ let num_float: f32 = 333.45f32;
+
+ let binary = 0b1_010;
+ let invalid_binary= 0b1_015;
+
+ let octal = 0o21535;
+ let invalid_octal = 0o64_92;
+
+ let hexadecimal = 0x73A2_F;
+ let invalid_hexadecimal = 0x7_3AY;
+
+ let char1: char = 'a';
+ let char2: char = '\n';
+ let char3: char = '\u{123_AF}';
+ let invalid_char1: char = '\y';
+ let invalid_char2: char = '\324';
+ let invalid_char3: char = '%%';
+ let invalid_char4: char = '\n\dfd';
+ let invalid_char5: char = 'aaaaa';
+ let open_char: char = '&&&;
+
+ let byte1: u8 = b'a';
+ let byte2: u8 = b'\x13';
+ let invalid_byte1: u8 = b'ab';
+ let invalid_byte2: u8 = b'\b';
+ let invalid_byte2: u8 = b'\u{123}';
+
+ let string: str = "hello \n \r \u{123_________fd_} \
+ bye";
+ let invalid_string: str = "hello \b \u{_123} \u{1234567} \ bye";
+ let byte_string: str = b"hello \t \0 \u{123} \b bye";
+ let raw_string1: str = r"hello \t \b";
+ let raw_string2: str = r####"hello \n "### bye"########;
+ let raw_string3: str = br####"hello \n"####;
+}
diff --git a/data/syntax/rust.xml b/data/syntax/rust.xml
index 8fc8a76..6657cf2 100644
--- a/data/syntax/rust.xml
+++ b/data/syntax/rust.xml
@@ -1,366 +1,374 @@
-
-
+
+
+
+
]>
-
+
- fn
- type
- abstract
- alignof
- as
- become
- box
- break
- const
- continue
- crate
+ - default
- do
- else
- enum
- extern
- final
- for
- if
- impl
- in
- let
- loop
- macro
- match
- mod
- move
- mut
- offsetof
- override
- priv
- proc
- pub
- pure
- ref
- return
- Self
- self
- sizeof
- static
- struct
- super
- trait
- type
- typeof
+ - union
- unsafe
- unsized
- use
- virtual
- where
- while
- yield
+
+ - AsMut
+ - AsRef
- AsSlice
- CharExt
- Clone
- Copy
- Debug
- Decodable
- Default
- Display
- DoubleEndedIterator
- Drop
- Encodable
- Eq
- - Default
+ - ExactSizeIterator
- Extend
- Fn
- FnMut
- FnOnce
+ - From
- FromPrimitive
- Hash
+ - Into
+ - IntoIterator
- Iterator
- IteratorExt
- MutPtrExt
- Ord
- PartialEq
- PartialOrd
- PtrExt
- Rand
+ - RustcDecodable
+ - RustcEncodable
- Send
- Sized
- SliceConcatExt
- SliceExt
- Str
- StrExt
- Sync
+ - ToOwned
- ToString
- bool
- - int
- isize
- - uint
- usize
- i8
- i16
- i32
- i64
+ - i128
- u8
- u16
- u32
- u64
+ - u128
- f32
- f64
- - float
- char
- str
- Option
- Result
- Self
- Box
- Vec
- String
+ - Path
+ - PathBuf
- c_float
- c_double
- c_void
- FILE
- fpos_t
- DIR
- dirent
- c_char
- c_schar
- c_uchar
- c_short
- c_ushort
- c_int
- c_uint
- c_long
- c_ulong
- size_t
- ptrdiff_t
- clock_t
- time_t
- c_longlong
- c_ulonglong
- intptr_t
- uintptr_t
- off_t
- dev_t
- ino_t
- pid_t
- mode_t
- ssize_t
- self
- true
- false
- Some
- None
- Ok
- Err
- Success
- Failure
- Cons
- Nil
- EXIT_FAILURE
- EXIT_SUCCESS
- RAND_MAX
- EOF
- SEEK_SET
- SEEK_CUR
- SEEK_END
- _IOFBF
- _IONBF
- _IOLBF
- BUFSIZ
- FOPEN_MAX
- FILENAME_MAX
- L_tmpnam
- TMP_MAX
- O_RDONLY
- O_WRONLY
- O_RDWR
- O_APPEND
- O_CREAT
- O_EXCL
- O_TRUNC
- S_IFIFO
- S_IFCHR
- S_IFBLK
- S_IFDIR
- S_IFREG
- S_IFMT
- S_IEXEC
- S_IWRITE
- S_IREAD
- S_IRWXU
- S_IXUSR
- S_IWUSR
- S_IRUSR
- F_OK
- R_OK
- W_OK
- X_OK
- STDIN_FILENO
- STDOUT_FILENO
- STDERR_FILENO
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
+
-
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
+