1c-syntax / bsl-language-server

Реализация Language Server Protocol для языка 1C (BSL)
https://1c-syntax.github.io/bsl-language-server
Other
307 stars 105 forks source link

Парные ключевые слова #259

Open zeegin opened 5 years ago

zeegin commented 5 years ago

Примеры:

Процедура Фу()
КонецФункции
Если Условие Тогда
КонецЦикла
zeegin commented 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?

nixel2007 commented 5 years ago

На уровне парсера крайне тяжело понять почему именно не разобралось. Оно ж как работает - ждет лексему с определенным типом, а там тип не тот. Почему? а леший его знает, дай-ка я просто рухну.

Можно попробовать еще выводить имя узла, на котором рухнуло, возможно это частично поможет. но тогда пользователю надо знать, какие вообще типы узлов есть в дереве, чтобы как-то соотнести полученную информацию.

nixel2007 commented 5 years ago

@asosnoviy ?

asosnoviy commented 5 years ago

Я не понял вопроса=( К парс егогу есть претензии по позиционированию, ошибка кидается на родителя, что не верно. Но я не понял, что именно предлагает @zeegin.

"Ошибка разбора исходного кода. Ожидается "КонецПроцедуры"?

zeegin commented 5 years ago

@asosnoviy Ага. По коду конечно понять можно, но хочется чтобы в журнале ошибок вообще не было фраз типа Ошибка разбора исходного кода., это техническая штука и особенность самого парсера, Лучше писать просто Ожидается "EndProcedure" или Недопустимый термин указывая на следующее неправильное слово, как это делается в Visual Studio, например: изображение изображение

asosnoviy commented 5 years ago

Кстати интересная формулировка... Просто мне показалось логичным выводить хоть какую то подсказку.

asosnoviy commented 5 years ago

Смысл вроде ясен. Попробую. "Ожидается ENDPROCEDURE_KEYWORD", хоть сейчас =)

asosnoviy commented 5 years ago

Поотмазываюсь почему так, надо было убрать эту ругань из выхлопа парсера, но оставить возможность ее анализировать. Так появилась диагностика "Ошибка разбора". С тем, что она не совсем для людей, согласен.

zeegin commented 5 years ago

Еще с позицией надо определиться - лучше опять же как в VS чтобы позиция указывала на начало слова которое является проблемным, а сейчас указывается слово перед началом проблемы.

Не ругается - ожидалось что будет ругаться на КонецФункции изображение

Ошибка - ожидалось что будет ругаться и на конец функции и на незаконченное Я изображение

nixel2007 commented 5 years ago

@asosnoviy может мы зря на ErrorNode завязались? может можно получить место, где появился непонятный токен? или наоборот взять последний понятный токен и взять его или следующий, к примеру.

asosnoviy commented 5 years ago

https://t.me/bsl_language_server/17453

asosnoviy commented 5 years ago

242

EvilBeaver commented 3 years ago

А можно убрать ANTLR и нафигачить свой парсер. Причем я не то чтобы шучу. Там и Асинх процедуры без mode можно будет делать