Skip to content

Commit 7a672b4

Browse files
jensjohaCommit Queue
authored andcommitted
[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 <[email protected]> Commit-Queue: Jens Johansen <[email protected]>
1 parent 3df3d4f commit 7a672b4

File tree

2 files changed

+74
-4
lines changed

2 files changed

+74
-4
lines changed

pkg/analyzer/lib/src/dart/analysis/analysis_options.dart

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import 'package:analyzer/src/lint/registry.dart';
2020
import 'package:analyzer/src/summary/api_signature.dart';
2121
import 'package:analyzer/src/task/options.dart';
2222
import 'package:analyzer/src/util/yaml.dart';
23+
import 'package:collection/collection.dart';
2324
import 'package:pub_semver/pub_semver.dart';
2425
import 'package:yaml/yaml.dart';
2526

@@ -524,25 +525,27 @@ class AnalysisOptionsImpl implements AnalysisOptions {
524525

525526
// Append error processors.
526527
buffer.addInt(errorProcessors.length);
527-
for (ErrorProcessor processor in errorProcessors) {
528+
for (ErrorProcessor processor
529+
in errorProcessors.sortedBy((processor) => processor.description)) {
528530
buffer.addString(processor.description);
529531
}
530532

531533
// Append lints.
532534
buffer.addInt(lintRules.length);
533-
for (var lintRule in lintRules) {
535+
for (var lintRule in lintRules.sortedBy((lintRule) => lintRule.name)) {
534536
buffer.addString(lintRule.name);
535537
}
536538

537539
// Append legacy plugin names.
538540
buffer.addInt(enabledLegacyPluginNames.length);
539-
for (var enabledLegacyPluginName in enabledLegacyPluginNames) {
541+
for (var enabledLegacyPluginName in enabledLegacyPluginNames.sorted()) {
540542
buffer.addString(enabledLegacyPluginName);
541543
}
542544

543545
// Append plugin configurations.
544546
buffer.addInt(pluginConfigurations.length);
545-
for (var pluginConfiguration in pluginConfigurations) {
547+
for (var pluginConfiguration in pluginConfigurations
548+
.sortedBy((pluginConfiguration) => pluginConfiguration.name)) {
546549
buffer.addString(pluginConfiguration.name);
547550
buffer.addBool(pluginConfiguration.isEnabled);
548551
buffer.addInt(pluginConfiguration.diagnosticConfigs.length);

pkg/analyzer/test/src/options/analysis_options_test.dart

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import 'package:analyzer/src/dart/analysis/analysis_options.dart';
1010
import 'package:analyzer/src/error/codes.dart';
1111
import 'package:analyzer/src/file_system/file_system.dart';
1212
import 'package:analyzer/src/generated/source.dart';
13+
import 'package:analyzer/src/lint/registry.dart';
14+
import 'package:linter/src/rules.dart';
1315
import 'package:test/test.dart';
1416
import 'package:test_reflective_loader/test_reflective_loader.dart';
1517

@@ -417,6 +419,71 @@ code-style:
417419
expect(analysisOptions.codeStyleOptions.useFormatter, true);
418420
}
419421

422+
test_signature_on_different_error_ordering() {
423+
var options = parseOptions('''
424+
analyzer:
425+
errors:
426+
a: warning
427+
b: ignore
428+
c: ignore
429+
''');
430+
var sig1 = options.signature;
431+
for (var i = 0; i < 10; i++) {
432+
var options2 = parseOptions('''
433+
analyzer:
434+
errors:
435+
b: ignore
436+
a: warning
437+
c: ignore
438+
''');
439+
var sig2 = options2.signature;
440+
expect(sig1, sig2);
441+
}
442+
}
443+
444+
test_signature_on_different_lints_ordering() {
445+
registerLintRules();
446+
var knownRules = Registry.ruleRegistry.rules
447+
.map((rule) => " - ${rule.name}")
448+
.toList(growable: false);
449+
var options = parseOptions('''
450+
linter:
451+
rules:
452+
${knownRules.reversed.join("\n")}
453+
''');
454+
var sig1 = options.signature;
455+
for (var i = 0; i < 10; i++) {
456+
knownRules.shuffle();
457+
var options2 = parseOptions('''
458+
linter:
459+
rules:
460+
${knownRules.join("\n")}
461+
''');
462+
var sig2 = options2.signature;
463+
expect(sig1, sig2);
464+
}
465+
}
466+
467+
test_signature_on_different_plugin_ordering() {
468+
var options = parseOptions('''
469+
plugins:
470+
plugin_one: ^1.2.3
471+
plugin_two: ^1.2.3
472+
plugin_three: ^1.2.3
473+
''');
474+
var sig1 = options.signature;
475+
for (var i = 0; i < 10; i++) {
476+
var options2 = parseOptions('''
477+
plugins:
478+
plugin_three: ^1.2.3
479+
plugin_one: ^1.2.3
480+
plugin_two: ^1.2.3
481+
''');
482+
var sig2 = options2.signature;
483+
expect(sig1, sig2);
484+
}
485+
}
486+
420487
test_signature_on_merge() {
421488
var sourceFactory = SourceFactory([ResourceUriResolver(resourceProvider)]);
422489
var optionsProvider = AnalysisOptionsProvider(sourceFactory);

0 commit comments

Comments
 (0)