Skip to content

Commit

Permalink
SLI-1629 Improve how Node.js is loaded
Browse files Browse the repository at this point in the history
  • Loading branch information
nquinquenel committed Sep 27, 2024
1 parent c6c5880 commit ca1a6f8
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 13 deletions.
2 changes: 1 addition & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[versions]
sonarlint-core = "10.6.0.79033"
sonarlint-core = "10.7.0.79079"

sonar-java = "8.1.0.36477"
sonar-javascript = "10.15.0.27423"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.nio.file.Paths;
import java.util.Objects;
import javax.swing.BorderFactory;
import javax.swing.JComponent;
Expand All @@ -51,7 +52,8 @@

public class SonarLintGlobalOptionsPanel implements ConfigurationPanel<SonarLintGlobalSettings> {
private static final String NODE_JS_TOOLTIP = "SonarLint requires Node.js to analyze some languages. You can provide an explicit path for the node executable here or leave " +
"this field blank to let SonarLint look for it using your PATH environment variable.";
"this field blank to let SonarLint look for it using your PATH environment variable." +
" Restarting your IDE is recommended.";
private JPanel rootPane;
private JBCheckBox autoTrigger;
private JBTextField nodeJsPath;
Expand Down Expand Up @@ -136,19 +138,31 @@ public void load(SonarLintGlobalSettings model) {
autoTrigger.setSelected(model.isAutoTrigger());
nodeJsPath.setText(model.getNodejsPath());
focusOnNewCode.setSelected(model.isFocusOnNewCode());
loadNodeJsSettings();
loadNodeJsSettings(model);
}

private void loadNodeJsSettings() {
getService(BackendService.class).getAutoDetectedNodeJs().thenAccept(settings -> {
if (settings == null) {
this.nodeJsPath.getEmptyText().setText("Node.js not found");
this.nodeJsVersion.setText("N/A");
} else {
this.nodeJsPath.getEmptyText().setText(settings.getPath().toString());
this.nodeJsVersion.setText(settings.getVersion());
}
});
private void loadNodeJsSettings(SonarLintGlobalSettings model) {
if (model.getNodejsPath() == null || model.getNodejsPath().isBlank()) {
getService(BackendService.class).getAutoDetectedNodeJs().thenAccept(settings -> {
if (settings == null) {
this.nodeJsPath.getEmptyText().setText("Node.js not found");
this.nodeJsVersion.setText("N/A");
} else {
this.nodeJsPath.getEmptyText().setText(settings.getPath().toString());
this.nodeJsVersion.setText(settings.getVersion());
}
});
} else {
var forcedNodeJsPath = Paths.get(model.getNodejsPath());
getService(BackendService.class).changeClientNodeJsPath(forcedNodeJsPath).thenAccept(settings -> {
if (settings == null) {
this.nodeJsVersion.setText("N/A");
} else {
this.nodeJsPath.setText(settings.getPath().toString());
this.nodeJsVersion.setText(settings.getVersion());
}
});
}
}

@Override
Expand Down
8 changes: 8 additions & 0 deletions src/main/java/org/sonarlint/intellij/core/BackendService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ import org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcServer
import org.sonarsource.sonarlint.core.rpc.protocol.backend.analysis.AnalyzeFilesAndTrackParams
import org.sonarsource.sonarlint.core.rpc.protocol.backend.analysis.AnalyzeFilesResponse
import org.sonarsource.sonarlint.core.rpc.protocol.backend.analysis.DidChangeAutomaticAnalysisSettingParams
import org.sonarsource.sonarlint.core.rpc.protocol.backend.analysis.DidChangeClientNodeJsPathParams
import org.sonarsource.sonarlint.core.rpc.protocol.backend.binding.GetSharedConnectedModeConfigFileParams
import org.sonarsource.sonarlint.core.rpc.protocol.backend.binding.GetSharedConnectedModeConfigFileResponse
import org.sonarsource.sonarlint.core.rpc.protocol.backend.branch.DidVcsRepositoryChangeParams
Expand Down Expand Up @@ -893,6 +894,13 @@ class BackendService : Disposable {
}
}

fun changeClientNodeJsPath(nodeJsPath: Path?): CompletableFuture<NodeJsSettings?> {
return requestFromBackend { it.analysisService.didChangeClientNodeJsPath(DidChangeClientNodeJsPathParams(nodeJsPath)) }
.thenApplyAsync { response ->
response.details?.let { NodeJsSettings(it.path, it.version) }
}
}

fun updateFileSystem(filesByModule: Map<Module, List<VirtualFileEvent>>) {
val deletedFileUris = filesByModule.values
.flatMap { it.filter { event -> event.type == ModuleFileEvent.Type.DELETED } }
Expand Down

0 comments on commit ca1a6f8

Please sign in to comment.