Как показать синтаксические ошибки в плагине редактора eclipse
-
23-08-2019 - |
Вопрос
Как я могу указать синтаксические ошибки (например,недопустимая последовательность токенов) в плагине редактора eclipse, как и в редакторе Java eclipse, т.е.красными волнистыми подчеркиваниями, красным маркером на полосе прокрутки, к которому можно перейти, и пояснительным сообщением при наведении курсора на любой из них?
Я пишу плагин редактора eclipse для собственного формата файла (в частности, «формата файла змеи» игрового движка Shark3D).Я реализовал сканер для подсветки синтаксиса и схемы.
- Что касается подчеркиваний, мне просто нужно, чтобы сканер возвращал
IToken
с «извилистым подчеркиванием»TextAttribute
вместо обычного, или есть какой-то особый механизм обозначения синтаксических ошибок? - Как реализовать маркеры полосы прокрутки?Является
IAnnotationModel
соответствующий интерфейс здесь?Если да, то где мне зарегистрировать реализацию, чтобы появились маркеры? - Я нашел только
SourceViewerConfiguration.getAnnotationHover()
, что позволило бы мне реализовать поведение наведения, но только для «аннотации», что, как я полагаю, означает маркеры полосы прокрутки. Как мне реализовать поведение наведения для самого текста?
Я был бы рад конкретным советам, а также URL-адресу учебника, который описывает это - справочные документы и примеры eclipse, похоже, этого не делают.
Редактировать:Маркеры — лучшее решение этой проблемы.Рабочий пример их использования можно найти в примере кода плагина в org.eclipse.ui.examples.readmetool.AddReadmeMarkerAction
Решение
Вам следует использовать маркеры.
Ниже приведен пример, взятый из «Руководства 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");
Другие советы
Правильный способ — использовать интерфейс маркера.
Маркеры — это, по сути, модель, которая сопоставляет объекты-маркеры с местоположениями в исходном коде, поэтому это имеет смысл в ситуациях, когда в нескольких файлах могут возникнуть ошибки.(см. интерфейс IMarker)
Более дешевый вариант, если вы хотите добавить разметку в текущий редактор, а не во весь проект, — использовать аннотации, которые вы можете добавить и удалить самостоятельно.
Маркеры представлены в пользовательском интерфейсе как аннотации, но Eclipse сам добавляет и удаляет аннотации.Благодаря прямым аннотациям вы все контролируете.