VScode Solidity extension - not finding openzepplin imports

Viewed 3503

I'm trying to get started with what should be a very simple Solidity contract but VSCode is giving me a hard time. I'm using Juan Blancos solidity plugin but VSCode cannot find openzepplin imports

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

The error is:

Source "@openzeppelin/contracts/token/ERC20/ERC20.sol" not found: File import callback not supported

Even though vscode shows red squigglies I can compile successfully via hardhat compile.

If I change the path to

import "../node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol";

VScode stops complaining but then I cannot compile via hardhard, with the error being:

Source "node_modules/@openzeppelin/contracts/security/Pausable.sol" not found: File outside of allowed directories.

My VSCode settings for Solidity extension for both User and Workspace are:

"solidity.packageDefaultDependenciesContractsDirectory": "contracts",
"solidity.packageDefaultDependenciesDirectory": "node_modules"

Which corresponds to my project structure

root 
 |_ contracts
    |_ MyToken.sol
 |_ node_modules
    |_ @openzepplin

I followed the instructions here and have done extensive researching but unfortunately can't get it to working.

2 Answers
Source "@openzeppelin/contracts/token/ERC20/ERC20.sol" not found: File import callback not supported

I had same issue. I had multiple folders added in the unnamed workspace. After removing all other folders and keeping only one project folder resolved issue for me.

Linting issues If you see something along the lines of:

ParserError: Source "OpenZeppelin/openzeppelin-contracts@3.4.0/contracts/access/Ownable.sol" not found: File not found.
import "@openzeppelin/contracts/access/Ownable.sol";

In your vscode, these and be safely ignored. However you can also add to your settings to ignore these.

  1. Create a .vscode folder at the root of your project.
  2. Create a file called settings.json Add the following code:
{
  "solidity.remappings": [
    "@chainlink/=/Users/patrick/.brownie/packages/smartcontractkit/chainlink-brownie-contracts@0.2.2",
    "@openzeppelin/=/Users/patrick/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.3.2"
  ]
}

Or whatever version your @chainlink and @openzeppelin contracts need. For example: enter image description here

For more information see here

Related