mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00

Part 2 from https://github.com/flutter/flutter/pull/146085 In preparation to add the lint `missing_code_block_language_in_doc_comment`, added `none` info strings to a bunch of fenced code blocks that have miscellaneous text or output text. Related to issue: https://github.com/dart-lang/linter/issues/4904 ## Pre-launch Checklist - [X] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [X] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [X] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [X] I signed the [CLA]. - [X] I listed at least one issue that this PR fixes in the description above. - [X] I updated/added relevant documentation (doc comments with `///`). - [X] I added new tests to check the change I am making, or this PR is [test-exempt]. - [X] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/wiki/Tree-hygiene#overview [Tree Hygiene]: https://github.com/flutter/flutter/wiki/Tree-hygiene [test-exempt]: https://github.com/flutter/flutter/wiki/Tree-hygiene#tests [Flutter Style Guide]: https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo [Features we expect every widget to implement]: https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/wiki/Chat [Data Driven Fixes]: https://github.com/flutter/flutter/wiki/Data-driven-Fixes
105 lines
5.9 KiB
Dart
105 lines
5.9 KiB
Dart
// Copyright 2014 The Flutter Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// we ignore these so that the format of the strings below matches what package:test prints, to make maintenance easier
|
|
// ignore_for_file: use_raw_strings
|
|
|
|
import 'dart:io';
|
|
|
|
import 'common.dart';
|
|
|
|
const List<String> expectedMainErrors = <String>[
|
|
'dev/bots/test/analyze-snippet-code-test-input/custom_imports_broken.dart:19:11: (statement) (undefined_identifier)',
|
|
'dev/bots/test/analyze-snippet-code-test-input/known_broken_documentation.dart:30:5: (expression) (unnecessary_new)',
|
|
'dev/bots/test/analyze-snippet-code-test-input/known_broken_documentation.dart:103:5: (statement) (always_specify_types)',
|
|
'dev/bots/test/analyze-snippet-code-test-input/known_broken_documentation.dart:111:5: (top-level declaration) (prefer_const_declarations)',
|
|
'dev/bots/test/analyze-snippet-code-test-input/known_broken_documentation.dart:111:19: (top-level declaration) (unnecessary_nullable_for_final_variable_declarations)',
|
|
'dev/bots/test/analyze-snippet-code-test-input/known_broken_documentation.dart:112:5: (top-level declaration) (prefer_const_declarations)',
|
|
'dev/bots/test/analyze-snippet-code-test-input/known_broken_documentation.dart:112:21: (top-level declaration) (invalid_assignment)',
|
|
'dev/bots/test/analyze-snippet-code-test-input/known_broken_documentation.dart:134:14: (top-level declaration) (undefined_identifier)',
|
|
'dev/bots/test/analyze-snippet-code-test-input/known_broken_documentation.dart:136:21: (top-level declaration) (read_potentially_unassigned_final)',
|
|
'dev/bots/test/analyze-snippet-code-test-input/known_broken_documentation.dart:147:12: (self-contained program) (unused_import)',
|
|
'dev/bots/test/analyze-snippet-code-test-input/known_broken_documentation.dart:148:11: (self-contained program) (undefined_class)',
|
|
'dev/bots/test/analyze-snippet-code-test-input/known_broken_documentation.dart:148:22: (self-contained program) (undefined_function)',
|
|
'dev/bots/test/analyze-snippet-code-test-input/known_broken_documentation.dart:153:10: (stateful widget) (annotate_overrides)',
|
|
'dev/bots/test/analyze-snippet-code-test-input/known_broken_documentation.dart:153:10: (stateful widget) (must_call_super)',
|
|
'dev/bots/test/analyze-snippet-code-test-input/known_broken_documentation.dart:161:7: (top-level declaration) (undefined_identifier)',
|
|
'dev/bots/test/analyze-snippet-code-test-input/known_broken_documentation.dart:165: Found "```" in code but it did not match RegExp: pattern=^ */// *```dart\$ flags= so something is wrong. Line was: "/// ```none"',
|
|
'dev/bots/test/analyze-snippet-code-test-input/short_but_still_broken.dart:9:12: (statement) (invalid_assignment)',
|
|
'dev/bots/test/analyze-snippet-code-test-input/short_but_still_broken.dart:18:4: Empty ```dart block in snippet code.',
|
|
];
|
|
|
|
const List<String> expectedUiErrors = <String>[
|
|
'dev/bots/test/analyze-snippet-code-test-dart-ui/ui.dart:14:7: (top-level declaration) (prefer_typing_uninitialized_variables)',
|
|
'dev/bots/test/analyze-snippet-code-test-dart-ui/ui.dart:14:7: (top-level declaration) (inference_failure_on_uninitialized_variable)',
|
|
'dev/bots/test/analyze-snippet-code-test-dart-ui/ui.dart:14:7: (top-level declaration) (missing_const_final_var_or_type)',
|
|
'dev/bots/test/analyze-snippet-code-test-dart-ui/ui.dart:16:20: (top-level declaration) (prefer_final_fields)',
|
|
'dev/bots/test/analyze-snippet-code-test-dart-ui/ui.dart:16:20: (top-level declaration) (unused_field)',
|
|
];
|
|
|
|
final RegExp errorPrefixRE = RegExp(r'^([-a-z0-9/_.:]+): .*(\([-a-z_ ]+\) \([-a-z_ ]+\))$');
|
|
String removeLintDescriptions(String error) {
|
|
final RegExpMatch? match = errorPrefixRE.firstMatch(error);
|
|
if (match != null) {
|
|
return '${match[1]}: ${match[2]}';
|
|
}
|
|
return error;
|
|
}
|
|
|
|
void main() {
|
|
// These tests don't run on Windows because the sample analyzer doesn't
|
|
// support Windows as a platform, since it is only run on Linux in the
|
|
// continuous integration tests.
|
|
if (Platform.isWindows) {
|
|
return;
|
|
}
|
|
|
|
test('analyze_snippet_code smoke test', () {
|
|
final ProcessResult process = Process.runSync(
|
|
'../../bin/cache/dart-sdk/bin/dart',
|
|
<String>[
|
|
'--enable-asserts',
|
|
'analyze_snippet_code.dart',
|
|
'--no-include-dart-ui',
|
|
'test/analyze-snippet-code-test-input',
|
|
],
|
|
);
|
|
expect(process.stdout, isEmpty);
|
|
final List<String> stderrLines = process.stderr.toString().split('\n');
|
|
expect(stderrLines.length, stderrLines.toSet().length, reason: 'found duplicates in $stderrLines');
|
|
final List<String> stderrNoDescriptions = stderrLines.map(removeLintDescriptions).toList();
|
|
expect(stderrNoDescriptions, <String>[
|
|
...expectedMainErrors,
|
|
'Found 18 snippet code errors.',
|
|
'See the documentation at the top of dev/bots/analyze_snippet_code.dart for details.',
|
|
'', // because we end with a newline, split gives us an extra blank line
|
|
]);
|
|
expect(process.exitCode, 1);
|
|
});
|
|
|
|
test('Analyzes dart:ui code', () {
|
|
final ProcessResult process = Process.runSync(
|
|
'../../bin/cache/dart-sdk/bin/dart',
|
|
<String>[
|
|
'--enable-asserts',
|
|
'analyze_snippet_code.dart',
|
|
'--dart-ui-location=test/analyze-snippet-code-test-dart-ui',
|
|
'test/analyze-snippet-code-test-input',
|
|
],
|
|
);
|
|
expect(process.stdout, isEmpty);
|
|
final List<String> stderrLines = process.stderr.toString().split('\n');
|
|
expect(stderrLines.length, stderrLines.toSet().length, reason: 'found duplicates in $stderrLines');
|
|
final List<String> stderrNoDescriptions = stderrLines.map(removeLintDescriptions).toList();
|
|
expect(stderrNoDescriptions, <String>[
|
|
...expectedUiErrors,
|
|
...expectedMainErrors,
|
|
'Found 23 snippet code errors.',
|
|
'See the documentation at the top of dev/bots/analyze_snippet_code.dart for details.',
|
|
'', // because we end with a newline, split gives us an extra blank line
|
|
]);
|
|
expect(process.exitCode, 1);
|
|
});
|
|
}
|