From 3b2ba59526f8e524aa3c1526dda2828a93653ed2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20Ochagav=C3=ADa?= Date: Wed, 7 Nov 2018 11:58:34 +0100 Subject: Use ArrayString instead of hand rolled data structure --- crates/ra_syntax/Cargo.toml | 1 + crates/ra_syntax/src/lib.rs | 1 + crates/ra_syntax/src/utils.rs | 36 ------------------------------------ crates/ra_syntax/src/validation.rs | 6 +++--- 4 files changed, 5 insertions(+), 39 deletions(-) (limited to 'crates/ra_syntax') diff --git a/crates/ra_syntax/Cargo.toml b/crates/ra_syntax/Cargo.toml index de4b25e67..0f709026f 100644 --- a/crates/ra_syntax/Cargo.toml +++ b/crates/ra_syntax/Cargo.toml @@ -8,6 +8,7 @@ description = "Comment and whitespace preserving parser for the Rust langauge" repository = "https://github.com/rust-analyzer/rust-analyzer" [dependencies] +arrayvec = "0.4.7" unicode-xid = "0.1.0" itertools = "0.7.8" drop_bomb = "0.1.4" diff --git a/crates/ra_syntax/src/lib.rs b/crates/ra_syntax/src/lib.rs index 123002825..319fb947d 100644 --- a/crates/ra_syntax/src/lib.rs +++ b/crates/ra_syntax/src/lib.rs @@ -20,6 +20,7 @@ #![allow(missing_docs)] //#![warn(unreachable_pub)] // rust-lang/rust#47816 +extern crate arrayvec; extern crate drop_bomb; extern crate itertools; extern crate parking_lot; diff --git a/crates/ra_syntax/src/utils.rs b/crates/ra_syntax/src/utils.rs index 5bef4a639..cad9544be 100644 --- a/crates/ra_syntax/src/utils.rs +++ b/crates/ra_syntax/src/utils.rs @@ -1,6 +1,5 @@ use crate::{File, SyntaxKind, SyntaxNodeRef, WalkEvent}; use std::fmt::Write; -use std::ops::Deref; use std::str; /// Parse a file and create a string representation of the resulting parse tree. @@ -80,38 +79,3 @@ pub(crate) fn validate_block_structure(root: SyntaxNodeRef) { } } } - -#[derive(Debug)] -pub struct MutAsciiString<'a> { - buf: &'a mut [u8], - len: usize, -} - -impl<'a> MutAsciiString<'a> { - pub fn new(buf: &'a mut [u8]) -> MutAsciiString<'a> { - MutAsciiString { buf, len: 0 } - } - - pub fn as_str(&self) -> &str { - str::from_utf8(&self.buf[..self.len]).unwrap() - } - - pub fn len(&self) -> usize { - self.len - } - - pub fn push(&mut self, c: char) { - assert!(self.len() < self.buf.len()); - assert!(c.is_ascii()); - - self.buf[self.len] = c as u8; - self.len += 1; - } -} - -impl<'a> Deref for MutAsciiString<'a> { - type Target = str; - fn deref(&self) -> &str { - self.as_str() - } -} diff --git a/crates/ra_syntax/src/validation.rs b/crates/ra_syntax/src/validation.rs index a2509dc90..61cf83c84 100644 --- a/crates/ra_syntax/src/validation.rs +++ b/crates/ra_syntax/src/validation.rs @@ -1,11 +1,12 @@ use std::u32; +use arrayvec::ArrayString; + use crate::{ algo::visit::{visitor_ctx, VisitorCtx}, ast::{self, AstNode}, File, string_lexing::{self, CharComponentKind}, - utils::MutAsciiString, yellow::{ SyntaxError, SyntaxErrorKind::*, @@ -76,8 +77,7 @@ fn validate_char(node: ast::Char, errors: &mut Vec) { return; } - let mut buf = &mut [0; 6]; - let mut code = MutAsciiString::new(buf); + let mut code = ArrayString::<[_; 6]>::new(); let mut closed = false; for c in text[3..].chars() { assert!(!closed, "no characters after escape is closed"); -- cgit v1.2.3