| // 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' show File, Platform; |
| |
| import 'package:analysis_server_client/protocol.dart'; |
| import 'package:path/path.dart' as path; |
| |
| /// Read pubspec.yaml and return the version in that file. |
| String get pubspecVersion { |
| String dir = path.dirname(Platform.script.toFilePath()); |
| File pubspec = new File(path.join(dir, '..', 'pubspec.yaml')); |
| |
| List<String> lines = pubspec.readAsLinesSync(); |
| if (lines[0] != 'name: dartfix') { |
| throw 'Expected dartfix pubspec in: ${pubspec.path}'; |
| } |
| String version; |
| if (lines[1].startsWith('version:')) { |
| version = lines[1].substring(8).trim(); |
| } |
| if (version == null || version.isEmpty) { |
| throw 'Failed to find dartfix pubspec version in ${pubspec.path}'; |
| } |
| return version; |
| } |
| |
| int compareSuggestions(DartFixSuggestion s1, DartFixSuggestion s2) { |
| int result = s1.description.compareTo(s2.description); |
| if (result != 0) { |
| return result; |
| } |
| return (s2.location?.offset ?? 0) - (s1.location?.offset ?? 0); |
| } |
| |
| /// Return the analysis_server executable by proceeding upward |
| /// until finding the Dart SDK repository root then returning |
| /// the analysis_server executable within the repository. |
| /// Return `null` if it cannot be found. |
| String findServerPath() { |
| String pathname = Platform.script.toFilePath(); |
| while (true) { |
| String parent = path.dirname(pathname); |
| if (parent.length >= pathname.length) { |
| return null; |
| } |
| String serverPath = |
| path.join(parent, 'pkg', 'analysis_server', 'bin', 'server.dart'); |
| if (new File(serverPath).existsSync()) { |
| return serverPath; |
| } |
| pathname = parent; |
| } |
| } |
| |
| bool shouldShowError(AnalysisError error) { |
| // Only show diagnostics that will affect the fixes. |
| return error.type.name != 'HINT' && |
| error.type.name != 'LINT' && |
| error.type.name != 'TODO' && |
| // TODO(danrubel): Rather than checking the error.code with |
| // specific strings, add something to the error indicating that |
| // it will be automatically fixed by edit.dartfix. |
| error.code != 'wrong_number_of_type_arguments_constructor'; |
| } |
| |
| String toSentenceFragment(String message) { |
| return message.endsWith('.') |
| ? message.substring(0, message.length - 1) |
| : message; |
| } |