// (C) Copyright 2016 Jethro G. Beekman // // Licensed under the Apache License, Version 2.0 or the MIT license // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. //! Representation of a C token //! //! This is designed to map onto a libclang CXToken. #[derive(Debug, Copy, Clone, PartialEq, Eq)] #[allow(missing_docs)] pub enum Kind { Punctuation, Keyword, Identifier, Literal, Comment, } /// A single token in a C expression. #[derive(Debug, Clone, PartialEq, Eq)] pub struct Token { /// The type of this token. pub kind: Kind, /// The bytes that make up the token. pub raw: Box<[u8]>, } impl<'a> From<(Kind, &'a [u8])> for Token { fn from((kind, value): (Kind, &'a [u8])) -> Token { Token { kind, raw: value.to_owned().into_boxed_slice(), } } } /// Remove all comment tokens from a vector of tokens pub fn remove_comments(v: &mut Vec) -> &mut Vec { v.retain(|t| t.kind != Kind::Comment); v }