@@ -5,16 +5,17 @@ import net = require("net");
55import path = require( "path" ) ;
66import vscode = require( "vscode" ) ;
77import TelemetryReporter , { TelemetryEventProperties , TelemetryEventMeasurements } from "@vscode/extension-telemetry" ;
8- import { Message } from "vscode-jsonrpc" ;
9- import { ILogger , LanguageClientOutputChannelAdapter , LanguageClientTraceFormatter } from "./logging" ;
8+ import { Message , Trace } from "vscode-jsonrpc" ;
9+ import { ILogger } from "./logging" ;
1010import { PowerShellProcess } from "./process" ;
1111import { Settings , changeSetting , getSettings , getEffectiveConfigurationTarget , validateCwdSetting } from "./settings" ;
1212import utils = require( "./utils" ) ;
1313
1414import {
1515 CloseAction , CloseHandlerResult , DocumentSelector , ErrorAction , ErrorHandlerResult ,
1616 LanguageClientOptions , Middleware , NotificationType ,
17- RequestType0 , ResolveCodeLensSignature
17+ RequestType0 , ResolveCodeLensSignature ,
18+ RevealOutputChannelOn ,
1819} from "vscode-languageclient" ;
1920import { LanguageClient , StreamInfo } from "vscode-languageclient/node" ;
2021
@@ -93,28 +94,7 @@ export class SessionManager implements Middleware {
9394 private startCancellationTokenSource : vscode . CancellationTokenSource | undefined ;
9495 private suppressRestartPrompt = false ;
9596 private versionDetails : IPowerShellVersionDetails | undefined ;
96-
97- private _outputChannel ?: vscode . LogOutputChannel ;
98- /** Omnisharp and PSES messages sent via LSP are surfaced here. */
99- private get outputChannel ( ) : vscode . LogOutputChannel | undefined {
100- return vscode . workspace . getConfiguration ( "powershell.developer" ) . get < boolean > ( "traceLsp" , false )
101- ? this . _outputChannel
102- ??= new LanguageClientOutputChannelAdapter (
103- vscode . window . createOutputChannel ( "PowerShell: Editor Services" , { log : true } )
104- )
105- : undefined ;
106- }
107-
108- private _traceOutputChannel ?: vscode . LogOutputChannel ;
109- /** The LanguageClient LSP message trace is surfaced here. */
110- private get traceOutputChannel ( ) : vscode . LogOutputChannel | undefined {
111- return vscode . workspace . getConfiguration ( "powershell.developer" ) . get < boolean > ( "traceLsp" , false )
112- ? this . _traceOutputChannel
113- ??= new LanguageClientTraceFormatter (
114- vscode . window . createOutputChannel ( "PowerShell: Trace LSP" , { log : true } )
115- )
116- : undefined ;
117- }
97+ private traceLogLevelHandler ?: vscode . Disposable ;
11898
11999 constructor (
120100 private extensionContext : vscode . ExtensionContext ,
@@ -126,7 +106,6 @@ export class SessionManager implements Middleware {
126106 hostVersion : string ,
127107 publisher : string ,
128108 private telemetryReporter : TelemetryReporter ) {
129-
130109 // Create the language status item
131110 this . languageStatusItem = this . createStatusBarItem ( ) ;
132111 // We have to override the scheme because it defaults to
@@ -299,6 +278,8 @@ export class SessionManager implements Middleware {
299278 this . startCancellationTokenSource ?. dispose ( ) ;
300279 this . startCancellationTokenSource = undefined ;
301280 this . sessionDetails = undefined ;
281+ this . traceLogLevelHandler ?. dispose ( ) ;
282+ this . traceLogLevelHandler = undefined ;
302283
303284 this . setSessionStatus ( "Not Started" , SessionStatus . NotStarted ) ;
304285 }
@@ -375,6 +356,7 @@ export class SessionManager implements Middleware {
375356 true ,
376357 false ,
377358 this . logger ,
359+ this . extensionContext . logUri ,
378360 this . getEditorServicesArgs ( bundledModulesPath , this . PowerShellExeDetails ) + "-DebugServiceOnly " ,
379361 this . getNewSessionFilePath ( ) ,
380362 this . sessionSettings ) ;
@@ -585,6 +567,7 @@ export class SessionManager implements Middleware {
585567 false ,
586568 this . shellIntegrationEnabled ,
587569 this . logger ,
570+ this . extensionContext . logUri ,
588571 this . getEditorServicesArgs ( bundledModulesPath , powerShellExeDetails ) ,
589572 this . getNewSessionFilePath ( ) ,
590573 this . sessionSettings ) ;
@@ -669,6 +652,7 @@ export class SessionManager implements Middleware {
669652 } ) ;
670653 } ) ;
671654 } ;
655+
672656 const clientOptions : LanguageClientOptions = {
673657 documentSelector : this . documentSelector ,
674658 synchronize : {
@@ -705,8 +689,9 @@ export class SessionManager implements Middleware {
705689 } ,
706690 } ,
707691 middleware : this ,
708- traceOutputChannel : this . traceOutputChannel ,
709- outputChannel : this . outputChannel
692+ // traceOutputChannel: traceOutputChannel,
693+ // outputChannel: outputChannel,
694+ revealOutputChannelOn : RevealOutputChannelOn . Never
710695 } ;
711696
712697 const languageClient = new LanguageClient ( "powershell" , "PowerShell Editor Services Client" , connectFunc , clientOptions ) ;
@@ -759,6 +744,19 @@ export class SessionManager implements Middleware {
759744 return languageClient ;
760745 }
761746
747+ /** Synchronizes a vscode LogOutputChannel log level to the LSP trace setting to minimize traffic */
748+ private async setLspTrace ( languageClient : LanguageClient , level : vscode . LogLevel ) : Promise < void > {
749+ this . logger . writeVerbose ( "LSP Trace level changed to: " + level . toString ( ) ) ;
750+ if ( level == vscode . LogLevel . Trace ) {
751+ return languageClient . setTrace ( Trace . Verbose ) ;
752+ } else if ( level == vscode . LogLevel . Debug ) {
753+ return languageClient . setTrace ( Trace . Messages ) ;
754+ } else {
755+ return languageClient . setTrace ( Trace . Off ) ;
756+ }
757+ }
758+
759+
762760 private async getBundledModulesPath ( ) : Promise < string > {
763761 // Because the extension is always at `<root>/out/main.js`
764762 let bundledModulesPath = path . resolve ( __dirname , "../modules" ) ;
0 commit comments