Skip to content

Commit

Permalink
ensure console prints go through our shared outSink (#4407)
Browse files Browse the repository at this point in the history
  • Loading branch information
pq authored May 31, 2023
1 parent 91bd1be commit b6c5657
Show file tree
Hide file tree
Showing 20 changed files with 122 additions and 91 deletions.
1 change: 1 addition & 0 deletions analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ linter:
# - avoid_implementing_value_types
# - avoid_js_rounded_ints # under review (see #1068)
- avoid_positional_boolean_parameters
- avoid_print
# - avoid_private_typedef_functions # under review (see #1068)
- avoid_redundant_argument_values
# - avoid_renaming_method_parameters # under review (see #1068)
Expand Down
6 changes: 4 additions & 2 deletions lib/src/util/score_utils.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import 'package:analyzer/src/lint/config.dart'; // ignore: implementation_imports
import 'package:http/http.dart' as http;

import '../utils.dart';

Future<List<String>> _readCoreLints() async => _fetchLints(
'https://raw.githubusercontent.com/dart-lang/lints/main/lib/core.yaml');

Expand Down Expand Up @@ -46,7 +48,7 @@ Future<List<String>> get flutterRules async =>
Future<List<String>> fetchRules(Uri optionsUrl) async {
var config = await _fetchConfig(optionsUrl);
if (config == null) {
print('no config found for: $optionsUrl (SKIPPED)');
printToConsole('no config found for: $optionsUrl (SKIPPED)');
return <String>[];
}
var rules = <String>[];
Expand All @@ -60,7 +62,7 @@ Future<List<String>> fetchRules(Uri optionsUrl) async {
}

Future<LintConfig?> _fetchConfig(Uri url) async {
print('loading $url...');
printToConsole('loading $url...');
var req = await http.get(url);
return processAnalysisOptionsFile(req.body);
}
8 changes: 8 additions & 0 deletions lib/src/utils.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
// 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 'package:analyzer/src/lint/io.dart'; // ignore: implementation_imports

import 'ast.dart';
import 'util/ascii_utils.dart';

Expand Down Expand Up @@ -92,6 +94,12 @@ bool isValidPackageName(String id) =>
isIdentifier(id) &&
!isReservedWord(id);

/// Write the given [object] to the console.
/// Uses the shared [outSink] for redirecting in tests.
void printToConsole(Object? object) {
outSink.writeln(object);
}

class CamelCaseString {
static final _camelCaseMatcher = RegExp(r'[A-Z][a-z]*');

Expand Down
3 changes: 2 additions & 1 deletion test/integration_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import 'package:analyzer/src/lint/state.dart';
import 'package:linter/src/analyzer.dart';
import 'package:linter/src/cli.dart' as cli;
import 'package:linter/src/rules.dart';
import 'package:linter/src/utils.dart';
import 'package:test/test.dart';
import 'package:yaml/yaml.dart';

Expand Down Expand Up @@ -133,7 +134,7 @@ void coreTests() {

for (var l in configuredLints) {
if (!registered.contains(l)) {
print(l);
printToConsole(l);
}
}

Expand Down
3 changes: 2 additions & 1 deletion test/rule_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import 'package:linter/src/rules/implementation_imports.dart';
import 'package:linter/src/rules/package_prefixed_library_names.dart';
import 'package:linter/src/test_utilities/annotation.dart';
import 'package:linter/src/test_utilities/test_resource_provider.dart';
import 'package:linter/src/utils.dart';
import 'package:linter/src/version.dart';
import 'package:path/path.dart' as p;
import 'package:test/test.dart';
Expand Down Expand Up @@ -325,7 +326,7 @@ void _validateExpectedLints(File file, Iterable<AnalysisErrorInfo> errorInfos,
var features = optionsImpl.contextFeatures;

FileSpelunker(file.absolute.path, featureSet: features).spelunk();
print('');
printToConsole('');
// Lints.
ResultReporter(errorInfos).write();
}
Expand Down
9 changes: 5 additions & 4 deletions tool/bot/rule_doc_check.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,23 @@
import 'dart:convert';

import 'package:http/http.dart' as http;
import 'package:linter/src/utils.dart';
import 'package:test/test.dart';

import '../crawl.dart';

void main() async {
print('Getting latest linter package info from pub...');
printToConsole('Getting latest linter package info from pub...');

var packageInfo =
jsonDecode(await getBody('https://pub.dev/api/packages/linter'));
var latestVersion = packageInfo['latest']['pubspec']['version'];
print('Found: $latestVersion.');
printToConsole('Found: $latestVersion.');
if (latestVersion is String) {
var minor = latestVersion.split('.').last;
var latestRules = await fetchRulesForVersion('0.1.$minor');
print('Checking to ensure rules have published docs...');
print('');
printToConsole('Checking to ensure rules have published docs...');
printToConsole('');

group('validate url:', () {
for (var rule in latestRules) {
Expand Down
14 changes: 8 additions & 6 deletions tool/bot/version_check.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,29 @@ import 'dart:convert';
import 'dart:io';

import 'package:http/http.dart' as http;
import 'package:linter/src/utils.dart';

void main() async {
print('Getting latest linter package info from pub...');
printToConsole('Getting latest linter package info from pub...');
var packageInfo =
jsonDecode(await getBody('https://pub.dev/api/packages/linter'));
var latestVersion = packageInfo['latest']['pubspec']['version'];
print('Found: $latestVersion.');
print('Checking for a git release tag corresponding to $latestVersion...');
printToConsole('Found: $latestVersion.');
printToConsole(
'Checking for a git release tag corresponding to $latestVersion...');

var client = http.Client();
var req = await client.get(Uri.parse(
'https://github.com/dart-lang/linter/releases/tag/$latestVersion'));

if (req.statusCode == 404) {
print(
printToConsole(
'No tagged release for $latestVersion found; this will cause problems when included in SDK DEPS.');
print(
printToConsole(
'Be sure a $latestVersion release is tagged in https://github.com/dart-lang/linter/releases and re-run.');
exit(1);
} else {
print('Tag found 👍.');
printToConsole('Tag found 👍.');
}
}

Expand Down
5 changes: 3 additions & 2 deletions tool/canonical/gh_labels.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import 'dart:convert';
import 'package:args/args.dart';
import 'package:github/github.dart';
import 'package:http/http.dart' as http;
import 'package:linter/src/utils.dart';

import '../github.dart';

Expand Down Expand Up @@ -42,7 +43,7 @@ Future<void> main(List<String> args) async {
var sets = rule.value;
for (var set in sets) {
if (!issue.labels.any((label) => label.name.startsWith('set-'))) {
print('${issue.htmlUrl} => set-$set');
printToConsole('${issue.htmlUrl} => set-$set');
}
}
}
Expand All @@ -54,7 +55,7 @@ void printUsage(ArgParser parser, [String? error]) {
var message = error ??
'Query lint rules for containing rule sets and relevant GH issues.';

print('''$message
printToConsole('''$message
Usage: query.dart rule_name
${parser.usage}
''');
Expand Down
5 changes: 3 additions & 2 deletions tool/canonical/scorecard.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import 'package:github/github.dart';
import 'package:http/http.dart' as http;
import 'package:linter/src/analyzer.dart';
import 'package:linter/src/rules.dart';
import 'package:linter/src/utils.dart';

import '../parse.dart';

Expand All @@ -33,7 +34,7 @@ void main() async {
return s1.name.compareTo(s2.name) + base;
}

print(scorecard.asMarkdown(details, sorter: sorter));
printToConsole(scorecard.asMarkdown(details, sorter: sorter));

// var footer = buildFooter(scorecard, details);
// print(footer);
Expand Down Expand Up @@ -458,7 +459,7 @@ class _LintNameCollector extends GeneralizingAstVisitor<void> {
void addLint(String name) {
lintNames.add(name);
if (!registeredLintNames.contains(name)) {
print('WARNING: unrecognized lint in fixes: $name');
printToConsole('WARNING: unrecognized lint in fixes: $name');
}
}
}
12 changes: 7 additions & 5 deletions tool/crawl.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import 'package:http/http.dart' as http;
import 'package:linter/src/analyzer.dart';
import 'package:linter/src/rules.dart';
import 'package:linter/src/util/score_utils.dart' as score_utils;
import 'package:linter/src/utils.dart';
import 'package:pub_semver/pub_semver.dart';
import 'package:yaml/yaml.dart';

Expand Down Expand Up @@ -205,17 +206,18 @@ Future<List<String>> _fetchRepoTags(String org, String repo,
var github = GitHub(auth: auth);
var slug = RepositorySlug(org, repo);

print('list repository tags: $slug');
print('authentication: ${auth != null ? "(token)" : "(anonymous)"}');
printToConsole('list repository tags: $slug');
printToConsole(
'authentication: ${auth != null ? "(token)" : "(anonymous)"}');

var tags = await github.repositories
.listTags(slug)
.map((t) => t.name)
.toList()
.catchError((e) {
print('exception caught fetching $repo tags');
print(e);
print('(using cached $repo values)');
printToConsole('exception caught fetching $repo tags');
printToConsole(e);
printToConsole('(using cached $repo values)');
return Future.value(<String>[]);
});

Expand Down
27 changes: 14 additions & 13 deletions tool/doc.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import 'package:github/github.dart';
import 'package:http/http.dart' as http;
import 'package:linter/src/analyzer.dart';
import 'package:linter/src/rules.dart';
import 'package:linter/src/utils.dart';
import 'package:markdown/markdown.dart';
import 'package:yaml/yaml.dart';

Expand Down Expand Up @@ -129,7 +130,7 @@ Future<void> fetchBadgeInfo() async {

Future<LintConfig?> fetchConfig(String url) async {
var client = http.Client();
print('loading $url...');
printToConsole('loading $url...');
var req = await client.get(Uri.parse(url));
return processAnalysisOptionsFile(req.body);
}
Expand All @@ -139,7 +140,7 @@ Future<Map<String, String>> fetchFixStatusMap() async {
var url =
'https://raw.githubusercontent.com/dart-lang/sdk/main/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml';
var client = http.Client();
print('loading $url...');
printToConsole('loading $url...');
var req = await client.get(Uri.parse(url));
var yaml = loadYamlNode(req.body) as YamlMap;
for (var entry in yaml.entries) {
Expand Down Expand Up @@ -168,7 +169,7 @@ Future<void> generateDocs(String? dir,
}

if (!d.existsSync()) {
print("Directory '${d.path}' does not exist");
printToConsole("Directory '${d.path}' does not exist");
return;
}

Expand Down Expand Up @@ -318,10 +319,10 @@ class HtmlIndexer {
var generated = _generate();
if (filePath != null) {
var outPath = '$filePath/index.html';
print('Writing to $outPath');
printToConsole('Writing to $outPath');
File(outPath).writeAsStringSync(generated);
} else {
print(generated);
printToConsole(generated);
}
}

Expand Down Expand Up @@ -398,10 +399,10 @@ class MachineSummaryGenerator {
fixStatusMap: fixStatusMap, sinceInfo: sinceInfo);
if (filePath != null) {
var outPath = '$filePath/machine/rules.json';
print('Writing to $outPath');
printToConsole('Writing to $outPath');
File(outPath).writeAsStringSync(generated);
} else {
print(generated);
printToConsole(generated);
}
}
}
Expand Down Expand Up @@ -483,7 +484,7 @@ class MarkdownIndexer {
}

if (filePath == null) {
print(buffer);
printToConsole(buffer);
} else {
File('$filePath/index.md').writeAsStringSync(buffer.toString());
}
Expand All @@ -499,10 +500,10 @@ class OptionsSample {
var generated = _generate();
if (filePath != null) {
var outPath = '$filePath/options/options.html';
print('Writing to $outPath');
printToConsole('Writing to $outPath');
File(outPath).writeAsStringSync(generated);
} else {
print(generated);
printToConsole(generated);
}
}

Expand Down Expand Up @@ -669,10 +670,10 @@ class RuleHtmlGenerator extends RuleGenerator {
var generated = _generate();
if (filePath != null) {
var outPath = '$filePath/$name.html';
print('Writing to $outPath');
printToConsole('Writing to $outPath');
File(outPath).writeAsStringSync(generated);
} else {
print(generated);
printToConsole(generated);
}
}

Expand Down Expand Up @@ -788,7 +789,7 @@ class RuleMarkdownGenerator extends RuleGenerator {
buffer.write(usageMarkdown);

if (filePath == null) {
print(buffer);
printToConsole(buffer);
} else {
File('$filePath/$name.md').writeAsStringSync(buffer.toString());
}
Expand Down
5 changes: 3 additions & 2 deletions tool/gh/get_labels.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

import 'package:args/args.dart';
import 'package:github/github.dart';
import 'package:linter/src/utils.dart';

import '../github.dart';

Expand Down Expand Up @@ -39,13 +40,13 @@ Future<void> main(List<String> args) async {
var auth = token is String ? Authentication.withToken(token) : null;
var labels = await getLabels(owner: owner, name: name, auth: auth);
for (var label in labels) {
print(label.name);
printToConsole(label.name);
}
}

void printUsage(ArgParser parser, [String? error]) {
var message = error ?? 'Get labels for a given GitHub repo.';
print('''$message
printToConsole('''$message
Usage: get_labels.dart rule_name
${parser.usage}
''');
Expand Down
Loading

0 comments on commit b6c5657

Please sign in to comment.