Index: pkg/analysis_server/lib/src/services/completion/uri_contributor.dart |
diff --git a/pkg/analysis_server/lib/src/services/completion/uri_contributor.dart b/pkg/analysis_server/lib/src/services/completion/uri_contributor.dart |
deleted file mode 100644 |
index c6b20d3cf73fb69ed5ab02edd9d2602babdfa81a..0000000000000000000000000000000000000000 |
--- a/pkg/analysis_server/lib/src/services/completion/uri_contributor.dart |
+++ /dev/null |
@@ -1,202 +0,0 @@ |
-// Copyright (c) 2014, 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 services.completion.contributor.dart.importuri; |
- |
-import 'dart:async'; |
-import 'dart:core' hide Resource; |
- |
-import 'package:analysis_server/src/services/completion/dart_completion_manager.dart'; |
-import 'package:analyzer/file_system/file_system.dart'; |
-import 'package:analyzer/src/generated/ast.dart'; |
-import 'package:analyzer/src/generated/sdk.dart'; |
-import 'package:analyzer/src/generated/source.dart'; |
-import 'package:path/path.dart' show posix; |
-import 'package:path/src/context.dart'; |
- |
-import '../../protocol_server.dart' |
- show CompletionSuggestion, CompletionSuggestionKind; |
- |
-/** |
- * A contributor for calculating uri suggestions |
- * for import and part directives. |
- */ |
-class UriContributor extends DartCompletionContributor { |
- _UriSuggestionBuilder builder; |
- |
- @override |
- bool computeFast(DartCompletionRequest request) { |
- builder = new _UriSuggestionBuilder(request); |
- return builder.computeFast(request.target.containingNode); |
- } |
- |
- @override |
- Future<bool> computeFull(DartCompletionRequest request) { |
- return new Future.value(false); |
- } |
-} |
- |
-class _UriSuggestionBuilder extends SimpleAstVisitor { |
- final DartCompletionRequest request; |
- |
- _UriSuggestionBuilder(this.request); |
- |
- bool computeFast(AstNode node) { |
- node.accept(this); |
- return true; |
- } |
- |
- @override |
- visitExportDirective(ExportDirective node) { |
- visitNamespaceDirective(node); |
- } |
- |
- @override |
- visitImportDirective(ImportDirective node) { |
- visitNamespaceDirective(node); |
- } |
- |
- visitNamespaceDirective(NamespaceDirective node) { |
- StringLiteral uri = node.uri; |
- if (uri is SimpleStringLiteral) { |
- int offset = request.offset; |
- if (uri.offset < offset && |
- (offset < uri.end || offset == uri.offset + 1)) { |
- // Handle degenerate case where import or export is only line in file |
- // and there is no semicolon |
- visitSimpleStringLiteral(uri); |
- } |
- } |
- } |
- |
- @override |
- visitSimpleStringLiteral(SimpleStringLiteral node) { |
- AstNode parent = node.parent; |
- if (parent is NamespaceDirective && parent.uri == node) { |
- String partialUri = _extractPartialUri(node); |
- if (partialUri != null) { |
- _addDartSuggestions(); |
- _addPackageSuggestions(partialUri); |
- _addFileSuggestions(partialUri); |
- } |
- } else if (parent is PartDirective && parent.uri == node) { |
- String partialUri = _extractPartialUri(node); |
- if (partialUri != null) { |
- _addFileSuggestions(partialUri); |
- } |
- } |
- } |
- |
- void _addDartSuggestions() { |
- _addSuggestion('dart:'); |
- SourceFactory factory = request.context.sourceFactory; |
- for (SdkLibrary lib in factory.dartSdk.sdkLibraries) { |
- if (!lib.isInternal && !lib.isImplementation) { |
- if (!lib.shortName.startsWith('dart:_')) { |
- _addSuggestion(lib.shortName, |
- relevance: lib.shortName == 'dart:core' |
- ? DART_RELEVANCE_LOW |
- : DART_RELEVANCE_DEFAULT); |
- } |
- } |
- } |
- } |
- |
- void _addFileSuggestions(String partialUri) { |
- ResourceProvider resProvider = request.resourceProvider; |
- Context resContext = resProvider.pathContext; |
- Source source = request.source; |
- |
- String parentUri; |
- if ((partialUri.endsWith('/'))) { |
- parentUri = partialUri; |
- } else { |
- parentUri = posix.dirname(partialUri); |
- if (parentUri != '.' && !parentUri.endsWith('/')) { |
- parentUri = '$parentUri/'; |
- } |
- } |
- String uriPrefix = parentUri == '.' ? '' : parentUri; |
- |
- String dirPath = resContext.normalize(parentUri); |
- if (resContext.isRelative(dirPath)) { |
- String sourceDirPath = resContext.dirname(source.fullName); |
- if (resContext.isAbsolute(sourceDirPath)) { |
- dirPath = resContext.join(sourceDirPath, dirPath); |
- } else { |
- return; |
- } |
- } |
- |
- Resource dir = resProvider.getResource(dirPath); |
- if (dir is Folder) { |
- for (Resource child in dir.getChildren()) { |
- String completion; |
- if (child is Folder) { |
- completion = '$uriPrefix${child.shortName}/'; |
- } else { |
- completion = '$uriPrefix${child.shortName}'; |
- } |
- if (completion != source.shortName) { |
- _addSuggestion(completion); |
- } |
- } |
- } |
- } |
- |
- void _addPackageFolderSuggestions( |
- String partial, String prefix, Folder folder) { |
- for (Resource child in folder.getChildren()) { |
- if (child is Folder) { |
- String childPrefix = '$prefix${child.shortName}/'; |
- _addSuggestion(childPrefix); |
- if (partial.startsWith(childPrefix)) { |
- _addPackageFolderSuggestions(partial, childPrefix, child); |
- } |
- } else { |
- _addSuggestion('$prefix${child.shortName}'); |
- } |
- } |
- } |
- |
- void _addPackageSuggestions(String partial) { |
- SourceFactory factory = request.context.sourceFactory; |
- Map<String, List<Folder>> packageMap = factory.packageMap; |
- if (packageMap != null) { |
- _addSuggestion('package:'); |
- packageMap.forEach((String pkgName, List<Folder> folders) { |
- String prefix = 'package:$pkgName/'; |
- _addSuggestion(prefix); |
- for (Folder folder in folders) { |
- if (folder.exists) { |
- _addPackageFolderSuggestions(partial, prefix, folder); |
- } |
- } |
- }); |
- } |
- } |
- |
- void _addSuggestion(String completion, |
- {int relevance: DART_RELEVANCE_DEFAULT}) { |
- request.addSuggestion(new CompletionSuggestion( |
- CompletionSuggestionKind.IMPORT, |
- relevance, |
- completion, |
- completion.length, |
- 0, |
- false, |
- false)); |
- } |
- |
- String _extractPartialUri(SimpleStringLiteral node) { |
- if (request.offset < node.contentsOffset) { |
- return null; |
- } |
- String partial = node.literal.lexeme.substring( |
- node.contentsOffset - node.offset, request.offset - node.offset); |
- request.replacementOffset = node.contentsOffset; |
- request.replacementLength = node.contentsEnd - node.contentsOffset; |
- return partial; |
- } |
-} |