@@ -260,6 +260,55 @@ TEST_F(LexerTest, RestoreStopAtCodeCompletion) {
260
260
ASSERT_EQ (tok::eof, Tok.getKind ());
261
261
}
262
262
263
+ TEST_F (LexerTest, RestoreWithTrivia) {
264
+ using namespace swift ::syntax;
265
+ StringRef SourceStr = " aaa \n bbb /*C*/ccc" ;
266
+
267
+ LangOptions LangOpts;
268
+ SourceManager SourceMgr;
269
+ unsigned BufferID = SourceMgr.addMemBufferCopy (SourceStr);
270
+
271
+ Lexer L (LangOpts, SourceMgr, BufferID, /* Diags=*/ nullptr , /* InSILMode=*/ false ,
272
+ CommentRetentionMode::AttachToNextToken,
273
+ TriviaRetentionMode::WithTrivia);
274
+
275
+ Token Tok;
276
+ Trivia LeadingTrivia, TrailingTrivia;
277
+
278
+ L.lex (Tok, LeadingTrivia, TrailingTrivia);
279
+ ASSERT_EQ (tok::identifier, Tok.getKind ());
280
+ ASSERT_EQ (" aaa" , Tok.getText ());
281
+ ASSERT_TRUE (Tok.isAtStartOfLine ());
282
+ ASSERT_EQ (LeadingTrivia, Trivia ());
283
+ ASSERT_EQ (TrailingTrivia, (Trivia{{TriviaPiece::spaces (1 )}}));
284
+
285
+ L.lex (Tok, LeadingTrivia, TrailingTrivia);
286
+ ASSERT_EQ (tok::identifier, Tok.getKind ());
287
+ ASSERT_EQ (" bbb" , Tok.getText ());
288
+ ASSERT_TRUE (Tok.isAtStartOfLine ());
289
+ ASSERT_EQ (LeadingTrivia,
290
+ (Trivia{{TriviaPiece::newlines (1 ), TriviaPiece::spaces (1 )}}));
291
+ ASSERT_EQ (TrailingTrivia, (Trivia{{TriviaPiece::spaces (1 )}}));
292
+
293
+ Lexer::State S = L.getStateForBeginningOfToken (Tok, LeadingTrivia);
294
+
295
+ L.lex (Tok, LeadingTrivia, TrailingTrivia);
296
+ ASSERT_EQ (tok::identifier, Tok.getKind ());
297
+ ASSERT_EQ (" ccc" , Tok.getText ());
298
+ ASSERT_FALSE (Tok.isAtStartOfLine ());
299
+ ASSERT_EQ (LeadingTrivia, (Trivia{{TriviaPiece::blockComment (" /*C*/" )}}));
300
+ ASSERT_EQ (TrailingTrivia, Trivia ());
301
+
302
+ L.restoreState (S);
303
+ L.lex (Tok, LeadingTrivia, TrailingTrivia);
304
+ ASSERT_EQ (tok::identifier, Tok.getKind ());
305
+ ASSERT_EQ (" bbb" , Tok.getText ());
306
+ ASSERT_TRUE (Tok.isAtStartOfLine ());
307
+ ASSERT_EQ (LeadingTrivia,
308
+ (Trivia{{TriviaPiece::newlines (1 ), TriviaPiece::spaces (1 )}}));
309
+ ASSERT_EQ (TrailingTrivia, (Trivia{{TriviaPiece::spaces (1 )}}));
310
+ }
311
+
263
312
TEST_F (LexerTest, getLocForStartOfToken) {
264
313
const char *Source = " aaa \n \t bbb \" hello\" \" -\\ (val)-\" " ;
265
314
0 commit comments