簡體   English   中英

如何從Dart Analyzer掃描儀獲取評論令牌?

[英]How do I get Comment tokens from the Dart Analyzer Scanner?

我正在使用Dart Analyzer程序包中的tokeniser,從本示例中的代碼開始。

我已經調整了代碼,只吐出了令牌(不使用Parser)來嘗試跟蹤我的問題。 所以我的代碼看起來像這樣:

import 'dart:io';

import 'package:analyzer/src/generated/ast.dart';
import 'package:analyzer/src/generated/error.dart';
import 'package:analyzer/src/generated/parser.dart';
import 'package:analyzer/src/generated/scanner.dart';

void main(List<String> args) {

  // Dummy code to parse (contains comments!)
  var src = """
               // test
               /* test */
               import 'dartd:io';
               // This is a test
  """;

  // Tokenise the code
  var errorListener = new _ErrorCollector();
  var reader = new CharSequenceReader(src);
  var scanner = new Scanner(null, reader, errorListener);
  var token = scanner.tokenize();

  // Dump all tokens to screen
  while (token != null && token.type != TokenType.EOF)
  {
    print(token);
    token = token.next;
  }

但是,當我運行此命令時,注釋消失了:

import
'dartd:io'
;

我正在瀏覽Scanner代碼,試圖理解注釋的去向,但並不高興。 有一個名為_preserveComments的布爾值,但是無論如何它默認為true!

評論似乎在他們自己的令牌鏈中。 您可以通過普通令牌的precedingComments訪問器訪問它們,然后需要使用next遍歷每個注釋,直到到達結尾:

// Dump all tokens to screen
while (token != null && token.type != TokenType.EOF)
{
  printComments(token);
  print(token);
  token = token.next;

  if(token.type == TokenType.EOF) {
    printComments(token);
  }
}
void printComments(Token token) {
  var comments = token.precedingComments;
  while(comments != null) {
    print(comments);
    comments = comments.next;
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM