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

Side by Side Diff: lib/src/debug.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/chunk_builder.dart ('k') | lib/src/line_splitting/line_splitter.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) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 /// Internal debugging utilities. 5 /// Internal debugging utilities.
6 library dart_style.src.debug; 6 library dart_style.src.debug;
7 7
8 import 'dart:math' as math; 8 import 'dart:math' as math;
9 9
10 import 'chunk.dart'; 10 import 'chunk.dart';
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 spans.addAll(chunk.spans); 77 spans.addAll(chunk.spans);
78 78
79 if (chunk.isBlock) addSpans(chunk.block.chunks); 79 if (chunk.isBlock) addSpans(chunk.block.chunks);
80 } 80 }
81 } 81 }
82 82
83 addSpans(chunks); 83 addSpans(chunks);
84 84
85 spans = spans.toList(); 85 spans = spans.toList();
86 86
87 var rules = chunks 87 var rules =
88 .map((chunk) => chunk.rule) 88 chunks.map((chunk) => chunk.rule).where((rule) => rule != null).toSet();
89 .where((rule) => rule != null && rule is! HardSplitRule)
90 .toSet();
91 89
92 var rows = []; 90 var rows = [];
93 91
94 addChunk(List<Chunk> chunks, String prefix, int index) { 92 addChunk(List<Chunk> chunks, String prefix, int index) {
95 var row = []; 93 var row = [];
96 row.add("$prefix$index:"); 94 row.add("$prefix$index:");
97 95
98 var chunk = chunks[index]; 96 var chunk = chunks[index];
99 if (chunk.text.length > 70) { 97 if (chunk.text.length > 70) {
100 row.add(chunk.text.substring(0, 70)); 98 row.add(chunk.text.substring(0, 70));
(...skipping 24 matching lines...) Expand all
125 row.add(callback()); 123 row.add(callback());
126 } else { 124 } else {
127 row.add(""); 125 row.add("");
128 } 126 }
129 } 127 }
130 128
131 if (chunk.rule == null) { 129 if (chunk.rule == null) {
132 row.add(""); 130 row.add("");
133 row.add("(no rule)"); 131 row.add("(no rule)");
134 row.add(""); 132 row.add("");
135 } else if (chunk.isHardSplit) { 133 } else {
136 row.add("");
137 row.add("(hard)");
138 row.add("");
139 } else if (chunk.rule != null) {
140 writeIf(chunk.rule.cost != 0, () => "\$${chunk.rule.cost}"); 134 writeIf(chunk.rule.cost != 0, () => "\$${chunk.rule.cost}");
141 row.add(chunk.rule.toString()); 135
136 var ruleString = chunk.rule.toString();
137 if (chunk.rule.isHardened) ruleString += "!";
138 row.add(ruleString);
142 139
143 var constrainedRules = 140 var constrainedRules =
144 chunk.rule.constrainedRules.toSet().intersection(rules); 141 chunk.rule.constrainedRules.toSet().intersection(rules);
145 writeIf(constrainedRules.isNotEmpty, 142 writeIf(constrainedRules.isNotEmpty,
146 () => "-> ${constrainedRules.join(" ")}"); 143 () => "-> ${constrainedRules.join(" ")}");
147 } 144 }
148 145
149 writeIf(chunk.indent != null && chunk.indent != 0, 146 writeIf(chunk.indent != null && chunk.indent != 0,
150 () => "indent ${chunk.indent}"); 147 () => "indent ${chunk.indent}");
151 148
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 buffer.write(cell); 181 buffer.write(cell);
185 buffer.write(" "); 182 buffer.write(" ");
186 } 183 }
187 184
188 buffer.writeln(); 185 buffer.writeln();
189 } 186 }
190 187
191 print(buffer.toString()); 188 print(buffer.toString());
192 } 189 }
193 190
191 /// Shows all of the constraints between the rules used by [chunks].
192 void dumpConstraints(List<Chunk> chunks) {
193 var rules =
194 chunks.map((chunk) => chunk.rule).where((rule) => rule != null).toSet();
195
196 for (var rule in rules) {
197 var constrainedValues = [];
198 for (var value = 0; value < rule.numValues; value++) {
199 var constraints = [];
200 for (var other in rules) {
201 if (rule == other) continue;
202
203 var constraint = rule.constrain(value, other);
204 if (constraint != null) {
205 constraints.add("$other->$constraint");
206 }
207 }
208
209 if (constraints.isNotEmpty) {
210 constrainedValues.add("$value:(${constraints.join(' ')})");
211 }
212 }
213
214 log("$rule ${constrainedValues.join(' ')}");
215 }
216 }
217
194 /// Convert the line to a [String] representation. 218 /// Convert the line to a [String] representation.
195 /// 219 ///
196 /// It will determine how best to split it into multiple lines of output and 220 /// It will determine how best to split it into multiple lines of output and
197 /// return a single string that may contain one or more newline characters. 221 /// return a single string that may contain one or more newline characters.
198 void dumpLines(List<Chunk> chunks, int firstLineIndent, SplitSet splits) { 222 void dumpLines(List<Chunk> chunks, int firstLineIndent, SplitSet splits) {
199 var buffer = new StringBuffer(); 223 var buffer = new StringBuffer();
200 224
201 writeIndent(indent) => buffer.write(gray("| " * (indent ~/ 2))); 225 writeIndent(indent) => buffer.write(gray("| " * (indent ~/ 2)));
202 226
203 writeChunksUnsplit(List<Chunk> chunks) { 227 writeChunksUnsplit(List<Chunk> chunks) {
(...skipping 22 matching lines...) Expand all
226 250
227 if (chunk.spaceWhenUnsplit) buffer.write(" "); 251 if (chunk.spaceWhenUnsplit) buffer.write(" ");
228 } 252 }
229 } 253 }
230 254
231 buffer.write(chunks.last.text); 255 buffer.write(chunks.last.text);
232 log(buffer); 256 log(buffer);
233 } 257 }
234 258
235 String _color(String ansiEscape) => useAnsiColors ? ansiEscape : ""; 259 String _color(String ansiEscape) => useAnsiColors ? ansiEscape : "";
OLDNEW
« no previous file with comments | « lib/src/chunk_builder.dart ('k') | lib/src/line_splitting/line_splitter.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698