[英]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.