Description
I'm using Arch and I have my Powershell executable path under ~\.dotnet\tools\pwsh
. When I'm trying to enter this path in the plugin's settings and hit Apply it throws an error: Cannot save settings. Cannot detect PowerShell version. This is what it looks like in the log file:
2021-12-17 20:21:19,198 [ 137649] WARN - werShellExecutableChooserPanel - Exception when getting PowerShell version:
java.lang.Throwable: Control-flow exceptions (like PowerShellControlFlowException) should never be logged: ignore for explicitly started processes or rethrow to handle on the outer process level
at com.intellij.openapi.diagnostic.Logger.ensureNotControlFlow(Logger.java:234)
at com.intellij.idea.IdeaLogger.warn(IdeaLogger.java:183)
at com.intellij.plugin.powershell.lang.lsp.ide.settings.PowerShellExecutableChooserPanel$1.lambda$validateSelectedFiles$0(PowerShellExecutableChooserPanel.java:43)
at org.jetbrains.concurrency.AsyncPromise$onError$1.accept(AsyncPromise.kt:94)
at org.jetbrains.concurrency.AsyncPromise$onError$1.accept(AsyncPromise.kt:16)
at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506)
at java.base/java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2088)
at org.jetbrains.concurrency.AsyncPromise.setError(AsyncPromise.kt:153)
at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.setError(NonBlockingReadActionImpl.java:285)
at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.insideReadAction(NonBlockingReadActionImpl.java:540)
at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.lambda$attemptComputation$3(NonBlockingReadActionImpl.java:486)
at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1084)
at com.intellij.openapi.progress.util.ProgressIndicatorUtils.lambda$runInReadActionWithWriteActionPriority$0(ProgressIndicatorUtils.java:75)
at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runActionAndCancelBeforeWrite(ProgressIndicatorUtils.java:158)
at com.intellij.openapi.progress.util.ProgressIndicatorUtils.lambda$runWithWriteActionPriority$1(ProgressIndicatorUtils.java:115)
at com.intellij.openapi.progress.ProgressManager.lambda$runProcess$0(ProgressManager.java:57)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:188)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$12(CoreProgressManager.java:624)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:698)
at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:646)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:623)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:66)
at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:175)
at com.intellij.openapi.progress.ProgressManager.runProcess(ProgressManager.java:57)
at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runWithWriteActionPriority(ProgressIndicatorUtils.java:112)
at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runInReadActionWithWriteActionPriority(ProgressIndicatorUtils.java:75)
at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.attemptComputation(NonBlockingReadActionImpl.java:486)
at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.lambda$transferToBgThread$1(NonBlockingReadActionImpl.java:407)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:668)
at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:665)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:665)
at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: com.intellij.plugin.powershell.lang.lsp.languagehost.PowerShellControlFlowException: Execution failed with code 1: [/home/notmyactualusername/.dotnet/tools/pwsh, --version]
at com.intellij.plugin.powershell.lang.lsp.languagehost.PSLanguageHostUtilsKt.readPowerShellVersion(PSLanguageHostUtils.kt:140)
at com.intellij.plugin.powershell.lang.lsp.languagehost.PSLanguageHostUtils$getPowerShellVersion$1.call(PSLanguageHostUtils.kt:81)
at com.intellij.plugin.powershell.lang.lsp.languagehost.PSLanguageHostUtils$getPowerShellVersion$1.call(PSLanguageHostUtils.kt:23)
at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.insideReadAction(NonBlockingReadActionImpl.java:521)
... 25 more
I checked out the source code for the part that causes this error and it turned out it would have worked before 03a215e commit which changed the way the plugin reads the Powershell version.
Before commit it was like that: pwsh--version
(and it would work on my system except it wouldn't show the Powershell edition).
Now it looks like: pwsh -command -join("Powershell ", \$PSVersionTable.PSVersion, " ", \$PSVersionTable.PSEdition)
And it fails (on my system at least).
Working command: pwsh -command "-join('Powershell ', \$PSVersionTable.PSVersion, ' ', \$PSVersionTable.PSEdition)"
Or: pwsh -command -join\(\'Powershell \', \$PSVersionTable.PSVersion, \' \', \$PSVersionTable.PSEdition\)
Is there any possibility that you could fix this issue? I really really want to use the autocompletion that your plugin provides and I don't think it'll work unless it detects pwsh version properly.