mirror of
https://github.com/dart-lang/sdk
synced 2024-09-18 20:11:19 +00:00
[analyzer] Add an API to get a language comment token off a unit.
Change-Id: I377fdc44d5e514d6d9a601b3947c3908e5a4497a Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140768 Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
parent
ba389f9061
commit
3095a082cd
|
@ -460,6 +460,29 @@ class KeywordToken extends SimpleToken {
|
|||
Object value() => keyword;
|
||||
}
|
||||
|
||||
/**
|
||||
* A specialized comment token representing a language version
|
||||
* (e.g. '// @dart = 2.1').
|
||||
*/
|
||||
class LanguageVersionToken extends CommentToken {
|
||||
/**
|
||||
* The major language version.
|
||||
*/
|
||||
final int major;
|
||||
|
||||
/**
|
||||
* The minor language version.
|
||||
*/
|
||||
final int minor;
|
||||
|
||||
LanguageVersionToken.from(String text, int offset, this.major, this.minor)
|
||||
: super(TokenType.SINGLE_LINE_COMMENT, text, offset);
|
||||
|
||||
@override
|
||||
LanguageVersionToken copy() =>
|
||||
new LanguageVersionToken.from(lexeme, offset, major, minor);
|
||||
}
|
||||
|
||||
/**
|
||||
* A token that was scanned from the input. Each token knows which tokens
|
||||
* precede and follow it, acting as a link in a doubly linked list of tokens.
|
||||
|
|
|
@ -187,19 +187,12 @@ class CommentToken extends StringToken implements analyzer.CommentToken {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A specialized comment token representing a language version
|
||||
* (e.g. '// @dart = 2.1').
|
||||
*/
|
||||
class LanguageVersionToken extends CommentToken {
|
||||
/**
|
||||
* The major language version.
|
||||
*/
|
||||
class LanguageVersionToken extends CommentToken
|
||||
implements analyzer.LanguageVersionToken {
|
||||
@override
|
||||
int major;
|
||||
|
||||
/**
|
||||
* The minor language version.
|
||||
*/
|
||||
@override
|
||||
int minor;
|
||||
|
||||
LanguageVersionToken.from(String text, int offset, this.major, this.minor)
|
||||
|
|
|
@ -76,7 +76,6 @@ class CompilationUnitParser {
|
|||
var parser = Parser(
|
||||
stringSource,
|
||||
errorListener,
|
||||
languageVersion: scanner.languageVersion,
|
||||
featureSet: featureSet,
|
||||
);
|
||||
var cu = parser.parseCompilationUnit(startToken);
|
||||
|
|
|
@ -127,7 +127,6 @@ CompilationUnit parseDirectives(String contents,
|
|||
var parser = Parser(
|
||||
source,
|
||||
errorCollector,
|
||||
languageVersion: scanner.languageVersion,
|
||||
featureSet: featureSet,
|
||||
);
|
||||
var unit = parser.parseDirectives(token);
|
||||
|
@ -155,7 +154,6 @@ CompilationUnit _parseSource(
|
|||
var parser = Parser(
|
||||
source,
|
||||
errorCollector,
|
||||
languageVersion: scanner.languageVersion,
|
||||
featureSet: featureSet,
|
||||
)..parseFunctionBodies = parseFunctionBodies;
|
||||
var unit = parser.parseCompilationUnit(token)
|
||||
|
|
|
@ -121,7 +121,6 @@ ParseStringResult parseString(
|
|||
var parser = Parser(
|
||||
source,
|
||||
errorCollector,
|
||||
languageVersion: scanner.languageVersion,
|
||||
featureSet: scanner.featureSet,
|
||||
);
|
||||
var unit = parser.parseCompilationUnit(token);
|
||||
|
|
|
@ -1237,9 +1237,12 @@ abstract class CompilationUnit implements AstNode {
|
|||
/// resynthesized from a summary.
|
||||
FeatureSet get featureSet;
|
||||
|
||||
@Deprecated("Use languageVersionToken")
|
||||
LanguageVersion get languageVersion;
|
||||
|
||||
/// The language version override specified for this compilation unit using a
|
||||
/// token like '// @dart = 2.7', or `null` if no override is specified.
|
||||
LanguageVersion get languageVersion;
|
||||
LanguageVersionToken get languageVersionToken;
|
||||
|
||||
/// Return the line information for this compilation unit.
|
||||
LineInfo get lineInfo;
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
import 'package:_fe_analyzer_shared/src/scanner/token.dart';
|
||||
import 'package:analyzer/dart/analysis/features.dart';
|
||||
import 'package:analyzer/dart/ast/ast.dart';
|
||||
import 'package:analyzer/dart/ast/language_version.dart';
|
||||
import 'package:analyzer/src/generated/utilities_dart.dart';
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
|
@ -166,8 +165,7 @@ abstract class AstFactory {
|
|||
List<Directive> directives,
|
||||
List<CompilationUnitMember> declarations,
|
||||
@required Token endToken,
|
||||
@required FeatureSet featureSet,
|
||||
LanguageVersion languageVersion});
|
||||
@required FeatureSet featureSet});
|
||||
|
||||
/// Returns a newly created conditional expression.
|
||||
ConditionalExpression conditionalExpression(
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
/// The language version override specified for a compilation unit.
|
||||
@Deprecated("Use unit.languageVersionToken instead")
|
||||
class LanguageVersion {
|
||||
final int major;
|
||||
final int minor;
|
||||
|
|
|
@ -5,4 +5,4 @@
|
|||
/// Defines the tokens that are produced by the scanner, used by the parser, and
|
||||
/// referenced from the [AST structure](ast.dart).
|
||||
export 'package:_fe_analyzer_shared/src/scanner/token.dart'
|
||||
show Keyword, Token, TokenType;
|
||||
show Keyword, Token, TokenType, LanguageVersionToken;
|
||||
|
|
|
@ -536,7 +536,6 @@ class FileState {
|
|||
return astFactory.compilationUnit(
|
||||
beginToken: token,
|
||||
endToken: token,
|
||||
languageVersion: null,
|
||||
featureSet: _featureSet,
|
||||
)..lineInfo = LineInfo(const <int>[0]);
|
||||
}
|
||||
|
@ -599,7 +598,6 @@ class FileState {
|
|||
Parser parser = Parser(
|
||||
source,
|
||||
errorListener,
|
||||
languageVersion: scanner.languageVersion,
|
||||
featureSet: scanner.featureSet,
|
||||
useFasta: useFasta,
|
||||
);
|
||||
|
|
|
@ -2026,7 +2026,22 @@ class CompilationUnitImpl extends AstNodeImpl implements CompilationUnit {
|
|||
LineInfo lineInfo;
|
||||
|
||||
@override
|
||||
final LanguageVersion languageVersion;
|
||||
LanguageVersion get languageVersion {
|
||||
final token = languageVersionToken;
|
||||
return LanguageVersion(token.major, token.minor);
|
||||
}
|
||||
|
||||
@override
|
||||
LanguageVersionToken get languageVersionToken {
|
||||
CommentToken comment = beginToken.precedingComments;
|
||||
while (comment != null) {
|
||||
if (comment is LanguageVersionToken) {
|
||||
return comment;
|
||||
}
|
||||
comment = comment.next;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@override
|
||||
final FeatureSet featureSet;
|
||||
|
@ -2042,7 +2057,6 @@ class CompilationUnitImpl extends AstNodeImpl implements CompilationUnit {
|
|||
List<Directive> directives,
|
||||
List<CompilationUnitMember> declarations,
|
||||
this.endToken,
|
||||
this.languageVersion,
|
||||
this.featureSet) {
|
||||
_scriptTag = _becomeParentOf(scriptTag);
|
||||
_directives = NodeListImpl<Directive>(this, directives);
|
||||
|
|
|
@ -6,7 +6,6 @@ import 'package:_fe_analyzer_shared/src/scanner/token.dart';
|
|||
import 'package:analyzer/dart/analysis/features.dart';
|
||||
import 'package:analyzer/dart/ast/ast.dart';
|
||||
import 'package:analyzer/dart/ast/ast_factory.dart';
|
||||
import 'package:analyzer/dart/ast/language_version.dart';
|
||||
import 'package:analyzer/src/dart/ast/ast.dart';
|
||||
import 'package:analyzer/src/generated/utilities_dart.dart';
|
||||
import 'package:meta/meta.dart';
|
||||
|
@ -186,10 +185,9 @@ class AstFactoryImpl extends AstFactory {
|
|||
List<Directive> directives,
|
||||
List<CompilationUnitMember> declarations,
|
||||
Token endToken,
|
||||
FeatureSet featureSet,
|
||||
LanguageVersion languageVersion}) =>
|
||||
FeatureSet featureSet}) =>
|
||||
CompilationUnitImpl(beginToken, scriptTag, directives, declarations,
|
||||
endToken, languageVersion, featureSet);
|
||||
endToken, featureSet);
|
||||
|
||||
@override
|
||||
ConditionalExpression conditionalExpression(
|
||||
|
|
|
@ -286,7 +286,6 @@ class AstCloner implements AstVisitor<AstNode> {
|
|||
directives: cloneNodeList(node.directives),
|
||||
declarations: cloneNodeList(node.declarations),
|
||||
endToken: cloneToken(node.endToken),
|
||||
languageVersion: node.languageVersion,
|
||||
featureSet: node.featureSet);
|
||||
clone.lineInfo = node.lineInfo;
|
||||
return clone;
|
||||
|
|
|
@ -108,7 +108,6 @@ class FileState {
|
|||
Parser parser = Parser(
|
||||
source,
|
||||
errorListener,
|
||||
languageVersion: scanner.languageVersion,
|
||||
featureSet: scanner.featureSet,
|
||||
useFasta: useFasta,
|
||||
);
|
||||
|
|
|
@ -8,7 +8,6 @@ import 'package:_fe_analyzer_shared/src/scanner/scanner.dart' as fasta;
|
|||
import 'package:_fe_analyzer_shared/src/scanner/token.dart'
|
||||
show Token, TokenType;
|
||||
import 'package:analyzer/dart/analysis/features.dart';
|
||||
import 'package:analyzer/dart/ast/language_version.dart';
|
||||
import 'package:analyzer/error/error.dart';
|
||||
import 'package:analyzer/error/listener.dart';
|
||||
import 'package:analyzer/src/dart/error/syntactic_errors.dart';
|
||||
|
@ -72,7 +71,7 @@ class Scanner {
|
|||
*/
|
||||
bool enableNonNullable = false;
|
||||
|
||||
LanguageVersion _languageVersion;
|
||||
fasta.LanguageVersionToken _languageVersion;
|
||||
|
||||
FeatureSet _featureSet;
|
||||
|
||||
|
@ -114,7 +113,7 @@ class Scanner {
|
|||
* The language version override specified for this compilation unit using a
|
||||
* token like '// @dart = 2.7', or `null` if no override is specified.
|
||||
*/
|
||||
LanguageVersion get languageVersion => _languageVersion;
|
||||
fasta.LanguageVersionToken get languageVersion => _languageVersion;
|
||||
|
||||
set preserveComments(bool preserveComments) {
|
||||
this._preserveComments = preserveComments;
|
||||
|
@ -199,10 +198,7 @@ class Scanner {
|
|||
void _languageVersionChanged(
|
||||
fasta.Scanner scanner, fasta.LanguageVersionToken languageVersion) {
|
||||
if (languageVersion.major >= 0 && languageVersion.minor >= 0) {
|
||||
_languageVersion = LanguageVersion(
|
||||
languageVersion.major,
|
||||
languageVersion.minor,
|
||||
);
|
||||
_languageVersion = languageVersion;
|
||||
if (_featureSet != null) {
|
||||
_featureSet = _featureSet.restrictToVersion(
|
||||
Version(languageVersion.major, languageVersion.minor, 0));
|
||||
|
|
|
@ -50,7 +50,6 @@ import 'package:_fe_analyzer_shared/src/scanner/token_constants.dart';
|
|||
import 'package:analyzer/dart/analysis/features.dart';
|
||||
import 'package:analyzer/dart/ast/ast.dart';
|
||||
import 'package:analyzer/dart/ast/ast_factory.dart' show AstFactory;
|
||||
import 'package:analyzer/dart/ast/language_version.dart';
|
||||
import 'package:analyzer/dart/ast/standard_ast_factory.dart' as standard;
|
||||
import 'package:analyzer/dart/ast/token.dart' show Token, TokenType;
|
||||
import 'package:analyzer/error/listener.dart';
|
||||
|
@ -127,13 +126,10 @@ class AstBuilder extends StackListener {
|
|||
/// `true` if variance behavior is enabled
|
||||
final bool enableVariance;
|
||||
|
||||
/// The language version override, `null` if not such token.
|
||||
LanguageVersion _languageVersion;
|
||||
|
||||
final FeatureSet _featureSet;
|
||||
|
||||
AstBuilder(ErrorReporter errorReporter, this.fileUri, this.isFullAst,
|
||||
this._languageVersion, this._featureSet,
|
||||
this._featureSet,
|
||||
[Uri uri])
|
||||
: this.errorReporter = FastaErrorReporter(errorReporter),
|
||||
this.enableNonNullable = _featureSet.isEnabled(Feature.non_nullable),
|
||||
|
@ -959,7 +955,6 @@ class AstBuilder extends StackListener {
|
|||
directives: directives,
|
||||
declarations: declarations,
|
||||
endToken: endToken,
|
||||
languageVersion: _languageVersion,
|
||||
featureSet: _featureSet) as CompilationUnitImpl;
|
||||
push(unit);
|
||||
}
|
||||
|
|
|
@ -15,7 +15,6 @@ import 'package:_fe_analyzer_shared/src/parser/type_info.dart' as fasta;
|
|||
import 'package:_fe_analyzer_shared/src/scanner/scanner.dart' as fasta;
|
||||
import 'package:analyzer/dart/analysis/features.dart';
|
||||
import 'package:analyzer/dart/ast/ast.dart';
|
||||
import 'package:analyzer/dart/ast/language_version.dart';
|
||||
import 'package:analyzer/dart/ast/standard_ast_factory.dart';
|
||||
import 'package:analyzer/dart/ast/token.dart';
|
||||
import 'package:analyzer/error/error.dart';
|
||||
|
@ -202,12 +201,10 @@ class Parser {
|
|||
/// Initialize a newly created parser to parse tokens in the given [_source]
|
||||
/// and to report any errors that are found to the given [_errorListener].
|
||||
factory Parser(Source source, AnalysisErrorListener errorListener,
|
||||
{bool useFasta,
|
||||
LanguageVersion languageVersion,
|
||||
@required FeatureSet featureSet}) {
|
||||
{bool useFasta, @required FeatureSet featureSet}) {
|
||||
featureSet ??= FeatureSet.fromEnableFlags([]);
|
||||
if (useFasta ?? Parser.useFasta) {
|
||||
return _Parser2(source, errorListener, languageVersion, featureSet,
|
||||
return _Parser2(source, errorListener, featureSet,
|
||||
allowNativeClause: true);
|
||||
} else {
|
||||
return Parser.withoutFasta(source, errorListener, featureSet: featureSet);
|
||||
|
@ -1904,7 +1901,6 @@ class Parser {
|
|||
return astFactory.compilationUnit(
|
||||
beginToken: eof,
|
||||
endToken: eof,
|
||||
languageVersion: null,
|
||||
featureSet: _featureSet,
|
||||
);
|
||||
}
|
||||
|
@ -1961,7 +1957,6 @@ class Parser {
|
|||
directives: directives,
|
||||
declarations: declarations,
|
||||
endToken: _currentToken,
|
||||
languageVersion: null,
|
||||
featureSet: _featureSet,
|
||||
);
|
||||
}
|
||||
|
@ -2418,7 +2413,6 @@ class Parser {
|
|||
scriptTag: scriptTag,
|
||||
directives: directives,
|
||||
endToken: _currentToken,
|
||||
languageVersion: null,
|
||||
featureSet: _featureSet,
|
||||
);
|
||||
}
|
||||
|
@ -2428,7 +2422,6 @@ class Parser {
|
|||
scriptTag: scriptTag,
|
||||
directives: directives,
|
||||
endToken: _currentToken,
|
||||
languageVersion: null,
|
||||
featureSet: _featureSet,
|
||||
);
|
||||
}
|
||||
|
|
|
@ -24,11 +24,10 @@ abstract class ParserAdapter implements Parser {
|
|||
final AstBuilder astBuilder;
|
||||
|
||||
ParserAdapter(this.currentToken, ErrorReporter errorReporter, Uri fileUri,
|
||||
LanguageVersion languageVersion, FeatureSet featureSet,
|
||||
FeatureSet featureSet,
|
||||
{bool allowNativeClause = false})
|
||||
: fastaParser = fasta.Parser(null),
|
||||
astBuilder = AstBuilder(
|
||||
errorReporter, fileUri, true, languageVersion, featureSet) {
|
||||
astBuilder = AstBuilder(errorReporter, fileUri, true, featureSet) {
|
||||
fastaParser.listener = astBuilder;
|
||||
astBuilder.parser = fastaParser;
|
||||
astBuilder.allowNativeClause = allowNativeClause;
|
||||
|
@ -379,23 +378,21 @@ class _Parser2 extends ParserAdapter {
|
|||
@override
|
||||
bool enableUriInPartOf = true;
|
||||
|
||||
factory _Parser2(Source source, AnalysisErrorListener errorListener,
|
||||
LanguageVersion languageVersion, FeatureSet featureSet,
|
||||
factory _Parser2(
|
||||
Source source, AnalysisErrorListener errorListener, FeatureSet featureSet,
|
||||
{bool allowNativeClause = false}) {
|
||||
var errorReporter = ErrorReporter(
|
||||
errorListener,
|
||||
source,
|
||||
isNonNullableByDefault: featureSet.isEnabled(Feature.non_nullable),
|
||||
);
|
||||
return _Parser2._(
|
||||
source, errorReporter, source.uri, languageVersion, featureSet,
|
||||
return _Parser2._(source, errorReporter, source.uri, featureSet,
|
||||
allowNativeClause: allowNativeClause);
|
||||
}
|
||||
|
||||
_Parser2._(this._source, ErrorReporter errorReporter, Uri fileUri,
|
||||
LanguageVersion languageVersion, FeatureSet featureSet,
|
||||
{bool allowNativeClause = false})
|
||||
: super(null, errorReporter, fileUri, languageVersion, featureSet,
|
||||
FeatureSet featureSet, {bool allowNativeClause = false})
|
||||
: super(null, errorReporter, fileUri, featureSet,
|
||||
allowNativeClause: allowNativeClause);
|
||||
|
||||
@override
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
|
||||
import 'package:analyzer/dart/analysis/features.dart';
|
||||
import 'package:analyzer/dart/ast/ast.dart';
|
||||
import 'package:analyzer/dart/ast/language_version.dart';
|
||||
import 'package:analyzer/dart/ast/standard_ast_factory.dart';
|
||||
import 'package:analyzer/dart/ast/token.dart';
|
||||
import 'package:analyzer/dart/element/element.dart';
|
||||
|
@ -293,14 +292,12 @@ class AstTestFactory {
|
|||
directives: directives ?? <Directive>[],
|
||||
declarations: declarations ?? <CompilationUnitMember>[],
|
||||
endToken: TokenFactory.tokenFromType(TokenType.EOF),
|
||||
languageVersion: null,
|
||||
featureSet: null);
|
||||
|
||||
static CompilationUnit compilationUnit9(
|
||||
{String scriptTag,
|
||||
List<Directive> directives,
|
||||
List<CompilationUnitMember> declarations,
|
||||
LanguageVersion languageVersion,
|
||||
FeatureSet featureSet}) =>
|
||||
astFactory.compilationUnit(
|
||||
beginToken: TokenFactory.tokenFromType(TokenType.EOF),
|
||||
|
@ -309,7 +306,6 @@ class AstTestFactory {
|
|||
directives: directives ?? <Directive>[],
|
||||
declarations: declarations ?? <CompilationUnitMember>[],
|
||||
endToken: TokenFactory.tokenFromType(TokenType.EOF),
|
||||
languageVersion: languageVersion,
|
||||
featureSet: featureSet);
|
||||
|
||||
static ConditionalExpression conditionalExpression(Expression condition,
|
||||
|
|
|
@ -358,7 +358,6 @@ class AstBinaryReader {
|
|||
directives: _readNodeList(data.compilationUnit_directives),
|
||||
declarations: _readNodeList(data.compilationUnit_declarations),
|
||||
endToken: null,
|
||||
languageVersion: null,
|
||||
featureSet: null);
|
||||
}
|
||||
|
||||
|
|
|
@ -214,7 +214,7 @@ class A {}
|
|||
featureSet: FeatureSet.fromEnableFlags([]),
|
||||
);
|
||||
|
||||
var languageVersion = result.unit.languageVersion;
|
||||
var languageVersion = result.unit.languageVersionToken;
|
||||
expect(languageVersion.major, 2);
|
||||
expect(languageVersion.minor, 7);
|
||||
}
|
||||
|
@ -229,7 +229,7 @@ class A {}
|
|||
featureSet: FeatureSet.fromEnableFlags([]),
|
||||
);
|
||||
|
||||
expect(result.unit.languageVersion, isNull);
|
||||
expect(result.unit.languageVersionToken, isNull);
|
||||
}
|
||||
|
||||
test_parseString_lineInfo() {
|
||||
|
|
|
@ -741,7 +741,6 @@ E f() => g;
|
|||
_unit = Parser(
|
||||
source,
|
||||
listener,
|
||||
languageVersion: scanner.languageVersion,
|
||||
featureSet: featureSet,
|
||||
useFasta: true,
|
||||
).parseCompilationUnit(tokens);
|
||||
|
|
|
@ -10,12 +10,12 @@ import 'package:_fe_analyzer_shared/src/scanner/error_token.dart'
|
|||
show ErrorToken;
|
||||
import 'package:_fe_analyzer_shared/src/scanner/scanner.dart' as fasta;
|
||||
import 'package:_fe_analyzer_shared/src/scanner/scanner.dart'
|
||||
show LanguageVersionToken, ScannerConfiguration, ScannerResult, scanString;
|
||||
show ScannerConfiguration, ScannerResult, scanString;
|
||||
import 'package:analyzer/dart/analysis/features.dart';
|
||||
import 'package:analyzer/dart/ast/ast.dart';
|
||||
import 'package:analyzer/dart/ast/language_version.dart';
|
||||
import 'package:analyzer/dart/ast/token.dart' as analyzer;
|
||||
import 'package:analyzer/dart/ast/token.dart' show Token, TokenType;
|
||||
import 'package:analyzer/dart/ast/token.dart'
|
||||
show Token, TokenType, LanguageVersionToken;
|
||||
import 'package:analyzer/error/error.dart';
|
||||
import 'package:analyzer/error/listener.dart' show ErrorReporter;
|
||||
import 'package:analyzer/src/dart/ast/ast.dart';
|
||||
|
@ -1962,9 +1962,7 @@ class FastaParserTestCase
|
|||
|
||||
@override
|
||||
void createParser(String content,
|
||||
{int expectedEndOffset,
|
||||
LanguageVersion languageVersion,
|
||||
FeatureSet featureSet}) {
|
||||
{int expectedEndOffset, FeatureSet featureSet}) {
|
||||
featureSet ??= FeatureSet.forTesting();
|
||||
var result = scanString(content,
|
||||
configuration: featureSet.isEnabled(Feature.non_nullable)
|
||||
|
@ -1972,7 +1970,7 @@ class FastaParserTestCase
|
|||
: ScannerConfiguration.classic,
|
||||
includeComments: true);
|
||||
_fastaTokens = result.tokens;
|
||||
_parserProxy = ParserProxy(_fastaTokens, languageVersion, featureSet,
|
||||
_parserProxy = ParserProxy(_fastaTokens, featureSet,
|
||||
allowNativeClause: allowNativeClause,
|
||||
expectedEndOffset: expectedEndOffset);
|
||||
}
|
||||
|
@ -2083,7 +2081,7 @@ class FastaParserTestCase
|
|||
|
||||
CompilationUnit parseCompilationUnit2(
|
||||
String content, GatheringErrorListener listener,
|
||||
{LanguageVersion languageVersion, FeatureSet featureSet}) {
|
||||
{LanguageVersionToken languageVersion, FeatureSet featureSet}) {
|
||||
featureSet ??= FeatureSet.forTesting();
|
||||
var source = StringSource(content, 'parser_test_StringSource.dart');
|
||||
|
||||
|
@ -2109,8 +2107,8 @@ class FastaParserTestCase
|
|||
isNonNullableByDefault: false,
|
||||
);
|
||||
fasta.Parser parser = fasta.Parser(null);
|
||||
AstBuilder astBuilder = AstBuilder(
|
||||
errorReporter, source.uri, true, languageVersion, featureSet);
|
||||
AstBuilder astBuilder =
|
||||
AstBuilder(errorReporter, source.uri, true, featureSet);
|
||||
parser.listener = astBuilder;
|
||||
astBuilder.parser = parser;
|
||||
astBuilder.allowNativeClause = allowNativeClause;
|
||||
|
@ -3520,8 +3518,7 @@ class ParserProxy extends analyzer.ParserAdapter {
|
|||
* Creates a [ParserProxy] which is prepared to begin parsing at the given
|
||||
* Fasta token.
|
||||
*/
|
||||
factory ParserProxy(analyzer.Token firstToken,
|
||||
LanguageVersion languageVersion, FeatureSet featureSet,
|
||||
factory ParserProxy(analyzer.Token firstToken, FeatureSet featureSet,
|
||||
{bool allowNativeClause = false, int expectedEndOffset}) {
|
||||
TestSource source = TestSource();
|
||||
var errorListener = GatheringErrorListener(checkRanges: true);
|
||||
|
@ -3530,22 +3527,16 @@ class ParserProxy extends analyzer.ParserAdapter {
|
|||
source,
|
||||
isNonNullableByDefault: false,
|
||||
);
|
||||
return ParserProxy._(firstToken, errorReporter, null, errorListener,
|
||||
languageVersion, featureSet,
|
||||
return ParserProxy._(
|
||||
firstToken, errorReporter, null, errorListener, featureSet,
|
||||
allowNativeClause: allowNativeClause,
|
||||
expectedEndOffset: expectedEndOffset);
|
||||
}
|
||||
|
||||
ParserProxy._(
|
||||
analyzer.Token firstToken,
|
||||
ErrorReporter errorReporter,
|
||||
Uri fileUri,
|
||||
this._errorListener,
|
||||
LanguageVersion languageVersion,
|
||||
FeatureSet featureSet,
|
||||
{bool allowNativeClause = false,
|
||||
this.expectedEndOffset})
|
||||
: super(firstToken, errorReporter, fileUri, languageVersion, featureSet,
|
||||
ParserProxy._(analyzer.Token firstToken, ErrorReporter errorReporter,
|
||||
Uri fileUri, this._errorListener, FeatureSet featureSet,
|
||||
{bool allowNativeClause = false, this.expectedEndOffset})
|
||||
: super(firstToken, errorReporter, fileUri, featureSet,
|
||||
allowNativeClause: allowNativeClause) {
|
||||
_eventListener = ForwardingTestListener(astBuilder);
|
||||
fastaParser.listener = _eventListener;
|
||||
|
|
|
@ -9,7 +9,6 @@ import 'package:_fe_analyzer_shared/src/scanner/scanner.dart'
|
|||
show ScannerResult, scanString;
|
||||
import 'package:analyzer/dart/analysis/features.dart';
|
||||
import 'package:analyzer/dart/ast/ast.dart';
|
||||
import 'package:analyzer/dart/ast/language_version.dart';
|
||||
import 'package:analyzer/dart/ast/standard_ast_factory.dart';
|
||||
import 'package:analyzer/dart/ast/token.dart';
|
||||
import 'package:analyzer/dart/ast/visitor.dart';
|
||||
|
@ -115,7 +114,6 @@ abstract class AbstractParserTestCase implements ParserTestHelpers {
|
|||
void createParser(
|
||||
String content, {
|
||||
int expectedEndOffset,
|
||||
LanguageVersion languageVersion,
|
||||
FeatureSet featureSet,
|
||||
});
|
||||
|
||||
|
@ -9476,7 +9474,7 @@ class ParserTestCase with ParserTestHelpers implements AbstractParserTestCase {
|
|||
void createParser(
|
||||
String content, {
|
||||
int expectedEndOffset,
|
||||
LanguageVersion languageVersion,
|
||||
LanguageVersionToken languageVersion,
|
||||
FeatureSet featureSet,
|
||||
}) {
|
||||
Source source = TestSource();
|
||||
|
@ -9488,7 +9486,6 @@ class ParserTestCase with ParserTestHelpers implements AbstractParserTestCase {
|
|||
parser = Parser(
|
||||
source,
|
||||
listener,
|
||||
languageVersion: languageVersion,
|
||||
featureSet: featureSet,
|
||||
);
|
||||
parser.allowNativeClause = allowNativeClause;
|
||||
|
@ -9623,7 +9620,6 @@ class ParserTestCase with ParserTestHelpers implements AbstractParserTestCase {
|
|||
Parser parser = Parser(
|
||||
source,
|
||||
listener,
|
||||
languageVersion: null,
|
||||
featureSet: FeatureSet.forTesting(),
|
||||
);
|
||||
parser.enableOptionalNewAndConst = enableOptionalNewAndConst;
|
||||
|
@ -9652,7 +9648,6 @@ class ParserTestCase with ParserTestHelpers implements AbstractParserTestCase {
|
|||
Parser parser = Parser(
|
||||
source,
|
||||
listener,
|
||||
languageVersion: null,
|
||||
featureSet: FeatureSet.forTesting(),
|
||||
);
|
||||
parser.enableOptionalNewAndConst = enableOptionalNewAndConst;
|
||||
|
@ -9993,7 +9988,6 @@ class ParserTestCase with ParserTestHelpers implements AbstractParserTestCase {
|
|||
Parser parser = Parser(
|
||||
source,
|
||||
listener,
|
||||
languageVersion: null,
|
||||
featureSet: FeatureSet.forTesting(),
|
||||
);
|
||||
parser.enableOptionalNewAndConst = enableOptionalNewAndConst;
|
||||
|
@ -10024,7 +10018,6 @@ class ParserTestCase with ParserTestHelpers implements AbstractParserTestCase {
|
|||
Parser parser = Parser(
|
||||
source,
|
||||
listener,
|
||||
languageVersion: null,
|
||||
featureSet: FeatureSet.forTesting(),
|
||||
);
|
||||
parser.enableOptionalNewAndConst = enableOptionalNewAndConst;
|
||||
|
@ -12425,7 +12418,6 @@ class SimpleParserTest extends ParserTestCase with SimpleParserTestMixin {
|
|||
Parser(
|
||||
NonExistingSource.unknown,
|
||||
null,
|
||||
languageVersion: null,
|
||||
featureSet: FeatureSet.forTesting(),
|
||||
),
|
||||
isNotNull,
|
||||
|
|
|
@ -1187,7 +1187,6 @@ library l;''');
|
|||
Parser parser = Parser(
|
||||
NonExistingSource.unknown,
|
||||
listener,
|
||||
languageVersion: scanner.languageVersion,
|
||||
featureSet: featureSet,
|
||||
);
|
||||
CompilationUnit unit = parser.parseCompilationUnit(token);
|
||||
|
|
|
@ -1620,7 +1620,7 @@ class A{}
|
|||
''');
|
||||
|
||||
var result = await driver.getResult(path);
|
||||
var languageVersion = result.unit.languageVersion;
|
||||
var languageVersion = result.unit.languageVersionToken;
|
||||
expect(languageVersion.major, 2);
|
||||
expect(languageVersion.minor, 7);
|
||||
}
|
||||
|
@ -2208,7 +2208,7 @@ class A {}
|
|||
''');
|
||||
|
||||
var parseResult = driver.parseFileSync(path);
|
||||
var languageVersion = parseResult.unit.languageVersion;
|
||||
var languageVersion = parseResult.unit.languageVersionToken;
|
||||
expect(languageVersion.major, 2);
|
||||
expect(languageVersion.minor, 7);
|
||||
}
|
||||
|
@ -2221,7 +2221,7 @@ class A {}
|
|||
''');
|
||||
|
||||
var parseResult = driver.parseFileSync(path);
|
||||
expect(parseResult.unit.languageVersion, isNull);
|
||||
expect(parseResult.unit.languageVersionToken, isNull);
|
||||
}
|
||||
|
||||
test_parseFileSync_notAbsolutePath() async {
|
||||
|
|
|
@ -14,12 +14,69 @@ import '../../../generated/resolver_test_case.dart';
|
|||
|
||||
main() {
|
||||
defineReflectiveSuite(() {
|
||||
defineReflectiveTests(CompilationUnitImplTest);
|
||||
defineReflectiveTests(ExpressionImplTest);
|
||||
defineReflectiveTests(InstanceCreationExpressionImplTest);
|
||||
defineReflectiveTests(IntegerLiteralImplTest);
|
||||
});
|
||||
}
|
||||
|
||||
@reflectiveTest
|
||||
class CompilationUnitImplTest extends ParserTestCase {
|
||||
String testSource;
|
||||
CompilationUnitImpl testUnit;
|
||||
|
||||
void parse(String source) {
|
||||
testSource = source;
|
||||
testUnit = parseCompilationUnit(source);
|
||||
}
|
||||
|
||||
test_languageVersionComment_none() {
|
||||
parse('''
|
||||
void main() {}
|
||||
''');
|
||||
expect(testUnit.languageVersionToken, null);
|
||||
}
|
||||
|
||||
test_languageVersionComment_none_onlyNormalComment() {
|
||||
parse('''
|
||||
// A normal comment.
|
||||
void main() {}
|
||||
''');
|
||||
expect(testUnit.languageVersionToken, null);
|
||||
}
|
||||
|
||||
test_languageVersionComment_firstComment() {
|
||||
parse('''
|
||||
// @dart=2.6
|
||||
void main() {}
|
||||
''');
|
||||
expect(
|
||||
testUnit.languageVersionToken, testUnit.beginToken.precedingComments);
|
||||
}
|
||||
|
||||
test_languageVersionComment_secondComment() {
|
||||
parse('''
|
||||
// A normal comment.
|
||||
// @dart=2.6
|
||||
void main() {}
|
||||
''');
|
||||
expect(testUnit.languageVersionToken,
|
||||
testUnit.beginToken.precedingComments.next);
|
||||
}
|
||||
|
||||
test_languageVersionComment_thirdComment() {
|
||||
parse('''
|
||||
// A normal comment.
|
||||
// Another normal comment.
|
||||
// @dart=2.6
|
||||
void main() {}
|
||||
''');
|
||||
expect(testUnit.languageVersionToken,
|
||||
testUnit.beginToken.precedingComments.next.next);
|
||||
}
|
||||
}
|
||||
|
||||
@reflectiveTest
|
||||
class ExpressionImplTest extends ParserTestCase {
|
||||
String testSource;
|
||||
|
|
|
@ -37,7 +37,6 @@ class ParseBase with ResourceProviderMixin {
|
|||
var parser = Parser(
|
||||
source,
|
||||
errorListener,
|
||||
languageVersion: scanner.languageVersion,
|
||||
featureSet: featureSet,
|
||||
useFasta: useFasta,
|
||||
);
|
||||
|
|
|
@ -31,7 +31,6 @@ CompilationUnit parseText(
|
|||
Parser parser = Parser(
|
||||
NonExistingSource.unknown,
|
||||
AnalysisErrorListener.NULL_LISTENER,
|
||||
languageVersion: scanner.languageVersion,
|
||||
featureSet: scanner.featureSet,
|
||||
);
|
||||
CompilationUnit unit = parser.parseCompilationUnit(token);
|
||||
|
|
|
@ -86,7 +86,6 @@ CompilationUnit parseDirectives(Source source) {
|
|||
var parser = Parser(
|
||||
source,
|
||||
AnalysisErrorListener.NULL_LISTENER,
|
||||
languageVersion: null,
|
||||
featureSet: FeatureSet.fromEnableFlags([]),
|
||||
);
|
||||
return parser.parseDirectives(token);
|
||||
|
@ -121,7 +120,6 @@ CompilationUnit parseFull(Source source) {
|
|||
var parser = Parser(
|
||||
source,
|
||||
AnalysisErrorListener.NULL_LISTENER,
|
||||
languageVersion: null,
|
||||
featureSet: FeatureSet.fromEnableFlags([]),
|
||||
);
|
||||
return parser.parseCompilationUnit(token);
|
||||
|
|
|
@ -755,10 +755,10 @@ class ScannerTest_Fasta_Direct_UTF8 extends ScannerTest_Fasta_Direct {
|
|||
/// Scanner tests that exercise the Fasta scanner directly.
|
||||
@reflectiveTest
|
||||
class ScannerTest_Fasta_Direct extends ScannerTest_Fasta_Base {
|
||||
LanguageVersionToken languageVersion;
|
||||
fasta.LanguageVersionToken languageVersion;
|
||||
|
||||
void languageVersionChanged(
|
||||
Scanner scanner, LanguageVersionToken languageVersion) {
|
||||
Scanner scanner, fasta.LanguageVersionToken languageVersion) {
|
||||
this.languageVersion = languageVersion;
|
||||
}
|
||||
|
||||
|
@ -972,11 +972,11 @@ main() {}
|
|||
token = token.precedingComments;
|
||||
while (token != null) {
|
||||
if (index == versionIndex) {
|
||||
if (token is! LanguageVersionToken) {
|
||||
if (token is! fasta.LanguageVersionToken) {
|
||||
fail('Expected version comment at index $index');
|
||||
}
|
||||
} else {
|
||||
if (token is LanguageVersionToken) {
|
||||
if (token is fasta.LanguageVersionToken) {
|
||||
fail('Did not expect version comment at index $index');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -218,7 +218,7 @@ parseFull(Uri uri, List<int> source) {
|
|||
// bodies. So this listener is not feature complete.
|
||||
class _PartialAstBuilder extends AstBuilder {
|
||||
_PartialAstBuilder(Uri uri)
|
||||
: super(null, null, true, null, FeatureSet.fromEnableFlags([]), uri);
|
||||
: super(null, null, true, FeatureSet.fromEnableFlags([]), uri);
|
||||
}
|
||||
|
||||
// Invoke the fasta kernel generator for the program starting in [entryUri]
|
||||
|
|
|
@ -103,7 +103,6 @@ CompilationUnit parseDirectives(Source source) {
|
|||
var parser = new Parser(
|
||||
source,
|
||||
AnalysisErrorListener.NULL_LISTENER,
|
||||
languageVersion: null,
|
||||
featureSet: FeatureSet.fromEnableFlags([]),
|
||||
);
|
||||
return parser.parseDirectives(token);
|
||||
|
@ -128,7 +127,6 @@ CompilationUnit parseFull(Source source) {
|
|||
var parser = new Parser(
|
||||
source,
|
||||
AnalysisErrorListener.NULL_LISTENER,
|
||||
languageVersion: null,
|
||||
featureSet: FeatureSet.fromEnableFlags([]),
|
||||
);
|
||||
var unit = parser.parseCompilationUnit(token);
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
import 'package:_fe_analyzer_shared/src/flow_analysis/flow_analysis.dart';
|
||||
import 'package:_fe_analyzer_shared/src/scanner/token_impl.dart';
|
||||
import 'package:analyzer/dart/analysis/features.dart';
|
||||
import 'package:analyzer/dart/ast/ast.dart';
|
||||
import 'package:analyzer/dart/ast/token.dart';
|
||||
|
|
Loading…
Reference in a new issue