Skip to content

Поддержка синтаксиса OneScript - #12

Merged
nixel2007 merged 4 commits into
devfrom
feature/onescript-syntax
Aug 27, 2026
Merged

Поддержка синтаксиса OneScript#12
nixel2007 merged 4 commits into
devfrom
feature/onescript-syntax

Conversation

@nixel2007

Copy link
Copy Markdown
Member

Что и зачем

Парсер разбирал 65% корпуса реального кода OneScript — 2732 файла всех установленных opm-библиотек (autumn, oneunit, opentelemetry, collectionos, benchmark, 1bdd, opm и другие).

Основная причина одна: аннотации. Имя аннотации проверялось по фиксированному списку аннотаций 1С:Предприятие, а разбор ждал единственную форму &Перед("ИмяМетода") — с обязательными скобками и строкой внутри. Под это не подходила вся autumn-экосистема с её &Желудь, &Пластилин, &Тест.

После доработок разбирается 99% корпуса. Оставшиеся файлы — намеренно синтаксически ошибочная фикстура из тестов 1bdd в нескольких копиях.

Что добавлено

Аннотации с произвольным именем — позиционные и именованные параметры, вложенные аннотации, аннотации параметров метода:

&Деталька("OneUnit.Таймаут", ЗначениеПоУмолчанию = 500)
&Напильник(ПрименяетсяТолькоНа = &Прозвище("Желудь"))
Процедура ПриСозданииОбъекта(&Пластилин Сервис, Знач Обычный = 1)

Узел ОбъявлениеАннотации получил поля Имя и Параметры (массив узлов ПараметрАннотации с полями Имя, Значение и Литерал — готовым значением параметра-константы). Поля Аннотация и ИмяМетода для аннотаций 1С:Предприятие продолжают заполняться, существующий код не сломается.

Асинхронные методы — признак Асинхронный в сигнатуре метода, узлы ВыражениеЖдать и ОператорЖдать с обходом в посетителе.

Имена библиотек с дефисами, слэшами, точками и цифрами в #Использовать: autumn-collections, oint/api/grpc, 1commands, v8.runner.

Директивы режима выполнения #Native и #Stack — узел ИнструкцияПрепроцессораРежимВыполнения с полем Режим. Строка запуска скрипта (#!/usr/bin/env oscript) пропускается как не относящаяся к коду модуля.

Обращение к членам результата выражения — скобочного и созданного объекта:

ПолноеИмя = (Новый Файл(Путь)).ПолноеИмя;
Если Новый Рефлектор.МетодСуществует(Объект, "Имя") Тогда

Тесты

В проекте не было тестов — добавлены 39 тестов на OneUnit: на новый синтаксис и на регрессию общих конструкций (тернарный оператор, многострочные строки, метки, обработчики событий, препроцессор, циклы, литералы дат).

Запуск:

opm install -l oneunit
./oscript_modules/bin/oneunit e -d tests

Отдельно проверено, что механизм плагинов и обход дерева не сломаны: детекторы из examples/plugins отрабатывают, в том числе на исходниках самого парсера.

Сборочные линии

Добавлены переиспользуемые workflow из autumn-library/workflows: тестирование (OneUnit, матрица stable/dev) и публикация релиза в hub.oscript.io.

Матрица не включает default, потому что версия среды в packagedef (1.0.21) оставлена ради совместимости самой библиотеки, а OneUnit требует движок 2.0 и новее.

Для публикации релиза нужен секрет PUSH_TOKEN в настройках репозитория.

🤖 Generated with Claude Code

https://claude.ai/code/session_01CP3TEtTKWGE2wxRjEDwVRV

nixel2007 and others added 4 commits August 27, 2026 00:00
Парсер разбирал 65% корпуса реального кода OneScript (2732 файла всех
установленных opm-библиотек). Основная причина - аннотации: имя аннотации
проверялось по списку аннотаций 1С:Предприятие, а разбор ждал единственную
форму &Перед("ИмяМетода").

Добавлено:

- аннотации с произвольным именем, позиционными и именованными параметрами,
  вложенными аннотациями и аннотациями параметров метода;
- асинхронные методы: признак Асинхронный в сигнатуре, узлы ВыражениеЖдать
  и ОператорЖдать;
- имена библиотек с дефисами, слэшами, точками и цифрами в #Использовать;
- директивы режима выполнения #Native и #Stack, строка запуска скрипта #!;
- обращение к членам результата скобочного выражения и созданного объекта:
  (Новый Файл(Путь)).ПолноеИмя, Новый Рефлектор.МетодСуществует(Объект, "Имя").

Разбирается 99% корпуса; оставшиеся файлы - намеренно синтаксически
ошибочная фикстура из тестов 1bdd в нескольких копиях.

Добавлены тесты на OneUnit: 39 тестов на новый синтаксис и регрессию
общих конструкций.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CP3TEtTKWGE2wxRjEDwVRV
Используются переиспользуемые workflow из autumn-library/workflows:
тесты OneUnit на актуальных версиях движка и публикация пакета в hub.oscript.io
при выходе GitHub Release.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CP3TEtTKWGE2wxRjEDwVRV
По умолчанию версия вычисляется из ВерсияСреды в packagedef (1.0.21),
которая оставлена для совместимости библиотеки. Сборка и публикация пакета
выполняются на актуальном движке.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CP3TEtTKWGE2wxRjEDwVRV
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CP3TEtTKWGE2wxRjEDwVRV
@nixel2007
nixel2007 merged commit 8657463 into dev Aug 27, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant