;;; flymake-jslint.el --- A flymake handler for javascript using jslint ;; ;;; Author: Steve Purcell ;;; Homepage: https://github.com/purcell/flymake-jslint ;;; Version: DEV ;; Package-Version: 20130613.202 ;;; Package-Requires: ((flymake-easy "0.1")) ;; ;;; Commentary: ;; ;; References: ;; http://www.emacswiki.org/cgi-bin/wiki/FlymakeJavaScript ;; http://d.hatena.ne.jp/kazu-yamamoto/mobile?date=20071029 ;; ;; Works with either "jslint" from jslint.com, or "jsl" from ;; javascriptlint.com. The default is "jsl", if that executable is ;; found at load-time. Otherwise, "jslint" is the default. If you want ;; to use the non-default checker, you can customize the values of ;; `flymake-jslint-command' and `flymake-jslint-args' accordingly. ;; ;; Usage: ;; (require 'flymake-jslint) ;; (add-hook 'js-mode-hook 'flymake-jslint-load) ;; ;; Uses flymake-easy, from https://github.com/purcell/flymake-easy ;;; Code: (require 'flymake-easy) (defgroup flymake-jslint nil "Flymake checking of Javascript using jslint" :group 'programming :prefix "flymake-jslint-") ;;;###autoload (defcustom flymake-jslint-detect-trailing-comma t "Whether or not to report warnings about trailing commas." :type 'boolean :group 'flymake-jslint) ;;;###autoload (defcustom flymake-jslint-command (if (executable-find "jsl") "jsl" "jslint") "Name (and optionally full path) of jslint executable." :type 'string :group 'flymake-jslint) ;;;###autoload (defcustom flymake-jslint-args (unless (string-equal "jsl" flymake-jslint-command) (mapcar 'symbol-name '(--white --undef --nomen --regexp --plusplus --bitwise --newcap --sloppy --vars --eqeq))) "Command-line args for jslint executable." :type '(repeat string) :group 'flymake-jslint) (defconst flymake-jslint-err-line-patterns '(("^ *#[0-9]+ \\(.*?\\)\n.*?// Line \\([0-9]+\\), Pos \\([0-9]+\\)$" nil 2 3 1) ;; jsl ("^\\(.+\\)\:\\([0-9]+\\)\: \\(SyntaxError\:.+\\)\:$" nil 2 nil 3) ("^\\(.+\\)(\\([0-9]+\\)): \\(SyntaxError:.+\\)$" nil 2 nil 3) ("^\\(.+\\)(\\([0-9]+\\)): \\(lint \\)?\\(warning:.+\\)$" nil 2 nil 4))) (defconst flymake-jslint-trailing-comma-err-line-pattern '("^\\(.+\\)\:\\([0-9]+\\)\: strict \\(warning: trailing comma.+\\)\:$" nil 2 nil 3)) (defun flymake-jslint-command (filename) "Construct a command that flymake can use to check javascript source." (append (list flymake-jslint-command) flymake-jslint-args (unless (string-match "jslint" flymake-jslint-command) ;; jsl required option (list "-process")) (list filename))) ;;;###autoload (defun flymake-jslint-load () "Configure flymake mode to check the current buffer's javascript syntax." (interactive) (flymake-easy-load 'flymake-jslint-command (append flymake-jslint-err-line-patterns (when flymake-jslint-detect-trailing-comma (list flymake-jslint-trailing-comma-err-line-pattern))) 'tempdir "js")) (provide 'flymake-jslint) ;;; flymake-jslint.el ends here