Commit Graph

19 Commits

Author SHA1 Message Date
Danny Tuppeny 4f0dc3bfd9 [analysis_server] Ensure textDocument/didClose removes overlays synchronously to avoid races when files are closed/opened quickly
Plugin re-registration could cause VS Code to send us a close/open request very close together and this `await` before removing the overlay could result in them being processed in the wrong order. This resulted in subsequent file updates failing with "Unable to edit document because the file was not previously opened"

Fixes https://github.com/Dart-Code/Dart-Code/issues/4862
See also https://github.com/Dart-Code/Dart-Code/issues/4740

Change-Id: If6beeebdd79914e1b26553b81f4fb38f000cbaf7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/338660
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Samuel Rawlins <srawlins@google.com>
2023-11-28 17:52:57 +00:00
Danny Tuppeny 2aa6fa772b [analysis_server] Don't send redundant empty LSP diagnostics
We never need to send empty diagnostics to the client unless we have previously sent a non-empty set. These empty diagnostics account for a large amount of traffic during initial analysis and also could be quite large when modifying files with dependencies.

See https://github.com/dart-lang/sdk/issues/53501

Change-Id: I3d0e2ea2633469da905c8ca328dcc89e38a64edc
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/337582
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2023-11-21 20:05:04 +00:00
Danny Tuppeny cfcd74e72c [analysis_server] Remove some boilerplate from LSP tests
No functional changes, just some refactoring extracted from another change to simplify reviewing.

This just:

- adds an `initialAnalysis` getter for tests since it's very common to wait for
- adds a `diagnostics` map that tracks the current state of diagnostics in a test (to avoid tests setting up their own tracking)
- removes some duplicating code for sending diagnostics by having NotificationManager call LspAnalysisServer to send them
- removes unnecessary experiment flags from LSP tests

Change-Id: I1811f393a6d3446550f9007ede926f9ca4556563
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/337580
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2023-11-21 19:02:16 +00:00
Danny Tuppeny ccbc3d95dc [analysis_server] Add additional tests for file delete/create with overlays
Change-Id: Iec6a158f394611a84bce6e4bf107039fbf82241e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/325340
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2023-09-11 18:26:15 +00:00
Danny Tuppeny f2eee8bf71 [analysis_server] Don't flush diagnostics for deleted files that have overlays
Fixes https://github.com/dart-lang/sdk/issues/53475

Change-Id: I5eaba2192e8d9d141cbee02f4c9bbe941db026f2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/325262
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2023-09-11 18:16:38 +00:00
Danny Tuppeny c11697af90 [analysis_server] Migrate remaining LSP tests to new set() methods for capabilities
No functional changes, just flattening capabilities into using set...() methods instead of providing them inline to the `initialize` method.

Change-Id: I0182a7dfa6ad2a3b3d83519b7a90f296722d05b8
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/324523
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2023-09-11 18:00:10 +00:00
Danny Tuppeny 77799f6d6c [analysis_server] Use current path context for path<->uri conversions
This allows changing the in-process tests to use Windows-style paths on macOS for convenience.

Change-Id: I0e85a4f8e831471925b8308ad348f75b6867a53b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/313385
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2023-07-14 17:30:30 +00:00
Danny Tuppeny ec658a1efd [analysis_server] Fix a race in LSP server when a file was opened and created at the same time
This would show up during a rename, where the server gets a textDocument/didOpen around the same time a file was created.

If things happened in this order:

1. File created on disk
2. Server processes textDocument/didOpen
3. Server processes watch event

Step 2 would skip analysis the overlay because it saw the file on disk and the contents are the same. Step 3 would skip analysis because there is an overlay that trumps the disk.

The fix is to ensure that Step 2 is using the contents from the servers state, and never looking at the disk.

Change-Id: I98c53e3cd4fbc6cd28208b9144596ea15de64394
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/291801
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2023-03-29 14:45:49 +00:00
Brian Wilkerson 63b779533f Add a flag that will allow plugin support to be disabled when necessary
Change-Id: Ifa80f14a58501054a72a9e82ff66aa35de37b4fb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/272490
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Samuel Rawlins <srawlins@google.com>
2022-11-30 16:02:50 +00:00
Danny Tuppeny 0add39a68e [analysis_server] Skip analysis work when overlays are created if content matches previous content-
May prevent https://github.com/dart-lang/sdk/issues/48051 from occurring since we will no longer call driver.changeFile() for SDK libraries being opened, although it does not resolve the underlying issue.

Change-Id: I5ca53a04842348a584ccc824aaf90ba7f230c002
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/251980
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2022-07-20 22:45:15 +00:00
Danny Tuppeny cd43f3d08c [analysis_server] Use generated typedefs for LSP code
Change-Id: I242413db35b22d01965aa8ecf9851e47982ea41d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/248820
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2022-06-16 22:02:00 +00:00
Danny Tuppeny 80fb1a56db [analysis_server] Add shared protocol.dart file for LSP
In an upcoming change some types will between these files. To reduce the size of that (already very large) CL and because the distinction between spec-generated/custom-generated types was unnecessary anyway, this adds a single import for LSP protocol-related types.

Change-Id: I322447d6c979538c12014d87875176e1bf2adca7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/244244
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2022-05-11 15:28:35 +00:00
Danny Tuppeny 1b6399759a [analyzer] Migrate remaining LSP tests to null-safe
Change-Id: I7a2befd9d46b93ebeb84c40f33121f077f3d6f1a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/196284
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2021-04-21 16:41:50 +00:00
Danny Tuppeny e8d53cff92 [analyzer] Improve handling of loose files and context rebuilds
Change-Id: Ifd047a29953503a70216ce29b3fe4cdbfc4132df
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/192926
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2021-04-08 17:49:35 +00:00
Konstantin Shcheglov e97f1bdbf0 Switch analysis_server to language 2.12, so null safety, but opt-out files.
This should allow doing partial migration, specifically protocol files,
which are imported by other libraries, but are a small library cycle
that does not import much outside of it.

Change-Id: I904c05d6d5b444ee9a9dbd1f7ada12aabdcc5165
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/193583
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2021-03-30 23:39:37 +00:00
Danny Tuppeny d5b9dcb00c [Analyzer] Ensure LSP analysis drivers are seeded with existing priority files
Fixes https://github.com/dart-lang/sdk/issues/42994.

Change-Id: If8482040b76645ee44224d5a44174ef74ade8e99
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/160225
Commit-Queue: Danny Tuppeny <danny@tuppeny.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2020-08-26 17:55:25 +00:00
Danny Tuppeny c4a2efd6e7 Switch all generated LSP classes to use named constructor arguments
Change-Id: I111b58fa5d04314247d5f92650491cdeef6bd4a3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/153841
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Danny Tuppeny <danny@tuppeny.com>
2020-07-09 17:18:07 +00:00
Danny Tuppeny 6db0396c83 Regenerate code from v3.15 LSP spec
Commit v3.15 of LSP spec + regen generated code

Change-Id: Ic0823063791900f347e1ff1f2242a6e4e6ed8ca6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/153778
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2020-07-09 17:18:07 +00:00
Simon Binder 10172cd1c4 LSP Server: Forward overlay changes to plugins
Send appropriate plugin notifications in response to a document open,
change or close notification from the client.

Change-Id: Iafda3387b493c3b84cda2186390db124cfe86045
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/147366
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2020-05-11 15:25:27 +00:00