vscode.commands.executeCommand 不起作用

Man*_*nta 5 javascript visual-studio-code vscode-extensions

我正在写VS代码扩展到帮助迁移React.createClass类扩展React.Component。这里的问题是,我无法vscode.commands.executeCommand('vscode.executeFormatDocumentProvider', ...)上班。

请注意,下面的代码是纯 JavaScript,而不是 TypeScript。

function activate(context) {
    context.subscriptions.push(vscode.commands.registerCommand('migrate-to-react-es6-class', () => {
        const editor = vscode.window.activeTextEditor
        const document = editor.document

        try {
            const originalCode = document.getText()
            const modifiedCode = 'do something and return new code'

            if (originalCode === modifiedCode) {
                vscode.window.showInformationMessage('Nothing is to be migrated.')

            } else {
                editor.edit(edit => {
                    const editingRange = document.validateRange(new vscode.Range(0, 0, Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER))
                    edit.replace(editingRange, modifiedCode)
                })

                if (document.isUntitled === false) {
                    vscode.commands.executeCommand('vscode.executeFormatDocumentProvider', document.uri, { insertSpaces: true, tabSize: 2 })
                }
            }

        } catch (error) {
            vscode.window.showErrorMessage(error.message)
            console.error(error)
        }
    }))
}
Run Code Online (Sandbox Code Playgroud)

Cra*_*nes 0

3.25 年之后,您现在可能已经弄清楚了这一点,但为了记录,我假设您在 editor.edit() 上挂了一个 .then() ,然后将 executeCommand 移到了 then() 内,对吧?

editor.edit(edit => {
    const editingRange = ...
    edit.replace(editingRange, modifiedCode)
}).then(editWorked => {if (editWorked && !document.isUntitled) {
    vscode.commands.executeCommand('vscode.executeFormatDocumentProvider', ...) })
Run Code Online (Sandbox Code Playgroud)