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

Side by Side Diff: dart/site/try/poi/poi.dart

Issue 555483002: Add --simulate-mutation option. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | 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 trydart.poi; 5 library trydart.poi;
6 6
7 import 'dart:async' show 7 import 'dart:async' show
8 Completer, 8 Completer,
9 Future, 9 Future,
10 Stream; 10 Stream;
11 11
12 import 'dart:io' show 12 import 'dart:io' show
13 File,
13 HttpClient, 14 HttpClient,
14 HttpClientRequest, 15 HttpClientRequest,
15 HttpClientResponse, 16 HttpClientResponse,
16 Platform, 17 Platform,
17 stdout; 18 stdout;
18 19
19 import 'dart:io' as io; 20 import 'dart:io' as io;
20 21
21 import 'dart:convert' show 22 import 'dart:convert' show
22 LineSplitter, 23 LineSplitter,
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 PartialClassElement, 63 PartialClassElement,
63 PartialElement, 64 PartialElement,
64 Token; 65 Token;
65 66
66 /// Controls if this program should be querying Dart Mind. Used by tests. 67 /// Controls if this program should be querying Dart Mind. Used by tests.
67 bool enableDartMind = true; 68 bool enableDartMind = true;
68 69
69 /// Iterator over lines from standard input (or the argument array). 70 /// Iterator over lines from standard input (or the argument array).
70 Iterator<String> stdin; 71 Iterator<String> stdin;
71 72
73 bool isSimulateMutationEnabled = false;
74
75 int poiCount;
Johnni Winther 2014/09/09 09:05:52 What is this for? (Add documentation)
76
77 int globalCounter = 0;
78
72 /// Iterator for reading lines from [io.stdin]. 79 /// Iterator for reading lines from [io.stdin].
73 class StdinIterator implements Iterator<String> { 80 class StdinIterator implements Iterator<String> {
74 String current; 81 String current;
75 82
76 bool moveNext() { 83 bool moveNext() {
77 current = io.stdin.readLineSync(); 84 current = io.stdin.readLineSync();
78 return true; 85 return true;
79 } 86 }
80 } 87 }
81 88
82 main(List<String> arguments) { 89 main(List<String> arguments) {
90 poiCount = 0;
91 List<String> nonOptionArguments = [];
92 for (String argument in arguments) {
93 if (argument.startsWith('-')) {
94 switch (argument) {
95 case '--simulate-mutation':
96 isSimulateMutationEnabled = true;
97 break;
98 default:
99 throw 'Unknown option: $argument.';
100 }
101 } else {
102 nonOptionArguments.add(argument);
103 }
104 }
105 if (nonOptionArguments.isEmpty) {
106 stdin = new StdinIterator();
107 } else {
108 stdin = nonOptionArguments.iterator;
109 }
110
83 FormattingDiagnosticHandler handler = new FormattingDiagnosticHandler(); 111 FormattingDiagnosticHandler handler = new FormattingDiagnosticHandler();
84 handler 112 handler
85 ..verbose = false 113 ..verbose = false
86 ..enableColors = true; 114 ..enableColors = true;
87 api.CompilerInputProvider inputProvider = handler.provider; 115 api.CompilerInputProvider inputProvider = handler.provider;
88 116
89 if (arguments.length == 0) {
90 stdin = new StdinIterator();
91 } else {
92 stdin = arguments.where((String line) {
93 print(line); // Simulates user input in terminal.
94 return true;
95 }).iterator;
96 }
97
98 return prompt('Dart file: ').then((String fileName) { 117 return prompt('Dart file: ').then((String fileName) {
118 if (isSimulateMutationEnabled) {
119 inputProvider = simulateMutation(fileName, inputProvider);
120 }
99 return prompt('Position: ').then((String position) { 121 return prompt('Position: ').then((String position) {
100 return parseUserInput(fileName, position, inputProvider, handler); 122 return parseUserInput(fileName, position, inputProvider, handler);
101 }); 123 });
102 }); 124 });
103 } 125 }
104 126
127 api.CompilerInputProvider simulateMutation(
128 String fileName,
129 SourceFileProvider inputProvider) {
130 Uri script = Uri.base.resolveUri(new Uri.file(fileName));
131 int count = poiCount;
132 Future cache;
133 String cachedFileName = script.toFilePath();
134 int counter = ++globalCounter;
135 return (Uri uri) {
136 if (counter != globalCounter) throw 'Using old provider';
137 print('fake inputProvider#$counter($uri): $poiCount $count');
138 if (uri == script) {
139 if (poiCount == count) {
140 cachedFileName = uri.toFilePath();
141 if (count != 0) {
142 cachedFileName = '$cachedFileName.$count.dart';
143 }
144 print('Not using cached version of $cachedFileName');
145 cache = new File(cachedFileName).readAsBytes().then((data) {
146 print('Read file $cachedFileName: ${UTF8.decode(data)}');
147 return data;
148 });
149 count++;
150 } else {
151 print('Using cached version of $cachedFileName');
152 }
153 return cache;
154 } else {
155 print('Using realProvider for $uri');
156 return inputProvider(uri);
157 }
158 };
159 }
160
105 Future<String> prompt(message) { 161 Future<String> prompt(message) {
106 stdout.write(message); 162 if (stdin is StdinIterator) {
163 stdout.write(message);
164 }
107 return stdout.flush().then((_) { 165 return stdout.flush().then((_) {
108 stdin.moveNext(); 166 stdin.moveNext();
109 return stdin.current; 167 return stdin.current;
110 }); 168 });
111 } 169 }
112 170
113 Future queryDartMind(String prefix, String info) { 171 Future queryDartMind(String prefix, String info) {
114 // TODO(lukechurch): Use [info] for something. 172 // TODO(lukechurch): Use [info] for something.
115 if (!enableDartMind) return new Future.value("[]"); 173 if (!enableDartMind) return new Future.value("[]");
116 String encodedArg0 = Uri.encodeComponent('"$prefix"'); 174 String encodedArg0 = Uri.encodeComponent('"$prefix"');
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 inputProvider(script); 210 inputProvider(script);
153 handler( 211 handler(
154 script, position, position + 1, 212 script, position, position + 1,
155 'Point of interest. Cursor is immediately before highlighted character.', 213 'Point of interest. Cursor is immediately before highlighted character.',
156 api.Diagnostic.HINT); 214 api.Diagnostic.HINT);
157 215
158 Stopwatch sw = new Stopwatch()..start(); 216 Stopwatch sw = new Stopwatch()..start();
159 217
160 Future future = runPoi(script, position, inputProvider, handler); 218 Future future = runPoi(script, position, inputProvider, handler);
161 return future.then((Element element) { 219 return future.then((Element element) {
220 poiCount++;
162 print('Resolving took ${sw.elapsedMicroseconds}us.'); 221 print('Resolving took ${sw.elapsedMicroseconds}us.');
163 sw.reset(); 222 sw.reset();
164 String info = scopeInformation(element, position); 223 String info = scopeInformation(element, position);
165 sw.stop(); 224 sw.stop();
166 print(info); 225 print(info);
167 print('Scope information took ${sw.elapsedMicroseconds}us.'); 226 print('Scope information took ${sw.elapsedMicroseconds}us.');
168 sw..reset()..start(); 227 sw..reset()..start();
169 Token token = findToken(element, position); 228 Token token = findToken(element, position);
170 String prefix; 229 String prefix;
171 if (token != null) { 230 if (token != null) {
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after
564 buffer.write('\n'); 623 buffer.write('\n');
565 indented.write('}'); 624 indented.write('}');
566 } 625 }
567 } 626 }
568 627
569 modelx.ScopeX localScope(modelx.LibraryElementX element) => element.localScope; 628 modelx.ScopeX localScope(modelx.LibraryElementX element) => element.localScope;
570 629
571 modelx.ImportScope importScope(modelx.LibraryElementX element) { 630 modelx.ImportScope importScope(modelx.LibraryElementX element) {
572 return element.importScope; 631 return element.importScope;
573 } 632 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698