为什么 Solidity Vscode Intellisense 仅在我明确指定 Open Zeppelin 合约时才有效

Why is Solidity Vscode Intellisense only working if i explicitly specify an Open Zeppelin contract

我正在努力配置我的 Vscode 正常工作。

我已经导入了 openzeppelin 的合约 - ERC721.sol 现在我希望它的函数 _mint() 在我开始在我的合同中输入它时在智能感知中可用,但这是我开始输入它然后单击 Ctrl+Space:

时看到的

同时,如果我明确键入合同名称 - 然后我可以看到智能感知自动完成:

如何才能在我开始输入后简单地获得此函数的智能感知建议?

更新:我提供了一个更大的代码片段并简化为最小的示例目的。

更新: 我意识到 vscode solidity 插件中的自动补全现在以一种忽略来自 node_modules 的模块的方式工作。测试它的快速方法 - 我将我的合同文件放入 ERC721.sol 旁边的 openzeppelin 模块文件夹 - 自动完成工作正常。 (由@marko-popovic 建议)

但问题仍然存在:难道我不能对 node_modules 中存在并导入到我的合同中的模块使用自动完成功能吗?

在你的例子中,ERC721 是从 NPM 导入的(使用@),而扩展演示视频中导入的文件与导入它们的合约位于同一目录中。

要启用智能感知,请继续使用 NPM 导入样式并在方法名称前加上 ERC721. 前缀(这是我的建议),或者将 openzepellin 代码手动移动到与您的合同相同的文件夹中。

最后,您无法使用当前版本的扩展来实现这一点,因为它显然可以正常工作,但对不同类型的导入有此限制。这可能会在未来的某个版本中得到改进,但如果您想立即获得该功能,您将不得不手动移动代码或寻找其他扩展。