11

Win32 で GNU Emacs を使用しています。

jslint を .js ファイルのコンパイルとして実行し、jslint が報告するエラーをステップ実行できるようにしたいと考えています。

WScript バージョンの jslint があります。

4

4 に答える 4

9

編集-これを行う簡略化されたモジュールがあります。

http://marmalade-repo.org/packages/fly-jshint-wsh

この.elパッケージ:

  • jshintまたはjslintをダウンロードします(構成可能)
  • 以下で説明する必要なWSH対応の変更を適用します
  • 変更した結果を一時ファイルに保存します
  • jsモードバッファのflymakeを介してそのスクリプトを呼び出します

簡単に簡単。それでもWindowsだけです。

私は歴史的な興味の理由でこの答えの古い部分をすべて保持しましたが、これ以上読む必要はありません。


-以下では、emacs内で使用するためにjslint.jsを変更する方法について説明します。
自分でやりたくない場合は、必要な変更済みのコードを利用できます
このリンクには、Windowsでjslintをflymakeで使用できるようにする追加の部分flymake-for-jslint-for-wsh.elがあります。


emacs内でjslintを使用するには、

WScriptバージョンのjslint.jsをダウンロードします。

jslint.jsファイルを編集します。一番下までスクロールして、これを見つけます。

 (function(){if(!JSLINT(WScript.StdIn.ReadAll(),.....

それ(およびそれに続くすべて)をこれに置き換えます:

(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"));
            }
        }}}());

この変更により、次の2つのことが行われます。

  1. stdinとしてではなく、コマンドラインでlintを実行するファイルを指定できます。ファイルがまったく指定されていない場合でも、Stdinは機能します。
  2. ほとんどのC/C++コンパイラにより類似した形式でエラーメッセージを出力します。

最初の変更により、emacs内から。を使用してjslint.jsを呼び出すことができますM-x compile。2つ目は、エラーメッセージをM-x next-error

そのファイルをjslint-for-wsh.jsに保存します

次に、init.elまたはemacs.elでcompilation-error-regexp-alist、この正規表現を追加します。

 ;; JSLINT
 ("^[ \t]*\\([A-Za-z.0-9_: \\-]+\\)(\\([0-9]+\\)[,]\\( *[0-9]+\\))\\( Microsoft JScript runtime error\\| JSLINT\\): \\(.+\\)$" 1 2 3)

javascriptモードフックで、コンパイルコマンドを設定します。

  (setq compile-command
       (let ((file (file-name-nondirectory buffer-file-name)))
         (concat "%windir%\\system32\\cscript.exe \\LOCATION\\OF\\jslint-for-wsh.js "  file)))

それでおしまい。


次に、.jsファイルを開いて実行するM-x compileと、既存のバッファーでjslint.jsが実行されます。エラーのリストが表示M-x next-errorされ、期待どおりに機能します。

代替テキスト

Yipee !!

LinuxまたはWindowsで、flymake構文チェッカーツールとしてjslintを実行することもできます。詳細については、 http://www.emacswiki.org/emacs/FlymakeJavaScriptを参照してください。

代替テキスト

于 2010-03-17T20:58:07.880 に答える
1

JSLint は WSH をサポートしなくなりました。Windows で Node.js を使用して JSLint をセットアップするための手順を EmacsWiki に追加しました。

アップデート

おそらく flymake のより良い代替手段は Flycheck であり、JSLint を使用して設定する方法に関する手順も EmacsWikiで提供しています。

手順

  1. Node.jsをインストールします。

  2. Node.js の jslint パッケージをインストールします。

    C:\>npm -g install jslint
    

    Windows では、EMACS 23 からの jslint の呼び出しに問題があります。したがって、ラッパーを作成します~/.emacs.d/jslint.bat (jslint はファイル名の一部である必要があります!):

    @ECHO OFF
    node "%APPDATA%"\npm\node_modules\jslint\bin\jslint.js >"%TEMP%"\jslint.out 2>&1 %*
    TYPE "%TEMP%"\jslint.out
    
  3. Emacs の組み込みシェルEShellから JSLint をテストします。

    $ ~/.emacs.d/jslint.bat
    No files specified.
    [...]
    
  4. flymake-jslintとその依存関係flymake-easyをインストールします。

  5. に追加~/.emacs:

    (require 'flymake-jslint)
    (add-hook 'js-mode-hook 'flymake-jslint-load)
    
  6. カスタマイズflymake-jslint-command:~/.emacs.d/jslint.bat

  7. 必要に応じて、その他の flymake-jslint オプションをカスタマイズします。

  8. Emacs を再起動して、すべてが正常にロードされることを確認します。

  9. 欠陥のある JavaScript ファイルを開いてテストします。

    Windows XP/SP3 の Emacs 23 で実行されている flymake-jslint のスクリーンショット

トラブルシューティング

  • バッファをカスタマイズflymake-log-levelして検査します。*Messages*

  • 確認してくださいflymake-jslint-args

  • で構成されたコマンドflymake-jslint-commandが EShell で実行されることを確認します。

于 2013-09-13T13:25:00.190 に答える
0

Node.js と一緒にインストールされた JSHint を使用する場合、たとえば次のように実行できます。

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

または、.emacs ファイルに次を追加します。

(add-hook 'js-mode-hook
    (lambda() (setq compile-command
        (concat "jshint --reporter unix --verbose "
                (file-name-nondirectory buffer-file-name)))))
于 2016-02-21T12:20:08.407 に答える
0

Perl、jslint、cygwin、EmacsW32を使用した私のセットアップに関するメモ。なんて混乱!

于 2010-03-18T13:39:20.250 に答える