| Index: pkg/analyzer/lib/src/lint/io.dart
|
| diff --git a/pkg/analyzer/lib/src/lint/io.dart b/pkg/analyzer/lib/src/lint/io.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..762ee93d0b38a12fa025af5fc81c1dfd2292f601
|
| --- /dev/null
|
| +++ b/pkg/analyzer/lib/src/lint/io.dart
|
| @@ -0,0 +1,68 @@
|
| +// Copyright (c) 2015, 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:analyzer/src/lint/util.dart';
|
| +import 'package:glob/glob.dart';
|
| +import 'package:path/path.dart' as p;
|
| +
|
| +final dartMatcher = new Glob('**.dart');
|
| +
|
| +/// Shared IO sink for standard error reporting.
|
| +/// Visible for testing
|
| +IOSink errorSink = stderr;
|
| +
|
| +/// Shared IO sink for standard out reporting.
|
| +/// Visible for testing
|
| +IOSink outSink = stdout;
|
| +
|
| +/// Cached project package.
|
| +String _projectPackageName;
|
| +
|
| +/// Cached project root.
|
| +String _projectRoot;
|
| +
|
| +/// Collect all lintable files, recursively, under this [path] root, ignoring
|
| +/// links.
|
| +Iterable<File> collectFiles(String path) {
|
| + List<File> files = [];
|
| +
|
| + var file = new File(path);
|
| + if (file.existsSync()) {
|
| + files.add(file);
|
| + } else {
|
| + var directory = new Directory(path);
|
| + if (directory.existsSync()) {
|
| + for (var entry
|
| + in directory.listSync(recursive: true, followLinks: false)) {
|
| + var relative = p.relative(entry.path, from: directory.path);
|
| +
|
| + if (isLintable(entry) && !isInHiddenDir(relative)) {
|
| + files.add(entry);
|
| + }
|
| + }
|
| + }
|
| + }
|
| +
|
| + return files;
|
| +}
|
| +
|
| +/// Returns `true` if this [entry] is a Dart file.
|
| +bool isDartFile(FileSystemEntity entry) => isDartFileName(entry.path);
|
| +
|
| +/// Returns `true` if this relative path is a hidden directory.
|
| +bool isInHiddenDir(String relative) =>
|
| + p.split(relative).any((part) => part.startsWith("."));
|
| +
|
| +/// Returns `true` if this relative path is a hidden directory.
|
| +bool isLintable(FileSystemEntity file) =>
|
| + file is File && (isDartFile(file) || isPubspecFile(file));
|
| +
|
| +/// Returns `true` if this [entry] is a pubspec file.
|
| +bool isPubspecFile(FileSystemEntity entry) =>
|
| + isPubspecFileName(p.basename(entry.path));
|
| +
|
| +/// Synchronously read the contents of the file at the given [path] as a string.
|
| +String readFile(String path) => new File(path).readAsStringSync();
|
|
|