2011-05-26 8 views
6

Есть ли режим JS для emacs, который в значительной степени совместим с npm style?Режим Emacs JS для стиля npm

До сих пор я работаю с модификацией js2-mode с нативными функциями, переопределенными и замененными «tab key = 2 spaces». Но было бы неплохо иметь мой редактор быть в состоянии справиться с отступом, как это:

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

Как это, js2 режим делает все возможное, чтобы правильно отступы и циклы между возможными положениями, но, например, «запятая выстроены под r 'не является одним из вариантов. Конечно, писать приличный отступы в emacs сложно, и мой elisp не до него нюхает.

Обратите внимание, что если кто-то знает другой редактор, который будет работать лучше для этого, я мог бы быть открыт для переключения.

ответ

1

Emacs 23.2 включает js-mode, который является переименованным и тронутым эспрессо. Я просто сделал «отступ-регион» на ваш redunkulous код и получил это:

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

Я предполагаю, что это не совсем то, что вы хотите. Эти запятые смещены по-другому, чем вам нравится.

(Гоша это некрасиво.)


EDIT
Ok Я посмотрел в JS-режиме и отступы, кажется, сделано 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)))) 
     .... 

Не забудьте сохранить остальные условия в этом DEFUN - я не знаю, что они делают, но the're вероятно, важно ,

Не знаю, является ли это надежным, я не тестировал его, кроме одного тестового примера. Но это должно начаться.

+0

Да, люди часто увеличивают СП2-режим, включая отступ от Эспрессо (JS-режим). Но у Espresso есть именно та проблема, которую я пытаюсь решить. –

+0

Re: EDIT Спасибо, это очень полезно. Мне нужно будет провести некоторое тестирование и вернуться к этому. –

2

Вы должны взглянуть на the improved js2-mode fork, он, похоже, способен обрабатывать углубление немного лучше, чем обычные режимы.

5

Огромное спасибо предложению Cheeso, вот несколько комбинированных режимов, которые обрабатывают отступы для запятых или запятой стилей в эспрессо, используя большой синтаксический анализ и проверку ошибок js2-mode : https://github.com/thomblake/js-mode

Если возникнут какие-либо проблемы, не стесняйтесь сообщать об ошибках - я намерен их исправить.

РЕДАКТИРОВАТЬ: Теперь найдены в https://github.com/thomblake/js3-mode и называется СП3 режим