dart-sdk/pkg/pkg.dart
Devon Carew 755aabd096 [pkg] switches the default linting for pkg/ packages to dart_flutter_team_lints
Change-Id: I201b984fd8794e04bf6e0131ed4f85192f641ef4
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/335502
Reviewed-by: Nate Bosch <nbosch@google.com>
Commit-Queue: Devon Carew <devoncarew@google.com>
2023-11-11 01:52:16 +00:00

67 lines
1.9 KiB
Dart

// Copyright (c) 2023, 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.
/// List the packages in pkg/ as well information about their
/// analysis_options.yaml configuration.
library;
import 'dart:io';
void main(List<String> args) {
const indent = 29;
var dirs = Directory('pkg').listSync().whereType<Directory>().toList();
dirs.sort((a, b) => a.path.compareTo(b.path));
for (var dir in dirs) {
var pubspec = File('${dir.path}/pubspec.yaml');
if (!pubspec.existsSync()) continue;
var sloc = _calcLines(dir) / 1024.0;
var slocDesc = '(${sloc.toStringAsFixed(1).padLeft(6)}k lines)';
var options = File('${dir.path}/analysis_options.yaml');
var name = dir.path.split('/').last;
var type = 'default';
if (options.existsSync()) {
type = '** custom **';
var optionsContent = options.readAsStringSync();
if (optionsContent.contains('package:lints/core.yaml')) {
type = 'core';
} else if (optionsContent.contains('package:lints/recommended.yaml')) {
type = 'recommended';
} else if (optionsContent
.contains('package:dart_flutter_team_lints/analysis_options.yaml')) {
type = 'dart_flutter_team_lints';
}
}
print('${name.padRight(indent)}: ${type.padRight(23)} $slocDesc');
}
}
int _calcLines(Directory dir) {
var result = 0;
for (var entity in dir.listSync()) {
if (entity.name.startsWith('.')) continue;
if (entity is Directory) {
result += _calcLines(entity);
} else {
if (entity is File && entity.name.endsWith('.dart')) {
result += entity
.readAsLinesSync()
.where((line) => line.trim().isNotEmpty)
.length;
}
}
}
return result;
}
extension FileSystemEntityExtension on FileSystemEntity {
String get name => path.split('/').last;
}