Skip to content

Commit bca9c15

Browse files
authored
SLLS-12 Show link to connection settings as a shortcut to disable notifications
* SLLS-12 Experiment with "disable" option in server notifications * SLLS-12 Use a single request object (protocol restriction) * SLLS-12 Just ask client to open connection settings
1 parent 86e8f3b commit bca9c15

4 files changed

Lines changed: 49 additions & 9 deletions

File tree

src/main/java/org/sonarsource/sonarlint/ls/SonarLintExtendedLanguageClient.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ public interface SonarLintExtendedLanguageClient extends LanguageClient {
4141
@JsonRequest("sonarlint/openPathToNodeSettings")
4242
CompletableFuture<Void> openPathToNodeSettings();
4343

44+
@JsonRequest("sonarlint/openConnectionSettings")
45+
CompletableFuture<Void> openConnectionSettings(boolean isSonarCloud);
46+
4447
@JsonRequest("sonarlint/showRuleDescription")
4548
CompletableFuture<Void> showRuleDescription(ShowRuleDescriptionParams params);
4649

src/main/java/org/sonarsource/sonarlint/ls/connected/notifications/ServerNotifications.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
package org.sonarsource.sonarlint.ls.connected.notifications;
2121

2222
import java.time.ZonedDateTime;
23-
import java.util.Collections;
23+
import java.util.Arrays;
2424
import java.util.HashMap;
2525
import java.util.Map;
2626
import javax.annotation.CheckForNull;
@@ -47,6 +47,8 @@
4747

4848
public class ServerNotifications implements WorkspaceSettingsChangeListener, WorkspaceFolderSettingsChangeListener {
4949

50+
private static final MessageActionItem SETTINGS_ACTION = new MessageActionItem("Open Settings");
51+
5052
private final SonarLintExtendedLanguageClient client;
5153
private final ProjectBindingManager projectBindingManager;
5254
private final WorkspaceFoldersManager workspaceFoldersManager;
@@ -163,13 +165,14 @@ public void handle(ServerNotification serverNotification) {
163165
ShowMessageRequestParams params = new ShowMessageRequestParams();
164166
params.setType(MessageType.Info);
165167
params.setMessage(String.format("%s Notification: %s", label, serverNotification.message()));
166-
MessageActionItem browseAction = new MessageActionItem();
167-
browseAction.setTitle("Open in " + label);
168-
params.setActions(Collections.singletonList(browseAction));
168+
MessageActionItem browseAction = new MessageActionItem("Show on " + label);
169+
params.setActions(Arrays.asList(browseAction, SETTINGS_ACTION));
169170
client.showMessageRequest(params).thenAccept(action -> {
170171
if(browseAction.equals(action)) {
171172
telemetry.devNotificationsClicked(serverNotification.category());
172173
client.browseTo(serverNotification.link());
174+
} else if (SETTINGS_ACTION.equals(action)) {
175+
client.openConnectionSettings(isSonarCloud);
173176
}
174177
});
175178
}

src/test/java/org/sonarsource/sonarlint/ls/connected/notifications/ServerNotificationsTest.java

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222

2323
import java.time.ZonedDateTime;
24+
import java.util.Arrays;
2425
import java.util.Collections;
2526
import java.util.concurrent.CompletableFuture;
2627
import org.eclipse.lsp4j.MessageActionItem;
@@ -227,28 +228,55 @@ void updateRegistrationsOnWorkspaceSettingsChange() {
227228
}
228229

229230
@Test
230-
void shouldShowSonarQubeNotificationToUserAndClickOnNotification() {
231+
void shouldShowSonarQubeNotificationToUserAndClickOnNotificationLink() {
231232
ServerNotifications.EventListener listener = underTest.new EventListener(false);
232233
String category = "category";
233234
String message = "message";
234235
String link = "http://some.link";
235236
String projectKey = "projectKey";
236237
ServerNotification notification = new DefaultServerNotification(category, message, link, projectKey, ZonedDateTime.now());
237238

238-
MessageActionItem browseAction = new MessageActionItem("Open in SonarQube");
239+
MessageActionItem browseAction = new MessageActionItem("Show on SonarQube");
240+
MessageActionItem settingsAction = new MessageActionItem("Open Settings");
239241
when(client.showMessageRequest(any())).thenReturn(CompletableFuture.completedFuture(browseAction));
242+
240243
listener.handle(notification);
241244

242245
verify(telemetry).devNotificationsReceived(category);
243246
ArgumentCaptor<ShowMessageRequestParams> messageCaptor = ArgumentCaptor.forClass(ShowMessageRequestParams.class);
244247
verify(client).showMessageRequest(messageCaptor.capture());
245248
ShowMessageRequestParams shownMessage = messageCaptor.getValue();
246249
assertThat(shownMessage).extracting(ShowMessageRequestParams::getMessage, ShowMessageRequestParams::getActions)
247-
.containsExactly("SonarQube Notification: message", Collections.singletonList(browseAction));
250+
.containsExactly("SonarQube Notification: message", Arrays.asList(browseAction, settingsAction));
248251
verify(telemetry).devNotificationsClicked(category);
249252
verify(client).browseTo(link);
250253
}
251254

255+
@Test
256+
void shouldShowSonarQubeNotificationToUserAndOpenSettings() {
257+
ServerNotifications.EventListener listener = underTest.new EventListener(false);
258+
String category = "category";
259+
String message = "message";
260+
String link = "http://some.link";
261+
String projectKey = "projectKey";
262+
ServerNotification notification = new DefaultServerNotification(category, message, link, projectKey, ZonedDateTime.now());
263+
264+
MessageActionItem browseAction = new MessageActionItem("Show on SonarQube");
265+
MessageActionItem settingsAction = new MessageActionItem("Open Settings");
266+
when(client.showMessageRequest(any())).thenReturn(CompletableFuture.completedFuture(settingsAction));
267+
268+
listener.handle(notification);
269+
270+
verify(telemetry).devNotificationsReceived(category);
271+
ArgumentCaptor<ShowMessageRequestParams> messageCaptor = ArgumentCaptor.forClass(ShowMessageRequestParams.class);
272+
verify(client).showMessageRequest(messageCaptor.capture());
273+
ShowMessageRequestParams shownMessage = messageCaptor.getValue();
274+
assertThat(shownMessage).extracting(ShowMessageRequestParams::getMessage, ShowMessageRequestParams::getActions)
275+
.containsExactly("SonarQube Notification: message", Arrays.asList(browseAction, settingsAction));
276+
277+
verify(client).openConnectionSettings(false);
278+
}
279+
252280
@Test
253281
void shouldShowSonarCloudNotificationToUserAndNotClickOnNotification() {
254282
ServerNotifications.EventListener listener = underTest.new EventListener(true);
@@ -258,16 +286,18 @@ void shouldShowSonarCloudNotificationToUserAndNotClickOnNotification() {
258286
String projectKey = "projectKey";
259287
ServerNotification notification = new DefaultServerNotification(category, message, link, projectKey, ZonedDateTime.now());
260288

261-
MessageActionItem browseAction = new MessageActionItem("Open in SonarCloud");
289+
MessageActionItem browseAction = new MessageActionItem("Show on SonarCloud");
262290
when(client.showMessageRequest(any())).thenReturn(CompletableFuture.completedFuture(null));
291+
MessageActionItem settingsAction = new MessageActionItem("Open Settings");
292+
263293
listener.handle(notification);
264294

265295
verify(telemetry).devNotificationsReceived(category);
266296
ArgumentCaptor<ShowMessageRequestParams> messageCaptor = ArgumentCaptor.forClass(ShowMessageRequestParams.class);
267297
verify(client).showMessageRequest(messageCaptor.capture());
268298
ShowMessageRequestParams shownMessage = messageCaptor.getValue();
269299
assertThat(shownMessage).extracting(ShowMessageRequestParams::getMessage, ShowMessageRequestParams::getActions)
270-
.containsExactly("SonarCloud Notification: message", Collections.singletonList(browseAction));
300+
.containsExactly("SonarCloud Notification: message", Arrays.asList(browseAction, settingsAction));
271301
verify(telemetry, never()).devNotificationsClicked(category);
272302
}
273303

src/test/java/org/sonarsource/sonarlint/ls/mediumtests/AbstractLanguageServerMediumTests.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,10 @@ public CompletableFuture<Void> browseTo(String link) {
341341
return CompletableFutures.computeAsync(null);
342342
}
343343

344+
@Override
345+
public CompletableFuture<Void> openConnectionSettings(boolean isSonarCloud) {
346+
return CompletableFutures.computeAsync(null);
347+
}
344348
}
345349

346350
protected void emulateConfigurationChangeOnClient(@Nullable String testFilePattern, @Nullable Boolean disableTelemetry, String... ruleConfigs) {

0 commit comments

Comments
 (0)