2010-03-17 30 views

Trả lời

9

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:

  1. 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.
  2. 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

1

JSLint không hỗ trợ WSH nữa. Tôi vừa thêm instructions vào EmacsWiki để thiết lập JSLint với Node.js trên Windows.

Cập nhật

Có thể là một thay thế tốt hơn để flymake là Flycheck, mà tôi cũng cung cấp instructions on EmacsWiki về làm thế nào để thiết lập nó với JSLint.

bước

  1. Install Node.js.

  2. Cài đặt gói JSLint cho Node.js:

    C:\>npm -g install jslint 
    

    Trên Windows có an issue với gọi JSLint từ Emacs 23. Vì vậy, tạo một wrapper ~/.emacs.d/jslint.bat(JSLint cần phải trở thành một phần của tập tin tên):

    @ECHO OFF 
    node "%APPDATA%"\npm\node_modules\jslint\bin\jslint.js >"%TEMP%"\jslint.out 2>&1 %* 
    TYPE "%TEMP%"\jslint.out 
    
  3. thử nghiệm JSLint từ Emacs' xây dựng trong vỏ EShell:

    $ ~/.emacs.d/jslint.bat 
    No files specified. 
    [...] 
    
  4. Install flymake-jslint và sự phụ thuộc của nó flymake-easy.

  5. Thêm vào ~/.emacs:

    (require 'flymake-jslint) 
    (add-hook 'js-mode-hook 'flymake-jslint-load) 
    
  6. Customize flymake-jslint-command: ~/.emacs.d/jslint.bat

  7. tùy chọn tùy chỉnh tùy chọn flymake-JSLint khác.

  8. Khởi động lại các Emac để đảm bảo mọi thứ đều tốt.

  9. Kiểm tra bằng cách mở tệp JavaScript thiếu sót.

    Screenshot of flymake-jslint running in Emacs 23 on Windows XP/SP3

đáp thắc mắc

  • Customize flymake-log-level và kiểm tra bộ đệm *Messages*.

  • Kiểm tra flymake-jslint-args.

  • Đảm bảo rằng lệnh được định cấu hình trong flymake-jslint-command chạy trong EShell.

0

Nếu bạn sử dụng JSHint cài đặt với Node.js, bạn có thể, ví dụ, chạy

M-x compile jshint --reporter unix --verbose *.js.

Hoặc, thêm vào emacs tập tin của bạn:

(add-hook 'js-mode-hook 
    (lambda() (setq compile-command 
     (concat "jshint --reporter unix --verbose " 
       (file-name-nondirectory buffer-file-name))))) 
Các vấn đề liên quan