EDIT - Hiện tại, có một mô-đun được đơn giản hóa thực hiện điều này cho bạn.
http://marmalade-repo.org/packages/fly-jshint-wsh
này gói .el:
- tải jshint hoặc JSLint cho bạn (cấu hình)
- áp dụng những sửa đổi WSH thân thiện cần thiết tôi mô tả dưới đây
- lưu lại kết quả sửa đổi để một tệp tạm thời
- gọi tập lệnh đó qua flymake trong bộ đệm chế độ js
Dễ dàng peasy. Tuy nhiên chỉ có Windows.
Tôi giữ tất cả các phần cũ của câu trả lời này vì lý do quan tâm lịch sử, nhưng bạn không cần phải đọc thêm nữa.
Note - Dưới đây tôi mô tả làm thế nào để sửa đổi jslint.js để sử dụng trong emacs.
Nếu bạn không muốn tự mình thực hiện, already-modified code required is available.
Liên kết đó có một phần bổ sung, flymake-for-jslint-for-wsh.el, cho phép bạn sử dụng jslint với flymake, trên Windows.
Để sử dụng JSLint trong emacs,
Tải jslint.js, the WScript version.
Chỉnh sửa tệp jslint.js. Cuộn xuống dưới cùng và tìm thấy điều này:
(function(){if(!JSLINT(WScript.StdIn.ReadAll(),.....
Thay thế đó (và tất cả mọi thứ mà sau) với điều này:
(function(){
var filename = "stdin";
var content= "";
if (WScript.Arguments.length > 0){
filename = WScript.Arguments(0);
var fso = new ActiveXObject("Scripting.FileSystemObject");
//var file = fso.GetFile(filename);
var fs = fso.OpenTextFile(filename, 1);
content = fs.ReadAll();
fs.Close();
fso = null;
fs = null;
} else {
content = WScript.StdIn.ReadAll();
}
if(!JSLINT(content,{passfail:false})){
WScript.StdErr.WriteLine("JSLINT");
for (var i=0; i<JSLINT.errors.length; i++) {
// sample error msg:
// sprintf.js(53,42) JSLINT: Use the array literal notation [].
var e=JSLINT.errors[i];
if (e !== null){
var line = (typeof e.line == "undefined")?'0':e.line;
WScript.StdErr.WriteLine(filename + '(' +line+','+e.character+') JSLINT: '+e.reason);
WScript.StdErr.WriteLine(' ' + (e.evidence||'').replace(/^\s*(\S*(\s+\S+)*)\s*$/,"$1"));
}
}}}());
Sự thay đổi này thực hiện hai điều:
- cho phép bạn xác định tập tin để chạy lint trên, trên dòng lệnh, chứ không phải là stdin. Stdin vẫn hoạt động nếu không có tệp nào được chỉ định.
- phát ra các thông báo lỗi ở định dạng tương tự như hầu hết các trình biên dịch C/C++.
Thay đổi đầu tiên cho phép bạn gọi jslint.js từ bên trong các emacs bằng M-x compile
. Thứ hai cho phép bạn kết nối các thông báo lỗi với M-x next-error
.
Lưu tệp đó vào jslint-for-wsh.js
Sau đó, trong init.el của bạn, hoặc emacs.el, thêm vào bạn compilation-error-regexp-alist
, regexp này:
;; JSLINT
("^[ \t]*\\([A-Za-z.0-9_: \\-]+\\)(\\([0-9]+\\)[,]\\(*[0-9]+\\))\\(Microsoft JScript runtime error\\| JSLINT\\): \\(.+\\)$" 1 2 3)
Trong chế độ móc javascript của bạn, thiết lập các lệnh biên dịch:
(setq compile-command
(let ((file (file-name-nondirectory buffer-file-name)))
(concat "%windir%\\system32\\cscript.exe \\LOCATION\\OF\\jslint-for-wsh.js " file)))
Vậy đó.
Khi bạn mở tệp .js và chạy M-x compile
, bạn sẽ chạy jslint.js trên bộ đệm hiện có. Bạn sẽ nhận được danh sách lỗi và M-x next-error
hoạt động như bạn mong đợi.
alt text http://i40.tinypic.com/10nclxv.jpg
Yipee !!
Bạn cũng có thể chạy jslint làm công cụ trình kiểm tra cú pháp flymake, trên Linux hoặc Windows. Xem http://www.emacswiki.org/emacs/FlymakeJavaScript để biết chi tiết.
alt text http://i47.tinypic.com/2mk1eh.jpg