Как я могу выполнить jslint как инструмент компиляции JavaScript в emacs для Windows?

Я использую GNU Emacs на Win32.

Я хочу смочь выполнить jslint как компиляцию на .js файлах и затем ступить через ошибки это отчеты о jslint.

У меня есть jslint, версия WScript.

11
задан Cheeso 17 March 2010 в 22:04
поделиться

2 ответа

РЕДАКТИРОВАТЬ - Теперь есть упрощенный модуль, который делает это за вас.

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

Этот пакет .el:

  • загружает для вас jshint или jslint (настраивается)
  • применяет необходимые модификации для WSH Я описываю ниже
  • сохраняет измененный результат во временный файл
  • вызывает этот сценарий через flymake в буферах js-режима

Easy peasy. Еще винда только хоть.

Я сохранил все старые части этого ответа по причинам исторического интереса, но вам не нужно читать дальше.


Примечание - Ниже я описываю, как изменить jslint.js для использования в emacs.
Если вы не хотите делать это самостоятельно, доступен уже измененный код .
По этой ссылке есть дополнительный фрагмент, flymake-for-jslint-for-wsh.el, который позволяет использовать jslint с flymake в Windows.


Чтобы использовать jslint в emacs,

Загрузите jslint.js, версию WScript .

Отредактируйте файл 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"));
            }
        }}}());

Это изменение делает две вещи:

  1. позволяет вам указать файл для запуска lint в командной строке, а не как стандартный ввод. Стандартный ввод по-прежнему работает, если файл не указан вообще.
  2. выдает сообщения об ошибках в формате, более похожем на формат большинства компиляторов C / C ++.

Первое изменение позволяет вам вызывать jslint.js из emacs с помощью компиляции M-x . Второй позволяет вставлять сообщения об ошибках с помощью 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 работает должным образом.

alt text

Ура !!

Вы также можете запустить jslint как средство проверки синтаксиса flymake в Linux или Windows. Подробнее см. http://www.emacswiki.org/emacs/FlymakeJavaScript .

alt text

9
ответ дан 3 December 2019 в 10:03
поделиться

Некоторые примечания по моей настройке с использованием Perl, jslint, cygwin, EmacsW32. Какой бардак!

0
ответ дан 3 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: