Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(19)

Side by Side Diff: pkg/analyzer/lib/src/fasta/token_utils.dart

Issue 2763833002: fasta.CommentToken implement analyzer.CommentToken (Closed)
Patch Set: merge Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « pkg/analyzer/lib/src/fasta/ast_builder.dart ('k') | pkg/analyzer/tool/summary/mini_ast.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library fasta.analyzer.token_utils; 5 library fasta.analyzer.token_utils;
6 6
7 import 'package:front_end/src/fasta/parser/error_kind.dart' show ErrorKind; 7 import 'package:front_end/src/fasta/parser/error_kind.dart' show ErrorKind;
8 8
9 import 'package:front_end/src/fasta/scanner/error_token.dart' show ErrorToken; 9 import 'package:front_end/src/fasta/scanner/error_token.dart' show ErrorToken;
10 10
11 import 'package:front_end/src/fasta/scanner/keyword.dart' show Keyword; 11 import 'package:front_end/src/fasta/scanner/keyword.dart' show Keyword;
12 12
13 import 'package:front_end/src/fasta/scanner/precedence.dart'; 13 import 'package:front_end/src/fasta/scanner/precedence.dart';
14 14
15 import 'package:front_end/src/fasta/scanner/token.dart' 15 import 'package:front_end/src/fasta/scanner/token.dart'
16 show BeginGroupToken, KeywordToken, StringToken, SymbolToken, Token; 16 show
17 BeginGroupToken,
18 CommentToken,
19 DartDocToken,
20 KeywordToken,
21 StringToken,
22 SymbolToken,
23 Token;
17 24
18 import 'package:front_end/src/fasta/scanner/token_constants.dart'; 25 import 'package:front_end/src/fasta/scanner/token_constants.dart';
19 26
20 import 'package:front_end/src/scanner/token.dart' as analyzer 27 import 'package:front_end/src/scanner/token.dart' as analyzer
21 show 28 show
22 BeginToken, 29 BeginToken,
23 BeginTokenWithComment, 30 BeginTokenWithComment,
24 CommentToken, 31 CommentToken,
25 Keyword, 32 Keyword,
26 KeywordToken, 33 KeywordToken,
27 KeywordTokenWithComment, 34 KeywordTokenWithComment,
28 StringToken, 35 StringToken,
29 StringTokenWithComment, 36 StringTokenWithComment,
30 Token, 37 Token,
31 TokenWithComment; 38 TokenWithComment;
32 39
33 import 'package:front_end/src/scanner/errors.dart' as analyzer show ScannerError Code; 40 import 'package:front_end/src/scanner/errors.dart' as analyzer
41 show ScannerErrorCode;
34 42
35 import 'package:analyzer/dart/ast/token.dart' show TokenType; 43 import 'package:analyzer/dart/ast/token.dart' show TokenType;
36 44
37 import 'package:front_end/src/fasta/errors.dart' show internalError; 45 import 'package:front_end/src/fasta/errors.dart' show internalError;
38 46
39 /// Class capable of converting a stream of Fasta tokens to a stream of analyzer 47 /// Class capable of converting a stream of Fasta tokens to a stream of analyzer
40 /// tokens. 48 /// tokens.
41 /// 49 ///
42 /// This is a class rather than an ordinary method so that it can be subclassed 50 /// This is a class rather than an ordinary method so that it can be subclassed
43 /// in tests. 51 /// in tests.
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 _analyzerTokenTail = _analyzerTokenHead; 88 _analyzerTokenTail = _analyzerTokenHead;
81 _beginTokenStack = [null]; 89 _beginTokenStack = [null];
82 _endTokenStack = <Token>[null]; 90 _endTokenStack = <Token>[null];
83 91
84 while (true) { 92 while (true) {
85 if (token.info.kind == BAD_INPUT_TOKEN) { 93 if (token.info.kind == BAD_INPUT_TOKEN) {
86 ErrorToken errorToken = token; 94 ErrorToken errorToken = token;
87 _translateErrorToken(errorToken); 95 _translateErrorToken(errorToken);
88 } else { 96 } else {
89 var translatedToken = translateToken( 97 var translatedToken = translateToken(
90 token, translateCommentTokens(token.precedingComments)); 98 token, translateCommentTokens(token.precedingCommentTokens));
91 _matchGroups(token, translatedToken); 99 _matchGroups(token, translatedToken);
92 translatedToken.setNext(translatedToken); 100 translatedToken.setNext(translatedToken);
93 _analyzerTokenTail.setNext(translatedToken); 101 _analyzerTokenTail.setNext(translatedToken);
94 translatedToken.previous = _analyzerTokenTail; 102 translatedToken.previous = _analyzerTokenTail;
95 _analyzerTokenTail = translatedToken; 103 _analyzerTokenTail = translatedToken;
96 } 104 }
97 if (token.isEof) { 105 if (token.isEof) {
98 return _analyzerTokenHead.next; 106 return _analyzerTokenHead.next;
99 } 107 }
100 token = token.next; 108 token = token.next;
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 tail.next = fromAnalyzerToken(token); 293 tail.next = fromAnalyzerToken(token);
286 tail.next.previousToken = tail; 294 tail.next.previousToken = tail;
287 tail = tail.next; 295 tail = tail.next;
288 token = token.next; 296 token = token.next;
289 } 297 }
290 return head; 298 return head;
291 } 299 }
292 300
293 analyzer.Token translateAndAppend(analyzer.Token analyzerToken) { 301 analyzer.Token translateAndAppend(analyzer.Token analyzerToken) {
294 var token = fromAnalyzerToken(analyzerToken); 302 var token = fromAnalyzerToken(analyzerToken);
295 token.precedingComments = 303 token.precedingCommentTokens =
296 translateComments(analyzerToken.precedingComments); 304 translateComments(analyzerToken.precedingComments);
297 tokenTail.next = token; 305 tokenTail.next = token;
298 tokenTail.next.previousToken = tokenTail; 306 tokenTail.next.previousToken = tokenTail;
299 tokenTail = token; 307 tokenTail = token;
300 matchGroups(analyzerToken, token); 308 matchGroups(analyzerToken, token);
301 return analyzerToken.next; 309 return analyzerToken.next;
302 } 310 }
303 311
304 while (true) { 312 while (true) {
305 // TODO(paulberry): join up begingroup/endgroup. 313 // TODO(paulberry): join up begingroup/endgroup.
306 if (analyzerToken.type == TokenType.EOF) { 314 if (analyzerToken.type == TokenType.EOF) {
307 tokenTail.next = new SymbolToken(EOF_INFO, analyzerToken.offset); 315 tokenTail.next = new SymbolToken(EOF_INFO, analyzerToken.offset);
308 tokenTail.next.previousToken = tokenTail; 316 tokenTail.next.previousToken = tokenTail;
309 tokenTail.next.precedingComments = 317 tokenTail.next.precedingCommentTokens =
310 translateComments(analyzerToken.precedingComments); 318 translateComments(analyzerToken.precedingComments);
311 return tokenHead.next; 319 return tokenHead.next;
312 } 320 }
313 analyzerToken = translateAndAppend(analyzerToken); 321 analyzerToken = translateAndAppend(analyzerToken);
314 } 322 }
315 } 323 }
316 324
317 /// Converts a single analyzer token into a Fasta token. 325 /// Converts a single analyzer token into a Fasta token.
318 Token fromAnalyzerToken(analyzer.Token token) { 326 Token fromAnalyzerToken(analyzer.Token token) {
319 Token beginGroup(PrecedenceInfo info) => 327 Token beginGroup(PrecedenceInfo info) =>
(...skipping 23 matching lines...) Expand all
343 return string(INT_INFO); 351 return string(INT_INFO);
344 case TokenType.KEYWORD: 352 case TokenType.KEYWORD:
345 var keyword = Keyword.keywords[token.lexeme]; 353 var keyword = Keyword.keywords[token.lexeme];
346 if (keyword != null) { 354 if (keyword != null) {
347 return new KeywordToken(keyword, token.offset); 355 return new KeywordToken(keyword, token.offset);
348 } else { 356 } else {
349 return internalError("Unrecognized keyword: '${token.lexeme}'."); 357 return internalError("Unrecognized keyword: '${token.lexeme}'.");
350 } 358 }
351 break; 359 break;
352 case TokenType.MULTI_LINE_COMMENT: 360 case TokenType.MULTI_LINE_COMMENT:
353 return string(MULTI_LINE_COMMENT_INFO); 361 if (token.lexeme.startsWith('/**')) {
362 return new DartDocToken.fromSubstring(
363 MULTI_LINE_COMMENT_INFO, token.lexeme, 0, token.lexeme.length, 0);
364 }
365 return new CommentToken.fromSubstring(
366 MULTI_LINE_COMMENT_INFO, token.lexeme, 0, token.lexeme.length, 0);
354 case TokenType.SCRIPT_TAG: 367 case TokenType.SCRIPT_TAG:
355 return string(SCRIPT_INFO); 368 return string(SCRIPT_INFO);
356 case TokenType.SINGLE_LINE_COMMENT: 369 case TokenType.SINGLE_LINE_COMMENT:
357 return string(SINGLE_LINE_COMMENT_INFO); 370 if (token.lexeme.startsWith('///')) {
371 return new DartDocToken.fromSubstring(
372 SINGLE_LINE_COMMENT_INFO, token.lexeme, 0, token.lexeme.length, 0);
373 }
374 return new CommentToken.fromSubstring(
375 SINGLE_LINE_COMMENT_INFO, token.lexeme, 0, token.lexeme.length, 0);
358 case TokenType.STRING: 376 case TokenType.STRING:
359 return string(STRING_INFO); 377 return string(STRING_INFO);
360 case TokenType.AMPERSAND: 378 case TokenType.AMPERSAND:
361 return symbol(AMPERSAND_INFO); 379 return symbol(AMPERSAND_INFO);
362 case TokenType.AMPERSAND_AMPERSAND: 380 case TokenType.AMPERSAND_AMPERSAND:
363 return symbol(AMPERSAND_AMPERSAND_INFO); 381 return symbol(AMPERSAND_AMPERSAND_INFO);
364 // case TokenType.AMPERSAND_AMPERSAND_EQ 382 // case TokenType.AMPERSAND_AMPERSAND_EQ
365 case TokenType.AMPERSAND_EQ: 383 case TokenType.AMPERSAND_EQ:
366 return symbol(AMPERSAND_EQ_INFO); 384 return symbol(AMPERSAND_EQ_INFO);
367 case TokenType.AT: 385 case TokenType.AT:
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 if (token.info.kind != BAD_INPUT_TOKEN) return false; 518 if (token.info.kind != BAD_INPUT_TOKEN) return false;
501 // Otherwise keep looking. 519 // Otherwise keep looking.
502 } 520 }
503 } 521 }
504 522
505 analyzer.Token toAnalyzerToken(Token token, 523 analyzer.Token toAnalyzerToken(Token token,
506 [analyzer.CommentToken commentToken]) { 524 [analyzer.CommentToken commentToken]) {
507 if (token == null) return null; 525 if (token == null) return null;
508 analyzer.Token makeStringToken(TokenType tokenType) { 526 analyzer.Token makeStringToken(TokenType tokenType) {
509 if (commentToken == null) { 527 if (commentToken == null) {
510 return new analyzer.StringToken(tokenType, token.lexeme, token.charOffset) ; 528 return new analyzer.StringToken(
529 tokenType, token.lexeme, token.charOffset);
511 } else { 530 } else {
512 return new analyzer.StringTokenWithComment( 531 return new analyzer.StringTokenWithComment(
513 tokenType, token.lexeme, token.charOffset, commentToken); 532 tokenType, token.lexeme, token.charOffset, commentToken);
514 } 533 }
515 } 534 }
516 535
517 analyzer.Token makeBeginToken(TokenType tokenType) { 536 analyzer.Token makeBeginToken(TokenType tokenType) {
518 if (commentToken == null) { 537 if (commentToken == null) {
519 return new analyzer.BeginToken(tokenType, token.charOffset); 538 return new analyzer.BeginToken(tokenType, token.charOffset);
520 } else { 539 } else {
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
783 case PERIOD_PERIOD_PERIOD_TOKEN: 802 case PERIOD_PERIOD_PERIOD_TOKEN:
784 return TokenType.PERIOD_PERIOD_PERIOD; 803 return TokenType.PERIOD_PERIOD_PERIOD;
785 // case GENERIC_METHOD_TYPE_LIST_TOKEN: 804 // case GENERIC_METHOD_TYPE_LIST_TOKEN:
786 // return TokenType.GENERIC_METHOD_TYPE_LIST; 805 // return TokenType.GENERIC_METHOD_TYPE_LIST;
787 // case GENERIC_METHOD_TYPE_ASSIGN_TOKEN: 806 // case GENERIC_METHOD_TYPE_ASSIGN_TOKEN:
788 // return TokenType.GENERIC_METHOD_TYPE_ASSIGN; 807 // return TokenType.GENERIC_METHOD_TYPE_ASSIGN;
789 default: 808 default:
790 return internalError("Unhandled token ${token.info}"); 809 return internalError("Unhandled token ${token.info}");
791 } 810 }
792 } 811 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/fasta/ast_builder.dart ('k') | pkg/analyzer/tool/summary/mini_ast.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698