èªåãã©ãŒãããé§åã® JavaScript éçºç°å¢
Python ã Go ã§ã¯ãã³ãŒãã®ç·šéæã«ã¯æšæºã®ã³ãŒãã¹ã¿ã€ã«ã§èªåãã§ãã¯ããä¿åæã«ããã®åãã³ãŒãã¹ã¿ã€ã«ã§èªåãã©ãŒããããããšãã£ãããšãã§ãããèšèªã§æ±ºããããæšæºã®ã³ãŒãã¹ã¿ã€ã«ã®ãªãèšèªã§ã¯ãèªåãã§ãã¯ãšèªåãã©ãŒãããã§åãã³ãŒãã¹ã¿ã€ã«ãé©çšãããããã«ããªããšæå³ããªãã
Closure Linter ã¯ãŸãã«ãã®ããã®ããŒã«ã ãã© Google JavaScript Style Guide ã«éãããã
jsfmt 㯠esformatter ãèªåãã©ãŒããããšã³ãžã³ãšããŠå©çšãããesformatter ã§ã¯ diff ãåºåããããšã¯ã§ãããã©ã³ãŒãã¹ã¿ã€ã«ãšã©ãŒã®è©³çްãåºåã§ããªãã
Linter ã§ãã JSHint ã ESLint ã«ã¯ã³ãŒãã¹ã¿ã€ã«ã«é¢ãããªãã·ã§ã³ãããããããã esformatter ã«ãããåçã®èšå®ã«å€æã㊠jsfmt ã§èªåãã©ãŒãããããã°ããããã«æã£ããã©ãèªå倿ããŠããããããªããŒã«ã¯èŠã€ãããªãã£ããæåã§å€æããã«ã¯ãªãã·ã§ã³ãå€ãããã
ãŸã JSHint ã§ã¯ã³ãŒãã¹ã¿ã€ã«ã«é¢ãããªãã·ã§ã³ã¯ deprecated ã«ãªã£ãŠããŠã次ã®ã¡ãžã£ãŒãªãªãŒã¹ã§åé€ãããããããJSHint ã®ããã¥ã¡ã³ãã§ã¯ã³ãŒãã¹ã¿ã€ã«ã®ãã§ãã¯ãšããŠä»£ããã« JSCS ãåç
§ãããŠãããJSCS ã«ã¯èªåãã©ãŒãããæ©èœãæè¿å®è£
ãããã
以äžã®ç¶æ³ããµãŸãããšãèªåãã§ãã¯ãšèªåãã©ãŒããããäžèŽãããã«ã¯ä»ã®ãšãã Closure Linter ã JSCS ãããªããã© Closure Linter ã¯äœ¿ããªãããªããªãèªåã®ã³ãŒãã ããªãããã§ããããã©ããããããªã¹ã¿ã€ã«ã®æ¢åã®ã³ãŒããè§Šããªãæåãã JSCS ã§èšå®ããŠããã°ãããšæããããã§ã JSCS ã®èªåãã©ãŒãããæ©èœã¯ãèšå®ãç·©ããããããããªããã©ãæ°ãå©ããªããšæããããšãå€ãã
ã³ãŒãã¹ã¿ã€ã«ã®èªåãã§ãã¯ãšãšãã«ããã¡ãã Linter ã«ããèªåãã§ãã¯ãè¡ãã
ESLint 2.0.0 Wish List ã§ ESLint ã« autofix ãªãã·ã§ã³ãæäŸããã話ãããŠããŠå°æ¥çã«ã¯ ESLint ã ãã§æžããããããªããã§ãåæã« ESLint ããã³ãŒãã¹ã¿ã€ã«ã«é¢ãããªãã·ã§ã³ãåé€ã㊠JSCS ã«ä»»ãããšããæèŠãåºãŠããã
ã³ãŒãã¹ã¿ã€ã«ã®èšå®ã®ãã¡ã€ã³ãã³ãã®èšå®ã«ã€ããŠã¯ãèªåãã§ãã¯ãšèªåãã©ãŒãããã«å¯Ÿå¿ããŠããã° EditorConfig ã«ä»»ããŠãJSCS ã§ã¯æå®ããªãã®ãããããšæã£ããã©ãEmacs ã® EditorConfig ãã©ã°ã€ã³ã察å¿ããŠãªãã
Continue Reading
Emacs ã® JavaScript éçºç°å¢
å®çŸãããããšããŸãšãããš
JSHint/ESLint ãš JSCS ã§èªåãã§ãã¯
JSCS ã®èšå®ã JavaScript ã®ã¡ãžã£ãŒã¢ãŒãã«åæ
JSCS ã§èªåãã©ãŒããã
JSHint/ESLint ãš JSCS ã§èªåãã§ãã¯
ãã㯠Flycheck ã§ã§ããããã¹ãŠã® linter ãã€ã³ã¹ããŒã«ããŠããå Žåã¯ãJSHint > ESLint > Closure Linter ã®é ã§åªå
ããããããšãã° JSHint ãã€ã³ã¹ããŒã«ããç¶æ
ã§åžžã« ESLint ã䜿ãããã«ããã«ã¯ .emacs ã«
(setq-default flycheck-disabled-checkers '(javascript-jshint))
ãšæžãããããã¯ãã¡ã€ã«ããŒã«ã«å€æ°ãšããŠèšå®ããã
JSCS ãã€ã³ã¹ããŒã«ããŠããå Žåã¯ãlinter ã®ãã§ãã¯ã®åŸã§çµæã warning 以äžãªã JSCS ã§ã³ãŒãã¹ã¿ã€ã«ããã§ãã¯ãããã
JSCS ã®èšå®ã JavaScript ã®ã¡ãžã£ãŒã¢ãŒãã«åæ
ããã¯ä»¥åãã£ãŠããããã®ãã¡ global ãã£ã¬ã¯ãã£ããåæ ãããæ©èœã¯ä»ã§ã¯ js2-mode ãå®çŸããã以åã®ãšããã JSHint ã®ç°å¢ãªãã·ã§ã³ãå¢ããŠããããESLint ã«å¯Ÿå¿ããªãããJSHint ã® vars.js ãããŒã¹ããããESLint ã® globals.json ãèªãã ããESLint ã®èšå®ãã¡ã€ã«ã®ç¶æ¿ããµããŒããããããã
ã§ãããæžããªãã以åã®ãã¹ããèŠçŽããã
ããã£ãŠãJSHint ã Flymake ã§èµ°ãããŠããå Žåã¯
(setq js2-mode-show-parse-errors nil) (setq js2-mode-show-strict-warnings nil)
ã®ããã« js2-mode ã® lint ïŒã®èŠåãšãšã©ãŒã®è¡šç€ºïŒããªãã«ããã°ããjs2-additional-externs ã«è¿œå ãã®åŠçãããªãã§ããæ°ãããŠãããã€ãŸãåã« js2-basic-offset ãé©çšããã ãã£ãŠããã
ã£ãŠæžããŠãã£ãŠéŠ¬é¹¿ããããããã§ã ãããåã£ãŠããFlycheck ããåŒã³åºã JSHint ã ESLint ã /*global ... */ ã /*jshint ... */ ã /*eslint-env ... */ ãèŠãŠããããã Emacs Lisp ã§ããããèŠãŠ js2-additional-externs ã«è¿œå ãããããå¿
èŠã¯ãªãã
JSCS ã®ã€ã³ãã³ãã«ãŒã«ã js2-basic-offset ãªã©ã«é©çšãã elisp 㯠emacs-jscs ã«æžããã
以äžã¯ js2-mode ã®ãªãã·ã§ã³ãèŠçŽããŠã¿ãçµæã§ãJSHint ã䜿ãå Žåã¯
(setq js2-include-browser-externs nil) (setq js2-mode-show-parse-errors nil) (setq js2-mode-show-strict-warnings t) (setq js2-strict-trailing-comma-warning t) (setq js2-strict-missing-semi-warning nil) (setq js2-strict-inconsistent-return-warning t) (setq js2-strict-cond-assign-warning nil) (setq js2-strict-var-redeclaration-warning nil) (setq js2-strict-var-hides-function-arg-warning nil) (setq js2-highlight-external-variables nil) (setq js2-include-jslint-globals nil)
ã§å€ã t ã®å€æ°ã¯åæå€ã®ãŸãŸã ãã©ãªãã·ã§ã³ãäžèŠ§è¡šç€ºããããã«æžããŠãããnil ã«å€æŽããéšåã¯å¯Ÿå¿ãã JSHint ã®ãªãã·ã§ã³ã§èŠåããããESLint ã䜿ãå Žåã¯
(setq js2-strict-trailing-comma-warning nil) (setq js2-strict-missing-semi-warning t) (setq js2-missing-semi-one-line-override t) (setq js2-strict-inconsistent-return-warning nil)
ã远å ã»å€æŽããããã ããããã®èšå®ã¯ã»ãã³ãã³ã§çµãããªãæã¯èŠåããããfunction(x) {return x} ã®ãããªã¯ã³ã©ã€ã³é¢æ°å
ã®ã»ãã³ãã³ã§çµãããªãæã¯èŠåããªãããã«ããããã®ãã®ã«ãªã£ãŠãããããåžžã«èŠåãããèŠåããªãããã«ãããªã JSHint ã ESLint ã§èšå®ã§ãããããESLint ã®èšå®ã¯ js2-mode-show-strict-warnings ãå«ããŠäžèšã®å€æ°ã¯ãã¹ãŠ nil ã«ãããJSHint ã®èšå®ã¯å€ãããªãã
詳ããã¯ä»¥äžã®éãã
js2-include-browser-externs
åæå€ã¯ t ã§ãwindow ã document ãªã©ã®èå¥åãå®çŸ©æžã¿ãšãªããJSHint ã§ browser ãªãã·ã§ã³ããESLint ã§ã¯ browser ç°å¢ã true ã«ããã°ããããã ããããã§å®çŸ©ãããèå¥åã¯ãããã埮åŠã«ç°ãªãã
js2-mode-show-parse-errors
åæå€ã¯ t ã§ãJavaScript ã®ããŒã¹ãšã©ãŒããã€ã©ã€ãããããããŒã¹ãšã©ãŒã¯ JSHint ãš ESLint ã§æ€åºããããã js2-mode ã§ãã€ã©ã€ãããå¿
èŠã¯ãªãã
js2-mode-show-strict-warnings
åæå€ã¯ t ã§ãjs2-strict-* 倿°ã®èšå®ãæå¹ã«ãããnil ã®å Žå㯠js2-strict-* 倿°ã®èšå®ãäžæ¬ã§ nil ã«ãªãã
js2-strict-trailing-comma-warning
åæå€ã¯ t ã§ã{foo: 2,} ã [3,] ã®ã«ã³ããèŠåãããJSHint ã§ãããèŠåããã«ã¯ es3 ãªãã·ã§ã³ã true ã«ããå¿
èŠãããããã®å€æ°ã t ã®ãŸãŸã«ããŠãããš es3 ãªãã·ã§ã³ã false ã®å Žåã§ã js2-mode ã§èŠåãããããšãã§ãããESLint ã§ã¯ comma-dangle ã«ãŒã«ã§å¶åŸ¡ã§ãããã ESLint ã䜿ãå Žå㯠nil ã«ããã°ãããESLint ã¯ããã©ã«ãã§èŠåããã
js2-strict-missing-semi-warning
åæå€ã¯ t ã§ãã»ãã³ãã³ã§çµãããªãæãèŠåãããJSHint ã§ã¯ asi ãªãã·ã§ã³ããESLint ã§ã¯ semi ã«ãŒã«ãæäŸãããŠããŠã©ã¡ããããã©ã«ãã§èŠåããã
js2-missing-semi-one-line-override
åæå€ã¯ nil ã§ãfunction(x) {return x} ã®ãããªã¯ã³ã©ã€ã³é¢æ°å
ã®ã»ãã³ãã³ã§çµãããªãæãèŠåãããt ã«ããã°èŠåããªãããã ã js2-strict-missing-semi-warning ã nil ã®å Žåã¯ããã®å€æ°ã®å€ã«é¢ä¿ãªãã»ãã³ãã³ã§çµãããªãæãåžžã«èŠåããªããJSHint 㯠lastsemic ãªãã·ã§ã³ã«ãã£ãŠããã©ã«ãã§èŠåãããESLint ã«ã¯å¯Ÿå¿ããã«ãŒã«ããªãã£ãœãã
js2-strict-inconsistent-return-warning
åæå€ã¯ t ã§ãåã颿°å
ã® return ãš return value ã®æ··åšãèŠåãããJSHint ã§ã¯èŠåã§ããªãããã ãã js2-mode ã§èŠåããããã«ããŠãããESLint 㯠consistent-return ã«ãŒã«ã«ãã£ãŠããã©ã«ãã§èŠåããã
js2-strict-cond-assign-warning
åæå€ã¯ t ã§ãif (a = b) ... ã®ãããªæ¡ä»¶åŒãšããŠã®ä»£å
¥ãèŠåãããJSHint ã§ã¯ expr ãªãã·ã§ã³ããESLint ã§ã¯ no-cond-assign ã«ãŒã«ãæäŸãããŠããŠã©ã¡ããããã©ã«ãã§èŠåããã
js2-strict-var-redeclaration-warning
åæå€ã¯ t ã§ã倿°ã®å宣èšãèŠåãããããããããªããã© JSHint ã¯ããã©ã«ãã§èŠåãããESLint 㯠no-redeclare ã«ãŒã«ã«ãã£ãŠããã©ã«ãã§èŠåããã
js2-strict-var-hides-function-arg-warning
åæå€ã¯ t ã§ã颿°åŒæ°ãšåãååã®å€æ°å®çŸ©ãèŠåãããJSHint ã¯ããã©ã«ãã§èŠåããªãããshadow ãªãã·ã§ã³ã§èŠåããããã«ã§ãããESLint 㯠no-shadow ã«ãŒã«ã«ãã£ãŠããã©ã«ãã§èŠåããã
js2-highlight-external-variables
åæå€ã¯ t ã§ãæªå®çŸ©ã®å€æ°ããã€ã©ã€ããããJSHint ã¯ããã©ã«ãã§èŠåããªãããundef ãªãã·ã§ã³ã§èŠåããããã«ã§ãããESLint 㯠no-undef ã«ãŒã«ã«ãã£ãŠããã©ã«ãã§èŠåããã
js2-include-jslint-globals
åæå€ã¯ t ã§ã/*global .. */ ãã£ã¬ã¯ãã£ãã§æå®ããèå¥åãå®çŸ©æžã¿ãšãããJSHint ãš ESLint ããã£ã¬ã¯ãã£ããèŠããã js2-mode ã§èŠãå¿
èŠã¯ãªãã
JSCS ã§èªåãã©ãŒããã
JSCS ã§èªåãã©ãŒãããããããã®é¢æ° jscs-fix ã emacs-jscs ã«æžãããgo-mode.el ã® gofmt 颿°ã®å€§éšåãåå©çšãããã langfmt ããã±ãŒãžãæœåºããŠããã«äŸåããããã«ããã