/solc-lsp

LSP functions for solidity using solc's AST

Primary LanguageTypeScriptApache License 2.0Apache-2.0

CircleCI

Solidity Language Server Functions

Here is a demo of a VS Code extension that uses this: extension demo

Here we have "Language Server" functions for Solidity via the npm package solc. The functions are the underlying workhorse function that would be used to implement the Microsoft Language Server Protocol Specification which is defined here.

To get started and make sure what we have is complete, there is a prototype using this on the client side to provide a VSCode extension for Solidity.

I hope to incorporate this in the remix, etheratom, VSCode solidity and other JavaScript projects that benefit from the information in Solidity's AST.

Prerequisites...

You need to have installed:

  • nodejs. Use node version 10.x. Node version 12 cannot be used. See below for details
  • npm

Node version 12 and VSCode Problems

One of the npm dependencies is solc. This npm package has a dependency on the scrypt cryptographic package. Nodejs version 12 doesn't work with this. See barrysteyn/node-scrypt#193. I developed and tested this on node version 10.16.0.

When used as a client library with the VSCode extension, I also needed to replace script.js with script-js which is currently in the web3-eth-accounts package. Otherwise, VSCode will crash silently. When used inside VSCode with the language server protocol, this won't happen.

Installing from NPM

$ npm  install solc-lsp

Installing from the github repository

Clone the repository.

$ git clone https://github.com/rocky/solc-lsp.git
Cloning into 'solc-lsp
remote: Enumerating objects: 169, done.
   ...
$ cd solc-lsp
$ npm install

Testing

$ npm test

This code runs solc. Specific versions of the Solidity compiler are downloaded when it is detected they are needed.

Thanks

A big thanks to my employer, ConsenSys, for giving me the opportunity to work on this and providing the funding for this project.