首页 > 解决方案 > 相同的 CompletionItemProvider 适用于 javascript 但不适用于 json 文件

问题描述

    context.subscriptions.push(vscode.languages.registerCompletionItemProvider(['json', 'javascript'], {
        provideCompletionItems: completionProvider,
    }, ...['"', '/']))
}

completionProvider (document: vscode.TextDocument, position: vscode.Position) => {
    return ['foo', 'foo2', 'foo3'].map(item => ({ label: item })) 
}

它可以用于 js 文件,但不能用于 json 文件。JSON类型的文件有什么机制可以防止智能吗? 在此处输入图像描述

标签: typescriptvisual-studio-codepluginsvscode-extensions

解决方案


这是一段有效的代码:

context.subscriptions.push(vscode.languages.registerCompletionItemProvider(

  ['json', 'javascript'],
  {
    provideCompletionItems(document, position) {
      return ['foo', 'foo2', 'foo3'].map(item => {
          let completionItem = new vscode.CompletionItem(item);  // change to this
          completionItem.range = new vscode.Range(position, position);  // you need this for json
          return completionItem;
      })
    }
  },
  ...['"', "/"]
  )
); 

range选项专门用于json文件。它与一个的含义有关,例如json与不同。javascript请参阅JSON 完成的自定义扩展在双引号中不起作用https://stackoverflow.com/a/64593598/836330


推荐阅读