Files
@ 95e019faaf52
Branch filter:
Location: CSY/reowolf/src/protocol/token_writer.rs - annotation
95e019faaf52
3.1 KiB
application/rls-services+xml
Getting builtin component instantiation to compile
fc85ab427e9c fc85ab427e9c 2693293dc537 fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c 2693293dc537 fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c 2693293dc537 2693293dc537 fc85ab427e9c fc85ab427e9c 2693293dc537 fc85ab427e9c 2693293dc537 fc85ab427e9c 2693293dc537 2693293dc537 2693293dc537 2693293dc537 fc85ab427e9c fc85ab427e9c 2693293dc537 2693293dc537 2693293dc537 2693293dc537 fc85ab427e9c fc85ab427e9c 2693293dc537 fc85ab427e9c 2693293dc537 fc85ab427e9c 2693293dc537 fc85ab427e9c 2693293dc537 fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c 2693293dc537 fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c 2693293dc537 fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c 2693293dc537 2693293dc537 2693293dc537 fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c fc85ab427e9c | #![allow(dead_code)]
use std::fmt::{Write, Error as FmtError};
use std::io::Write as IOWrite;
use crate::protocol::input_source::{InputSource, InputSpan};
use crate::protocol::parser::Module;
use crate::protocol::tokens::{Token, TokenKind, TokenMarker};
pub(crate) struct TokenWriter {
buffer: String,
}
impl TokenWriter {
pub(crate) fn new() -> Self {
return Self{
buffer: String::with_capacity(4096),
}
}
pub(crate) fn write<W: IOWrite>(&mut self, w: &mut W, modules: &[Module]) {
self.buffer.clear();
for module in modules {
self.write_module_tokens(module);
}
w.write_all(self.buffer.as_bytes()).expect("write tokens");
}
fn write_module_tokens(&mut self, module: &Module) {
self.write_dashed_indent(0);
match &module.name {
Some(name) => writeln!(self.buffer, "Module: {}", name.1.as_str()).unwrap(),
None => self.buffer.push_str("Unnamed module\n"),
}
self.write_marker_array(&module.tokens.markers, 1).expect("write markers");
self.write_token_array(&module.source, &module.tokens.tokens, 1).expect("write tokens");
}
fn write_marker_array(&mut self, markers: &[TokenMarker], indent: u32) -> Result<(), FmtError> {
self.write_indent(indent);
writeln!(self.buffer, "Markers: [")?;
let marker_indent = indent + 1;
for marker in markers {
self.write_indent(marker_indent);
writeln!(self.buffer, "{:?}", marker)?;
}
self.write_indent(indent);
writeln!(self.buffer, "]")?;
return Ok(());
}
fn write_token_array(&mut self, source: &InputSource, tokens: &[Token], indent: u32) -> Result<(), FmtError> {
self.write_indent(indent);
writeln!(self.buffer, "Tokens: [")?;
let num_tokens = tokens.len();
let token_indent = indent + 1;
for token_index in 0..num_tokens {
// Skip uninteresting tokens
let token = &tokens[token_index];
if token.kind == TokenKind::SpanEnd {
continue;
}
self.write_indent(token_indent);
write!(self.buffer, "{:?} (index {})", token.kind, token_index)?;
if token.kind.has_span_end() {
let token_start = token.pos;
let token_end = tokens[token_index + 1].pos;
let section = source.section_at_span(InputSpan::from_positions(token_start, token_end));
writeln!(self.buffer, " text: {}", String::from_utf8_lossy(section))?;
} else {
self.buffer.push('\n');
}
}
self.write_indent(indent);
writeln!(self.buffer, "]")?;
return Ok(());
}
fn write_dashed_indent(&mut self, indent: u32) {
for _ in 0..indent * 2 {
self.buffer.push(' ');
}
self.buffer.push('-');
self.buffer.push(' ');
}
fn write_indent(&mut self, indent: u32) {
for _ in 0..(indent + 1)*2 {
self.buffer.push(' ');
}
}
}
|