сделать стартовой  |  добавить в избранное

   SciTE - редактор кода для программистов

Список директив


Автор: Тугаринов Сергей / Дата: 25.04.2006 / Комментариев: 4
Категория: Скрипты, LUA


Данный скрипт позволяет получать список директив "TODO, FIXME, BUG" для текущего файла. Названия директив настраиваются по вашему желанию в коде скрипта.
Внешний вид результатов работы скрипта вы можете увидеть на следующем снимке экрана:



На снимке экрана видно, что список сортируется в порядке указания таблицы директив, например для меня удобнее выстраивать его в порядке важности директивы, сначало ошибки (@BUG:), потом предложение о исправлении (@FIXME:), а в самом конце указываем, что нужно сделать (@TODO).
На значения директив, можете не смотреть, так как они тестовые :)

Собственно код скрипта:

Код LUA:

--~ Задаем таблицу директив
local find_table = { "@BUG:", "@FIXME:", "@TODO:" }
--~ Таблица символов подлежащих удалению
local remove_comment = { "//", "*" }
local flag = 0

function TrimString (sss)
-- удаляем двойные пробелы и всякое лишнее
local str1 = sss
-- удаляем двойные пробелы
while string.find(str1," ") do str1 = string.gsub(str1," "," ") end
-- удаляем пробелы в начале строки
while (string.sub (str1,1,1)==" ") and (string.len(str1)>1) do str1 = string.sub(str1, 2) end
return str1
end

function SkipSubStrings (ss)
--~ Удаляем из текста символы директив
local ss1 = ss
for i,v in pairs (find_table) do
ss1 = string.gsub(ss1,v," ")
end

--~ Удаляем символы подлежащие удалению
for i,v in pairs (remove_comment) do
ss1 = string.gsub(ss1,v," ")
end
ss1 = TrimString (ss1)

return ss1
end


--~ output:ClearAll()
local count = 0
trace(">СПИСОК ДИРЕКТИВ:\n")
trace("Строка Тип и значение директивы\n")
for i,v in pairs (find_table) do
local s,e = editor:findtext(v, flag, 0)
if(s ~= nil)
then
local m = editor:LineFromPosition(s) - 1
while s do
local l = editor:LineFromPosition(s)
if (l ~= m)
then
count = count + 1
local str = string.gsub(" "..editor:GetLine(l), "%s+", " ")
trace(":"..(l + 1)..":\t"..v.."\t"..SkipSubStrings(str).."\n")
m = l
end
s,e = editor:findtext(v, flag, e+1)
end
else
trace("> "..v.." не найдено!\n")
end
end
trace("Найдено "..count.." директив\n")



Для использования скрипта в своих проектах необходимо сохранить его в директорию $(SciteDefaultHome)\tools\ под именем TodoList.lua и прописать в конфигурационном файле следующие строки:

Код .SciTEUser.properties:

command.name.24.*=Список директив
command.24.*=dofile $(SciteDefaultHome)\\tools\\TodoList.lua
command.mode.24.*=subsystem:lua,savebefore:no


Ресурсы:



P.S.
Скрипт ищет только однострочные директивы, в следующей версии будут обрабатываться многострочные, такие как:
Код:

/**
* @TODO:
* Первое предложение
* Второе предложение
* .....
* N... предложение
*/

Версия для печати / Прочитано: 15169 раз(а)

Комментариев: 4 (rss)

1. DeadMoroz / 27.04.2006 - 08:44
Спасибо, возможно, полезная штука. Но ведь кроме как в phpDoc'ах gotcha's могут встречаться и внутри кода, в комментариях (как вариант).

http://tony2001.phpclub.net/doc/standard/doc.gotchas.html

Ждем поддержки многострочных директив ;)
Цитата
2. Тугаринов Сергей / 27.04.2006 - 08:53
Через пару дней обязательно займусь :)
Цитата
3. Тугаринов Сергей / 02.05.2006 - 22:47
Думаю, что заняться скриптом придется позже, времени не хватает :)
Цитата
4. B4rr4cuda / 19.07.2008 - 21:09
Немного доработал скрипт.
* Вызов процедуры TodoList_Output() выодит список в консоль (output)
* Процедура TodoList_ShowList() выводит окно автодополнения со списком тудушек, после выбора пункта, происходит переход на одну строку ниже туду.
Код:


--~ Задаем таблицу директив

local find_table = { "@BUG:", "@FIXME:", "@TODO:" }

--~ Таблица символов подлежащих удалению

local remove_comment = { "//", "*" }

local flag = 0



function TrimString (sss)

-- удаляем двойные пробелы и всякое лишнее

local str1 = sss

-- удаляем двойные пробелы

while string.find(str1," ") do str1 = string.gsub(str1," "," ") end

-- удаляем пробелы в начале строки

while (string.sub (str1,1,1)==" ") and (string.len(str1)>1) do str1 = string.sub(str1, 2) end

return str1

end



function SkipSubStrings (ss)

--~ Удаляем из текста символы директив

local ss1 = ss

for i,v in pairs (find_table) do

ss1 = string.gsub(ss1,v," ")

end



--~ Удаляем символы подлежащие удалению

for i,v in pairs (remove_comment) do

ss1 = string.gsub(ss1,v," ")

end

ss1 = TrimString (ss1)



return ss1

end



-- Add user event handler OnUserListSelection

local old_OnUserListSelection = OnUserListSelection

function OnUserListSelection(tp,sel_value)

local result

if old_OnUserListSelection then result = old_OnUserListSelection(tp,sel_value) end

if tp == 11 then

local pl=string.sub(sel_value,string.find(sel_value,'(%d+)'));

if tonumber(pl) and scite.SendEditor(SCI_GOTOLINE,pl) then

return true

end

end

return result

end



local Separator='';



function TodoList_ShowList()

Separator='\r'

local str=TodoList_GenStr();

if str ~= '' then

-- показать строку в всплывающем окне, используя /r в качестве разделителя строк

local sep=scite.SendEditor(SCI_AUTOCGETSEPARATOR);

scite.SendEditor(SCI_AUTOCSETSEPARATOR,13);

editor:UserListShow(11,str);

scite.SendEditor(SCI_AUTOCSETSEPARATOR,sep);

end

end



function TodoList_Output()

Separator='\n'

local str=TodoList_GenStr();

if str ~= '' then

-- вывод в консоль

trace(str);

end

end



function TodoList_GenStr()

-- output:ClearAll()

local count = 0

local strts='';

if Separator=='\n' then

strts=strts..">СПИСОК ДИРЕКТИВ:"..Separator

strts=strts.."Строка Тип и значение директивы"..Separator

end

for i,v in pairs (find_table) do

local s,e = editor:findtext(v, flag, 0)

if(s ~= nil)

then

local m = editor:LineFromPosition(s) - 1

while s do

local l = editor:LineFromPosition(s)

if (l ~= m)

then

count = count + 1

local str = string.gsub(" "..editor:GetLine(l), "%s+", " ")

strts=strts..":"..(l + 1)..":\t"..v.."\t"..SkipSubStrings(str)..Separator;

m = l

end

s,e = editor:findtext(v, flag, e+1)

end

else

if Separator=='\n' then

strts=strts.."> "..v.." не найдено!"..Separator;

else

trace("> "..v.." не найдено!\n")

end

end

end

if Separator=='\n' then

strts=strts.."Найдено "..count.." директив"..Separator;

elseif strts~='' then

strts=string.sub(strts,1,string.len(strts)-1)

end

return strts;

end



Нижеследующее в конфиг юзера:
Код:
command.name.26.*=Список директив
command.26.*=TodoList_ShowList()
command.mode.26.*=subsystem:lua,savebefore:no
command.shortcut.26.*=Ctrl+Alt+D

command.name.27.*=Список директив в output
command.27.*=TodoList_Output()
command.mode.27.*=subsystem:lua,savebefore:no
command.shortcut.27.*=Ctrl+Shift+D
Цитата


Добавить комментарий:
Имя:
E-mail:
        BBCodes




Интересные статьи / Тематические материалы © 2004 - 2017 - Хранение данных