2011-05-26 26 views
6

npm styleとほぼ互換性のあるemacsのJSモードはありますか?npm形式のEmacs JSモード

これまでのところ、js2-modeの変更を行い、ネイティブ意図機能をオーバーライドし、 'tab key = 2 spaces'に置き換えました。

var o = { foo : 'bar' 
     , baz : 'foo' 
     } 
    , p 
    , q = new Squash(o 
        , { start: 0 
        , limit: 50 
        } 
       ) 

そのまま、JS2モードが並んコンマ」は、例えば可能位置の間とのサイクルを正しくインデントするために最善をしようとしますが、:しかし、私の編集者は次のようにインデント処理することができる持っていいだろうunder r 'はオプションの1つではありません。もちろん、まともなインデントコードをemacsに書くのは難しく、私のelispはそこで嗅ぐのではありません。

誰かがこのためにうまくいく別のエディタを知っている場合は、私は切り替えが可能です。

答えて

1

Emacs 23.2には、名前が変更されたエスプレッソであるjsモードが含まれています。私はちょうどあなたのredunkulousコードの「インデント領域」を行なったし、この得た:私はそれが正確に何をしたいではないですね

var o = { foo : 'bar' 
      , baz : 'foo' 
     } 
, p 
, q = new Squash(o 
        , { start: 0 
         , limit: 50 
        } 
       ) 

を。カンマはおそらくあなたと違って相殺されます。私はJS-モードとインデントに見えた

(おやっそれは醜いです。)


EDIT
OK]をクリックしてjs--proper-indentationによって行われるようです。現在の行を見て、インデントする方法を決定しようとします。

さまざまな構文パターンに対して、テストする条件がたくさんあります。私はカンマで始まる行のチェックを入れて、これらの結果を得た:

var o = { foo : 'bar' 
     , baz : 'foo' 
     } 
    , p 
    , q = new Squash(o 
        , { start: 0 
        , limit: 50 
        } 
       ) 

私はそれはあなたが欲しいものだと思うが、それはまだ私には全く壊れて見えます。とにかくこれは私がそれをした方法です。

js--proper-indentationためのリストの一番上にこの指揮を注入:

(defun js--proper-indentation (parse-status) 
    "Return the proper indentation for the current line." 
    (save-excursion 
    (back-to-indentation) 
    (cond 
      ((looking-at ",") 
      (let ((spos 
        (save-excursion 
        (while (looking-back "}[\t\n ]*") 
         (backward-sexp) 
         (if (looking-back ",[\t\n ]*") 
          (re-search-backward ",[\t\n ]*"))) 

        (cond 
        ((looking-back "\\(,\\|(\\)[ \t]*\\<\\([^:=\n\t ]+\\)[ \t\n]*") 
         (re-search-backward "\\(,\\|(\\)[ \t]*\\<\\([^:=\n\t ]+\\)[ \t\n]*" (point-min) t) 
         (+ (current-column) 2)) 

        ((re-search-backward "\\<\\([^:=\n\t ]+\\)[ \t]*\\(:\\|=\\)" (point-min) t) 
         (current-column)) 
        (t 
         nil))))) 
      (if spos 
       (- spos 2) 
       (+ js-indent-level js-expr-indent-offset)))) 
     .... 

は、その関数定義における条件の残りの部分を保つようにしてください - 私は彼らが何をすべきか分からないけどthe'reはおそらく重要。

これが堅牢であるかどうかは分かりませんが、あなたのテストケースを除いてテストしていません。しかし、これはあなたを始めることになります。

+0

JS3モードと呼ばれるうん、人々はしばしば、エスプレッソ(JS-モード)からインデントを含むことにより、JS2モードを強化します。しかし、エスプレッソは私が解決しようとしている問題を正確に持っています。 –

+0

Re:EDITありがとう、とても役に立ちます。私はいくつかのテストをして、これに戻る必要があります。 –

2

あなたはthe improved js2-mode forkを見てください。普通のモードよりも少しインデントを処理できるようです。

Cheesoの提案に非常に感謝して
5

は、ここに偉大な解析とJS2モードのエラーチェックを使用しながら、エスプレッソのようにカンマで最初またはカンマで最後のスタイルにインデント処理し、ややハッキング-一緒モードのコンボです:https://github.com/thomblake/js-mode

何か問題が発生した場合は、気軽にバグレポートを提出してください。私はそれらを修正するつもりです。

EDIT:は今https://github.com/thomblake/js3-modeで発見し、

関連する問題