У кого-нибудь есть правила синтаксического анализа для плагина Notepad ++ Function List для Ruby и Rake - PullRequest
0 голосов
/ 10 ноября 2009

Я использую Notepad ++ для редактирования граблей, и я хотел бы иметь возможность использовать плагин списка функций.

Мне не удалось найти какие-либо правила синтаксического анализа в сети, и диалоговое окно «Правила синтаксического анализа языка» не очень четко задокументировано.

Я анализирую методы в списке со следующим, но хотел бы также отображать задачи.

Function Begin:  [ \t]*def[ \t]+
Function List Name: [a-zA-Z0-9_\.]*

Это не очень чисто и не захватит функции, которые заканчиваются? или!, но это только начало.

Правило моей задачи, которое не работает:

Function Begin: [ \t]*task[ \t]+
Function List Name: :[a-zA-Z0-9_\.]*
Function End: [ \t]+do

Любые предложения приветствуются.

спасибо

Ответы [ 4 ]

1 голос
/ 10 сентября 2011

Вот мои правила. Всё ещё не идеален. Не знаю, как настроить подгруппы.

<Language name="Ruby" imagelistpath="">
    <CommList param1="#" param2="" />
    <CommList param1="//" param2="" />
    <CommList param1="/\*" param2="\*/" />
    <Group name="MODULE" subgroup="" icon="0" child="0" autoexp="0" matchcase="1" fendtobbeg="" bbegtobend="" keywords="">
        <Rules regexbeg="^[\s\t]*module\s+" regexfunc="[\w]+" regexend="" bodybegin="" bodyend="" sep="" />
    </Group>
    <Group name="CLASS" subgroup="" icon="0" child="0" autoexp="0" matchcase="1" fendtobbeg="" bbegtobend="" keywords="">
        <Rules regexbeg="^[\s\t]*class\s+" regexfunc="[\w]+" regexend="" bodybegin="" bodyend="" sep="" />
    </Group>
    <Group name="FUNCTION" subgroup="" icon="0" child="0" autoexp="0" matchcase="1" fendtobbeg="" bbegtobend="" keywords="">
        <Rules regexbeg="^[\s\t]*def\s+" regexfunc="[\w\?!\.=]+" regexend="" bodybegin="" bodyend="" sep="" />
    </Group>
</Language>
1 голос
/ 11 августа 2013

Начиная с версии 6.4 плагин не нужен! Проверьте новую функцию списка функций: http://notepad -plus-plus.org / функции / функция-list.html

Языковая поддержка идет, возможно, запрос здесь поможет: https://sourceforge.net/p/notepad-plus/discussion/331753/thread/b9d2fe00/

1 голос
/ 29 июля 2010

Возможно, вы можете использовать следующие настройки, которые вы можете добавить в файл FunctionListRules.xml:

<Language name="Ruby" imagelistpath="C:\Documents and Settings\king_cao\Application Data\Notepad++\plugins\config\C++.flb">
        <Group name="CLASS" subgroup="FUNCTION" icon="1" child="11" autoexp="4" matchcase="1" fendtobbeg="" bbegtobend="" keywords="">
            <Rules regexbeg="^class\s+" regexfunc="[\w_]+" regexend="" bodybegin="" bodyend="^end$" sep="" />
        </Group>
        <Group name="FUNCTION" subgroup="" icon="9" child="17" autoexp="4" matchcase="1" fendtobbeg="" bbegtobend="" keywords="">
            <Rules regexbeg="^[\s\t]+def\s+" regexfunc="[\w_]+" regexend="" bodybegin="" bodyend="^[\s\t]+end$" sep="" />
        </Group>
        <Group name="GlobalFunction" subgroup="" icon="9" child="17" autoexp="4" matchcase="1" fendtobbeg="" bbegtobend="" keywords="">
            <Rules regexbeg="^def\s+" regexfunc="[\w_]+" regexend="" bodybegin="" bodyend="^end$" sep="" />
        </Group>
        <Group name="MODULE" subgroup="FUNCTION" icon="8" child="11" autoexp="4" matchcase="1" fendtobbeg="" bbegtobend="" keywords="">
            <Rules regexbeg="^module\s+" regexfunc="[\w_]+" regexend="" bodybegin="" bodyend="^end$" sep="" />
        </Group>
</Language>
0 голосов
/ 30 апреля 2016

Я использую следующий синтаксический анализатор для нового functionList.xml. Он распознает большинство модулей классов и определений методов, за исключением случаев, когда несколько определений находятся в одной строке. Э.Г.

module A; module B; class C end; end; end;

В приведенном выше случае он просто распознает «модуль A»

Все просто представлено как функция, включая ключевое слово «class», «module» или «def». Это не использует иерархию, предоставленную classrange.

  <parser id="rb_function" displayName="Ruby" >
    <function
        mainExpr="^[\s]*(def|class|module)[\s]+(self\.)?[\S]+;?"
        displayMode="$className->$functionName" >
      <functionName>
        <nameExpr expr="(def|class|module)[^\(;]*" />
      </functionName>
    </function>
  </parser>
...