Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(217)

Side by Side Diff: lib/src/line_splitting/solve_state.dart

Issue 1492683002: Change the way hard splits are handled. (Closed) Base URL: https://github.com/dart-lang/dart_style.git@master
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « lib/src/line_splitting/rule_set.dart ('k') | lib/src/line_writer.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library dart_style.src.line_splitting.solve_state; 5 library dart_style.src.line_splitting.solve_state;
6 6
7 import '../debug.dart' as debug; 7 import '../debug.dart' as debug;
8 import '../rule/rule.dart'; 8 import '../rule/rule.dart';
9 import '../whitespace.dart'; 9 import '../whitespace.dart';
10 import 'line_splitter.dart'; 10 import 'line_splitter.dart';
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 /// states may diverge by binding unbound rules or not. 106 /// states may diverge by binding unbound rules or not.
107 Set<Rule> _boundRulesInUnboundLines; 107 Set<Rule> _boundRulesInUnboundLines;
108 108
109 SolveState(this._splitter, this._ruleValues) { 109 SolveState(this._splitter, this._ruleValues) {
110 _calculateSplits(); 110 _calculateSplits();
111 _calculateCost(); 111 _calculateCost();
112 } 112 }
113 113
114 /// Gets the value to use for [rule], either the bound value or 114 /// Gets the value to use for [rule], either the bound value or
115 /// [Rule.unsplit] if it isn't bound. 115 /// [Rule.unsplit] if it isn't bound.
116 int getValue(Rule rule) { 116 int getValue(Rule rule) => _ruleValues.getValue(rule);
117 if (rule is HardSplitRule) return Rule.unsplit;
118
119 return _ruleValues.getValue(rule);
120 }
121 117
122 /// Returns `true` if this state is a better solution to use as the final 118 /// Returns `true` if this state is a better solution to use as the final
123 /// result than [other]. 119 /// result than [other].
124 bool isBetterThan(SolveState other) { 120 bool isBetterThan(SolveState other) {
125 // If this state contains an unbound rule that we know can't be left 121 // If this state contains an unbound rule that we know can't be left
126 // unsplit, we can't pick this as a solution. 122 // unsplit, we can't pick this as a solution.
127 if (!_isComplete) return false; 123 if (!_isComplete) return false;
128 124
129 // Anything is better than nothing. 125 // Anything is better than nothing.
130 if (other == null) return true; 126 if (other == null) return true;
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 426
431 _splits.setCost(cost); 427 _splits.setCost(cost);
432 } 428 }
433 429
434 /// Adds [rule] and all of the rules it constrains to the set of [_liveRules]. 430 /// Adds [rule] and all of the rules it constrains to the set of [_liveRules].
435 /// 431 ///
436 /// Only does this if [rule] is a valid soft rule. Returns `true` if any new 432 /// Only does this if [rule] is a valid soft rule. Returns `true` if any new
437 /// live rules were added. 433 /// live rules were added.
438 bool _addLiveRules(Rule rule) { 434 bool _addLiveRules(Rule rule) {
439 if (rule == null) return false; 435 if (rule == null) return false;
440 if (rule is HardSplitRule) return false;
441 436
442 var added = false; 437 var added = false;
443 for (var constrained in rule.allConstrainedRules) { 438 for (var constrained in rule.allConstrainedRules) {
444 if (_ruleValues.contains(constrained)) continue; 439 if (_ruleValues.contains(constrained)) continue;
445 440
446 _liveRules.add(constrained); 441 _liveRules.add(constrained);
447 added = true; 442 added = true;
448 } 443 }
449 444
450 return added; 445 return added;
(...skipping 14 matching lines...) Expand all
465 460
466 for (var i = 0; i < _splitter.chunks.length - 1; i++) { 461 for (var i = 0; i < _splitter.chunks.length - 1; i++) {
467 if (splits.shouldSplitAt(i)) { 462 if (splits.shouldSplitAt(i)) {
468 if (hasUnbound) _boundRulesInUnboundLines.addAll(boundInLine); 463 if (hasUnbound) _boundRulesInUnboundLines.addAll(boundInLine);
469 464
470 boundInLine.clear(); 465 boundInLine.clear();
471 hasUnbound = false; 466 hasUnbound = false;
472 } 467 }
473 468
474 var rule = _splitter.chunks[i].rule; 469 var rule = _splitter.chunks[i].rule;
475 if (rule != null && rule is! HardSplitRule) { 470 if (rule != null) {
476 if (_ruleValues.contains(rule)) { 471 if (_ruleValues.contains(rule)) {
477 boundInLine.add(rule); 472 boundInLine.add(rule);
478 } else { 473 } else {
479 hasUnbound = true; 474 hasUnbound = true;
480 } 475 }
481 } 476 }
482 } 477 }
483 478
484 if (hasUnbound) _boundRulesInUnboundLines.addAll(boundInLine); 479 if (hasUnbound) _boundRulesInUnboundLines.addAll(boundInLine);
485 } 480 }
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 585
591 buffer.write(" \$${splits.cost}"); 586 buffer.write(" \$${splits.cost}");
592 587
593 if (overflowChars > 0) buffer.write(" (${overflowChars} over)"); 588 if (overflowChars > 0) buffer.write(" (${overflowChars} over)");
594 if (!_isComplete) buffer.write(" (incomplete)"); 589 if (!_isComplete) buffer.write(" (incomplete)");
595 if (splits == null) buffer.write(" invalid"); 590 if (splits == null) buffer.write(" invalid");
596 591
597 return buffer.toString(); 592 return buffer.toString();
598 } 593 }
599 } 594 }
OLDNEW
« no previous file with comments | « lib/src/line_splitting/rule_set.dart ('k') | lib/src/line_writer.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698