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

Side by Side Diff: pkg/analysis_server/lib/src/plugin/server_plugin.dart

Issue 1413643006: Rework analyzed files support to use globs (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 years, 1 month 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
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 analysis_server.src.plugin.server_plugin; 5 library analysis_server.src.plugin.server_plugin;
6 6
7 import 'package:analysis_server/plugin/analysis/analysis_domain.dart'; 7 import 'package:analysis_server/plugin/analysis/analysis_domain.dart';
8 import 'package:analysis_server/plugin/analysis/analyzed_files.dart'; 8 import 'package:analysis_server/plugin/analysis/analyzed_files.dart';
9 import 'package:analysis_server/plugin/analysis/navigation/navigation.dart'; 9 import 'package:analysis_server/plugin/analysis/navigation/navigation.dart';
10 import 'package:analysis_server/plugin/analysis/navigation/navigation_core.dart' ; 10 import 'package:analysis_server/plugin/analysis/navigation/navigation_core.dart' ;
(...skipping 13 matching lines...) Expand all
24 import 'package:analysis_server/src/domain_experimental.dart'; 24 import 'package:analysis_server/src/domain_experimental.dart';
25 import 'package:analysis_server/src/domain_server.dart'; 25 import 'package:analysis_server/src/domain_server.dart';
26 import 'package:analysis_server/src/domains/analysis/navigation_dart.dart'; 26 import 'package:analysis_server/src/domains/analysis/navigation_dart.dart';
27 import 'package:analysis_server/src/domains/analysis/occurrences_dart.dart'; 27 import 'package:analysis_server/src/domains/analysis/occurrences_dart.dart';
28 import 'package:analysis_server/src/edit/edit_domain.dart'; 28 import 'package:analysis_server/src/edit/edit_domain.dart';
29 import 'package:analysis_server/src/provisional/completion/completion_core.dart' ; 29 import 'package:analysis_server/src/provisional/completion/completion_core.dart' ;
30 import 'package:analysis_server/src/search/search_domain.dart'; 30 import 'package:analysis_server/src/search/search_domain.dart';
31 import 'package:analysis_server/src/services/correction/assist_internal.dart'; 31 import 'package:analysis_server/src/services/correction/assist_internal.dart';
32 import 'package:analysis_server/src/services/correction/fix_internal.dart'; 32 import 'package:analysis_server/src/services/correction/fix_internal.dart';
33 import 'package:analysis_server/src/services/index/index_contributor.dart'; 33 import 'package:analysis_server/src/services/index/index_contributor.dart';
34 import 'package:analyzer/file_system/file_system.dart';
35 import 'package:analyzer/src/generated/engine.dart'; 34 import 'package:analyzer/src/generated/engine.dart';
36 import 'package:plugin/plugin.dart'; 35 import 'package:plugin/plugin.dart';
37 36
38 /** 37 /**
39 * A function that will create a request handler that can be used by the given 38 * A function that will create a request handler that can be used by the given
40 * [server]. 39 * [server].
41 */ 40 */
42 typedef RequestHandler RequestHandlerFactory(AnalysisServer server); 41 typedef RequestHandler RequestHandlerFactory(AnalysisServer server);
43 42
44 /** 43 /**
45 * A plugin that defines the extension points and extensions that are inherently 44 * A plugin that defines the extension points and extensions that are inherently
46 * defined by the analysis server. 45 * defined by the analysis server.
47 */ 46 */
48 class ServerPlugin implements Plugin { 47 class ServerPlugin implements Plugin {
49 /** 48 /**
50 * The simple identifier of the extension point that allows plugins to 49 * The simple identifier of the extension point that allows plugins to
51 * register functions that can cause files to be analyzed. 50 * register file patterns that will cause files to be analyzed.
52 */ 51 */
53 static const String ANALYZE_FILE_EXTENSION_POINT = 'analyzeFile'; 52 static const String ANALYZED_FILE_PATTERNS_EXTENSION_POINT =
53 'analyzedFilePatterns';
54 54
55 /** 55 /**
56 * The simple identifier of the extension point that allows plugins to 56 * The simple identifier of the extension point that allows plugins to
57 * register assist contributors. 57 * register assist contributors.
58 */ 58 */
59 static const String ASSIST_CONTRIBUTOR_EXTENSION_POINT = 'assistContributor'; 59 static const String ASSIST_CONTRIBUTOR_EXTENSION_POINT = 'assistContributor';
60 60
61 /** 61 /**
62 * The simple identifier of the extension point that allows plugins to 62 * The simple identifier of the extension point that allows plugins to
63 * register completion contributors. 63 * register completion contributors.
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 * register analysis result listeners. 102 * register analysis result listeners.
103 */ 103 */
104 static const String SET_ANALISYS_DOMAIN_EXTENSION_POINT = 'setAnalysisDomain'; 104 static const String SET_ANALISYS_DOMAIN_EXTENSION_POINT = 'setAnalysisDomain';
105 105
106 /** 106 /**
107 * The unique identifier of this plugin. 107 * The unique identifier of this plugin.
108 */ 108 */
109 static const String UNIQUE_IDENTIFIER = 'analysis_server.core'; 109 static const String UNIQUE_IDENTIFIER = 'analysis_server.core';
110 110
111 /** 111 /**
112 * The extension point that allows plugins to register functions that can 112 * The extension point that allows plugins to register file patterns that will
113 * cause files to be analyzed. 113 * cause files to be analyzed.
114 */ 114 */
115 ExtensionPoint analyzeFileExtensionPoint; 115 ExtensionPoint analyzedFilePatternsExtensionPoint;
116 116
117 /** 117 /**
118 * The extension point that allows plugins to register assist contributors. 118 * The extension point that allows plugins to register assist contributors.
119 */ 119 */
120 ExtensionPoint assistContributorExtensionPoint; 120 ExtensionPoint assistContributorExtensionPoint;
121 121
122 /** 122 /**
123 * The extension point that allows plugins to register completion 123 * The extension point that allows plugins to register completion
124 * contributors. 124 * contributors.
125 */ 125 */
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 * domain. 159 * domain.
160 */ 160 */
161 ExtensionPoint setAnalysisDomainExtensionPoint; 161 ExtensionPoint setAnalysisDomainExtensionPoint;
162 162
163 /** 163 /**
164 * Initialize a newly created plugin. 164 * Initialize a newly created plugin.
165 */ 165 */
166 ServerPlugin(); 166 ServerPlugin();
167 167
168 /** 168 /**
169 * Return a list containing all of the functions that can cause files to be 169 * Return a list containing all of the file patterns that can cause files to
170 * analyzed. 170 * be analyzed.
171 */ 171 */
172 List<ShouldAnalyzeFile> get analyzeFileFunctions => 172 List<String> get analyzedFilePatterns {
173 analyzeFileExtensionPoint.extensions; 173 List<String> patterns = <String>[];
174 for (List<String> extension
175 in analyzedFilePatternsExtensionPoint.extensions) {
176 patterns.addAll(extension);
177 }
178 return patterns;
179 }
174 180
175 /** 181 /**
176 * Return a list containing all of the assist contributors that were 182 * Return a list containing all of the assist contributors that were
177 * contributed. 183 * contributed.
178 */ 184 */
179 List<AssistContributor> get assistContributors => 185 List<AssistContributor> get assistContributors =>
180 assistContributorExtensionPoint.extensions; 186 assistContributorExtensionPoint.extensions;
181 187
182 /** 188 /**
183 * Return a list containing all of the completion contributors that were 189 * Return a list containing all of the completion contributors that were
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 return domainExtensionPoint.extensions 240 return domainExtensionPoint.extensions
235 .map((RequestHandlerFactory factory) => factory(server)) 241 .map((RequestHandlerFactory factory) => factory(server))
236 .toList(); 242 .toList();
237 } 243 }
238 244
239 @override 245 @override
240 void registerExtensionPoints(RegisterExtensionPoint registerExtensionPoint) { 246 void registerExtensionPoints(RegisterExtensionPoint registerExtensionPoint) {
241 setAnalysisDomainExtensionPoint = registerExtensionPoint( 247 setAnalysisDomainExtensionPoint = registerExtensionPoint(
242 SET_ANALISYS_DOMAIN_EXTENSION_POINT, 248 SET_ANALISYS_DOMAIN_EXTENSION_POINT,
243 _validateSetAnalysisDomainFunction); 249 _validateSetAnalysisDomainFunction);
244 analyzeFileExtensionPoint = registerExtensionPoint( 250 analyzedFilePatternsExtensionPoint = registerExtensionPoint(
245 ANALYZE_FILE_EXTENSION_POINT, _validateAnalyzeFileExtension); 251 ANALYZED_FILE_PATTERNS_EXTENSION_POINT,
252 _validateAnalyzedFilePatternsExtension);
246 assistContributorExtensionPoint = registerExtensionPoint( 253 assistContributorExtensionPoint = registerExtensionPoint(
247 ASSIST_CONTRIBUTOR_EXTENSION_POINT, 254 ASSIST_CONTRIBUTOR_EXTENSION_POINT,
248 _validateAssistContributorExtension); 255 _validateAssistContributorExtension);
249 completionContributorExtensionPoint = registerExtensionPoint( 256 completionContributorExtensionPoint = registerExtensionPoint(
250 COMPLETION_CONTRIBUTOR_EXTENSION_POINT, 257 COMPLETION_CONTRIBUTOR_EXTENSION_POINT,
251 _validateCompletionContributorExtension); 258 _validateCompletionContributorExtension);
252 domainExtensionPoint = registerExtensionPoint( 259 domainExtensionPoint = registerExtensionPoint(
253 DOMAIN_EXTENSION_POINT, _validateDomainExtension); 260 DOMAIN_EXTENSION_POINT, _validateDomainExtension);
254 fixContributorExtensionPoint = registerExtensionPoint( 261 fixContributorExtensionPoint = registerExtensionPoint(
255 FIX_CONTRIBUTOR_EXTENSION_POINT, _validateFixContributorExtension); 262 FIX_CONTRIBUTOR_EXTENSION_POINT, _validateFixContributorExtension);
256 indexContributorExtensionPoint = registerExtensionPoint( 263 indexContributorExtensionPoint = registerExtensionPoint(
257 INDEX_CONTRIBUTOR_EXTENSION_POINT, _validateIndexContributorExtension); 264 INDEX_CONTRIBUTOR_EXTENSION_POINT, _validateIndexContributorExtension);
258 navigationContributorExtensionPoint = registerExtensionPoint( 265 navigationContributorExtensionPoint = registerExtensionPoint(
259 NAVIGATION_CONTRIBUTOR_EXTENSION_POINT, 266 NAVIGATION_CONTRIBUTOR_EXTENSION_POINT,
260 _validateNavigationContributorExtension); 267 _validateNavigationContributorExtension);
261 occurrencesContributorExtensionPoint = registerExtensionPoint( 268 occurrencesContributorExtensionPoint = registerExtensionPoint(
262 OCCURRENCES_CONTRIBUTOR_EXTENSION_POINT, 269 OCCURRENCES_CONTRIBUTOR_EXTENSION_POINT,
263 _validateOccurrencesContributorExtension); 270 _validateOccurrencesContributorExtension);
264 } 271 }
265 272
266 @override 273 @override
267 void registerExtensions(RegisterExtension registerExtension) { 274 void registerExtensions(RegisterExtension registerExtension) {
268 // 275 //
269 // Register analyze file functions. 276 // Register analyzed file patterns.
270 // 277 //
271 registerExtension( 278 List<String> patterns = <String>[];
272 ANALYZE_FILE_EXTENSION_POINT_ID, 279 for (String extension in [
273 (File file) => AnalysisEngine.isDartFileName(file.path) || 280 AnalysisEngine.SUFFIX_DART,
274 AnalysisEngine.isHtmlFileName(file.path) || 281 AnalysisEngine.SUFFIX_HTML,
275 AnalysisEngine.isAnalysisOptionsFileName(file.path)); 282 AnalysisEngine.SUFFIX_HTM
283 ]) {
284 patterns.add('**/*.$extension');
285 patterns.add('/**/*.$extension');
scheglov 2015/11/02 16:27:49 Do we need two globs? Wouldn't just one "/**/.*$ex
Brian Wilkerson 2015/11/02 16:54:38 Yes, I forgot that we always have an absolute path
286 }
287 patterns.add('**/${AnalysisEngine.ANALYSIS_OPTIONS_FILE}');
288 patterns.add('/**/${AnalysisEngine.ANALYSIS_OPTIONS_FILE}');
289 registerExtension(ANALYZED_FILE_PATTERNS_EXTENSION_POINT_ID, patterns);
276 // 290 //
277 // Register assist contributors. 291 // Register assist contributors.
278 // 292 //
279 registerExtension( 293 registerExtension(
280 ASSIST_CONTRIBUTOR_EXTENSION_POINT_ID, new DefaultAssistContributor()); 294 ASSIST_CONTRIBUTOR_EXTENSION_POINT_ID, new DefaultAssistContributor());
281 // 295 //
282 // Register completion contributors. 296 // Register completion contributors.
283 // 297 //
284 // TODO(brianwilkerson) Register the completion contributors. 298 // TODO(brianwilkerson) Register the completion contributors.
285 // registerExtension(COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID, ???); 299 // registerExtension(COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID, ???);
(...skipping 25 matching lines...) Expand all
311 // 325 //
312 // Register fix contributors. 326 // Register fix contributors.
313 // 327 //
314 registerExtension( 328 registerExtension(
315 FIX_CONTRIBUTOR_EXTENSION_POINT_ID, new DefaultFixContributor()); 329 FIX_CONTRIBUTOR_EXTENSION_POINT_ID, new DefaultFixContributor());
316 // 330 //
317 // Register index contributors. 331 // Register index contributors.
318 // 332 //
319 registerExtension( 333 registerExtension(
320 INDEX_CONTRIBUTOR_EXTENSION_POINT_ID, new DartIndexContributor()); 334 INDEX_CONTRIBUTOR_EXTENSION_POINT_ID, new DartIndexContributor());
335 }
321 336
337 /**
338 * Return `true` if the list being used as an [extension] contains any
339 * elements that are not strings.
340 */
341 bool _containsNonString(List extension) {
342 for (Object element in extension) {
343 if (element is! String) {
344 return true;
345 }
346 }
347 return false;
322 } 348 }
323 349
324 /** 350 /**
325 * Validate the given extension by throwing an [ExtensionError] if it is not a 351 * Validate the given extension by throwing an [ExtensionError] if it is not a
326 * valid assist contributor. 352 * valid list of analyzed file patterns.
327 */ 353 */
328 void _validateAnalyzeFileExtension(Object extension) { 354 void _validateAnalyzedFilePatternsExtension(Object extension) {
329 if (extension is! ShouldAnalyzeFile) { 355 if (extension is! List || _containsNonString(extension)) {
330 String id = analyzeFileExtensionPoint.uniqueIdentifier; 356 String id = analyzedFilePatternsExtensionPoint.uniqueIdentifier;
331 throw new ExtensionError( 357 throw new ExtensionError('Extensions to $id must be a List of Strings');
332 'Extensions to $id must be a ShouldAnalyzeFile function');
333 } 358 }
334 } 359 }
335 360
336 /** 361 /**
337 * Validate the given extension by throwing an [ExtensionError] if it is not a 362 * Validate the given extension by throwing an [ExtensionError] if it is not a
338 * valid assist contributor. 363 * valid assist contributor.
339 */ 364 */
340 void _validateAssistContributorExtension(Object extension) { 365 void _validateAssistContributorExtension(Object extension) {
341 if (extension is! AssistContributor) { 366 if (extension is! AssistContributor) {
342 String id = assistContributorExtensionPoint.uniqueIdentifier; 367 String id = assistContributorExtensionPoint.uniqueIdentifier;
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 * valid analysis domain receiver. 445 * valid analysis domain receiver.
421 */ 446 */
422 void _validateSetAnalysisDomainFunction(Object extension) { 447 void _validateSetAnalysisDomainFunction(Object extension) {
423 if (extension is! SetAnalysisDomain) { 448 if (extension is! SetAnalysisDomain) {
424 String id = setAnalysisDomainExtensionPoint.uniqueIdentifier; 449 String id = setAnalysisDomainExtensionPoint.uniqueIdentifier;
425 throw new ExtensionError( 450 throw new ExtensionError(
426 'Extensions to $id must be a SetAnalysisDomain function'); 451 'Extensions to $id must be a SetAnalysisDomain function');
427 } 452 }
428 } 453 }
429 } 454 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698