diff --git a/init.example.el b/init.example.el index 92a2163f1..64b6d2b27 100644 --- a/init.example.el +++ b/init.example.el @@ -104,6 +104,7 @@ rust ; Fe2O3.unwrap().unwrap().unwrap().unwrap() scala ; java, but good sh ; she sells (ba|z)sh shells on the C xor + solidity ; do you need a blockchain? No. swift ; who asked for emoji variables? typescript ; javascript, but better web ; the tubes diff --git a/modules/lang/solidity/README.org b/modules/lang/solidity/README.org new file mode 100644 index 000000000..b407c498f --- /dev/null +++ b/modules/lang/solidity/README.org @@ -0,0 +1,31 @@ +#+TITLE: :lang solidity + +This module adds [[https://github.com/ethereum/solidity][Solidity]] support through [[https://github.com/ethereum/emacs-solidity][solidity-mode]] + ++ Syntax-checking (~flycheck~) ++ Code completion (~[[https://github.com/ssmolkin1/company-solidity][company-solidity]]~) ++ Gas estimation(~C-c C-g~) + +* Install +There are two options for linters. + +** [[https://github.com/ethereum/solc-js][Solc]] +#+BEGIN_SRC sh +npm install -g solc +#+END_SRC + +** [[http://solium.readthedocs.io/en/latest/user-guide.html#installation][Solium]] +#+BEGIN_SRC sh +npm install -g solium +#+END_SRC + +By default *solium* looks for ~.soliumrc.json~ in the project directory, but you can set it to your own ~.soliumrc.json~ with this in your private doom ~config.el~ + +#+BEGIN_SRC emacs-lisp +(setq flycheck-solidity-solium-soliumrcfile "/$HOME/.soliumrc.json") +#+END_SRC + +They can be chained together so it's recommended you use both. *Solc* is ran first, and then *Solium* if *Solc* doesn't catch any errors. + +* TODO ++ Snippets diff --git a/modules/lang/solidity/config.el b/modules/lang/solidity/config.el new file mode 100644 index 000000000..ef09f7bef --- /dev/null +++ b/modules/lang/solidity/config.el @@ -0,0 +1,28 @@ +;;; lang/solidity/config.el -*- lexical-binding: t; -*- + +;; +;; Plugins +;; + +(def-package! solidity-mode + :mode "\\.sol$" + :init + (setq solidity-solc-path "$HOME/.node_modules/bin/solcjs") + (setq solidity-solium-path "$HOME/.node_modules/bin/solium") + + (setq solidity-flycheck-solc-checker-active t) + (setq solidity-flycheck-solium-checker-active t) + + (setq flycheck-solidity-solc-addstd-contracts t) + :config + (setq solidity-comment-style 'slash)) + +(def-package! company-solidity + :when (featurep! :completion company) + :after solidity-mode + :config + (add-hook 'solidity-mode-hook + (lambda () + (set (make-local-variable 'company-backends) + (append '((company-solidity company-capf company-dabbrev-code)) + company-backends))))) diff --git a/modules/lang/solidity/doctor.el b/modules/lang/solidity/doctor.el new file mode 100644 index 000000000..851008c5d --- /dev/null +++ b/modules/lang/solidity/doctor.el @@ -0,0 +1,8 @@ +;; -*- lexical-binding: t; no-byte-compile: t; -*- +;;; lang/solidity/doctor.el + +(unless (executable-find "solc") + (warn! "Solc isn't installed.")) + +(unless (executable-find "solium -V") + (warn! "Solium isn't installed.")) diff --git a/modules/lang/solidity/packages.el b/modules/lang/solidity/packages.el new file mode 100644 index 000000000..e778adbdf --- /dev/null +++ b/modules/lang/solidity/packages.el @@ -0,0 +1,6 @@ +;; -*- no-byte-compile: t; -*- +;;; lang/solidity/packages.el + +(package! solidity-mode) +(when (featurep! :completion company) + (package! company-solidity))