Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

VScode Solidity extension - not finding openzepplin imports

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.

like image 990
parliament Avatar asked Nov 07 '22 01:11

parliament


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.

like image 108
Indraraj Avatar answered Dec 05 '22 22:12

Indraraj


Linting issues If you see something along the lines of:

ParserError: Source "OpenZeppelin/[email protected]/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/[email protected]",
    "@openzeppelin/=/Users/patrick/.brownie/packages/OpenZeppelin/[email protected]"
  ]
}

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

For more information see here

like image 20
Patrick Collins Avatar answered Dec 05 '22 21:12

Patrick Collins