Что нового

SciTE 3.5.5.101 для AutoIt

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
Yashied
можете отключить этот режим (CW.ini, SavePragmaFirst=0)
А я и не знал. Надо почитать инишник - ознакомиться.
Как-то даже неудобно стало - предъявляю претензии не ознакомившись с настройками. :-[

Если вы нажали Save/Compile
Я, при сохранённом скрипте, нажимаю Ctrl+F7 - появляется окно "Compiler Options" с включёнными опциями в соответствие с прописанными #pragma. Теперь нажимаю "Compile" и файл перезаписывается. Это видно по изменению положения директив - они упорядочиваются по порядку следования в CW.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Yashied
А можно всё таки добавить некую опцию (например параметр ком. строки), чтобы CW запускал проверку синтаксиса?
Если проверка вернула ошибку, то просто перенаправить вывод ошибки в консоль и завершить, если нет - то продолжать обычно.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
InnI [?]
у меня проверяет
Пример:

Код:
MsgBox(64, @ScriptName, 'test')
Global Const $VAR = $test


MsgBox появится, но в скрипте ошибка (проверка синтаксиса её показывает).
При запуске не должна показывать (должна выводиться сразу ошибка, у меня Au3CheckWarnings=2).
 

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
CreatoR
У меня этот пример не компилируется (в ini-файле тоже двойка стоит)
Код:
>"d:\AutoIt3\SciTE\Tools\Compiler Wrapper\CW.exe" "D:\AutoIt v3 Script.au3" /m:1 /c:0
+ Checking... Fail
"D:\AutoIt v3 Script.au3"(2,26) : WARNING: $test: possibly used before declaration.
Global Const $VAR = $test
"D:\AutoIt v3 Script.au3"(2,26) : ERROR: $test: undeclared global variable.
Global Const $VAR = $test
-----------------------------------------------------------------------------------
- Compilation failed.
>Exit code: 1    Time: 2.333

Или вы про запуск по F5 ?
 

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
CreatoR
Про него самого
Такое впечатление, что вы чужие посты вообще не читаете :smile:
В данной сборке по F5 сразу вызывается AutoIt. Без проверки. Это принципиальная позиция автора (и это его право). См. ответы 176 и 177. Возможные решения предложены в ответе 179.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
InnI [?]
Такое впечатление, что вы чужие посты вообще не читаете
Я всё читаю ;).

В данной сборке по F5 сразу вызывается AutoIt. Без проверки. Это принципиальная позиция автора
Я просто предложил добавить опцию, а не делать такое поведение по умолчанию.
Чтобы у пользователя была такая возможность при желаний.
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Господа любители комбайнов, Compiler Wrapper (CW) - это, как несложно догадаться, оболочка для компилятора. Основное предназначение CW - компиляция скриптов посредством Aut2Exe + всякие разные плюшки. Нет никакого смысла замыкать на CW запуск скрипта, проверку (отдельно) и т.д., как это сделано в AutoIt3Wrapper. Для этого проще написать что-то типа GoWrapper.

С другой стороны, часто ли вы нуждаетесь в проверке кода перед запуском? Ну хорошо, первый запуск показывает все ошибки, а дальше что? Вы что-то добавляете, меняете, например, координаты элементов и пр. Все это уже не нуждается в проверке синтаксиса. Так что хотелку InnI'а скорее всего можно отнести к личным предпочтениям, а не к объективным улучшениям.


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

CreatoR сказал(а):
Я просто предложил добавить опцию, а не делать такое поведение по умолчанию.
Опцию проверки кода перед запуском в компилятор?


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

Кстати, я вчера обновил SciTE (1.3.6). Это для тех, кто по каким-либо причинам отключил автообновление.
 

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
Yashied
часто ли вы нуждаетесь в проверке кода перед запуском?
Если перенести данное утверждение на написание функций, то получается, что и входящие параметры в самой функции проверять не обязательно. Пользователь может самостоятельно проверить их перед вызовом функции. Причём, сама функция от этого прибавит в скорости, а при многократном вызове это отразится и на скорости всего скрипта. Но, почему-то, так никто не делает, а подобные действия считаются "плохим стилем программирования"...

От опечаток, даже при банальном изменении координат элементов, к сожалению, никто не застрахован.
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Кстати, почему я еще не люблю всякие "левые" действия перед запуском скрипта, они не дают понять насколько быстро или медленно стартует сама программа.


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

InnI сказал(а):
От опечаток, даже при банальном изменении координат элементов, к сожалению, никто не застрахован.
Как не крути, а это все не серьезно, высасано из пальца. :smile: В реальности, вам проверка синтаксиса нужна на порядок реже, чем вы пытаетесь сейчас об этом сказать.
 

InnI

AutoIT Гуру
Сообщения
4,951
Репутация
1,446
InnI
странность с CALLTIP: нажатие запятой сразу после кавычки не вызывает всплывающую подсказку
Помогло следующее: в файле AutoItAutoComplete.lua заменил 2 на 1 в строке
Код:
	local style_at = editor.StyleAt[editor.CurrentPos - 2]
А если совсем убрать вычитание, то получается ещё лучше: при нажатии запятой подсказки не появляются внутри комментария, а также при незакрытой кавычке.
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Обновил SciTE:

1.3.6 (19 Сентября, 2015)
  • Добавлена аббревиатура "ctv" для функции ControlTreeView().
  • Исправлен баг в Compiler Wrapper, который мог привести к генерации поврежденного исполняемого файла при использовании UPX.
  • Исправлен баг в AutoItIndentFix.lua.
  • Изменена иконка для файлов тем SciTE (.SciTETheme).
  • Изменена тема "Lemon".
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Обновил SciTE:

1.3.7 (28 Сентября, 2015)
  • Исправлены баги и добавлены новые возможности в Compiler Wrapper (1.1.0.0).

P.S

Дизайн Compiler Wrapper был немного изменен.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Бывает что + Adding resources... Done напишет, но ресурсы не добавит.
Файл .rsc
Код:
-add circle_yellow.ico, ICONGROUP, 113,
-add langde.txt, TEXT, DE
в конце нет запятой. Ресурсы не добавятся, но в консоль пишет что Done
С самого начало так "работает".
 
Автор
Yashied

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Resource Hacker не добавляет ресурсы, если в сценарии есть хотя бы одна ошибка. Кроме того, Resource Hacker не возвращает коды завершения, поэтому однозначно отследить ошибку проблематично. Хотя, можно попробовать сравнивать размер файла до и после добавления ресурсов.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
... или посмотреть в ресурсы, и если они добавились - то писать Ок
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Предлагаю добавить это в AutoItTools.lua:

Код:
--------------------------------------------------------------------------------
-- InsertAllFunctionsHeaders()
--
-- Generates a headers for all functions and inserts them into the document.
--
-- Tool: AutoItTools.InsertAllFunctionsHeaders $(au3) savebefore:no,groupundo:yes Ctrl+Alt+U Insert Functions Headers
--------------------------------------------------------------------------------
function AutoItTools:InsertAllFunctionsHeaders()
	local iL = 0
	local iAdded = 0
	local iExists = 0
	
	while iL < editor.LineCount - 1 do
		local continue = 1
		
		local line, len = editor:GetLine(iL)
		local pos = editor:PositionFromLine(iL)
		
		local lineNum = iL
		
		local from, to, name = line:find("[Ff][Uu][Nn][Cc][%s]*([%w%s_]*)")
		local struct = false
		
		if to == nil then
			from, to, name = line:find("[Gg][Ll][Oo][Bb][Aa][Ll]%s+[Cc][Oo][Nn][Ss][Tt]%s+($[%w_]+)")
			struct = true
			if to == nil then
				continue = 0
			end
		end
		
		if continue == 1 then
			-- remove comments from the line
			from, to =  line:find(";")
			while from ~= nil do
				-- print(pos+from .. " type:" .. editor.StyleAt[pos+from])
				if editor.StyleAt[pos+from] == SCE_AU3_COMMENT then
					line = string.sub (line, 1 , from-1)   -- remove comment
					from = nil                             -- exit loop
				else
					from, to =  line:find(";",from+1)      -- find next ; as this one is not a comment
				end
			end
			-- print(" line:" .. line)
			local pfrom, pto = line:find("%(")    -- check for opening parenthesis
			if struct then
				pfrom, pto = line:find("[\"']")
			end

			if pto ~= nil then
				local i = 0
				local tmp
				while line:find("%s+_%s*$") do    -- found a line continuation
					line = line:gsub("%s+_%s*$", "")    -- remove it
					i = i + 1
					pos = editor:PositionFromLine(lineNum+i)    -- set new position
					tmp = editor:GetLine(lineNum+i)
					-- remove comments from the line
					from, to =  tmp:find(";")
					while from ~= nil do
						-- print(pos+from .. " type:" .. editor.StyleAt[pos+from])
						if editor.StyleAt[pos+from] == SCE_AU3_COMMENT then
							tmp = string.sub (tmp, 1 , from-1)   -- remove comment
							from = nil                             -- exit loop
						else
							from, to =  tmp:find(";",from+1)      -- find next ; as this one is not a comment
						end
					end
					tmp = tmp:gsub("^%s*", "")    -- remove leading white space
					line = line .. tmp
				end
				
				line = line:gsub("[\r\n]", "")    -- remove line breaks
				line = line:gsub("[\"']%s*&%s*[\"']", "") -- remove string joins
				
				tmp = editor:GetLine(iL-2)
				
				if tmp == nil or tmp:find("^; Example .......:") == nil then
					local sText
					
					if name:sub(1, 1) == "$" then
						sText = self:CreateStructureHeader(name, line)
					else
						sText = self:CreateFunctionHeader(name, line)
					end
					
					editor:InsertText(editor:PositionFromLine(iL), sText)
					iAdded = iAdded + 1
					
					sText, lines = sText:gsub("(\r?\n)", "%1")
					iL = iL + lines
				else
					iExists = 1
				end
			else
				-- print("Argument list not found, unable to insert header.")
			end
		end
		
		iL = iL + 1
	end
	
	if iAdded == 0 then
		if iExists == 1 then
			print("All UDFs have headers.")
		else
			print("Function or struct definition not found, unable to insert headers.")
		end
	end
end -- InsertAllFunctionsHeaders()

Это позволяет вставить заголовки для всех UDF в скрипте.
Учитывает повторную вставку, вставляет только недостающие заголовки.

:
Пока писал это весь мозг сломал.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Как отключить удаление табов (@TAB) в начале пустой строки при загрузке скрипта?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
За это отвечает strip.trailing.spaces=0 :laugh:.
 
Верх