Skip to content

Commit 7069031

Browse files
authored
(chore) bump lsp (#717)
Bump to new language server protocol version 3.16 with corresponding types. Also bump vscode-languageserver/languageclient. Caveat: Range/Position is now checked - all lines/columns must be 0 <= X <= MAX_INT, which means we cannot use Range.create on all occasions anymore. We need the temporary creation of invalid positions/ranges to deal with them later case-by-case ### BREAKING CHANGE vscode extension now requires a minimum vscode version of 1.52.0
1 parent 8f75353 commit 7069031

26 files changed

+237
-178
lines changed

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@
1515
"lint": "eslint \"packages/**/*.{ts,js}\""
1616
},
1717
"dependencies": {
18-
"axios": "0.19.2"
18+
"axios": "0.19.2",
19+
"typescript": "^4.1.3"
1920
},
2021
"devDependencies": {
2122
"@sveltejs/eslint-config": "github:sveltejs/eslint-config#v5.2.0",

packages/language-server/package.json

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "svelte-language-server",
3-
"version": "0.10.3",
3+
"version": "0.11.0",
44
"description": "A language server for Svelte",
55
"main": "dist/src/index.js",
66
"typings": "dist/src/index",
@@ -50,21 +50,18 @@
5050
"cosmiconfig": "^7.0.0",
5151
"estree-walker": "^2.0.1",
5252
"lodash": "^4.17.19",
53-
"prettier": "2.1.2",
53+
"prettier": "2.2.1",
5454
"prettier-plugin-svelte": "~1.4.1",
5555
"source-map": "^0.7.3",
56-
"svelte": "3.28.0",
56+
"svelte": "3.31.0",
5757
"svelte-preprocess": "~4.6.1",
5858
"svelte2tsx": "*",
5959
"typescript": "*",
60-
"vscode-css-languageservice": "4.2.0",
61-
"vscode-emmet-helper": "1.2.17",
62-
"vscode-html-languageservice": "3.1.4",
63-
"vscode-languageserver": "6.1.1",
64-
"vscode-languageserver-types": "3.15.1",
60+
"vscode-css-languageservice": "5.0.0",
61+
"vscode-emmet-helper": "2.1.2",
62+
"vscode-html-languageservice": "4.0.0",
63+
"vscode-languageserver": "7.0.0",
64+
"vscode-languageserver-types": "3.16.0",
6565
"vscode-uri": "2.1.2"
66-
},
67-
"resolutions": {
68-
"vscode-languageserver-types": "3.15.1"
6966
}
7067
}

packages/language-server/src/lib/DiagnosticsManager.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { IConnection, TextDocumentIdentifier, Diagnostic } from 'vscode-languageserver';
1+
import { _Connection, TextDocumentIdentifier, Diagnostic } from 'vscode-languageserver';
22
import { DocumentManager, Document } from './documents';
33

4-
export type SendDiagnostics = IConnection['sendDiagnostics'];
4+
export type SendDiagnostics = _Connection['sendDiagnostics'];
55
export type GetDiagnostics = (doc: TextDocumentIdentifier) => Thenable<Diagnostic[]>;
66

77
export class DiagnosticsManager {

packages/language-server/src/lib/documents/DocumentMapper.ts

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ import {
99
LocationLink,
1010
TextDocumentEdit,
1111
CodeAction,
12-
SelectionRange
12+
SelectionRange,
13+
TextEdit,
14+
InsertReplaceEdit
1315
} from 'vscode-languageserver';
1416
import { TagInformation, offsetAt, positionAt } from './utils';
1517
import { SourceMapConsumer } from 'source-map';
@@ -206,10 +208,14 @@ export function mapRangeToOriginal(
206208
fragment: Pick<DocumentMapper, 'getOriginalPosition'>,
207209
range: Range
208210
): Range {
209-
return Range.create(
210-
fragment.getOriginalPosition(range.start),
211-
fragment.getOriginalPosition(range.end)
212-
);
211+
// DON'T use Range.create here! Positions might not be mapped
212+
// and therefore return negative numbers, which makes Range.create throw.
213+
// These invalid position need to be handled
214+
// on a case-by-case basis in the calling functions.
215+
return {
216+
start: fragment.getOriginalPosition(range.start),
217+
end: fragment.getOriginalPosition(range.end)
218+
};
213219
}
214220

215221
export function mapRangeToGenerated(fragment: DocumentMapper, range: Range): Range {
@@ -227,7 +233,10 @@ export function mapCompletionItemToOriginal(
227233
return item;
228234
}
229235

230-
return { ...item, textEdit: mapObjWithRangeToOriginal(fragment, item.textEdit) };
236+
return {
237+
...item,
238+
textEdit: mapEditToOriginal(fragment, item.textEdit)
239+
};
231240
}
232241

233242
export function mapHoverToParent(
@@ -248,6 +257,26 @@ export function mapObjWithRangeToOriginal<T extends { range: Range }>(
248257
return { ...objWithRange, range: mapRangeToOriginal(fragment, objWithRange.range) };
249258
}
250259

260+
export function mapInsertReplaceEditToOriginal(
261+
fragment: Pick<DocumentMapper, 'getOriginalPosition'>,
262+
edit: InsertReplaceEdit
263+
): InsertReplaceEdit {
264+
return {
265+
...edit,
266+
insert: mapRangeToOriginal(fragment, edit.insert),
267+
replace: mapRangeToOriginal(fragment, edit.replace)
268+
};
269+
}
270+
271+
export function mapEditToOriginal(
272+
fragment: Pick<DocumentMapper, 'getOriginalPosition'>,
273+
edit: TextEdit | InsertReplaceEdit
274+
): TextEdit | InsertReplaceEdit {
275+
return TextEdit.is(edit)
276+
? mapObjWithRangeToOriginal(fragment, edit)
277+
: mapInsertReplaceEditToOriginal(fragment, edit);
278+
}
279+
251280
export function mapDiagnosticToGenerated(
252281
fragment: DocumentMapper,
253282
diagnostic: Diagnostic

packages/language-server/src/ls-config.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { merge, get } from 'lodash';
22
import { UserPreferences } from 'typescript';
3-
import { EmmetConfiguration } from 'vscode-emmet-helper';
3+
import { VSCodeEmmetConfig } from 'vscode-emmet-helper';
44

55
/**
66
* Default config for the language server.
@@ -219,7 +219,7 @@ export class LSConfigManager {
219219
}
220220
};
221221
private prettierConfig: any = {};
222-
private emmetConfig: EmmetConfiguration = {};
222+
private emmetConfig: VSCodeEmmetConfig = {};
223223

224224
/**
225225
* Updates config.
@@ -268,11 +268,11 @@ export class LSConfigManager {
268268
this.listeners.push(callback);
269269
}
270270

271-
updateEmmetConfig(config: EmmetConfiguration): void {
271+
updateEmmetConfig(config: VSCodeEmmetConfig): void {
272272
this.emmetConfig = config || {};
273273
}
274274

275-
getEmmetConfig(): EmmetConfiguration {
275+
getEmmetConfig(): VSCodeEmmetConfig {
276276
return this.emmetConfig;
277277
}
278278

packages/language-server/src/plugins/css/CSSPlugin.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ export class CSSPlugin
203203
.getGlobalVars()
204204
.map((globalVar) => ({
205205
label: `var(${globalVar.name})`,
206-
sortText: `-`,
206+
sortText: '-',
207207
detail: `${globalVar.filename}\n\n${globalVar.name}: ${globalVar.value}`,
208208
kind: CompletionItemKind.Value
209209
}));

packages/language-server/src/plugins/html/HTMLPlugin.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -158,10 +158,13 @@ export class HTMLPlugin implements HoverProvider, CompletionsProvider {
158158
insertText:
159159
existingCompletion.insertText &&
160160
`${existingCompletion.insertText} lang="${lang}"`,
161-
textEdit: existingCompletion.textEdit && {
162-
range: existingCompletion.textEdit.range,
163-
newText: `${existingCompletion.textEdit.newText} lang="${lang}"`
164-
}
161+
textEdit:
162+
existingCompletion.textEdit && TextEdit.is(existingCompletion.textEdit)
163+
? {
164+
range: existingCompletion.textEdit.range,
165+
newText: `${existingCompletion.textEdit.newText} lang="${lang}"`
166+
}
167+
: undefined
165168
})
166169
);
167170
}

packages/language-server/src/plugins/svelte/features/getCodeActions/getRefactorings.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ async function executeExtractComponentCommand(
5454

5555
return <WorkspaceEdit>{
5656
documentChanges: [
57-
TextDocumentEdit.create(VersionedTextDocumentIdentifier.create(svelteDoc.uri, null), [
57+
TextDocumentEdit.create(VersionedTextDocumentIdentifier.create(svelteDoc.uri, 0), [
5858
TextEdit.replace(range, `<${componentName}></${componentName}>`),
5959
createComponentImportTextEdit()
6060
]),
@@ -91,7 +91,7 @@ async function executeExtractComponentCommand(
9191
.map((tag) => tag.text)
9292
.join('');
9393

94-
return TextDocumentEdit.create(VersionedTextDocumentIdentifier.create(newFileUri, null), [
94+
return TextDocumentEdit.create(VersionedTextDocumentIdentifier.create(newFileUri, 0), [
9595
TextEdit.insert(Position.create(0, 0), newText)
9696
]);
9797

packages/language-server/src/plugins/typescript/features/CodeActionsProvider.ts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ export class CodeActionsProviderImpl implements CodeActionsProvider {
7575
changes.map(async (change) => {
7676
// Organize Imports will only affect the current file, so no need to check the file path
7777
return TextDocumentEdit.create(
78-
VersionedTextDocumentIdentifier.create(document.url, null),
78+
VersionedTextDocumentIdentifier.create(document.url, 0),
7979
change.textChanges.map((edit) => {
8080
let range = mapRangeToOriginal(fragment, convertRange(fragment, edit.span));
8181
// Handle svelte2tsx wrong import mapping:
@@ -131,10 +131,7 @@ export class CodeActionsProviderImpl implements CodeActionsProvider {
131131
docs.set(change.fileName, doc);
132132
}
133133
return TextDocumentEdit.create(
134-
VersionedTextDocumentIdentifier.create(
135-
pathToUrl(change.fileName),
136-
null
137-
),
134+
VersionedTextDocumentIdentifier.create(pathToUrl(change.fileName), 0),
138135
change.textChanges.map((edit) => {
139136
if (
140137
fix.fixName === 'import' &&
@@ -214,10 +211,10 @@ export class CodeActionsProviderImpl implements CodeActionsProvider {
214211
...refactor,
215212
title: refactor.title
216213
.replace(
217-
'Extract to inner function in function \'render\'',
214+
"Extract to inner function in function 'render'",
218215
'Extract to function'
219216
)
220-
.replace('Extract to constant in function \'render\'', 'Extract to constant')
217+
.replace("Extract to constant in function 'render'", 'Extract to constant')
221218
}))
222219
);
223220
}
@@ -295,7 +292,7 @@ export class CodeActionsProviderImpl implements CodeActionsProvider {
295292

296293
const documentChanges = edits?.edits.map((edit) =>
297294
TextDocumentEdit.create(
298-
VersionedTextDocumentIdentifier.create(document.uri, null),
295+
VersionedTextDocumentIdentifier.create(document.uri, 0),
299296
edit.textChanges.map((edit) => {
300297
let range = mapRangeToOriginal(fragment, convertRange(fragment, edit.span));
301298
// Some refactorings place the new code at the end of svelte2tsx' render function,

packages/language-server/src/plugins/typescript/features/UpdateImportsProvider.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ export class UpdateImportsProviderImpl implements UpdateImportsProvider {
4747
}
4848

4949
return TextDocumentEdit.create(
50-
VersionedTextDocumentIdentifier.create(fragment.getURL(), null),
50+
VersionedTextDocumentIdentifier.create(fragment.getURL(), 0),
5151
change.textChanges.map((edit) => {
5252
const range = mapRangeToOriginal(
5353
fragment!,

0 commit comments

Comments
 (0)