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

in #blockchain6 years ago (edited)

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

근데 flycheck 기반의 자동완성으로 SoliumSolc 두 가지를 체인으로 엮어 표시해주길래 좀 고쳐쓰면 괜찮을 듯 싶었다. 물론 Visual Studio Code에서 solidity 플러그인 써도 좋다. 그러나 난 Spacemacs에서 코딩 할 거거든. 그래서 고치기로 했다.

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

Solium, Solc, 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 0

원본블로그글: http://andrwj.com/blog/2018/06/solidity-linter-for-emacs

Coin Marketplace

STEEM 0.25
TRX 0.20
JST 0.038
BTC 93413.26
ETH 3418.78
USDT 1.00
SBD 3.80