Что нового

TidySource - аккуратный код в SciTE

asdf8

Скриптер
Сообщения
564
Репутация
152
AutoIt: 3.
Версия: 3.3.6.1-3.3.7.14

Категория: Инструменты и помощь по AutoIt

Описание:
На этот раз решил заменить утилиту Tidy.exe в SciTE.
Основные отличия:

  • не создается резервная копия в папке скрипта (по умолчанию)
  • нет связи с "AutoIt3Wrapper", который, при параметре "#AutoIt3Wrapper_Run_Tidy=y" при каждом запуске и компиляции запускает Tidy.exe и мусорит резервными копиями в папке скрипта (до сих пор не могу понять, зачем такое было сделано)
  • возможно обрабатывать только выделенный участок кода. Желательно, чтобы был выделен логически завершенный кусок кода (функция, оператор, строка)
  • добавлен интерфейс с настройками

Пример подключения к SciTE (файл "au3.properties")
Код:
command.9.*.au3="$(autoit3dir)\autoit3.exe" "$(SciteDefaultHome)\TidySource\TidySource.au3" "$(FilePath)"  /NoGui /BackUp
command.name.9.*.au3=Tidy AutoIt Source 
command.save.before.9.*.au3=1
command.shortcut.9.*.au3=Ctrl+T
Горячие клавиши:
Ctrl+T - запуск (при полной замене Tidy.exe)

Параметры командной строки
  • /h или /help или /? - вызов справки
  • NoGui - не показывать окно настроек
  • /BackUp - сохранять резервную копию обрабатываемого файла
  • /f - параметры обработки имен функций
    • /f0 - не обрабатывать имена функции
    • /f1 - по образцам из файлов "au3*.api" (по умолчанию)
    • /f2 - по пользовательским правилам и по образцам из файлов "au3*.api"
  • /v - параметры обработки имен переменных
    • /v0 - не обрабатывать имена переменных (по умолчанию)
    • /v1 - обрабатывать по пользовательским правилам
  • /s - обработка пробелов в коде
    • /s0 - не обрабатывать
    • /s1 - обрабатывать (по умолчанию)
  • /r - обработка списков имен
    • /r0 - не обрабатывать
    • /r1 - обрабатывать (по умолчанию)
  • /l - не более одной пустой строки подряд
    • /l0 - не обрабатывать
    • /l1 - обрабатывать (по умолчанию)
  • /b0-9 - табов после переноса строки _ (по умолчанию 2)

История версий:
  • 1.2.9
    - добавлена возможность выравнивания списка однотипно заданных переменных/констант по самому длинному имени (только для операции присваивания)
    - добавлена поддержка юникодных исходных файлов
    - возвращаемый код выхода процесса отражает ошибки обработки
    - добавлена поддержка боковой панели моей сборки SciTe
    - исправлено несколько ошибок (спасибо Skif_off)
  • 1.2.2
    - исправлено несколько ошибок
    - добавлена директива командной строки "/help"
  • 1.2.1
    - добавлен контроль ошибок
  • 1.2
    - убрано сохранение настроек
    - все настройки можно установить через командную строку
    - добавлена возможность резервного копирования исходного кода
    - изменены режимы обработки кода
    - исправлены ошибки
    - несколько оптимизирован алгоритм
    - добавлена небольшая справка
  • 1.1
    - добавлен интерфейс с настройками
    - добавлены различные режимы обработки кода
    - исправлены ошибки
  • 1.0.6
    - в пустых строках сохраняются символы табуляции

Автор: asdf8
 

Вложения

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 473
Репутация
2 403
asdf8 [?]
нет связи с "AutoIt3Wrapper", который, при параметре "#AutoIt3Wrapper_Run_Tidy=y" при каждом запуске и компиляции запускает Tidy.exe и мусорит резервными копиями в папке скрипта
Это можно отключить. И почему нет связи, можно было бы скомпилировать как Tidy.exe и подставить под оригинальный, тогда и многими используемая директива не перестала бы работать.

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

некоторые отличия в форматировании
Можно подробнее об этом?


Добавлено:
Сообщение автоматически объединено:

Проверил утилиту, вроде работает неплохо :ok:.
Есть одно пожелание - чтобы в пустых строках не удалялись символы табуляций.
 
Автор
A

asdf8

Скриптер
Сообщения
564
Репутация
152
AZJIO
а зачем эта строка вообще нужна? В скомпилированном скрипте она не имеет смысла, а вызвать Tidy можно отдельно, хотя я очень редко пользуюсь, только чтоб разобраться в чужом скрипте.
сам я этой директивой не пользуюсь, она иногда попадается в чужих скриптах, а потом в папке со скриптом находишь кучу резервных копий, жутко я этим недоволен.

CreatoR
Есть одно пожелание - чтобы в пустых строках не удалялись символы табуляций.
надо закомментировать строки 278-281
Код:
If Not $aTmp[$i] Then
	$sOut &= @CRLF
	ContinueLoop
EndIf


некоторые отличия в форматировании
Можно подробнее об этом?
1. всегда удаляются двойные пустые строки
2. всегда, перед началом функции и после ее конца, вставляется пустая строка
3. в строке, между кодом и строковым комментарием, вставляется пробел
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 473
Репутация
2 403
asdf8
А как насчёт пробела у разных операторов, например знак присваивания?
 
Автор
A

asdf8

Скриптер
Сообщения
564
Репутация
152
А как насчёт пробела у разных операторов, например знак присваивания?
Можно сделать полную обработку кода, хотелось бы услышать все хотелки, желательно с примерами кода.

ps: почему-то у меня в опере, на основной странице форума, при выделении текста, всплывает сообщение "Цитировать", а на странице ответа - нет. :wacko:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 473
Репутация
2 403
asdf8 [?]
хотелось бы услышать все хотелки
Было бы неплохо ещё прикрутить диалог конфигураций.

почему-то у меня в опере, на основной странице форума, при выделении текста, всплывает сообщение "Цитировать", а на странице ответа - нет
Где это основная страница, «Цитата» всплывает только там, где есть сообщения (с профилем сбоку), а в «Ответ» их как бы нет.
 
Автор
A

asdf8

Скриптер
Сообщения
564
Репутация
152
Было бы неплохо ещё прикрутить диалог конфигураций.
это можно

Где это основная страница
например, эта страница и у меня ни в опере, ни в эксплорере, на ней нет поля ввода и клик по "Цитата" ничего никуда не вставляет.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 473
Репутация
2 403
asdf8 [?]
на ней нет поля ввода и клик по "Цитата" ничего никуда не вставляет
Ну это понятно, нужно в настройках профиля сделать чтобы форма быстрого ответа сразу раскрывалась.
 
Автор
A

asdf8

Скриптер
Сообщения
564
Репутация
152
Обновил версию.
Подробности в первом посте.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 473
Репутация
2 403
Спасибо за обновление.

Я так понял он теперь добавляет свою дериткиву #AutoIt3TidySourse_Parameters?
И ещё, диалог настроек надо бы открывать если программа запущена без параметров, а при вызове Tidy из SciTE пусть обрабатывает скрипт.
И да, почему в настройках нет опций для резервной копий, т.е чтобы оно было отключено по умолчанию, но как опция оно должно присутствовать.


Добавлено:
Сообщение автоматически объединено:

Неправильно выравнивает табы в пустой строке:

Код:
While 1
	Switch GUIGetMsg()
			
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd


Там лишний таб.
 
Автор
A

asdf8

Скриптер
Сообщения
564
Репутация
152
CreatoR [?]
Я так понял он теперь добавляет свою дериткиву #AutoIt3TidySourse_Parameters
только если используется соответствующий режим и текущий параметр #AutoIt3TidySourse_Parameters отличается от предыдущего или от параметра по умолчанию.


И ещё, диалог настроек надо бы открывать если программа запущена без параметров, а при вызове Tidy из SciTE пусть обрабатывает скрипт.
И да, почему в настройках нет опций для резервной копий, т.е чтобы оно было отключено по умолчанию, но как опция оно должно присутствовать.

Неправильно выравнивает табы в пустой строке:
поправлю

Интересуют ошибки обработки - я у себя все, что можно проверил
 
Автор
A

asdf8

Скриптер
Сообщения
564
Репутация
152
Что-то мне подумалось - может убрать режимы замены регистра функций и переменных "ПРОПИСНЫЕ", "строчные", "Первая буква заглавная" - не вижу особого смысла в них, а вместо этого создать словарь из слов начинающихся с заглавной буквы (из файлов au3.api, au3.user.calltips.api), плюс, отдельно, пользовательский словарь. Правда, может заметно увеличиться время обработки (хотя - не факт), зато все коды будут по одному шаблону.
Есть какие мысли по этому поводу?
 
Автор
A

asdf8

Скриптер
Сообщения
564
Репутация
152
Обновил версию до 1.2.
 

AZJIO

Меценат
Меценат
Сообщения
2 752
Репутация
1 149
asdf8
Нормально работает, хорошо что нет привязки к SciTE, то есть можно и в Notepad++ через ком-строку обработать.
Можно ещё добавить проверку целостности, сравнив оригинал с выходным результатом методом удаления пробельных символов и если файлы будут различаться, то выдать предупреждение (регистр букв не учитывая).

Справку можно так сделать
Код:
#include <ie.au3>
#include <WindowsConstants.au3>
$GUI = GUICreate("Справка", 600, 400, -1, -1, $WS_OVERLAPPEDWINDOW)
$Lng_hlp = '<html><head><title>Справка</title></head><body>справка</body></html>'
$oIE = _IECreateEmbedded()
GUICtrlCreateObj($oIE, 10, 10, 580, 380)
_IENavigate($oIE, 'about:blank')
GUICtrlSetResizing(-1, 2 + 4 + 32 + 64)
_IEDocWriteHTML($oIE, $Lng_hlp)
GUISetState()
Do
Until GUIGetMsg() = -3
 
Автор
A

asdf8

Скриптер
Сообщения
564
Репутация
152
AZJIO [?]
Справку можно так сделать
Я в курсе, только свое окно нужно самому и обрабатывать, а тут - все работает в отдельном процессе.


Можно ещё добавить проверку целостности
Регистр букв заменяется в целом слове, а не ищется по всему тексту и вероятность получить ошибку от обработки пробелов и переносов строк, получается не меньше. Такой проверкой, с удаленными пробелами, все ошибки не выловишь, не хотелось бы добавлять дополнительные обработки (из соображений быстродействия). К тому-же, всегда можно воспользоваться "Au3Check", после обработки, и, в случае проблем, нажать "Undo" (в SciTE).
 

AZJIO

Меценат
Меценат
Сообщения
2 752
Репутация
1 149
asdf8
Регистр букв заменяется в целом слове, а не ищется по всему тексту и вероятность получить ошибку от обработки пробелов и переносов строк, получается не меньше. Такой проверкой, с удаленными пробелами, все ошибки не выловишь, не хотелось бы добавлять дополнительные обработки (из соображений быстродействия). К тому-же, всегда можно воспользоваться "Au3Check", после обработки, и, в случае проблем, нажать "Undo" (в SciTE).
Быстродействие мгновенно (бесплатно для скрипта), вот:
Код:
$orig='так-кто'
$out='кто-так'
$tmp1=StringStripWS($orig, 8)
; обработка
$tmp2=StringStripWS($out, 8)
If StringCompare($tmp1, $tmp2) Then MsgBox(0, 'Message', 'Возможны ошибки')


Я не знаю как регулярные выражения работают в TidySource, но я в утилите "Converter CMD to BBcode" использовал такую проверку, и это было на пользу, избавило от тщательной проверки кода. Чуть что сразу предупреждение, сохраняю ошибочный результат в файл, сравниваю утилитой сравнения, исправляю регулярное выражение вызвавшее ошибку. И просто уверенность появляется 100%-ная
 
Автор
A

asdf8

Скриптер
Сообщения
564
Репутация
152
AZJIO [?]
уверенность появляется 100%-ная
Если на выходе должен быть код :
Код:
If @Compiled Then $var = 1


а получился :
Код:
[email protected] Then $var = 1


то такую ошибку такая проверка не обнаружит - вот о чем я говорил.

Хотя, если такая проверка не прошла - то это не "возможная", а точно ошибка.

Проверку добавил, версию обновил.
 

AZJIO

Меценат
Меценат
Сообщения
2 752
Репутация
1 149
asdf8
при каждом запуске и компиляции запускает Tidy.exe и мусорит резервными копиями в папке скрипта (до сих пор не могу понять, зачем такое было сделано)
В Tidy можно просто указать каталог, например /bdir=C:\AutoIt3\BackUp и количество резервных копий /kv=n
 
Автор
A

asdf8

Скриптер
Сообщения
564
Репутация
152
Резервные копии - это только один из доводов.
Для меня, например, гораздо важнее возможность обработать часть кода и при этом не потерять закладки, пометки и фолдинг.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 473
Репутация
2 403
С недавних пор перестал работать, а всё из за строчки:
Код:
If ProcessExists('AutoIt3Wrapper.exe') Then Exit

зачем она?
 
Верх