dispose method
Releases resources: fails any in-flight requests and closes diagnostics.
Does not itself send shutdown/exit — call those first for a clean stop.
Implementation
Future<void> dispose() async {
if (_closed) return;
_closed = true;
for (final completer in _pending.values) {
if (!completer.isCompleted) {
completer.completeError(StateError('LspClient disposed'));
}
}
_pending.clear();
await _diagnostics.close();
}