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

Side by Side Diff: pkg/analyzer/lib/src/dart/analysis/driver.dart

Issue 2442993002: API for the new AnalysisDriver. (Closed)
Patch Set: Unsaved changes. Created 4 years, 2 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
OLDNEW
(Empty)
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
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.
4
5 import 'dart:async';
6
7 import 'package:analyzer/dart/ast/ast.dart';
8 import 'package:analyzer/error/error.dart';
9 import 'package:analyzer/file_system/file_system.dart';
10 import 'package:analyzer/src/dart/analysis/byte_store.dart';
11 import 'package:analyzer/src/generated/source.dart';
12
13 /**
14 * This class computes [AnalysisResult]s for Dart files.
15 */
16 class AnalysisDriver {
Brian Wilkerson 2016/10/25 17:24:12 It looks like AnalysisDriver is the replacement fo
scheglov 2016/10/25 18:38:45 It seems so - it produces analysis results, client
17 /**
18 * The byte storage to get and put serialized data.
19 *
20 * It can be shared between other [AnalysisDriver]s.
Paul Berry 2016/10/23 10:39:19 s/between/with/. Also, yay! I like how you've de
scheglov 2016/10/23 20:54:34 Done.
21 */
22 final ByteStore _byteStore;
23
24 /**
25 * The [SourceFactory] is used to resolve URIs to paths and restore URIs
26 * from file paths.
27 */
28 final SourceFactory _sourceFactory;
29
30 /**
31 * This [ContentCache] is consulted for a file content before reading
32 * the content from the file.
33 */
34 final ContentCache _contentCache;
35
36 AnalysisDriver(this._byteStore, this._sourceFactory, this._contentCache);
37
38 /**
39 * Set the list of files that the driver should try to analyze sooner.
40 *
41 * Every path in the list must be absolute and normalized.
42 *
43 * The driver will produce the results through the [results] stream. The
44 * exact order in which results are produced is not defined, neither
45 * between priority files, not between them and not priority files.
Paul Berry 2016/10/23 10:39:19 s/not priority/non-priority/
scheglov 2016/10/23 20:54:34 Done.
46 */
47 void set priorityFiles(List<String> priorityPaths) {
48 // TODO(scheglov) implement
49 }
50
51 /**
52 * Return the [Stream] that produces [AnalysisResult]s for added files.
53 *
54 * Analysis starts when the client starts listening to the stream, and stops
55 * when the client cancels the subscription.
56 *
57 * Analysis is eventual, the driver will try to produce results that are at
58 * some point more consistent with the state of the files, but does not
59 * guarantee that this will ever happen.
Paul Berry 2016/10/23 10:39:19 I think we should make a stronger guarantee than t
scheglov 2016/10/23 20:54:34 Thank you, Paul. I added this comment to the class
60 *
61 * More than one result might be produced for the same file, even if the
62 * client does not change the state of the files.
63 *
64 * Results might be produced even for files that have never been added
65 * using [addFile], for example when [getResult] was called for a file.
66 */
67 Stream<AnalysisResult> get results async* {
68 // TODO(scheglov) implement
69 }
70
71 /**
72 * Add the file with the given [path] to the set of files to analyze.
73 *
74 * The [path] must be absolute and normalized.
75 *
76 * The results of analysis are eventually produced by the [results] stream.
77 */
78 void addFile(String path) {
Brian Wilkerson 2016/10/25 17:24:12 I think we'll want addFiles (plural) for performan
scheglov 2016/10/25 18:38:45 I don't know yet if we need addFiles(). Maybe as a
Brian Wilkerson 2016/10/26 06:54:47 // foo/lib/a.dart import 'file:///c.dart' // foo/
scheglov 2016/10/26 16:45:39 OK, I see. Let's discuss this when we're all in th
79 // TODO(scheglov) implement
80 }
81
82 /**
83 * The file with the given [path] might have changed - updated, added or
84 * removed. Or not, we don't know. Or it might have, but then changed back.
85 *
86 * The [path] must be absolute and normalized.
87 *
88 * The driver might use this information to decide that new analysis results
89 * should be produced, but does not guarantee this, nor for the given file,
90 * nor for any other file.
Paul Berry 2016/10/23 10:39:19 If you take my suggestion above, you could replace
scheglov 2016/10/23 20:54:34 Done.
91 *
92 * Invocation of this method will not prevent a [Future] returned from
93 * [getResult] from completing with a result, and does not guarantee that the
94 * result will reflect the state of the file at the moment before, at or
95 * after the invocation of [changeFile].
96 */
Paul Berry 2016/10/23 10:39:19 Is it ok to pass a path to [changeFile] that is no
scheglov 2016/10/23 20:54:34 Yes, it is OK to notify about implicitly analyzed
97 void changeFile(String path) {
98 // TODO(scheglov) implement
99 }
100
101 /**
102 * Return the [Future] that completes with a [AnalysisResult] for the file
103 * with the given [path].
104 *
105 * The [path] must be absolute and normalized.
Paul Berry 2016/10/23 10:39:19 Is it required that the path is in the set of expl
scheglov 2016/10/23 20:54:34 No, it isn't. The path can be any file - explicitl
106 *
107 * The result is not guaranteed to be produced for the state of the file
108 * which is closest to the moment of the invocation. But if the client
109 * continues invoking this method, eventually one of the invocations will
110 * return a [Future] that completes with the result that is closer to the
111 * state of the files.
Paul Berry 2016/10/23 10:39:19 Can we make a stronger guarantee when the analysis
scheglov 2016/10/23 20:54:34 Done.
112 */
113 Future<AnalysisResult> getResult(String path) {
114 // TODO(scheglov) implement
115 throw new UnimplementedError();
116 }
117
118 /**
119 * Remove the file with the given [path] from the list of files to analyze.
120 *
121 * The [path] must be absolute and normalized.
122 *
123 * The results of analysis of the file might still be produced by the
124 * [results] stream. The driver will try to stop producing these results,
125 * but does not guarantee this.
126 */
127 void removeFile(String path) {
128 // TODO(scheglov) implement
129 }
130 }
Paul Berry 2016/10/23 10:39:19 Additional API that we may need to add in the futu
scheglov 2016/10/23 20:54:34 Thanks, I will add this to the list.
Paul Berry 2016/10/23 21:07:19 Oops, sorry. No difference. I'm not sure what I
131
132 /**
133 * The result of analyzing of a single file.
134 *
135 * These results are self-consistent, i.e. [content], [contentHash], the
136 * resolved [unit] correspond to each other. All referenced elements, even
137 * external ones, are also self-consistent. But none of the results is
138 * guaranteed to be consistent with the state of the files.
139 *
140 * Every result is independent, and is not guaranteed to be consistent with
141 * any previously returned result, even inside of the same library.
142 */
143 class AnalysisResult {
144 /**
145 * The path of the analysed file, absolute and normalized.
146 */
147 final String path;
148
149 /**
150 * The URI of the file that corresponded to the [path] in the used
151 * [SourceFactory] at some point. Is it not guaranteed to be still consistent
152 * to the [path], and provided as FYI.
153 */
154 final Uri uri;
155
156 /**
157 * The content of the file that was scanned, parsed and resolved.
158 */
159 final String content;
160
161 /**
162 * The MD5 hash of the [content].
163 */
164 final String contentHash;
165
166 /**
167 * The fully resolved compilation unit for the [content].
168 */
169 final CompilationUnit unit;
170
171 /**
172 * The full list of computed analysis errors, both syntactic and semantic.
173 */
174 final List<AnalysisError> errors;
175
176 AnalysisResult(this.path, this.uri, this.content, this.contentHash, this.unit,
177 this.errors);
178 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698