blob: 2b73a30da3202ad71d6098f3f15b2402bff9ab1f [file] [log] [blame]
// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
library analysis_server.src.provisional.completion.dart.plugin;
import 'package:analysis_server/src/provisional/completion/completion.dart';
import 'package:analysis_server/src/provisional/completion/dart/completion.dart';
import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
import 'package:analysis_server/src/services/completion/dart/arglist_contributor.dart';
import 'package:analysis_server/src/services/completion/dart/combinator_contributor.dart';
import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
import 'package:analysis_server/src/services/completion/dart/keyword_contributor.dart';
import 'package:analysis_server/src/services/completion/dart/uri_contributor.dart';
import 'package:plugin/plugin.dart';
/**
* The shared dart completion plugin instance.
*/
final DartCompletionPlugin dartCompletionPlugin = new DartCompletionPlugin();
class DartCompletionPlugin implements Plugin {
/**
* The simple identifier of the extension point that allows plugins to
* register Dart specific completion contributor factories.
* Use [DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID]
* when registering contributors.
*/
static const String CONTRIBUTOR_EXTENSION_POINT = 'contributor';
/**
* The unique identifier of this plugin.
*/
static const String UNIQUE_IDENTIFIER = 'dart.completion';
/**
* The extension point that allows plugins to register Dart specific
* completion contributor factories.
*/
ExtensionPoint _contributorExtensionPoint;
@override
String get uniqueIdentifier => UNIQUE_IDENTIFIER;
/**
* Return a list containing all of the Dart specific completion contributors.
*/
Iterable<DartCompletionContributorFactory> get contributors =>
_contributorExtensionPoint.extensions
.map((DartCompletionContributorFactory factory) => factory());
@override
void registerExtensionPoints(RegisterExtensionPoint registerExtensionPoint) {
_contributorExtensionPoint = registerExtensionPoint(
CONTRIBUTOR_EXTENSION_POINT,
_validateDartCompletionContributorExtension);
}
@override
void registerExtensions(RegisterExtension registerExtension) {
//
// Register DartCompletionManager as a CompletionContributor
// which delegates to all the DartCompletionContributors
//
registerExtension(COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID,
() => new DartCompletionManager());
//
// Register the default DartCompletionContributors
//
registerExtension(DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID,
() => new ArgListContributor());
registerExtension(DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID,
() => new CombinatorContributor());
registerExtension(DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID,
() => new KeywordContributor());
registerExtension(DART_COMPLETION_CONTRIBUTOR_EXTENSION_POINT_ID,
() => new UriContributor());
}
/**
* Validate the given extension by throwing an [ExtensionError] if it is not a
* valid Dart specific completion contributor.
*/
void _validateDartCompletionContributorExtension(Object extension) {
if (extension is! DartCompletionContributorFactory) {
String id = _contributorExtensionPoint.uniqueIdentifier;
throw new ExtensionError(
'Extensions to $id must be a DartCompletionContributorFactory');
}
}
}