diff --git a/package.json b/package.json index 0c46b34..09ec2cf 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,8 @@ "title": "Ruby: lint by rubocop" }, { - "command": "editor.action.formatDocument", + "command": "ruby.rubocop.autocorrect", + "when": "editorLangId == 'ruby' || editorLangId == 'gemfile'", "title": "Ruby: autocorrect by rubocop" } ], diff --git a/src/extension.ts b/src/extension.ts index 1873d04..8cd0eb6 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -47,4 +47,20 @@ export function activate(context: vscode.ExtensionContext): void { 'gemfile', formattingProvider ); + + const autocorrectDisposable = vscode.commands.registerCommand('ruby.rubocop.autocorrect', () => { + vscode.window.activeTextEditor.edit((editBuilder) => { + const document = vscode.window.activeTextEditor.document; + const edits = formattingProvider.provideDocumentFormattingEdits(document); + // We only expect one edit from our formatting provider. + if (edits.length === 1) { + const edit = edits[0]; + editBuilder.replace(edit.range, edit.newText); + } + if (edits.length > 1) { + throw new Error("Unexpected error: Rubocop document formatter returned multiple edits."); + } + }); + }); + context.subscriptions.push(autocorrectDisposable); }