Skip to content

Commit

Permalink
feat: implemented provideRenameEdits
Browse files Browse the repository at this point in the history
  • Loading branch information
johnsoncodehk committed Jun 9, 2022
1 parent 6b05d17 commit 5ca6318
Show file tree
Hide file tree
Showing 2 changed files with 72 additions and 2 deletions.
62 changes: 60 additions & 2 deletions src/monaco/code2monaco.ts
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ export function asTextEdit(edit: vscode.TextEdit): monaco.languages.TextEdit {
}

export function asCompletionItemRange(textEdit: vscode.CompletionItem['textEdit']): monaco.languages.CompletionItem['range'] {
if (textEdit && 'insert' in textEdit && 'replace' in textEdit) {
if (textEdit && vscode.InsertReplaceEdit.is(textEdit)) {
const result: monaco.languages.CompletionItemRanges = {
insert: asRange(textEdit.insert),
replace: asRange(textEdit.replace),
Expand Down Expand Up @@ -142,7 +142,7 @@ export function asMarkdownString(markdownString: vscode.Hover['contents']): mona
}

export function asLocation(definition: vscode.LocationLink | vscode.Location): monaco.languages.Location {
if ('targetUri' in definition) {
if (vscode.LocationLink.is(definition)) {
return {
uri: asUri(definition.targetUri),
range: asRange(definition.targetRange),
Expand Down Expand Up @@ -227,3 +227,61 @@ export function asMarkerSeverity(severity: vscode.DiagnosticSeverity | undefined
return monaco.MarkerSeverity.Info;
}
}

export function asWorkspaceEdit(workspaceEdit: vscode.WorkspaceEdit): monaco.languages.WorkspaceEdit {
const result: monaco.languages.WorkspaceEdit = {
edits: [],
};
if (workspaceEdit.changes) {
for (const uri in workspaceEdit.changes) {
const edits = workspaceEdit.changes[uri];
for (const edit of edits) {
result.edits.push({
resource: asUri(uri),
edit: asTextEdit(edit),
});
}
}
}
if (workspaceEdit.documentChanges) {
for (const documentChange of workspaceEdit.documentChanges) {
if (vscode.TextDocumentEdit.is(documentChange)) {
for (const edit of documentChange.edits) {
result.edits.push({
resource: asUri(documentChange.textDocument.uri),
edit: asTextEdit(edit),
});
}
}
else if (vscode.CreateFile.is(documentChange)) {
result.edits.push({
newUri: asUri(documentChange.uri),
options: {
overwrite: documentChange.options?.overwrite ?? false,
ignoreIfExists: documentChange.options?.ignoreIfExists ?? false,
},
});
}
else if (vscode.RenameFile.is(documentChange)) {
result.edits.push({
oldUri: asUri(documentChange.oldUri),
newUri: asUri(documentChange.newUri),
options: {
overwrite: documentChange.options?.overwrite ?? false,
ignoreIfExists: documentChange.options?.ignoreIfExists ?? false,
},
});
}
else if (vscode.DeleteFile.is(documentChange)) {
result.edits.push({
oldUri: asUri(documentChange.uri),
options: {
recursive: documentChange.options?.recursive ?? false,
ignoreIfNotExists: documentChange.options?.ignoreIfNotExists ?? false,
},
});
}
}
}
return result;
}
12 changes: 12 additions & 0 deletions src/monaco/ls.ts
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,18 @@ export async function setupLs(modelsMap: Ref<Map<string, monaco.editor.ITextMode
}
},
}),
monaco.languages.registerRenameProvider(lang, {
provideRenameEdits: async (model, position, newName) => {
const codeResult = await ls.doRename(
model.uri.toString(),
monaco2code.asPosition(position),
newName,
);
if (codeResult) {
return code2monaco.asWorkspaceEdit(codeResult);
}
},
}),
monaco.languages.registerCompletionItemProvider(lang, {
// https://github.com/johnsoncodehk/volar/blob/2f786182250d27e99cc3714fbfc7d209616e2289/packages/vue-language-server/src/registers/registerlanguageFeatures.ts#L57
triggerCharacters: '!@#$%^&*()_+-=`~{}|[]\:";\'<>?,./ '.split(''),
Expand Down

0 comments on commit 5ca6318

Please sign in to comment.