Skip to content

Commit 3304606

Browse files
authored
upgrade vscode-languageserver (#2557)
* upgrades the `vscode-languageserver` and `vscode-jsonrpc` reference implementations under the hood. also upgrades `vscode-languageclient` to match. * works in `vscode-graphql` and `nvim.coc`, as well as other LSP clients hopefully * fix cli stderr bug
1 parent eb1db96 commit 3304606

File tree

14 files changed

+86
-101
lines changed

14 files changed

+86
-101
lines changed

.changeset/chatty-insects-poke.md

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
'graphql-language-service-server': minor
3+
'graphql-language-service-cli': minor
4+
'vscode-graphql': minor
5+
---
6+
7+
upgrades the `vscode-languageserver` and `vscode-jsonrpc` reference implementations for the lsp server to the latest. also upgrades `vscode-languageclient` in `vscode-graphql` to the latest 8.0.1. seems to work fine for IPC in `vscode-graphql` at least!
8+
9+
hopefully this solves #2230 once and for all!

packages/graphql-language-service-cli/src/cli.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,11 @@ if (!command) {
110110
switch (command) {
111111
case 'server':
112112
process.on('uncaughtException', error => {
113-
process.stdout.write(
113+
process.stderr.write(
114114
'An error was thrown from GraphQL language service: ' + String(error),
115115
);
116-
process.exit(0);
116+
// don't exit at all if there is an uncaughtException
117+
// process.exit(0);
117118
});
118119

119120
const options: { [key: string]: any } = {};

packages/graphql-language-service-server/package.json

+3-6
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,8 @@
4242
"mkdirp": "^1.0.4",
4343
"node-fetch": "^2.6.1",
4444
"nullthrows": "^1.0.0",
45-
"vscode-jsonrpc": "^5.0.1",
46-
"vscode-languageserver": "^6.1.1",
47-
"vscode-languageserver-protocol": "~3.15.3",
48-
"vscode-languageserver-types": "~3.15.1",
45+
"vscode-languageserver": "^8.0.1",
46+
"vscode-jsonrpc": "^8.0.1",
4947
"fast-glob": "^3.2.7",
5048
"vscode-uri": "^3.0.2",
5149
"glob": "^7.2.0",
@@ -54,7 +52,6 @@
5452
"devDependencies": {
5553
"@types/mkdirp": "^1.0.1",
5654
"cross-env": "^7.0.2",
57-
"graphql": "^16.4.0",
58-
"vscode-languageserver-types": "^3.15.1"
55+
"graphql": "^16.4.0"
5956
}
6057
}

packages/graphql-language-service-server/src/MessageProcessor.ts

+7-7
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import type {
3232
DidSaveTextDocumentParams,
3333
DidOpenTextDocumentParams,
3434
DidChangeConfigurationParams,
35-
} from 'vscode-languageserver-protocol';
35+
} from 'vscode-languageserver/node';
3636

3737
import type {
3838
Diagnostic,
@@ -53,9 +53,9 @@ import type {
5353
DocumentSymbolParams,
5454
SymbolInformation,
5555
WorkspaceSymbolParams,
56-
IConnection,
56+
Connection,
5757
DidChangeConfigurationRegistrationOptions,
58-
} from 'vscode-languageserver';
58+
} from 'vscode-languageserver/node';
5959

6060
import type { UnnormalizedTypeDefPointer } from '@graphql-tools/load';
6161

@@ -90,7 +90,7 @@ function toPosition(position: VscodePosition): IPosition {
9090
}
9191

9292
export class MessageProcessor {
93-
_connection: IConnection;
93+
_connection: Connection;
9494
_graphQLCache!: GraphQLCache;
9595
_graphQLConfig: GraphQLConfig | undefined;
9696
_languageService!: GraphQLLanguageService;
@@ -126,7 +126,7 @@ export class MessageProcessor {
126126
config?: GraphQLConfig;
127127
parser?: typeof parseDocument;
128128
tmpDir?: string;
129-
connection: IConnection;
129+
connection: Connection;
130130
}) {
131131
this._connection = connection;
132132
this._textDocumentCache = new Map();
@@ -154,10 +154,10 @@ export class MessageProcessor {
154154
mkdirp(this._tmpDirBase);
155155
}
156156
}
157-
get connection(): IConnection {
157+
get connection(): Connection {
158158
return this._connection;
159159
}
160-
set connection(connection: IConnection) {
160+
set connection(connection: Connection) {
161161
this._connection = connection;
162162
}
163163

packages/graphql-language-service-server/src/startServer.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import {
1616
SocketMessageWriter,
1717
StreamMessageReader,
1818
StreamMessageWriter,
19-
} from 'vscode-jsonrpc';
19+
} from 'vscode-jsonrpc/node';
2020

2121
import {
2222
CompletionRequest,
@@ -37,8 +37,8 @@ import {
3737
PublishDiagnosticsParams,
3838
WorkspaceSymbolRequest,
3939
createConnection,
40-
IConnection,
41-
} from 'vscode-languageserver';
40+
Connection,
41+
} from 'vscode-languageserver/node';
4242

4343
import { Logger } from './Logger';
4444
import {
@@ -228,7 +228,7 @@ async function initializeHandlers({
228228
writer,
229229
logger,
230230
options,
231-
}: InitializerParams): Promise<IConnection> {
231+
}: InitializerParams): Promise<Connection> {
232232
try {
233233
const connection = createConnection(reader, writer);
234234

@@ -243,7 +243,7 @@ async function initializeHandlers({
243243

244244
function reportDiagnostics(
245245
diagnostics: PublishDiagnosticsParams | null,
246-
connection: IConnection,
246+
connection: Connection,
247247
) {
248248
if (diagnostics) {
249249
connection.sendNotification(
@@ -254,7 +254,7 @@ function reportDiagnostics(
254254
}
255255

256256
type HandlerOptions = {
257-
connection: IConnection;
257+
connection: Connection;
258258
logger: Logger;
259259
config?: GraphQLConfig;
260260
parser?: typeof parseDocument;

packages/graphql-language-service/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
"graphql": "^15.5.0 || ^16.0.0"
3636
},
3737
"dependencies": {
38-
"vscode-languageserver-types": "^3.15.1",
38+
"vscode-languageserver-types": "^3.17.1",
3939
"nullthrows": "^1.0.0"
4040
},
4141
"devDependencies": {

packages/graphql-language-service/src/interface/__tests__/getAutocompleteSuggestions-test.ts

-3
Original file line numberDiff line numberDiff line change
@@ -126,11 +126,8 @@ describe('getAutocompleteSuggestions', () => {
126126
{ label: 'skip' },
127127
];
128128

129-
console.log({ graphQLVersion });
130-
131129
// TODO: remove this once defer and stream are merged to `graphql`
132130
if (graphQLVersion.startsWith('16.0.0-experimental-stream-defer')) {
133-
console.log('expect stream');
134131
expectedDirectiveSuggestions.push({ label: 'stream' }, { label: 'test' });
135132
} else {
136133
expectedDirectiveSuggestions.push({ label: 'test' });

packages/graphql-language-service/src/interface/getAutocompleteSuggestions.ts

+7-5
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,6 @@
66
* LICENSE file in the root directory of this source tree.
77
*
88
*/
9-
import {
10-
CompletionItemKind,
11-
InsertTextFormat,
12-
} from 'vscode-languageserver-types';
139

1410
import {
1511
FragmentDefinitionNode,
@@ -31,7 +27,13 @@ import {
3127
isNonNullType,
3228
} from 'graphql';
3329

34-
import { CompletionItem, AllTypeInfo, IPosition } from '../types';
30+
import {
31+
CompletionItem,
32+
AllTypeInfo,
33+
IPosition,
34+
CompletionItemKind,
35+
InsertTextFormat,
36+
} from '../types';
3537

3638
import {
3739
GraphQLBoolean,

packages/graphql-language-service/src/types.ts

+2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import type {
1111
CompletionItem as CompletionItemType,
1212
} from 'vscode-languageserver-types';
1313

14+
export { InsertTextFormat } from 'vscode-languageserver-types';
15+
1416
import type { ASTNode, GraphQLSchema } from 'graphql';
1517

1618
import type {

packages/monaco-graphql/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
"devDependencies": {
3333
"graphql": "^16.4.0",
3434
"monaco-editor": "^0.31.0",
35-
"vscode-languageserver-types": "^3.15.1"
35+
"vscode-languageserver-types": "^3.17.1"
3636
},
3737
"peerDependencies": {
3838
"graphql": "^15.5.0 || ^16.0.0",

packages/vscode-graphql/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -229,8 +229,8 @@
229229
"vsce": "^2.7.0"
230230
},
231231
"dependencies": {
232-
"graphql": "16.0.0-experimental-stream-defer.5",
232+
"graphql": "^16.4.0",
233233
"graphql-language-service-server": "^2.7.29",
234-
"vscode-languageclient": "5.2.1"
234+
"vscode-languageclient": "^8.0.1"
235235
}
236236
}

packages/vscode-graphql/src/apis/statusBar.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ import {
66
ThemeColor,
77
version,
88
} from 'vscode';
9-
import { LanguageClient, State } from 'vscode-languageclient';
9+
10+
import { LanguageClient, State } from 'vscode-languageclient/node';
1011

1112
enum Status {
1213
INIT = 1,

packages/vscode-graphql/src/extension.ts

+17-19
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,19 @@ import {
77
} from 'vscode';
88

99
import {
10-
LanguageClient,
1110
LanguageClientOptions,
1211
ServerOptions,
1312
TransportKind,
1413
RevealOutputChannelOn,
15-
} from 'vscode-languageclient';
14+
LanguageClient,
15+
} from 'vscode-languageclient/node';
1616

1717
import * as path from 'path';
1818
import { createStatusBar, initStatusBar } from './apis/statusBar';
1919

20-
export function activate(context: ExtensionContext) {
20+
let client: LanguageClient;
21+
22+
export async function activate(context: ExtensionContext) {
2123
const outputChannel: OutputChannel = window.createOutputChannel(
2224
'GraphQL Language Server',
2325
);
@@ -90,16 +92,18 @@ export function activate(context: ExtensionContext) {
9092
},
9193
};
9294

93-
const client = new LanguageClient(
95+
client = new LanguageClient(
9496
'vscode-graphql',
95-
'GraphQL Language Server',
9697
serverOptions,
9798
clientOptions,
9899
debug,
99100
);
100101

101-
let clientLSPDisposable = client.start();
102-
context.subscriptions.push(clientLSPDisposable);
102+
const statusBarItem = createStatusBar();
103+
context.subscriptions.push(statusBarItem);
104+
105+
await client.start();
106+
initStatusBar(statusBarItem, client, window.activeTextEditor);
103107

104108
const commandShowOutputChannel = commands.registerCommand(
105109
'vscode-graphql.showOutputChannel',
@@ -108,28 +112,22 @@ export function activate(context: ExtensionContext) {
108112

109113
context.subscriptions.push(commandShowOutputChannel);
110114

111-
const statusBarItem = createStatusBar();
112-
context.subscriptions.push(statusBarItem);
113-
client.onReady().then(() => {
114-
initStatusBar(statusBarItem, client, window.activeTextEditor);
115-
});
116-
117115
commands.registerCommand('vscode-graphql.restart', async () => {
118116
outputChannel.appendLine(`Stopping GraphQL LSP`);
119117
await client.stop();
120118

121-
clientLSPDisposable.dispose();
122-
123119
outputChannel.appendLine(`Restarting GraphQL LSP`);
124-
clientLSPDisposable = client.start();
125-
context.subscriptions.push(clientLSPDisposable);
126-
120+
await client.start();
127121
outputChannel.appendLine(`GraphQL LSP restarted`);
128122
});
129123
}
130124

131125
export function deactivate() {
132-
console.log('Extension "vscode-graphql" has been de-activated!!');
126+
if (!client) {
127+
return undefined;
128+
}
129+
console.log('Extension "vscode-graphql" will be de-activated!!');
130+
return client.stop();
133131
}
134132

135133
function getConfig() {

0 commit comments

Comments
 (0)