OLD | NEW |
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 library dart_style.src.line_writer; | 5 library dart_style.src.line_writer; |
6 | 6 |
7 import 'chunk.dart'; | 7 import 'chunk.dart'; |
8 import 'dart_formatter.dart'; | 8 import 'dart_formatter.dart'; |
9 import 'debug.dart' as debug; | 9 import 'debug.dart' as debug; |
10 import 'line_splitter.dart'; | 10 import 'line_splitter.dart'; |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 | 142 |
143 var chunks = _chunks.sublist(start, end); | 143 var chunks = _chunks.sublist(start, end); |
144 | 144 |
145 if (debug.traceLineWriter) { | 145 if (debug.traceLineWriter) { |
146 debug.log(debug.green("\nWriting:")); | 146 debug.log(debug.green("\nWriting:")); |
147 debug.dumpChunks(start, chunks); | 147 debug.dumpChunks(start, chunks); |
148 debug.log(); | 148 debug.log(); |
149 } | 149 } |
150 | 150 |
151 // Run the line splitter. | 151 // Run the line splitter. |
152 var splitter = new LineSplitter(this, chunks, _blockIndentation); | 152 var splitter = new LineSplitter(this, chunks, _blockIndentation, indent, |
153 var solution = splitter.apply(indent, flushLeft: flushLeft); | 153 flushLeft: flushLeft); |
| 154 var splits = splitter.apply(); |
154 | 155 |
155 // Write the indentation of the first line. | 156 // Write the indentation of the first line. |
156 if (!flushLeft) { | 157 if (!flushLeft) { |
157 _buffer.write(" " * (indent + _blockIndentation)); | 158 _buffer.write(" " * (indent + _blockIndentation)); |
158 } | 159 } |
159 | 160 |
160 // Write each chunk with the appropriate splits between them. | 161 // Write each chunk with the appropriate splits between them. |
161 for (var i = 0; i < chunks.length; i++) { | 162 for (var i = 0; i < chunks.length; i++) { |
162 var chunk = chunks[i]; | 163 var chunk = chunks[i]; |
163 _writeChunk(chunk); | 164 _writeChunk(chunk); |
164 | 165 |
165 if (chunk.blockChunks.isNotEmpty) { | 166 if (chunk.blockChunks.isNotEmpty) { |
166 if (!solution.splits.shouldSplitAt(i)) { | 167 if (!splits.shouldSplitAt(i)) { |
167 // This block didn't split (which implies none of the child blocks | 168 // This block didn't split (which implies none of the child blocks |
168 // of that block split either, recursively), so write them all inline. | 169 // of that block split either, recursively), so write them all inline. |
169 _writeChunksUnsplit(chunk.blockChunks); | 170 _writeChunksUnsplit(chunk.blockChunks); |
170 } else { | 171 } else { |
171 // Include the formatted block contents. | 172 // Include the formatted block contents. |
172 var block = formatBlock(chunk, solution.splits.getColumn(i)); | 173 var block = formatBlock(chunk, splits.getColumn(i)); |
173 | 174 |
174 // If this block contains one of the selection markers, tell the | 175 // If this block contains one of the selection markers, tell the |
175 // writer where it ended up in the final output. | 176 // writer where it ended up in the final output. |
176 if (block.selectionStart != null) { | 177 if (block.selectionStart != null) { |
177 _selectionStart = length + block.selectionStart; | 178 _selectionStart = length + block.selectionStart; |
178 } | 179 } |
179 | 180 |
180 if (block.selectionEnd != null) { | 181 if (block.selectionEnd != null) { |
181 _selectionEnd = length + block.selectionEnd; | 182 _selectionEnd = length + block.selectionEnd; |
182 } | 183 } |
183 | 184 |
184 _buffer.write(block.text); | 185 _buffer.write(block.text); |
185 } | 186 } |
186 } | 187 } |
187 | 188 |
188 if (i == chunks.length - 1) { | 189 if (i == chunks.length - 1) { |
189 // Don't write trailing whitespace after the last chunk. | 190 // Don't write trailing whitespace after the last chunk. |
190 } else if (solution.splits.shouldSplitAt(i)) { | 191 } else if (splits.shouldSplitAt(i)) { |
191 _buffer.write(_lineEnding); | 192 _buffer.write(_lineEnding); |
192 if (chunk.isDouble) _buffer.write(_lineEnding); | 193 if (chunk.isDouble) _buffer.write(_lineEnding); |
193 | 194 |
194 _buffer.write(" " * (solution.splits.getColumn(i))); | 195 _buffer.write(" " * (splits.getColumn(i))); |
195 } else { | 196 } else { |
196 if (chunk.spaceWhenUnsplit) _buffer.write(" "); | 197 if (chunk.spaceWhenUnsplit) _buffer.write(" "); |
197 } | 198 } |
198 } | 199 } |
199 | 200 |
200 return solution.cost; | 201 return splits.cost; |
201 } | 202 } |
202 | 203 |
203 /// Writes [chunks] (and any child chunks of them, recursively) without any | 204 /// Writes [chunks] (and any child chunks of them, recursively) without any |
204 /// splitting. | 205 /// splitting. |
205 void _writeChunksUnsplit(List<Chunk> chunks) { | 206 void _writeChunksUnsplit(List<Chunk> chunks) { |
206 for (var chunk in chunks) { | 207 for (var chunk in chunks) { |
207 _writeChunk(chunk); | 208 _writeChunk(chunk); |
208 | 209 |
209 if (chunk.spaceWhenUnsplit) _buffer.write(" "); | 210 if (chunk.spaceWhenUnsplit) _buffer.write(" "); |
210 | 211 |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
267 final int selectionStart; | 268 final int selectionStart; |
268 | 269 |
269 /// Where in the resulting buffer the selection end point should appear if it | 270 /// Where in the resulting buffer the selection end point should appear if it |
270 /// was contained within this split list of chunks. | 271 /// was contained within this split list of chunks. |
271 /// | 272 /// |
272 /// Otherwise, this is `null`. | 273 /// Otherwise, this is `null`. |
273 final int selectionEnd; | 274 final int selectionEnd; |
274 | 275 |
275 FormatResult(this.text, this.cost, this.selectionStart, this.selectionEnd); | 276 FormatResult(this.text, this.cost, this.selectionStart, this.selectionEnd); |
276 } | 277 } |
OLD | NEW |