Skip to content
| Marketplace
Sign in
Visual Studio Code>Programming Languages>SolidityNew to Visual Studio Code? Get it now.

Solidity

Nomic Foundation

|
87,459 installs
| (10) | Free
Solidity and Hardhat support by the Hardhat team
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Solidity by Nomic Foundation

This extension adds language support for Solidity to Visual Studio Code, and provides editor integration for Hardhat projects. Integrations for other tools are coming in the near future. It supports:

  • Code completion
  • Go to definition, type definition and references
  • Symbol renames
  • Solidity code formatting
  • Inline code validation from compiler errors/warnings for Hardhat projects
  • Hover help for variables, function calls, errors, events etc.
  • Code actions (quickfixes) suggested from compiler errors/warnings for Hardhat projects
    • Implement missing functions on interface with stubs
    • Constrain mutability by adding view/pure to function signature
    • Meet inheritance requirements by adding virtual/override on function signature
    • Provide accessibility by adding public/private to function signature
    • Specify license identifier and pragma solidity version

Built by the Nomic Foundation. We’re hiring.


Table of Contents

  • Installation
  • Features
  • Setup
  • Hardhat Projects
    • Monorepo Support
  • Formatting
    • Formatting Configuration
  • Feedback, help and news

Installation

Solidity by Nomic Foundation can be installed by using the Visual Studio Code Marketplace.

Some features (e.g. inline validation, quick fixes) are still experimental and are only enabled within a Hardhat project, this is a limitation that will be lifted with future releases.

Features

Code Completions

Solidity by Nomic Foundation autocompletes references to existing symbols (e.g. contract instances, globally available variables and built-in types like arrays) and import directives (i.e. it autocompletes the path to the imported file).

Direct imports (those not starting with ./ or ../) are completed based on suggestions from ./node_modules.

Relative imports pull their suggestions from the file system based on the current solidity file's location.

Import completions

Natspec documentation completion is also supported

Natspec contract completions

Natspec function completions


Navigation

Move through your codebase with semantic navigation commands:

Go to Definition

Navigates to the definition of an identifier.

Go to Type Definition

Navigates to the type of an identifier.

Go to References

Shows all references of the identifier under the cursor.

Navigation


Renames

Rename the identifier under the cursor and all of its references:

Rename


Format document

Apply solidity formatting to the current document.

The formatting configuration can be overriden through a .prettierrc file, see Formatting Configuration.

Reformat


Hover

Hovering the cursor over variables, function calls, errors and events will display a popup showing type and signature information:

Hover


Inline code validation (Diagnostics)

As code is edited, Solidity by Nomic Foundation runs the solc compiler over the changes and displays any warnings or errors it finds.

This feature is only available in solidity files that are part of a Hardhat project, as Hardhat is used for import resolution, see Hardhat Projects for details.

Diagnostic


Code Actions

Code actions, or quickfixes are refactorings suggested to resolve a solc warning or error.

A line with a warning/error that has a code action, will appear with small light bulb against it; clicking the light bulb will provide the option to trigger the code action.

Implement missing functions on interface

A contract that implements an interface, but is missing functions specified in the interface, will get a solidity(3656) error.

The matching code action Add missing functions from interface will determine which functions need to be implemented to satisfy the interface and add them as stubs to the body of the contract.

Implement interface

Constrain mutability

A function without a mutability keyword but which does not update contract state will show a solidity(2018) warning, with solc suggesting adding either the view or pure keyword depending on whether the function reads from state.

The matching code action Add view/pure modifier to function declaration resolves the warning by adding the keyword to the function signature.

Constrain Mutability

Adding virtual/override on inherited function signature

A function in an inheriting contract, that has the same name and parameters as a function in the base contract, causes solidity(4334) in the base contract function if it does not have the virtual keyword and solidity(9456) in the inheriting contract function if does not have the override keyword.

The Add virtual specifier to function definition and Add override specifier to function definition code actions appear against functions with these errors.

Virtual and Override

Adding public/private to function signature

A function without an accessibility keyword will cause the solidity(4937) error.

Two code actions will appear against a function with this error: Add public visibility to declaration and Add private visibility to declaration.

Public Private

Adding license identifier and pragma solidity version

When no license is specified on a contract, the solidity(1878) warning is raised by the compiler. Similarly, when no compiler version is specified with a pragma solidity statement, the compiler shows the solidity(3420) warning. There are code actions available for quick fixes.

Add license specifier

Add pragma solidity

Specifying data location for variables

Some types require you to specify a data location (memory, storage, calldata), depending on where they are defined. The available code actions allow the user to add, change or remove data locations depending on the error being raised.

Data location quickfix

Fix addresses checksum

The solidity compiler requires explicit addresses to be in the correct checksummed format. This quickfix transforms any address to the correct checksummed version.

Address checksum

Commands

Compile project

When working on a hardhat project, the command Hardhat: Compile project is available on the command palette. This will trigger a hardhat compile run.

Compile command

Clean artifacts

When working on a hardhat project, the command Hardhat: Clear cache and artifacts is present on the command palette. This will trigger a hardhat clean run.

Clean command

Flatten contract

When working on a solidity file inside a hardhat project, the command Hardhat: Flatten this file and its dependencies is present on the command palette and the context menu. This will trigger a hardhat flatten $FILE run, and will output the result in a new file tab.

Flatten command

Task provider

The extension is registered as a task provider for hardhat projects, in which the build task is provided , running hardhat compile, and the test task, which runs hardhat test.


Setup

This extension should work without any configuration. If formatting functionality isn't working, or you have previously configured another Solidity formatter, please see the formatting section.

Hardhat Projects

Solidity by Nomic Foundation provides enhanced functionality for Solidity files within a Hardhat project, including inline validation and quick fixes.

To take advantage of these features, use the File menu to Open Folder, and select the folder containing the hardhat.config.{js,ts} file.

Inline validation (the display of compiler errors and warnings against the code) is based on your Hardhat configuration file. The version of the solc solidity compiler used for validation is set within this file, see the Hardhat documentation for more details.

Monorepo Support

Solidity by Nomic Foundation will detect Hardhat projects (folders containing a hardhat.config.{js,ts} file) within a monorepo, when the root of the monorepo is opened as a workspace folder.

The Hardhat config file that is used when validating a Solidity file is shown in the Solidity section on the Status Bar:

Open Config

Formatting

Solidity by Nomic Foundation provides formatting support for .sol files, by leveraging prettier-plugin-solidity.

Note: if you currently have other solidity extensions installed, or have had previously, they may be set as your default formatter for solidity files.

To set Solidity by Nomic Foundation as your default formatter for solidity files:

  1. Within a Solidity file run the Format Document With command, either through the command palette, or by right clicking and selecting through the context menu:

Format Document With

  1. Select Configure Default Formatter...

Format Document With

  1. Select Solidity as the default formatter for solidity files

Format Document With

Formatting Configuration

The default formatting rules that will be applied are taken from prettier-plugin-solidity, with the exception that explicitTypes are preserved (rather than forced).

To override the settings, add a prettierrc configuration file at the root of your project. Add a *.sol file override to the prettier configuration file and change from the defaults shown:

// .prettierrc.json
{
  "overrides": [
    {
      "files": "*.sol",
      "options": {
        "printWidth": 80,
        "tabWidth": 4,
        "useTabs": false,
        "singleQuote": false,
        "bracketSpacing": false,
        "explicitTypes": "preserve"
      }
    }
  ]
}

Feedback, help and news

Hardhat Support Discord server: for questions and feedback.

Follow Hardhat on Twitter.

  • Contact us
  • Jobs
  • Privacy
  • Terms of use
  • Trademarks
© 2023 Microsoft