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

Side by Side Diff: lib/src/formatter_options.dart

Issue 2333373003: Add a command-line option to set the exit code on a formatting change. (Closed)
Patch Set: Created 4 years, 3 months 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/debug.dart ('k') | test/command_line_test.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 library dart_style.src.formatter_options; 5 library dart_style.src.formatter_options;
6 6
7 import 'dart:convert'; 7 import 'dart:convert';
8 import 'dart:io'; 8 import 'dart:io';
9 9
10 import 'source_code.dart'; 10 import 'source_code.dart';
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 } on FileSystemException catch (err) { 122 } on FileSystemException catch (err) {
123 stderr.writeln("Could not overwrite $label: " 123 stderr.writeln("Could not overwrite $label: "
124 "${err.osError.message} (error code ${err.osError.errorCode})"); 124 "${err.osError.message} (error code ${err.osError.errorCode})");
125 } 125 }
126 } else { 126 } else {
127 print("Unchanged $label"); 127 print("Unchanged $label");
128 } 128 }
129 } 129 }
130 } 130 }
131 131
132 /// Base clase for a reporter that decorates an inner reporter.
133 abstract class _ReporterDecorator implements OutputReporter {
134 final OutputReporter _inner;
135
136 _ReporterDecorator(this._inner);
137
138 void showDirectory(String path) {
139 _inner.showDirectory(path);
140 }
141
142 void showSkippedLink(String path) {
143 _inner.showSkippedLink(path);
144 }
145
146 void showHiddenPath(String path) {
147 _inner.showHiddenPath(path);
148 }
149
150 void beforeFile(File file, String label) {
151 _inner.beforeFile(file, label);
152 }
153
154 void afterFile(File file, String label, SourceCode output, {bool changed}) {
155 _inner.afterFile(file, label, output, changed: changed);
156 }
157 }
158
132 /// A decorating reporter that reports how long it took for format each file. 159 /// A decorating reporter that reports how long it took for format each file.
133 class ProfileReporter implements OutputReporter { 160 class ProfileReporter extends _ReporterDecorator {
134 final OutputReporter _inner;
135
136 /// The files that have been started but have not completed yet. 161 /// The files that have been started but have not completed yet.
137 /// 162 ///
138 /// Maps a file label to the time that it started being formatted. 163 /// Maps a file label to the time that it started being formatted.
139 final Map<String, DateTime> _ongoing = {}; 164 final Map<String, DateTime> _ongoing = {};
140 165
141 /// The elapsed time it took to format each completed file. 166 /// The elapsed time it took to format each completed file.
142 final Map<String, Duration> _elapsed = {}; 167 final Map<String, Duration> _elapsed = {};
143 168
144 /// The number of files that completed so fast that they aren't worth 169 /// The number of files that completed so fast that they aren't worth
145 /// tracking. 170 /// tracking.
146 int _elided = 0; 171 int _elided = 0;
147 172
148 ProfileReporter(this._inner); 173 ProfileReporter(OutputReporter inner) : super(inner);
149 174
150 /// Show the times for the slowest files to format. 175 /// Show the times for the slowest files to format.
151 void showProfile() { 176 void showProfile() {
152 // Everything should be done. 177 // Everything should be done.
153 assert(_ongoing.isEmpty); 178 assert(_ongoing.isEmpty);
154 179
155 var files = _elapsed.keys.toList(); 180 var files = _elapsed.keys.toList();
156 files.sort((a, b) => _elapsed[b].compareTo(_elapsed[a])); 181 files.sort((a, b) => _elapsed[b].compareTo(_elapsed[a]));
157 182
158 for (var file in files) { 183 for (var file in files) {
159 print("${_elapsed[file]}: $file"); 184 print("${_elapsed[file]}: $file");
160 } 185 }
161 186
162 if (_elided >= 1) { 187 if (_elided >= 1) {
163 var s = _elided > 1 ? 's' : ''; 188 var s = _elided > 1 ? 's' : '';
164 print("...$_elided more file$s each took less than 10ms."); 189 print("...$_elided more file$s each took less than 10ms.");
165 } 190 }
166 } 191 }
167 192
168 /// Describe the directory whose contents are about to be processed.
169 void showDirectory(String path) {
170 _inner.showDirectory(path);
171 }
172
173 /// Describe the symlink at [path] that wasn't followed.
174 void showSkippedLink(String path) {
175 _inner.showSkippedLink(path);
176 }
177
178 /// Describe the hidden [path] that wasn't processed.
179 void showHiddenPath(String path) {
180 _inner.showHiddenPath(path);
181 }
182
183 /// Called when [file] is about to be formatted. 193 /// Called when [file] is about to be formatted.
184 void beforeFile(File file, String label) { 194 void beforeFile(File file, String label) {
185 _inner.beforeFile(file, label); 195 super.beforeFile(file, label);
186
187 _ongoing[label] = new DateTime.now(); 196 _ongoing[label] = new DateTime.now();
188 } 197 }
189 198
190 /// Describe the processed file at [path] whose formatted result is [output]. 199 /// Describe the processed file at [path] whose formatted result is [output].
191 /// 200 ///
192 /// If the contents of the file are the same as the formatted output, 201 /// If the contents of the file are the same as the formatted output,
193 /// [changed] will be false. 202 /// [changed] will be false.
194 void afterFile(File file, String label, SourceCode output, {bool changed}) { 203 void afterFile(File file, String label, SourceCode output, {bool changed}) {
195 var elapsed = new DateTime.now().difference(_ongoing.remove(label)); 204 var elapsed = new DateTime.now().difference(_ongoing.remove(label));
196 if (elapsed.inMilliseconds >= 10) { 205 if (elapsed.inMilliseconds >= 10) {
197 _elapsed[label] = elapsed; 206 _elapsed[label] = elapsed;
198 } else { 207 } else {
199 _elided++; 208 _elided++;
200 } 209 }
201 210
202 _inner.afterFile(file, label, output, changed: changed); 211 super.afterFile(file, label, output, changed: changed);
203 } 212 }
204 } 213 }
214
215 /// A decorating reporter that sets the exit code to 1 if any changes are made.
216 class SetExitReporter extends _ReporterDecorator {
217 SetExitReporter(OutputReporter inner) : super(inner);
218
219 /// Describe the processed file at [path] whose formatted result is [output].
220 ///
221 /// If the contents of the file are the same as the formatted output,
222 /// [changed] will be false.
223 void afterFile(File file, String label, SourceCode output, {bool changed}) {
224 if (changed) exitCode = 1;
225
226 super.afterFile(file, label, output, changed: changed);
227 }
228 }
OLDNEW
« no previous file with comments | « lib/src/debug.dart ('k') | test/command_line_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698