intellij-powershell
intellij-powershell copied to clipboard
Can't detect Powershell version on Linux
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 03a215ee3d3e361ecb4212d48a5d3338277d5297 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.
I can confirm this is still a breaking bug for Linux/Ubuntu and that the above suggestion also fixes the version return on my system. Please include this fix ASAP as the plugin in now unusable for us poor souls coding Powershell on Linux. Thank you!