Multiply entities beyond necessity even more (force better build parallelism)
[hiphop-php.git] / hphp / hack / src / parser / editable_positioned_token.rs
blob7cfad559fa5abb81af8a4282ce345f91dfbb47f8
1 // Copyright (c) Facebook, Inc. and its affiliates.
2 //
3 // This source code is licensed under the MIT license found in the
4 // LICENSE file in the "hack" directory of this source tree.
6 use parser_rust as parser;
8 use parser::lexable_token::LexableToken;
9 use parser::positioned_token::PositionedToken;
10 use parser::source_text::SourceText;
11 use parser::token_kind::TokenKind;
12 use parser_rust::positioned_trivia::PositionedTrivia;
14 use crate::editable_positioned_original_source_data::SourceData;
16 #[derive(Clone)]
17 pub struct SyntheticTokenData {
18     pub text: String,
21 #[derive(Clone)]
22 pub enum TokenData<'a> {
23     Original(SourceData<'a>),
24     SynthesizedFromOriginal(SyntheticTokenData, SourceData<'a>),
25     Synthetic(SyntheticTokenData),
28 #[derive(Clone)]
29 pub struct EditablePositionedToken<'a> {
30     pub kind: TokenKind,
31     pub leading_text: String,
32     pub trailing_text: String,
33     pub token_data: TokenData<'a>,
36 impl<'a> LexableToken<'a> for EditablePositionedToken<'a> {
37     type Trivia = PositionedTrivia;
39     fn make(
40         _kind: TokenKind,
41         _source_text: &SourceText,
42         _offset: usize,
43         _width: usize,
44         _leading: Vec<Self::Trivia>,
45         _trailing: Vec<Self::Trivia>,
46     ) -> Self {
47         panic!("TODO")
48     }
50     fn kind(&self) -> TokenKind {
51         self.kind
52     }
54     fn leading_start_offset(&self) -> Option<usize> {
55         panic!("TODO")
56     }
58     fn width(&self) -> usize {
59         panic!("TODO")
60     }
62     fn leading_width(&self) -> usize {
63         panic!("TODO")
64     }
66     fn trailing_width(&self) -> usize {
67         panic!("TODO")
68     }
70     fn full_width(&self) -> usize {
71         panic!("TODO")
72     }
74     fn leading(&self) -> &[Self::Trivia] {
75         panic!("TODO")
76     }
78     fn trailing(&self) -> &[Self::Trivia] {
79         panic!("TODO")
80     }
82     fn with_leading(self, _leading: Vec<Self::Trivia>) -> Self {
83         panic!("TODO")
84     }
86     fn with_trailing(self, _trailing: Vec<Self::Trivia>) -> Self {
87         panic!("TODO")
88     }
90     fn with_kind(self, _kind: TokenKind) -> Self {
91         panic!("TODO")
92     }
95 impl<'a> EditablePositionedToken<'a> {
96     pub fn from_positioned_token(
97         positioned_token: &PositionedToken,
98         source_text: &SourceText<'a>,
99     ) -> Self {
100         let leading_text =
101             String::from_utf8(positioned_token.leading_text(source_text).to_vec()).unwrap();
102         let trailing_text =
103             String::from_utf8(positioned_token.trailing_text(source_text).to_vec()).unwrap();
104         Self {
105             kind: positioned_token.kind(),
106             leading_text,
107             trailing_text,
108             token_data: TokenData::Original(SourceData::from_positioned_token(
109                 positioned_token,
110                 source_text,
111             )),
112         }
113     }