remove the use of the analysis server --dartpad command line option
diff --git a/lib/src/analysis_server.dart b/lib/src/analysis_server.dart
index a91ee05..ba2b9b5 100644
--- a/lib/src/analysis_server.dart
+++ b/lib/src/analysis_server.dart
@@ -35,6 +35,7 @@
class DartAnalysisServerWrapper extends AnalysisServerWrapper {
Directory _tempProject;
+
DartAnalysisServerWrapper() : super(SdkManager.sdk.sdkPath);
@override
@@ -116,12 +117,10 @@
}
final serverArgs = <String>[
- '--dartpad',
'--client-id=DartPad',
- '--client-version=$_sdkVersion'
+ '--client-version=$_sdkVersion',
];
- _logger.info(
- 'About to start with server with SDK path `$sdkPath` and args: $serverArgs');
+ _logger.info('Starting server; sdk: `$sdkPath`, args: $serverArgs');
_init = AnalysisServer.create(
onRead: onRead,
@@ -181,10 +180,23 @@
final source = sources[location.sourceName];
final prefix = source.substring(results.replacementOffset, location.offset);
- suggestions = suggestions
- .where(
- (s) => s.completion.toLowerCase().startsWith(prefix.toLowerCase()))
- .toList();
+ suggestions = suggestions.where((suggestion) {
+ return suggestion.completion
+ .toLowerCase()
+ .startsWith(prefix.toLowerCase());
+ }).where((CompletionSuggestion suggestion) {
+ // We do not want to enable arbitrary discovery of file system resources.
+
+ // In order to avoid returning local file paths, we only allow returning
+ // IMPORT kinds that are dart: or package: imports.
+ if (suggestion.kind == 'IMPORT') {
+ final completion = suggestion.completion;
+ return completion.startsWith('dart:') ||
+ completion.startsWith('package:');
+ } else {
+ return true;
+ }
+ }).toList();
suggestions.sort((CompletionSuggestion x, CompletionSuggestion y) {
if (x.relevance == y.relevance) {
diff --git a/test/analysis_server_test.dart b/test/analysis_server_test.dart
index 00560df..4497fee 100644
--- a/test/analysis_server_test.dart
+++ b/test/analysis_server_test.dart
@@ -109,6 +109,25 @@
}
});
+ test('import_dart_core_test', () async {
+ // Ensure we can import dart: imports.
+ final testCode = "import 'dart:c'; main() { int a = 0; a. }";
+
+ final results = await analysisServer.complete(testCode, 14);
+ final completions = results.completions;
+
+ expect(
+ completions.every((completion) =>
+ completion.completion['completion'].startsWith('dart:')),
+ true,
+ );
+ expect(
+ completions.any((completion) =>
+ completion.completion['completion'].startsWith('dart:')),
+ true,
+ );
+ });
+
test('import_and_other_test', () {
final testCode = "import '/'; main() { int a = 0; a. }";