Тюнинг mooedit, работа над ошибками

в 22:02, , рубрики: perl, Программирование, разработка, редактор кода, метки: ,

В первой части добавлялась проверка синтаксиса и форматирование исходников на Perl в mooedit. Если с первым никаких проблем не возникло, то при форматировании пришлось отказаться от вывода ошибок в область уведомлений. Но с тех пор появилась новая версия в ветке unstable-1.1.9x. Ничего особо нестабильного в версии 1.1.97-devel не заметил, разве что заготовки для долгожданного code folding. Но во внутреннем API появилось как минимум одно приятное изменение.


Раньше нельзя было выбрать куда выводить результат работы утилит: в окно редактора (отформатированный исходник) или в область уведомлений (сообщения об ошибках). Теперь можно получить объект для вывода, код для скриптов на Lua и Python абсолютно одинаковый:

 obj = window.get_output()
 obj.clear()
 obj.set_filter_by_id("default")
 obj.write_with_filter("что-то, что нужно вывести")
 window.present_output()

Для начала немного меняем скрипт ~/bin/perlsyntax, добавляем в него возврат кода завершения:

#!/usr/bin/perl
use strict;
die "Usage: $0 filen" unless $ARGV[0];
my $out = `/usr/bin/perl -c $ARGV[0] 2>&1`;
my $rc = ($out =~ s|^(.*) at (($ARGV[0]) line (d+))(.*)$|$3:$4 $1$5|gm);
print $out;
exit $rc; # 0 - ошибок нет

И модифицируем скрипт для форматирования исходников:

filename = doc.get_filename()
codefile = os.tmpname()
rc = os.execute(string.format("/home/klopp/bin/perlsyntax "%s" > "%s" 2>&1",filename,codefile))

if rc == 0 then 
  tidyfile = os.tmpname()
  os.execute(string.format("/usr/bin/perltidy -nsak="if elsif unless for while" -pt=0 -i=4 -bl -vt=2 -vtc=2 -boc -st "%s" > "%s"",filename,tidyfile))
  out = io.open(tidyfile,"r")
  doc.select_all()
  doc.replace_selected_text(out:read("*a"))
  doc.save()
  os.remove(tidyfile)
else
  out = io.open(codefile,"r")
  err = string.format("Run syntax check!nn%s",out:read("*a"))
  o = window.get_output()
  o.clear()
  o.set_filter_by_id("default")
  o.write_with_filter(err)
  window.present_output()
end

os.remove(codefile)

Теперь при ошибках исходник в окне редактора не изменится, а в области уведомлений появится вывод этих самых ошибок. Причём клик по строке с ошибкой будет переносить нас к этой же строке в окне редактора.

Тюнинг mooedit, работа над ошибками

Настройки утилиты — такие:

Тюнинг mooedit, работа над ошибками

Дополнительно создаём утилиту для запуска скрипта прямо из редактора. Можно, конечно, как и раньше — просто запускать /usr/bin/perl "$DOC_PATH". Но при ошибках мы не получим кликабельного вывода в области уведомлений. Поэтому будем сначала проверять исходник, если всё хорошо — запускать скрипт, а при ошибках выводить модифицированные сообщения. Для этого создадим ~/bin/perlrun с таким содержимым:

#!/bin/sh

rc=`/home/klopp/bin/perlsyntax $1`
if [ "$?" -eq 0 ] ; then
  /usr/bin/perl $1
else
  echo $rc
fi

И пропишем его запуск в утилите с такими настройками:

Тюнинг mooedit, работа над ошибками

Ждём следующий версий редактора, может что ещё интересное появится :)

Автор: kloppspb

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js