From df34916300356744e7febda8f91da177b7e09e3e Mon Sep 17 00:00:00 2001 From: Brooklyn Zelenka Date: Tue, 22 Jan 2019 13:00:45 -0800 Subject: [PATCH] Add solidity layer --- CHANGELOG.develop | 4 ++ layers/+lang/solidity/README.org | 73 +++++++++++++++++++++++++ layers/+lang/solidity/img/solidity.png | Bin 0 -> 8739 bytes layers/+lang/solidity/layers.el | 12 ++++ layers/+lang/solidity/packages.el | 38 +++++++++++++ 5 files changed, 127 insertions(+) create mode 100644 layers/+lang/solidity/README.org create mode 100644 layers/+lang/solidity/img/solidity.png create mode 100644 layers/+lang/solidity/layers.el create mode 100644 layers/+lang/solidity/packages.el diff --git a/CHANGELOG.develop b/CHANGELOG.develop index c0741a2b6..4e701df5b 100644 --- a/CHANGELOG.develop +++ b/CHANGELOG.develop @@ -325,6 +325,7 @@ sane way, here is the complete list of changed key bindings - perl6 (thanks to Bahtiar Gadimov and yuhan0) - prolog (thanks to Newres Al Haider) - reasonml (thanks to fredyr and Dave Aitken) +- solidity (thanks to Brooklyn Zelenka) - protobuf (thanks to Amol Mandhane) - restructuredtext (thanks to Wei-Wei Guo and Kalle Lindqvist) - semantic-web (thanks to Andreas Textor) @@ -2722,6 +2723,9 @@ Other: - Fixed =helm= menu display (thanks to Leslie Shawn Russell) **** Smex - Fixed ~SPC m :~ for current major mode commands (thanks to tinysong) +**** Solidity +- Key bindings: + - Added ~SPC m g~ Estimate gas at point (thanks to Brooklyn Zelenka) **** Source control - Install orgit only when org package is used (thanks to Boris Buliga) - Defer git-gutter loading (thanks to Aaron Jensen) diff --git a/layers/+lang/solidity/README.org b/layers/+lang/solidity/README.org new file mode 100644 index 000000000..6d9b6ce27 --- /dev/null +++ b/layers/+lang/solidity/README.org @@ -0,0 +1,73 @@ +#+TITLE: Solidity Layer + +[[file:img/solidity.png]] + +* Table of Contents :TOC_4_gh:noexport: +- [[#description][Description]] + - [[#features][Features:]] +- [[#install][Install]] + - [[#layer][Layer]] + - [[#linter][Linter]] + - [[#solc][solc]] + - [[#ethlint][Ethlint]] +- [[#options][Options]] +- [[#key-bindings][Key bindings]] + +* Description + +A layer to support Solidity development in Spacemacs. + +** Features: +- Syntax highlighting +- Syntax checking +- Gas estimation + +* Install +** Layer +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =solidity= to the existing =dotspacemacs-configuration-layers= list in this +file. + +** Linter +*** solc +To use the solc flycheck checker, install [[https://solidity.readthedocs.io][solc]], and enable it in your =~/.spacemacs=. + +#+BEGIN_SRC emacs-lisp + (solidity :variables + solidity-flycheck-solc-checker-active t) +#+END_SRC + +Please note that you can't use [[https://github.com/ethereum/solc-js][solc-js]] for the solc flycheck checker. + +*** Ethlint +To use solium flycheck checker, install [[https://github.com/duaraghav8/Ethlint][Ethlint]]. + +#+BEGIN_SRC sh + npm i -g ethlint +#+END_SRC + +Then enable it in your =~/.spacemacs=: + +#+BEGIN_SRC emacs-lisp + (solidity :variables + solidity-flycheck-solium-checker-active t) +#+END_SRC + +And make sure that =.soliumrc.json= exists in the root directory of your DApp: + +#+BEGIN_SRC sh + solium --init +#+END_SRC + +* Options + +| Variable | Default value | Description | +|-------------------------------------------+---------------+------------------------------------------------------------| +| =solidity-flycheck-solc-checker-active= | =nil= | If non-nil, use solc flycheck checker for Solidity Mode. | +| =solidity-flycheck-solium-checker-active= | =nil= | If non-nil, use solium flycheck checker for Solidity Mode. | + +* Key bindings + +| Key Binding | Description | +|-------------+-----------------------| +| ~SPC m g~ | Estimate gas at point | diff --git a/layers/+lang/solidity/img/solidity.png b/layers/+lang/solidity/img/solidity.png new file mode 100644 index 0000000000000000000000000000000000000000..4037b2a690a01875b331a566c8407b9a3da4cf15 GIT binary patch literal 8739 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 literal 0 HcmV?d00001 diff --git a/layers/+lang/solidity/layers.el b/layers/+lang/solidity/layers.el new file mode 100644 index 000000000..db8260e74 --- /dev/null +++ b/layers/+lang/solidity/layers.el @@ -0,0 +1,12 @@ +;;; layers.el --- Solidity Layer Configuration File for Spacemacs +;; +;; Copyright (c) 2012-2019 Sylvain Benner & Contributors +;; +;; Author: Seong Yong-ju +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(configuration-layer/declare-layer-dependencies '(node)) diff --git a/layers/+lang/solidity/packages.el b/layers/+lang/solidity/packages.el new file mode 100644 index 000000000..48666e3e0 --- /dev/null +++ b/layers/+lang/solidity/packages.el @@ -0,0 +1,38 @@ +;;; packages.el --- solidity layer packages file for Spacemacs. +;; +;; Copyright (c) 2012-2017 Sylvain Benner & Contributors +;; +;; Author: Brooklyn Zelenka +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;;; Code: + +(defconst solidity-packages + '( + add-node-modules-path + flycheck + solidity-mode + solidity-flycheck)) + +(defun solidity/post-init-add-node-modules-path () + (add-hook 'solidity-mode-hook #'add-node-modules-path)) + +(defun solidity/init-solidity-mode () + (use-package solidity-mode + :defer t + :config + (spacemacs/set-leader-keys-for-major-mode 'solidity-mode + "g" #'solidity-estimate-gas-at-point))) + +(defun solidity/post-init-flycheck () + (spacemacs/enable-flycheck 'solidity-mode)) + +(defun solidity/init-solidity-flycheck () + (use-package solidity-flycheck + :defer t + :init + (add-hook 'solidity-mode-hook #'(lambda () (require 'solidity-flycheck)))))