| // Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file |
| // for details. 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:args/args.dart'; |
| |
| import 'completion_runner.dart'; |
| |
| /** |
| * The main entry point for the code completion stress test. |
| */ |
| void main(List<String> args) async { |
| ArgParser parser = createArgParser(); |
| ArgResults result = parser.parse(args); |
| |
| if (validArguments(parser, result)) { |
| String analysisRoot = result.rest[0]; |
| |
| CompletionRunner runner = new CompletionRunner( |
| output: stdout, |
| printMissing: result['missing'], |
| printQuality: result['quality'], |
| timing: result['timing'], |
| verbose: result['verbose']); |
| await runner.runAll(analysisRoot); |
| await stdout.flush(); |
| } |
| } |
| |
| /** |
| * Create a parser that can be used to parse the command-line arguments. |
| */ |
| ArgParser createArgParser() { |
| ArgParser parser = new ArgParser(); |
| parser.addFlag( |
| 'help', |
| abbr: 'h', |
| help: 'Print this help message', |
| negatable: false, |
| ); |
| parser.addFlag( |
| 'missing', |
| help: 'Report locations where the current identifier was not suggested', |
| negatable: false, |
| ); |
| parser.addFlag( |
| 'quality', |
| help: 'Report on the quality of the sort order', |
| negatable: false, |
| ); |
| parser.addFlag( |
| 'timing', |
| help: 'Report timing information', |
| negatable: false, |
| ); |
| parser.addFlag( |
| 'verbose', |
| abbr: 'v', |
| help: 'Produce verbose output', |
| negatable: false, |
| ); |
| return parser; |
| } |
| |
| /** |
| * Print usage information for this tool. |
| */ |
| void printUsage(ArgParser parser, {String error}) { |
| if (error != null) { |
| print(error); |
| print(''); |
| } |
| print('usage: dart completion path'); |
| print(''); |
| print('Test the completion engine by requesting completion at the offset of'); |
| print('each identifier in the files contained in the given path. The path'); |
| print('can be either a single Dart file or a directory.'); |
| print(''); |
| print(parser.usage); |
| } |
| |
| /** |
| * Return `true` if the command-line arguments (represented by the [result] and |
| * parsed by the [parser]) are valid. |
| */ |
| bool validArguments(ArgParser parser, ArgResults result) { |
| if (result.wasParsed('help')) { |
| printUsage(parser); |
| return false; |
| } else if (result.rest.length < 1) { |
| printUsage(parser, error: 'Missing path to files'); |
| return false; |
| } else if (result.rest.length > 1) { |
| printUsage(parser, error: 'Only one file can be analyzed'); |
| return false; |
| } |
| return true; |
| } |