Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion extensions/markdown-language-features/src/client/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ export class MdLanguageClient implements IDisposable {
return this.#client.sendRequest(proto.getUpdatePastedLinksEdit, {
metadata,
pasteIntoDoc: pastingIntoDoc.toString(),
edits: edits.map(edit => lsp.TextEdit.replace(toLspRange(edit.range), edit.newText)),
edits: edits.map(proto.serializeTextEdit),
}, token);
}
}
Expand Down
18 changes: 17 additions & 1 deletion extensions/markdown-language-features/src/client/protocol.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,23 @@ export const getReferencesToFileInWorkspace = new RequestType<{ uri: string }, l
export const getEditForFileRenames = new RequestType<Array<FileRename>, { participatingRenames: readonly FileRename[]; edit: lsp.WorkspaceEdit }, any>('markdown/getEditForFileRenames');

export const prepareUpdatePastedLinks = new RequestType<{ uri: string; ranges: lsp.Range[] }, string, any>('markdown/prepareUpdatePastedLinks');
export const getUpdatePastedLinksEdit = new RequestType<{ pasteIntoDoc: string; metadata: string; edits: lsp.TextEdit[] }, lsp.TextEdit[] | undefined, any>('markdown/getUpdatePastedLinksEdit');
/** Text edit wire format expected by vscode-markdown-languageserver. */
export type SerializedTextEdit = {
readonly range: readonly [lsp.Position, lsp.Position];
readonly newText: string;
};

export function serializeTextEdit(edit: vscode.TextEdit): SerializedTextEdit {
return {
range: [
{ line: edit.range.start.line, character: edit.range.start.character },
{ line: edit.range.end.line, character: edit.range.end.character },
],
newText: edit.newText,
};
}

export const getUpdatePastedLinksEdit = new RequestType<{ pasteIntoDoc: string; metadata: string; edits: SerializedTextEdit[] }, lsp.TextEdit[] | undefined, any>('markdown/getUpdatePastedLinksEdit');

export const fs_watcher_onChange = new RequestType<{ id: number; uri: string; kind: 'create' | 'change' | 'delete' }, void, any>('markdown/fs/watcher/onChange');

Expand Down
23 changes: 23 additions & 0 deletions extensions/markdown-language-features/src/test/protocol.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/

import * as assert from 'assert';
import 'mocha';
import * as vscode from 'vscode';
import { serializeTextEdit } from '../client/protocol';

suite('Markdown protocol', () => {
test('serializes text edits using the server range format', () => {
const edit = new vscode.TextEdit(new vscode.Range(1, 2, 3, 4), 'new text');

assert.deepStrictEqual(serializeTextEdit(edit), {
range: [
{ line: 1, character: 2 },
{ line: 3, character: 4 },
],
newText: 'new text',
});
});
});
Loading