Skip to content

Commit ccf712b

Browse files
authored
feat(extension): support LSP trace (#200)
1 parent 473b340 commit ccf712b

File tree

1 file changed

+35
-1
lines changed

1 file changed

+35
-1
lines changed

packages/vscode-extension/src/Rslint.ts

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
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';
29
import {
310
Executable,
411
LanguageClient,
512
LanguageClientOptions,
613
ServerOptions,
714
State,
15+
Trace,
816
} from 'vscode-languageclient/node';
917
import { Logger } from './logger';
1018
import 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

Comments
 (0)