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' ;
2
9
import {
3
10
Executable ,
4
11
LanguageClient ,
5
12
LanguageClientOptions ,
6
13
ServerOptions ,
7
14
State ,
15
+ Trace ,
8
16
} from 'vscode-languageclient/node' ;
9
17
import { Logger } from './logger' ;
10
18
import type { Extension } from './Extension' ;
@@ -17,6 +25,7 @@ export class Rslint implements Disposable {
17
25
private readonly logger : Logger ;
18
26
private readonly extension : Extension ;
19
27
private readonly workspaceFolder : WorkspaceFolder ;
28
+ private lspOutputChannel : OutputChannel | undefined ;
20
29
21
30
constructor ( extension : Extension , workspaceFolder : WorkspaceFolder ) {
22
31
this . extension = extension ;
@@ -43,6 +52,12 @@ export class Rslint implements Disposable {
43
52
debug : run ,
44
53
} ;
45
54
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
+
46
61
const clientOptions : LanguageClientOptions = {
47
62
documentSelector : [
48
63
{ scheme : 'file' , language : 'typescript' } ,
@@ -57,6 +72,16 @@ export class Rslint implements Disposable {
57
72
} ,
58
73
} ;
59
74
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
+
60
85
this . client = new LanguageClient (
61
86
'rslint' ,
62
87
'Rslint Language Server' ,
@@ -66,6 +91,14 @@ export class Rslint implements Disposable {
66
91
67
92
try {
68
93
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
+
69
102
this . logger . info ( 'Rslint language client started successfully' ) ;
70
103
} catch ( err : unknown ) {
71
104
this . logger . error ( 'Failed to start Rslint language client' , err ) ;
@@ -111,6 +144,7 @@ export class Rslint implements Disposable {
111
144
this . logger . error ( 'Error disposing Rslint client' , err ) ;
112
145
} ) ;
113
146
}
147
+ this . lspOutputChannel ?. dispose ( ) ;
114
148
}
115
149
116
150
private async findBinaryFromUserSettings ( ) : Promise < string | null > {
0 commit comments