;;; package --- Solidity mode ;;; Commentary: ;;; Code: (require-package 'solidity-mode) (require-package 'solidity-flycheck) (require-package 'company-solidity) ;; https://emacs.stackexchange.com/a/17565/12560 (defun solidity-custom-settings () (setq indent-tabs-mode nil) (setq tab-width 4) (setq c-basic-offset 4)) (add-hook 'solidity-mode-hook 'solidity-custom-settings) (setq c-basic-offset 4) ;; https://github.com/ethereum/emacs-solidity ;(define-key map (kbd "C-c C-g") 'solidity-estimate-gas-at-point) (setq solidity-solc-path "/usr/local/bin/solc-static-linux-0.4.24") (setq solidity-solium-path "~/.nvm/versions/node/v9.4.0/bin/solium") (setq solidity-flycheck-solc-checker-active t) (setq solidity-flycheck-solium-checker-active t) (setq flycheck-solidity-solc-addstd-contracts t) (setq flycheck-solidity-solium-soliumrcfile "~/workspace/aragonOS/.soliumrc.json") (add-hook 'solidity-mode-hook (lambda () (set (make-local-variable 'company-backends) (append '((company-solidity company-capf company-dabbrev-code)) company-backends)))) ;; https://gitlab.haskell.org/ghc/ghc/wikis/emacs (require 'whitespace) (defun solidity-custom-line-length () (setq whitespace-style '(face lines-tail)) (setq whitespace-line-column 145) (global-whitespace-mode t)) (add-hook 'solidity-mode-hook 'solidity-custom-line-length) ;; See this issue about indentation and general solidity style: ;; https://github.com/ethereum/emacs-solidity/issues/32 ;; Create ethereum c/c++ style (defconst ethereum-c-style '((c-tab-always-indent . t) ;; always syntactically analyze and indent macros (c-syntactic-indentation-in-macros . t) ;; auto align backslashes for continuation (c-auto-align-backslashes . t) (c-comment-only-line-offset . 4) (c-hanging-braces-alist . ((substatement-open after) (brace-list-open))) (c-hanging-colons-alist . ((member-init-intro before) (inher-intro) (case-label after) (label after) (access-label after))) (c-cleanup-list . (scope-operator empty-defun-braces defun-close-semi)) (c-offsets-alist . ( ;; lineup the current argument line under the ;; first argument ;; (arglist-close . c-lineup-arglist) (arglist-close . 0) ;; <-- or not (arglist-cont-nonempty . 4) (substatement-open . 0) (case-label . 0) (label . 0) (block-open . 4) ;; Don't indent first brace of a class's function (inline-open . 0) ;; all opens should be indented (brace-list-open . 4) ;; indent after case (statement-case-intro . 4) ;; indent after entering a block (statement-block-intro . 4) ;; indent after entering a function definition (defun-block-intro . 4) ;; indent when entering class/struct (inclass . 4) ;; don't indent the first line in a topmost construct (topmost-intro . 0) ;; first line after if/while/for/do/else (substatement . 4) ;; don't indent when in extern scope (inextern-lang . 0) ;; when ; does not end a stmt do indent (statement-cont . 4) ;; c++ constructor member initi no indent (member-init-intro . 4) (member-init-cont . 4) ;; don't indent c++ namespace (innamespace . 0) ;; don't indent first comments (comment-intro . 0) )) ;; echo syntactic info when presing TAB. If `t' helps with debugging. (c-echo-syntactic-information-p . t)) "Ethereum C/C++ programming style.") (c-add-style "ethereum" ethereum-c-style) (defun ethereum-c-mode-hook () "C/C++ hook for ethereum development." (subword-mode 1) ;all word movement goes across Capitalized words ;; (setq-default c-indent-tabs-mode t) ; tabs instead of spaces ;; (setq-default indent-tabs-mode t) ; tabs instead of spaces ;; (setq-default c-indent-level 4) ; A TAB is equivalent to 4 spaces ;; (setq-default c-basic-offset 4) ;; (setq-default tab-width 4) ; Default tab width is 4 (setq-default c-argdecl-indent 0) ; Do not indent argument decl's extra (setq-default c-tab-always-indent t) ;; (setq-default backward-delete-function nil) ; DO NOT expand tabs when deleting (c-set-style "ethereum")) (add-hook 'solidity-mode-hook 'ethereum-c-mode-hook) (provide 'init-solidity) ;;; init-solidity.el ends here