Как предотвратить TextMate от "соответствия" // закомментировано {(скобки (в Javascript)? - PullRequest
3 голосов
/ 23 февраля 2012

То, как TextMate "анализирует" текущий "контекст" - в выражении Javascript - является ошибочным.Я люблю редактор ... но я НЕНАВИЖУ, что мне нужно быть таким бдительным в ручном режиме в моем ежедневном сопоставлении скобок.

См. Ниже - aсценарий, в котором Textmate неправильно «видит» скобки в закомментированных строках и «сопоставляет их» с незакомментированным кодом!

wrong Context, dumbie!

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

$('.parishilton').live( 'fartOn', function() {
    sexy = $('#thatshot').fadeOut('fast');
    /** $('shouldnt').matchThis(function(){ */
    //  $('or').thisOneEither(function(){
    }); //  Textmate thinks I should be here!
    }); //  Me too!
});     //  ONLY this one should "match".

Этостановится очевидным при использовании встроенных ++ B для выделения текущего объема, а также при прохождении через них с помощьюточка вставки - которая «выталкивает» некорректно (закомментированные) скобки.(Невозможно сделать снимок экрана, извините)

Xcode лучше справляется с сопоставлением контекста и распознает синтаксис ... но я могу сказать - он тоже с этим борется.(Это проявляется в сложном сворачивании и т. Д. С такими структурами.) По крайней мере, Xcode знает, что это НЕПРАВИЛЬНО ... где as ™ позволит вам продолжать и продолжать ... Думать, что все хорошо ... Даже если ваши скобки серьезно f*%#@*d.

Сложно ли Javascript для синтаксических анализаторов «точно знать», что происходит?Есть ли "лучший" синтаксис для комментариев, которые я мог бы использовать?В приведенном выше примере я пробовал как нотацию в стиле C /** comment */, так и нотации // comment, но, похоже, оба имеют одинаковые недостатки?

Или это просто случай плохой реализации вTextMate?Если так, есть ли plist или что-то, с чем я могу покончить, чтобы попытаться улучшить положение дел?

1 Ответ

2 голосов
/ 25 февраля 2012
  • JavaScript может быть трудным для анализа, особенно, когда вы используете ошибочный код обратного вызова-спагетти, как в вашем примере. Кажется, я помню, что синтаксический анализ TextMate основан на регулярных выражениях. Если я прав, такая система не очень умная или гибкая. К вашему сведению Vim демонстрирует то же поведение.

  • TextMate вообще не выполняет проверку синтаксиса. Он не запускает ваш код через процесс сборки или какой-либо инструмент статического анализа при каждом нажатии клавиши. Вот почему плохо замечать и показывать ошибки. TextMate - это не IDE, это текстовый редактор.

  • Следствием предыдущих пунктов является то, что вы должны - по крайней мере - запустить свой код через jslint или jshint, чтобы обнаружить ошибки. Для этого есть пакет "Инструменты JavaScript" IIRC. Как только вы узнаете, где проблемы - в соответствии с выбранным инструментом SA - вы можете их исправить, не полагаясь на ограниченные возможности TextMate по проверке синтаксиса. Этот шаг (проверка синтаксиса) является важной частью любого серьезного кодирования - каким бы высоким или низким ни был ваш уровень знаний - вы можете его автоматизировать.

    Тем не менее, если вы напишите много такого кода, jslint может оказаться недостаточным для ваших нужд. Вот скриншот вашего кода в Vim после запуска jslint через syntastic:

    enter image description here

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

    Проверка синтаксиса как никогда и не является частью общего дизайна TextMate.

    Я не знаю, что планируется для TM2 (потерял терпение, переключился на Vim). Может быть, прямая проверка синтаксиса в трубе, а может и нет. Я не знаю, и мне все равно.

  • Один из вариантов, если вам не нравится эта часть дизайна TextMate, - это удалить его и использовать IDE, например Eclipse, Komodo, NetBeans, WebStorm или Aptana ... Этот диапазон программ обычно запускает все фоновые процессы при вводе специально для предотвращения подобных проблем. Вот скриншот вашего кода в Eclipse:

    Eclipse

    Как видите, Eclipse ни с чем не сопоставляет скобку у курсора и показывает полезные предупреждения, если у вас есть лишенные скобок и точки с запятой.

    $ideName явно не такой сексуальный, как TextMate, но он определенно более мощный в таком сценарии.

    Подумайте об этом.

  • Второй вариант - использовать собственный «редактор пакетов» TextMate для изменения определения синтаксиса JavaScript. И предложите свои изменения тем, кто отвечает в Macromates.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...