Created
January 14, 2017 18:15
-
-
Save BlackHC/50737dfd7a98f7de1fea9ffd71253723 to your computer and use it in GitHub Desktop.
Determining the code type: expression or statement?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Copyright (c) 2016, Andreas 'blackhc' Kirsch. All rights reserved. Use of | |
// this source code is governed by a BSD-style license that can be found in the | |
// LICENSE file. | |
import 'dart:io'; | |
import 'package:analyzer/dart/ast/ast.dart'; | |
import 'package:analyzer/dart/ast/token.dart'; | |
import 'package:analyzer/error/listener.dart'; | |
import 'package:analyzer/src/dart/scanner/reader.dart'; | |
import 'package:analyzer/src/dart/scanner/scanner.dart'; | |
import 'package:analyzer/src/generated/parser.dart'; | |
bool _tryParse(String code, Function parse) { | |
final reader = new CharSequenceReader(code); | |
final errorListener = new BooleanErrorListener(); | |
final scanner = new Scanner(null, reader, errorListener); | |
final token = scanner.tokenize(); | |
final parser = new Parser(null, errorListener); | |
final node = parse(parser, token) as AstNode; | |
return !errorListener.errorReported && | |
node != null && | |
node.endToken.next.type == TokenType.EOF; | |
} | |
bool isExpression(String code) => _tryParse( | |
code, (Parser parser, Token token) => parser.parseExpression(token)); | |
bool isStatements(String code) => _tryParse(code, (Parser parser, Token token) { | |
final statements = parser.parseStatements(token); | |
if (statements.isEmpty) { | |
return null; | |
} | |
return statements.last; | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment