[analyzer] Sort input for analysis_options signature calculation
This, too, would have fixed the issue fixed in https://dart-review.googlesource.com/c/sdk/+/410700. This CL furthermore means that changing the order of the "analyzer: errors:" entries (or "plugins:" entries) doesn't change the signature. Change-Id: I6439f985260545dfc2c7e0a75b353b5324ef8f88 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/411040 Reviewed-by: Konstantin Shcheglov <scheglov@google.com> Commit-Queue: Jens Johansen <jensj@google.com>
This commit is contained in:
committed by
Commit Queue
parent
3df3d4fab4
commit
7a672b40f4
@@ -20,6 +20,7 @@ import 'package:analyzer/src/lint/registry.dart';
|
||||
import 'package:analyzer/src/summary/api_signature.dart';
|
||||
import 'package:analyzer/src/task/options.dart';
|
||||
import 'package:analyzer/src/util/yaml.dart';
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:pub_semver/pub_semver.dart';
|
||||
import 'package:yaml/yaml.dart';
|
||||
|
||||
@@ -524,25 +525,27 @@ class AnalysisOptionsImpl implements AnalysisOptions {
|
||||
|
||||
// Append error processors.
|
||||
buffer.addInt(errorProcessors.length);
|
||||
for (ErrorProcessor processor in errorProcessors) {
|
||||
for (ErrorProcessor processor
|
||||
in errorProcessors.sortedBy((processor) => processor.description)) {
|
||||
buffer.addString(processor.description);
|
||||
}
|
||||
|
||||
// Append lints.
|
||||
buffer.addInt(lintRules.length);
|
||||
for (var lintRule in lintRules) {
|
||||
for (var lintRule in lintRules.sortedBy((lintRule) => lintRule.name)) {
|
||||
buffer.addString(lintRule.name);
|
||||
}
|
||||
|
||||
// Append legacy plugin names.
|
||||
buffer.addInt(enabledLegacyPluginNames.length);
|
||||
for (var enabledLegacyPluginName in enabledLegacyPluginNames) {
|
||||
for (var enabledLegacyPluginName in enabledLegacyPluginNames.sorted()) {
|
||||
buffer.addString(enabledLegacyPluginName);
|
||||
}
|
||||
|
||||
// Append plugin configurations.
|
||||
buffer.addInt(pluginConfigurations.length);
|
||||
for (var pluginConfiguration in pluginConfigurations) {
|
||||
for (var pluginConfiguration in pluginConfigurations
|
||||
.sortedBy((pluginConfiguration) => pluginConfiguration.name)) {
|
||||
buffer.addString(pluginConfiguration.name);
|
||||
buffer.addBool(pluginConfiguration.isEnabled);
|
||||
buffer.addInt(pluginConfiguration.diagnosticConfigs.length);
|
||||
|
||||
@@ -10,6 +10,8 @@ import 'package:analyzer/src/dart/analysis/analysis_options.dart';
|
||||
import 'package:analyzer/src/error/codes.dart';
|
||||
import 'package:analyzer/src/file_system/file_system.dart';
|
||||
import 'package:analyzer/src/generated/source.dart';
|
||||
import 'package:analyzer/src/lint/registry.dart';
|
||||
import 'package:linter/src/rules.dart';
|
||||
import 'package:test/test.dart';
|
||||
import 'package:test_reflective_loader/test_reflective_loader.dart';
|
||||
|
||||
@@ -417,6 +419,71 @@ code-style:
|
||||
expect(analysisOptions.codeStyleOptions.useFormatter, true);
|
||||
}
|
||||
|
||||
test_signature_on_different_error_ordering() {
|
||||
var options = parseOptions('''
|
||||
analyzer:
|
||||
errors:
|
||||
a: warning
|
||||
b: ignore
|
||||
c: ignore
|
||||
''');
|
||||
var sig1 = options.signature;
|
||||
for (var i = 0; i < 10; i++) {
|
||||
var options2 = parseOptions('''
|
||||
analyzer:
|
||||
errors:
|
||||
b: ignore
|
||||
a: warning
|
||||
c: ignore
|
||||
''');
|
||||
var sig2 = options2.signature;
|
||||
expect(sig1, sig2);
|
||||
}
|
||||
}
|
||||
|
||||
test_signature_on_different_lints_ordering() {
|
||||
registerLintRules();
|
||||
var knownRules = Registry.ruleRegistry.rules
|
||||
.map((rule) => " - ${rule.name}")
|
||||
.toList(growable: false);
|
||||
var options = parseOptions('''
|
||||
linter:
|
||||
rules:
|
||||
${knownRules.reversed.join("\n")}
|
||||
''');
|
||||
var sig1 = options.signature;
|
||||
for (var i = 0; i < 10; i++) {
|
||||
knownRules.shuffle();
|
||||
var options2 = parseOptions('''
|
||||
linter:
|
||||
rules:
|
||||
${knownRules.join("\n")}
|
||||
''');
|
||||
var sig2 = options2.signature;
|
||||
expect(sig1, sig2);
|
||||
}
|
||||
}
|
||||
|
||||
test_signature_on_different_plugin_ordering() {
|
||||
var options = parseOptions('''
|
||||
plugins:
|
||||
plugin_one: ^1.2.3
|
||||
plugin_two: ^1.2.3
|
||||
plugin_three: ^1.2.3
|
||||
''');
|
||||
var sig1 = options.signature;
|
||||
for (var i = 0; i < 10; i++) {
|
||||
var options2 = parseOptions('''
|
||||
plugins:
|
||||
plugin_three: ^1.2.3
|
||||
plugin_one: ^1.2.3
|
||||
plugin_two: ^1.2.3
|
||||
''');
|
||||
var sig2 = options2.signature;
|
||||
expect(sig1, sig2);
|
||||
}
|
||||
}
|
||||
|
||||
test_signature_on_merge() {
|
||||
var sourceFactory = SourceFactory([ResourceUriResolver(resourceProvider)]);
|
||||
var optionsProvider = AnalysisOptionsProvider(sourceFactory);
|
||||
|
||||
Reference in New Issue
Block a user