Open zeegin opened 5 years ago
Сейчас ошибка представляется вот так:
{
"resource": "/c:/git/vanessa-automation-1/features/Libraries/РаботаСФайлами/РаботаСФайлами/Forms/Форма/Ext/Form/Module.bsl",
"owner": "_generated_diagnostic_collection_name_#1",
"code": "ParseError",
"severity": 8,
"message": "Ошибка разбора исходного кода. <missing ENDPROCEDURE_KEYWORD>",
"source": "bsl-language-server",
"startLineNumber": 440,
"startColumn": 1,
"endLineNumber": 440,
"endColumn": 2
}
Может быть лучше сделать уточнения для missing ENDPROCEDURE_KEYWORD
?
На уровне парсера крайне тяжело понять почему именно не разобралось. Оно ж как работает - ждет лексему с определенным типом, а там тип не тот. Почему? а леший его знает, дай-ка я просто рухну.
Можно попробовать еще выводить имя узла, на котором рухнуло, возможно это частично поможет. но тогда пользователю надо знать, какие вообще типы узлов есть в дереве, чтобы как-то соотнести полученную информацию.
@asosnoviy ?
Я не понял вопроса=( К парс егогу есть претензии по позиционированию, ошибка кидается на родителя, что не верно. Но я не понял, что именно предлагает @zeegin.
"Ошибка разбора исходного кода. Ожидается "КонецПроцедуры"?
@asosnoviy Ага. По коду конечно понять можно, но хочется чтобы в журнале ошибок вообще не было фраз типа Ошибка разбора исходного кода.
, это техническая штука и особенность самого парсера, Лучше писать просто Ожидается "EndProcedure"
или Недопустимый термин
указывая на следующее неправильное слово, как это делается в Visual Studio, например:
Кстати интересная формулировка... Просто мне показалось логичным выводить хоть какую то подсказку.
Смысл вроде ясен. Попробую. "Ожидается ENDPROCEDURE_KEYWORD", хоть сейчас =)
Поотмазываюсь почему так, надо было убрать эту ругань из выхлопа парсера, но оставить возможность ее анализировать. Так появилась диагностика "Ошибка разбора". С тем, что она не совсем для людей, согласен.
Еще с позицией надо определиться - лучше опять же как в VS чтобы позиция указывала на начало слова которое является проблемным, а сейчас указывается слово перед началом проблемы.
Не ругается - ожидалось что будет ругаться на КонецФункции
Ошибка - ожидалось что будет ругаться и на конец функции и на незаконченное Я
@asosnoviy может мы зря на ErrorNode завязались? может можно получить место, где появился непонятный токен? или наоборот взять последний понятный токен и взять его или следующий, к примеру.
А можно убрать ANTLR и нафигачить свой парсер. Причем я не то чтобы шучу. Там и Асинх процедуры без mode можно будет делать
Примеры: