Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
name: Публикация релиза

on:
release:
types:
- published
workflow_dispatch:

jobs:
release:
uses: autumn-library/workflows/.github/workflows/release.yml@v1
with:
oscript_version: stable
package_mask: "osparser-*.ospx"
secrets:
PUSH_TOKEN: ${{ secrets.PUSH_TOKEN }}
20 changes: 20 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
name: Тестирование

on:
push:
pull_request:
workflow_dispatch:

jobs:
test:
strategy:
fail-fast: false
matrix:
# версия среды из packagedef (1.0.21) оставлена для совместимости самой библиотеки,
# но тесты используют OneUnit, которому нужен движок 2.0 и новее
oscript_version: ['stable', 'dev']
uses: autumn-library/workflows/.github/workflows/test.yml@v1
with:
oscript_version: ${{ matrix.oscript_version }}
test_engine: oneunit
test_dir_paths: tests
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
*.txt
sandbox
sandbox
oscript_modules
*.ospx
64 changes: 60 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# osparser (oscript parser)

## Парсер встроенного языка платформы 1С:Предприятие 8
## Парсер встроенного языка платформы 1С:Предприятие 8 и OneScript

Документация: [Книга Джедая](book.md)

Expand All @@ -19,9 +19,11 @@
## Содержание

1. [Введение](#введение)
2. [Структура репозитория](#структура-репозитория)
3. [Принцип работы](#принцип-работы)
4. [Благодарности](#благодарности)
2. [Синтаксис OneScript](#синтаксис-onescript)
3. [Структура репозитория](#структура-репозитория)
4. [Принцип работы](#принцип-работы)
5. [Разработка](#разработка)
6. [Благодарности](#благодарности)

## Введение

Expand Down Expand Up @@ -71,6 +73,51 @@

Пример выгрузки ошибок в [SonarQube](https://www.sonarqube.org/): [test7.os](./examples/test7.os)

## Синтаксис OneScript

Помимо встроенного языка 1С:Предприятие парсер разбирает конструкции, которые есть только в OneScript.

**Аннотации с произвольным именем.** Имя аннотации не ограничено списком аннотаций 1С:Предприятие,
поддерживаются позиционные и именованные параметры, вложенные аннотации и аннотации параметров метода:

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

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

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

```bsl
Асинх Функция Прочитать()
Возврат Ждать ПолучитьДанные();
КонецФункции
```

**Имена библиотек с дефисами и слэшами** в инструкции `#Использовать`:

```bsl
#Использовать autumn-collections
#Использовать oint/api/grpc
```

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

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

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

## Структура репозитория

* /docs - файлы веб-страницы проекта <https://oscript-library.github.io/osparser>
Expand All @@ -86,6 +133,15 @@

Состояние плагина (в переменных модуля) сохраняется между вызовами до самого конца обхода дерева, а подписки на каждый узел возможны две: перед обходом узла и после обхода. Это существенно упрощает реализацию многих алгоритмов анализа. Плюс к этому, некоторую информацию предоставляет сам механизм обхода. Например, плагинам доступна статистика по родительским узлам (количество каждого вида).

## Разработка

Установка окружения и запуск тестов:

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

## Благодарности

Спасибо всем кто так или иначе повлиял на этот проект.
1 change: 1 addition & 0 deletions oscript.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
lib.additional=./oscript_modules
8 changes: 6 additions & 2 deletions packagedef
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,15 @@
// Полную документацию см. на hub.oscript.io/packaging

Описание.Имя("osparser")
.Версия("0.0.3")
.Версия("0.1.0")
.ВерсияСреды("1.0.21")
.АдресРепозитория("https://github.com/oscript-library/osparser")
.ВключитьФайл("src")
.ВключитьФайл("examples")
.ВключитьФайл("docs")
.ОпределяетКласс("ПарсерВстроенногоЯзыка", "src/Классы/ПарсерВстроенногоЯзыка.os")
.ВключитьФайл("README.md")
.ВключитьФайл("LICENSE")
.ВключитьФайл("LICENSE")

.РазработкаЗависитОт("oneunit", "0.4.1")
.РазработкаЗависитОт("asserts", "1.6.2")
Loading
Loading