Emacs용 Solidity 스마트컨트랙 문법검사 루틴을 만들어보았다

Spacemacs에서 Solidity 스마트컨트랙 코딩하려고 찾아보니 solidity-mode1https://github.com/ethereum/emacs-solidity 패키지 하나 나오더라.MELPA 저장소 업데이트 날짜가 올해 4월 29일로 나와서 나름 기대했는데, 웬열…  이름만 "공식 " 이었네.  구려터져서 좀 고쳐 써볼요량으로 Quelpa2https://github.com/quelpa/quelpa receipt 업데이트해서 로컬에서 불러들이려고 했으나, dotspacemacs/user-config()dotspacemacs-additional-packages() 어느 쪽에 넣어도 Autoloading 실패다.  얼마나 쓰는 사람이 없었으면 그런 정도의 버그를 내버려둔걸까 싶어 걍 포기하려했다.

근데 flycheck3http://www.flycheck.org/en/latest/ 기반의 자동완성으로  Solium4https://github.com/duaraghav8/Solium과 Solc5http://solidity.readthedocs.io/en/v0.4.24/installing-solidity.html 두 가지를 체인으로 엮어 표시해주길래 좀 고쳐쓰면 괜찮을 듯 싶었다.  물론 Visual Studio Code에서 solidity 플러그인 써도 좋다. 그러나 난 Spacemacs에서 코딩 할 거거든. 그래서 고치기로 했다.

 

결론을 말하자면, Solidity-mode 패키지에 들어있는 solidity-flycheck.el6https://github.com/ethereum/emacs-solidity/blob/master/solidity-flycheck.el 부분은 사용하지 않고  solidity-mode.el7https://github.com/ethereum/emacs-solidity/blob/master/solidity-mode.el만 사용하되 flycheck용 checker를 따로, 간단히, 만들었다. 마땅한 이름이 없어 solidity-adviser 로 지었지뭐. 문법체크/강조 기능을 구현하는 건 생각보다 어렵지 않았다.  역쉬, Emacs~

 

Solium, Solc, Solhint8https://github.com/protofire/solhint 이 셋중 젤 빡씨게 검사하는 놈은 Solhint 이긴한데 현재 버전과 맞지 않는 경향이 있더라. 그래서 Solc 쓰기로 함. Solium은 도대체 왜 그런거야? 내가 뭘 모르고 있는겐가.. 

 


(flycheck-define-checker solidity-adviser
    "A Solidity syntax checker using the solc compiler"
    :command ("/usr/local/bin/solc" source-inplace)
    :error-patterns (
        (error line-start (file-name) ":" line ":" column ":" " Error: " (message))
        (error line-start "Error: " (message))
        (warning line-start (file-name) ":" line ":" column ":" " Warning: " (message))
     )
    :modes 'solidity-mode
    :predicate
    )

;; 문법검사기라고 하기엔 초라하지만, 제법 잘 동작한다 
(add-to-list 'flycheck-checkers 'solidity-adviser)

;; 눈에 화~악 띄라고 색상도 큼지막하게 넣어준다
(eval-after-load 'flycheck
   '(progn
        (set-face-attribute 'flycheck-warning nil :foreground "blue" :background "yellow")
        (set-face-attribute 'flycheck-error nil :foreground "white" :background "red")))

;; 탭크기 조정해주지 않으면 겁나 경고 때린다 
(add-hook 'solidity-mode-hook
    (lambda ()
        (setq indent-tabs-mode nil)
        (setq tab-width 4)
        ))

 

보다시피 동작은 잘 하지만 VSCode에 비할 수는 없다. 조만간 시간 될 때 팝업에다 Helm 서치 기능같은 걸 붙여보련다. 

Public 을 Pub 이라 써보았다

 

 

 

 SPC   C-x   4  

 

References   [ + ]