Emacs용 Solidity 스마트컨트랙 문법검사 루틴을 만들어보았다
Spacemacs에서 Solidity 스마트컨트랙 코딩하려고 찾아보니 solidity-mode 패키지 하나 나오더라.MELPA 저장소 업데이트 날짜가 올해 4월 29일로 나와서 나름 기대했는데, 웬열... 이름만 "공식 " 이었네. 구려터져서 좀 고쳐 써볼요량으로 Quelpa receipt 업데이트해서 로컬에서 불러들이려고 했으나, dotspacemacs/user-config()
, dotspacemacs-additional-packages()
어느 쪽에 넣어도 Autoloading 실패다. 얼마나 쓰는 사람이 없었으면 그런 정도의 버그를 내버려둔걸까 싶어 걍 포기하려했다.
근데 flycheck 기반의 자동완성으로 Solium과 Solc 두 가지를 체인으로 엮어 표시해주길래 좀 고쳐쓰면 괜찮을 듯 싶었다. 물론 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