Как показать синтаксические ошибки в плагине редактора Eclipse - PullRequest
4 голосов
/ 25 декабря 2008

Как я могу указать синтаксические ошибки (например, недопустимую последовательность токенов) в плагине редактора eclipse, как в редакторе eclipse Java, т.е. красными извилистыми подчеркиваниями, красным маркером на полосе прокрутки, к которому вы можете перейти, и пояснительное сообщение, когда вы наводите курсор на одно из них?

Я пишу плагин редактора Eclipse для пользовательского формата файлов (в частности, «формат файла змеи» игрового движка Shark3D). Я реализовал сканер, чтобы получить подсветку синтаксиса и схему.

  • Для подчеркиваний, могу ли я просто вернуть сканеру IToken с "извилистым подчеркиванием" TextAttribute вместо обычного или есть специальный механизм для маркировки синтаксических ошибок?
  • Как реализовать маркеры полосы прокрутки? IAnnotationModel является ли соответствующий интерфейс здесь? Если да, где я могу зарегистрировать реализацию, чтобы появились маркеры?
  • Я нашел только SourceViewerConfiguration.getAnnotationHover(), что позволило бы мне реализовать поведение при наведении, но только для «аннотации», что, как я полагаю, означает маркеры полосы прокрутки - как мне реализовать поведение при наведении курсора для самого текста?

Я был бы рад конкретному совету, а также URL-адресу учебного пособия, которое охватывает это - справочные документы и примеры по Eclipse, похоже, не подходят.

Edit: Маркеры являются лучшими решениями для этого. Рабочий пример того, как их использовать, можно найти в примере кода плагина в org.eclipse.ui.examples.readmetool.AddReadmeMarkerAction

Ответы [ 2 ]

8 голосов
/ 26 декабря 2008

Вы должны использовать маркеры.

Ниже приведен пример, полученный из «Руководства разработчика Java по Eclipse»:

<extension point="org.eclipse.core.resources.markers"  
            id="snakesyntax"  
            name="Snake syntax error">  
    <super type="org.eclipse.core.resources.problemmarker" />  
    <super type="org.eclipse.core.resources.textmarker" />  
    <persistent value="true" />
<extension>

IMarker marker = res.createMarker("com.ibm.tool.resources.snakesyntax");

marker.setAttribute(IMarker.SEVERITY, 0);
marker.setAttribute(IMarker.CHAR_START, startOfSyntaxError);
marker.setAttribute(IMarker.CHAR_END, endOfSyntaxError);
marker.setAttribute(IMarker.LOCATION, "Snake file");
marker.setAttribute(IMarker.MESSAGE, "Syntax error");
2 голосов
/ 26 декабря 2008

Правильный способ - использовать интерфейс маркера.

Маркеры - это, по сути, модель, которая отображает объекты маркеров на места в вашем исходном коде, поэтому это имеет смысл в ситуациях, когда могут возникнуть ошибки в нескольких файлах. (см. интерфейс IMarker)

Более дешевый вариант, если вы хотите добавить разметку к вашему текущему редактору, но не ко всему проекту, используют аннотации, которые вы можете добавить и удалить самостоятельно.

Маркеры представлены в пользовательском интерфейсе как аннотации, но Eclipse добавляет и удаляет сами аннотации. С помощью прямых аннотаций вы управляете.

...