Add open files to LSP server/drivers priorityFiles
Change-Id: Ida44f8edb23b5c4080cfd6ba44ee6b4764d9b131
Reviewed-on: https://dart-review.googlesource.com/c/88325
Commit-Queue: Danny Tuppeny <dantup@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_text_document_changes.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_text_document_changes.dart
index c500164..ea42bec 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_text_document_changes.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_text_document_changes.dart
@@ -60,6 +60,7 @@
ErrorOr<void> handle(DidCloseTextDocumentParams params) {
final path = pathOfDoc(params.textDocument);
return path.mapResult((path) {
+ server.removePriorityFile(path);
server.documentVersions[path] = null;
server.updateOverlay(path, null);
return success();
@@ -80,6 +81,7 @@
final doc = params.textDocument;
final path = pathOfDocItem(doc);
return path.mapResult((path) {
+ server.addPriorityFile(path);
// We don't get a VersionedTextDocumentIdentifier with a didOpen but we
// do get the necessary info to create one.
server.documentVersions[path] = new VersionedTextDocumentIdentifier(
diff --git a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
index da14966..245c116a 100644
--- a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
+++ b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
@@ -165,6 +165,14 @@
Future<void> get exited => channel.closed;
+ addPriorityFile(String path) {
+ final didAdd = priorityFiles.add(path);
+ assert(didAdd);
+ if (didAdd) {
+ _updateDriversPriorityFiles();
+ }
+ }
+
/**
* The socket from which messages are being read has been closed.
*/
@@ -282,6 +290,14 @@
));
}
+ removePriorityFile(String path) {
+ final didRemove = priorityFiles.remove(path);
+ assert(didRemove);
+ if (didRemove) {
+ _updateDriversPriorityFiles();
+ }
+ }
+
void sendErrorResponse(Message message, ResponseError error) {
if (message is RequestMessage) {
channel.sendResponse(
@@ -405,6 +421,12 @@
}
driverMap.values.forEach((driver) => driver.changeFile(path));
}
+
+ _updateDriversPriorityFiles() {
+ driverMap.values.forEach((driver) {
+ driver.priorityFiles = priorityFiles.toList();
+ });
+ }
}
class LspServerContextManagerCallbacks extends ContextManagerCallbacks {
diff --git a/pkg/analysis_server/test/lsp/priority_files_test.dart b/pkg/analysis_server/test/lsp/priority_files_test.dart
new file mode 100644
index 0000000..7a7b330
--- /dev/null
+++ b/pkg/analysis_server/test/lsp/priority_files_test.dart
@@ -0,0 +1,38 @@
+// Copyright (c) 2019, 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.
+
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'server_abstract.dart';
+
+main() {
+ defineReflectiveSuite(() {
+ defineReflectiveTests(PriorityFilesTest);
+ });
+}
+
+@reflectiveTest
+class PriorityFilesTest extends AbstractLspAnalysisServerTest {
+ test_close() async {
+ await initialize();
+ await openFile(mainFileUri, '');
+ await closeFile(mainFileUri);
+
+ expect(server.priorityFiles, isNot(contains(mainFilePath)));
+ server.driverMap.values.forEach((driver) {
+ expect(driver.priorityFiles, isNot(contains(mainFilePath)));
+ });
+ }
+
+ test_open() async {
+ await initialize();
+ await openFile(mainFileUri, '');
+
+ expect(server.priorityFiles, contains(mainFilePath));
+ server.driverMap.values.forEach((driver) {
+ expect(driver.priorityFiles, contains(mainFilePath));
+ });
+ }
+}
diff --git a/pkg/analysis_server/test/lsp/test_all.dart b/pkg/analysis_server/test/lsp/test_all.dart
index 7e2b8b6..c9942f1 100644
--- a/pkg/analysis_server/test/lsp/test_all.dart
+++ b/pkg/analysis_server/test/lsp/test_all.dart
@@ -4,6 +4,11 @@
import 'package:test_reflective_loader/test_reflective_loader.dart';
+import '../src/lsp/lsp_packet_transformer_test.dart'
+ as packet_transformer_tests;
+import 'code_actions_assists_test.dart' as assists_code_action_tests;
+import 'code_actions_fixes_test.dart' as fixes_code_action_tests;
+import 'code_actions_source_test.dart' as source_code_action_tests;
import 'completion_test.dart' as completion_test;
import 'definition_test.dart' as definition_test;
import 'diagnostic_test.dart' as diagnostic_test;
@@ -12,14 +17,10 @@
import 'format_test.dart' as format_test;
import 'hover_test.dart' as hover_test;
import 'initialization_test.dart' as initialization_test;
+import 'priority_files_test.dart' as priority_files_test;
import 'references_test.dart' as references_test;
import 'server_test.dart' as server_test;
import 'signature_help_test.dart' as signature_help_test;
-import 'code_actions_source_test.dart' as source_code_action_tests;
-import 'code_actions_fixes_test.dart' as fixes_code_action_tests;
-import 'code_actions_assists_test.dart' as assists_code_action_tests;
-import '../src/lsp/lsp_packet_transformer_test.dart'
- as packet_transformer_tests;
main() {
defineReflectiveSuite(() {
@@ -28,6 +29,7 @@
diagnostic_test.main();
document_symbols_test.main();
file_modification_test.main();
+ priority_files_test.main();
format_test.main();
hover_test.main();
initialization_test.main();