1- import { workspace , Uri , Disposable , WorkspaceFolder } from 'vscode' ;
1+ import {
2+ workspace ,
3+ Uri ,
4+ Disposable ,
5+ WorkspaceFolder ,
6+ window ,
7+ OutputChannel ,
8+ } from 'vscode' ;
29import {
310 Executable ,
411 LanguageClient ,
512 LanguageClientOptions ,
613 ServerOptions ,
714 State ,
15+ Trace ,
816} from 'vscode-languageclient/node' ;
917import { Logger } from './logger' ;
1018import type { Extension } from './Extension' ;
@@ -17,6 +25,7 @@ export class Rslint implements Disposable {
1725 private readonly logger : Logger ;
1826 private readonly extension : Extension ;
1927 private readonly workspaceFolder : WorkspaceFolder ;
28+ private lspOutputChannel : OutputChannel | undefined ;
2029
2130 constructor ( extension : Extension , workspaceFolder : WorkspaceFolder ) {
2231 this . extension = extension ;
@@ -43,6 +52,12 @@ export class Rslint implements Disposable {
4352 debug : run ,
4453 } ;
4554
55+ // Check if LSP tracing is enabled
56+ const traceServer = workspace
57+ . getConfiguration ( 'rslint' )
58+ . get < string > ( 'trace.server' , 'off' ) ;
59+ const traceEnabled = traceServer !== 'off' ;
60+
4661 const clientOptions : LanguageClientOptions = {
4762 documentSelector : [
4863 { scheme : 'file' , language : 'typescript' } ,
@@ -57,6 +72,16 @@ export class Rslint implements Disposable {
5772 } ,
5873 } ;
5974
75+ if ( traceEnabled ) {
76+ this . lspOutputChannel = window . createOutputChannel ( 'Rslint LSP trace' ) ;
77+ clientOptions . traceOutputChannel = this . lspOutputChannel ;
78+ this . logger . info (
79+ 'LSP tracing enabled, output will be logged to "Rslint LSP trace" channel' ,
80+ ) ;
81+ } else {
82+ this . logger . debug ( 'LSP tracing disabled by configuration' ) ;
83+ }
84+
6085 this . client = new LanguageClient (
6186 'rslint' ,
6287 'Rslint Language Server' ,
@@ -66,6 +91,14 @@ export class Rslint implements Disposable {
6691
6792 try {
6893 await this . client . start ( ) ;
94+
95+ if ( traceEnabled ) {
96+ const traceLevel =
97+ traceServer === 'verbose' ? Trace . Verbose : Trace . Messages ;
98+ await this . client . setTrace ( traceLevel ) ;
99+ this . logger . info ( `LSP trace level set to: ${ traceServer } ` ) ;
100+ }
101+
69102 this . logger . info ( 'Rslint language client started successfully' ) ;
70103 } catch ( err : unknown ) {
71104 this . logger . error ( 'Failed to start Rslint language client' , err ) ;
@@ -111,6 +144,7 @@ export class Rslint implements Disposable {
111144 this . logger . error ( 'Error disposing Rslint client' , err ) ;
112145 } ) ;
113146 }
147+ this . lspOutputChannel ?. dispose ( ) ;
114148 }
115149
116150 private async findBinaryFromUserSettings ( ) : Promise < string | null > {
0 commit comments