Как показать синтаксические ошибки в плагине редактора eclipse

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

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

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

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

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


person Michael Borgwardt    schedule 25.12.2008    source источник


Ответы (2)


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

Пример, полученный из "Руководства разработчика 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");
person Michael Rutherfurd    schedule 26.12.2008

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

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

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

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

person Uri    schedule 26.12.2008