Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript vscode.commands.executeCommand不工作_Javascript_Visual Studio Code_Vscode Extensions - Fatal编程技术网

Javascript vscode.commands.executeCommand不工作

Javascript vscode.commands.executeCommand不工作,javascript,visual-studio-code,vscode-extensions,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.comma

我正在编写一个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)
        }
    }))
}

3.25年后,您现在可能已经明白了这一点,但是为了记录在案,我假设您在editor.edit()上挂了一个.then(),然后将executeCommand移动到then()中,对吗


您必须应用返回的编辑

private async formatDocument(): Promise<void> {
    const docUri = this.textEditor.document.uri;
    const textEdits = (await vscode.commands.executeCommand(
        'vscode.executeFormatDocumentProvider',
        docUri,
    )) as vscode.TextEdit[];
    const edit = new vscode.WorkspaceEdit();
    for (const textEdit of textEdits) {
        edit.replace(docUri, textEdit.range, textEdit.newText);
    }
    await vscode.workspace.applyEdit(edit);
}
private async formatDocument():承诺{
const docUri=this.textdeditor.document.uri;
const textEdits=(等待vscode.commands.executeCommand(
'vscode.executeFormatDocumentProvider',
多库里,
))作为vscode.TextEdit[];
const edit=new vscode.workspacedit();
for(文本编辑的常量文本编辑){
edit.replace(docUri,textEdit.range,textEdit.newText);
}
等待vscode.workspace.applyEdit(编辑);
}

我直接在extension.ts中实现了它:

    commands.registerCommand(constants.commands.formatDocument, async () => {
    const docUri = editor?.document.uri;
    const textEdits: TextEdit[] | undefined = await commands.executeCommand(
      'vscode.executeFormatDocumentProvider',
      docUri
    );
    if (textEdits && docUri) {
      const edit = new WorkspaceEdit();
      for (const textEdit of textEdits) {
        edit.replace(docUri, textEdit.range, textEdit.newText);
      }
      await workspace.applyEdit(edit);
    }
  });
constants.commands.formatDocument
解析my package.json后获取值

    commands.registerCommand(constants.commands.formatDocument, async () => {
    const docUri = editor?.document.uri;
    const textEdits: TextEdit[] | undefined = await commands.executeCommand(
      'vscode.executeFormatDocumentProvider',
      docUri
    );
    if (textEdits && docUri) {
      const edit = new WorkspaceEdit();
      for (const textEdit of textEdits) {
        edit.replace(docUri, textEdit.range, textEdit.newText);
      }
      await workspace.applyEdit(edit);
    }
  });