Skip to content

feat: Добавить валидацию обработчиков событий#56

Merged
Stivo182 merged 4 commits intomainfrom
feat/validate-event-handler-context
Apr 30, 2026
Merged

feat: Добавить валидацию обработчиков событий#56
Stivo182 merged 4 commits intomainfrom
feat/validate-event-handler-context

Conversation

@Stivo182
Copy link
Copy Markdown
Owner

@Stivo182 Stivo182 commented Apr 29, 2026

Summary by CodeRabbit

  • New Features

    • Event handlers are now validated to ensure they are exported procedures with the correct parameter signature.
    • Improved error messages provide specific feedback when event handlers fail validation.
  • Refactor

    • Enhanced internal method name resolution for improved reliability.
  • Tests

    • Added test coverage for event handler validation scenarios.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 29, 2026

Warning

Rate limit exceeded

@Stivo182 has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 41 minutes and 57 seconds before requesting another review.

To keep reviews running without waiting, you can enable usage-based add-on for your organization. This allows additional reviews beyond the hourly cap. Account admins can enable it under billing.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 40d327cc-5048-4379-bb31-d9edf72b35f2

📥 Commits

Reviewing files that changed from the base of the PR and between d676366 and 38b95c0.

📒 Files selected for processing (3)
  • src/BenchmarkOneScript/core/common/Классы/РазборКвалифицированногоИмениМетода.os
  • tests/ТестыВалидацииЗапускаБенчмарков.os
  • tests/ТестыРазбораКвалифицированногоИмениМетода.os
📝 Walkthrough

Walkthrough

Adds a qualified-method-name parser, updates the delegate factory to use it, extends the run-validator to reflectively validate event handlers are exported procedures with exactly one parameter, and updates/adds tests and fixtures to cover non-exported and invalid handlers and parameter sources.

Changes

Cohort / File(s) Summary
Method Name Parser
src/BenchmarkOneScript/core/common/Классы/РазборКвалифицированногоИмениМетода.os
New module: stores input name/optional owner, exposes ПриСозданииОбъекта(...) and Функция Разобрать() Экспорт. Splits by ".", handles one-part (requires owner) and two-part (resolves qualifier via Вычислить as module scenario or type), and raises on invalid formats or non-scenario qualifiers.
Factory Refactoring
src/BenchmarkOneScript/core/common/Классы/ФабрикаДелегата.os
Replaced inline qualified-name parsing with use of the new parser; obtains {Владелец, ИмяМетода} from parser and instantiates owner when it's a type. Removed prior manual split/validation logic.
Handler Validation
src/BenchmarkOneScript/core/running/Классы/ВалидаторЗапускаБенчмарков.os
Enables reflectors and adds _РефлекторыОбъектов cache. ЗапускВозможен() now runs ПроверитьЭкспортностьЭлементовБенчмарков() and ПроверитьОбработчикиСобытий(). Event-handler checks parse qualified names, lookup methods via reflector (with exception handling), and record errors if handler is not an exported procedure with exactly one parameter.
Fixture: Benchmark Handlers
tests/fixtures/benchmarks/Классы/БенчмаркСОбработчикамиСобытий.os
Adds new exported handler declarations: ОбработчикБезКонтекста() and ОбработчикБезЭкспорта(Контекст) (adjusts procedure closures/newlines).
Fixture: Non-public Elements
tests/fixtures/benchmarks/Классы/БенчмаркСНепубличнымиЭлементами.os
New fixture file with exported and non-exported variables, exported and non-exported benchmark procedures, and exported/non-exported parameter-source functions.
Module Param Source
tests/fixtures/paramsSources/Модули/МодульСИсточникамиПараметров.os
Adds non-exported function ЗакрытыйИсточникИзМодуля() returning an array; fixes EOF newline.
Tests: Event Handlers
tests/ТестыОбработчиковСобытийБенчмарков.os
Parametrized test procedure to run multiple handler-name scenarios; switched fixture under test and generalized expected exception message using СтрШаблон.
Tests: Run Validation
tests/ТестыВалидацииЗапускаБенчмарков.os
New test file with exported tests that assert Бенчмаркинг.Запустить(...) throws for various non-exported elements (closed method, field, parameter sources from module and benchmark).

Sequence Diagram

sequenceDiagram
    participant Client
    participant Validator
    participant Parser
    participant Module
    participant Reflector

    Client->>Validator: Initiate run / register handler
    Validator->>Validator: ПроверитьОбработчикиСобытий()
    Validator->>Parser: Разобрать(КвалифицированноеИмя)
    Parser->>Module: Вычислить(квалификатор)
    Module-->>Parser: Модуль/Тип или Неопределено
    Parser-->>Validator: {Владелец, ИмяМетода}
    Validator->>Reflector: ПолучитьТаблицуМетодов(Владелец)
    Reflector-->>Validator: ТаблицаМетодов или Исключение
    Validator->>Validator: Проверить: экспортность и кол-во параметров == 1
    alt Невалидный обработчик
        Validator->>Client: Записать сообщение об ошибке
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Poem

🐰 I hop through names both short and long,
Parsing owners, methods — hopping along.
I nudge the validator to reflect and see,
That handlers be exported and take one — not three! ✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Title check ⚠️ Warning The PR title focuses on event handler validation, but the changes extend significantly beyond just event handlers to include qualified method name parsing, refactored delegate factory, and comprehensive validation of benchmark elements (methods, parameter fields, and parameter sources). Update the title to reflect the broader scope: consider 'feat: Add validation for benchmark elements and event handlers' or 'feat: Implement qualified method parsing and validation'.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/validate-event-handler-context

Warning

Review ran into problems

🔥 Problems

Timed out fetching pipeline failures after 30000ms


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
Review rate limit: 0/1 reviews remaining, refill in 41 minutes and 57 seconds.

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (2)
src/BenchmarkOneScript/core/running/Классы/ВалидаторЗапускаБенчмарков.os (1)

340-348: Не скрывайте все исключения при поиске метода без диагностического контекста.

Полное подавление исключений маскирует реальные причины (ошибка разбора, проблема рефлексии, и т.д.) и затрудняет отладку. Лучше сохранять причину (лог/техническое сообщение) и возвращать управляемую ошибку валидации.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/BenchmarkOneScript/core/running/Классы/ВалидаторЗапускаБенчмарков.os`
around lines 340 - 348, Блок, который пытаетcя найти метод полностью подавляет
все исключения, из-за чего теряются причины ошибок; измените обработчик в методе
где используется РазборКвалифицированногоИмениМетода/Разобрать и вызов
_Рефлектор.ПолучитьТаблицуМетодов/ТаблицаМетодов.Найти: перехватывайте
исключение, записывайте его техническое сообщение в лог (или сохраняйте в поле
диагностической информации) и вместо молчаливого возврата Неопределено
генерируйте контролируемую валидационную ошибку или возвращайте структуру
результата с полем ошибки/диагностики, включающей исходное исключение и контекст
(КвалифицированноеИмяМетода, ТипКлассаБенчмарков).
src/BenchmarkOneScript/core/common/Классы/РазборКвалифицированногоИмениМетода.os (1)

1-31: Сделайте имя нового типа более предметным, а не техническим.

РазборКвалифицированногоИмениМетода описывает техническую операцию, а не доменную роль. Лучше выбрать доменное имя (например, вокруг “резолвинга обработчика/владельца метода”), чтобы API читался на уровне предметной области.

As per coding guidelines {src,tests}/**/*.os: "Make new type names, method names, and test file names domain-specific rather than technical".

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In
`@src/BenchmarkOneScript/core/common/Классы/РазборКвалифицированногоИмениМетода.os`:
- Around line 75-85: В функции ПолучитьМодульПоИмени замените опасный вызов
Вычислить(ИмяМодуля) на безопасную проверку и поиск: сначала валидируйте строку
ИмяМодуля по допустимому идентификатору (например, регулярным выражением для
[A-Za-z_][A-Za-z0-9_]*), затем используйте безопасный способ разрешения модуля —
например проверить Тип(ИмяМодуля) или сверять ИмяМодуля со списком/whitelist
известных модулей и только после этого возвращать объект модуля; удалите или
избегайте выполнения произвольных выражений через Вычислить, и сохраните
существующую проверку на Тип("Сценарий") и бросание исключения при
несоответствии.

In `@src/BenchmarkOneScript/core/running/Классы/ВалидаторЗапускаБенчмарков.os`:
- Around line 324-334: В текущей проверке нужно гарантировать, что метод —
процедура, а не функция: дополнительно проверить свойство рефлектора
СвойстваМетода.ЭтоФункция и при его истинном значении возвращать Ложь; т.е. в
логике валидатора рядом с существующими проверками (СвойстваМетода.Экспорт и
проверкой ПараметрыМетода) добавить условие, которое отбрасывает методы, у
которых СвойстваМетода.ЭтоФункция = Истина, чтобы допускались только процедуры.

---

Nitpick comments:
In `@src/BenchmarkOneScript/core/running/Классы/ВалидаторЗапускаБенчмарков.os`:
- Around line 340-348: Блок, который пытаетcя найти метод полностью подавляет
все исключения, из-за чего теряются причины ошибок; измените обработчик в методе
где используется РазборКвалифицированногоИмениМетода/Разобрать и вызов
_Рефлектор.ПолучитьТаблицуМетодов/ТаблицаМетодов.Найти: перехватывайте
исключение, записывайте его техническое сообщение в лог (или сохраняйте в поле
диагностической информации) и вместо молчаливого возврата Неопределено
генерируйте контролируемую валидационную ошибку или возвращайте структуру
результата с полем ошибки/диагностики, включающей исходное исключение и контекст
(КвалифицированноеИмяМетода, ТипКлассаБенчмарков).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 5333e710-b367-4ca3-a413-68fdc637670d

📥 Commits

Reviewing files that changed from the base of the PR and between ebc49f9 and fe15abe.

📒 Files selected for processing (5)
  • src/BenchmarkOneScript/core/common/Классы/РазборКвалифицированногоИмениМетода.os
  • src/BenchmarkOneScript/core/common/Классы/ФабрикаДелегата.os
  • src/BenchmarkOneScript/core/running/Классы/ВалидаторЗапускаБенчмарков.os
  • tests/fixtures/benchmarks/Классы/БенчмаркСОбработчикамиСобытий.os
  • tests/ТестыОбработчиковСобытийБенчмарков.os

Comment on lines +324 to +334
Если Не СвойстваМетода.Экспорт Тогда
Возврат Ложь;
КонецЕсли;

ПараметрыМетода = СвойстваМетода.Параметры;

Если ПараметрыМетода.Количество() <> 1 Тогда
Возврат Ложь;
КонецЕсли;

Возврат Истина;
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

# First, let's read the file around lines 324-334 to understand the context
cat -n "src/BenchmarkOneScript/core/running/Классы/ВалидаторЗапускаБенчмарков.os" | sed -n '300,350p'

Repository: Stivo182/BenchmarkOneScript

Length of output: 1716


🏁 Script executed:

# Let's also check the full file size to understand its structure
wc -l "src/BenchmarkOneScript/core/running/Классы/ВалидаторЗапускаБенчмарков.os"

Repository: Stivo182/BenchmarkOneScript

Length of output: 148


🏁 Script executed:

# Search for method type related keywords in the file
rg -n "Тип|Процедура|Функция" "src/BenchmarkOneScript/core/running/Классы/ВалидаторЗапускаБенчмарков.os" | head -30

Repository: Stivo182/BenchmarkOneScript

Length of output: 1674


🏁 Script executed:

# Look for the method that contains these lines
ast-grep --pattern 'function $NAME() {
  $$$
  Если Не СвойстваМетода.Экспорт Тогда
  $$$
}'

Repository: Stivo182/BenchmarkOneScript

Length of output: 53


🏁 Script executed:

# Search for usage of method table properties to see what fields are accessed
rg -n "ТаблицаМетодов|СвойстваМетода\." "src/BenchmarkOneScript/core/running/Классы/ВалидаторЗапускаБенчмарков.os"

Repository: Stivo182/BenchmarkOneScript

Length of output: 314


🏁 Script executed:

# Search for method type checking patterns in the codebase
rg -i "Процедура|Функция|ТипМетода|МетодТип" "src/" --type os | head -40

Repository: Stivo182/BenchmarkOneScript

Length of output: 98


🏁 Script executed:

# Look for other validator files or similar validation patterns
fd "Валидатор|валидатор" "src/" --type f

Repository: Stivo182/BenchmarkOneScript

Length of output: 144


🏁 Script executed:

# Search for reflector usage to understand its API
rg "_Рефлектор\." "src/" --type os -A 2 | head -50

Repository: Stivo182/BenchmarkOneScript

Length of output: 98


🏁 Script executed:

# Search for reflector usage in all os files
grep -r "_Рефлектор\." "src/" --include="*.os" | head -40

Repository: Stivo182/BenchmarkOneScript

Length of output: 1611


🏁 Script executed:

# Search for method property access patterns
grep -r "СвойстваМетода\." "src/" --include="*.os"

Repository: Stivo182/BenchmarkOneScript

Length of output: 2719


🏁 Script executed:

# Look for procedure/function type checking in validators or similar code
grep -r "Процедура\|Функция" "src/" --include="*.os" | grep -i "тип\|check\|валид" | head -20

Repository: Stivo182/BenchmarkOneScript

Length of output: 247


🏁 Script executed:

# Search for Рефлектор class definition or initialization
grep -r "Рефлектор" "src/" --include="*.os" -B 2 -A 5 | head -60

Repository: Stivo182/BenchmarkOneScript

Length of output: 7033


🏁 Script executed:

# Check if there's any documentation or comments about method properties
grep -r "ТипМетода\|МетодТип\|метода\.\(Процедура\|Функция\)" "src/" --include="*.os"

Repository: Stivo182/BenchmarkOneScript

Length of output: 53


🏁 Script executed:

# Look for all properties accessed on method objects to find method type indicator
grep -r "СвойстваМетода\.\|СвойстваКонструктора\." "src/" --include="*.os" -o | sort | uniq

Repository: Stivo182/BenchmarkOneScript

Length of output: 635


🏁 Script executed:

# Search in config file for method property documentation
grep -r "Параметры\|Возвращаемое\|тип метода\|процедур" "src/BenchmarkOneScript/core/config/Классы/ИзвлекательКонфигурацииБенчмарков.os" -B 3 -A 3 | head -50

Repository: Stivo182/BenchmarkOneScript

Length of output: 1749


🏁 Script executed:

# Look for РефлекторОбъекта class definition
find "src/" -name "*.os" -exec grep -l "class РефлекторОбъекта\|Класс РефлекторОбъекта" {} \;

Repository: Stivo182/BenchmarkOneScript

Length of output: 53


🏁 Script executed:

# Search for method table structure documentation or usage patterns
grep -r "ПолучитьТаблицуМетодов" "src/" --include="*.os" -B 5 -A 10 | head -100

Repository: Stivo182/BenchmarkOneScript

Length of output: 10518


🏁 Script executed:

# Search for Процедура as a property being accessed on method objects
grep -r "\.Процедура\|Функция" "src/" --include="*.os" | grep -i "метод\|свойства"

Repository: Stivo182/BenchmarkOneScript

Length of output: 53


🏁 Script executed:

# Look for any method type checking or filtering
grep -r "Если.*Процедура\|Если.*Функция" "src/" --include="*.os" | head -20

Repository: Stivo182/BenchmarkOneScript

Length of output: 245


🏁 Script executed:

# Check if there's a test file that might show expected behavior
find "src/" -name "*тест*" -o -name "*Test*" -o -name "*test*" | head -20

Repository: Stivo182/BenchmarkOneScript

Length of output: 53


🏁 Script executed:

# Search for documentation comments about method properties in reflector usage
grep -r "Процедура\|Функция" "src/" --include="*.os" -B 10 | grep -A 10 "ПолучитьТаблицуМетодов"

Repository: Stivo182/BenchmarkOneScript

Length of output: 2093


🌐 Web query:

OneScript reflector ПолучитьТаблицуМетодов method table columns properties

💡 Result:

Для OneScript объекта Рефлектор метод «ПолучитьТаблицуМетодов» (GetMethodsTable) возвращает таблицу значений со следующими колонками: Имя, Количество, ЭтоФункция, Аннотации, Параметры, Экспорт. То есть, если ваша цель — узнать «колонки/свойства» table, которую возвращает Рефлектор.ПолучитьТаблицуМетодов(…): - Имя - Количество - ЭтоФункция - Аннотации - Параметры - Экспорт Если нужно, могу также подсказать, как аналогично устроена таблица свойств (ПолучитьТаблицуСвойств / GetPropertiesTable) в том же Рефлекторе.

Citations:


🏁 Script executed:

# Look for any README or documentation files that might explain the API
find "src/" -name "README*" -o -name "*.md" | head -20

Repository: Stivo182/BenchmarkOneScript

Length of output: 53


🏁 Script executed:

# Check the root directory for any documentation
ls -la | head -30

Repository: Stivo182/BenchmarkOneScript

Length of output: 1170


🏁 Script executed:

# Search for type checking patterns in the entire codebase
grep -r "ТипМетода\|Процедура\|метод.*Процедура" "src/" --include="*.os" -i | head -20

Repository: Stivo182/BenchmarkOneScript

Length of output: 2222


Валидатор пропускает функции, хотя требует процедуры.

Ошибка указывает "процедурой", но проверка не различает функции и процедуры. Отсутствует проверка свойства ЭтоФункция из рефлектора — нужно добавить условие, гарантирующее, что метод является процедурой, а не функцией.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/BenchmarkOneScript/core/running/Классы/ВалидаторЗапускаБенчмарков.os`
around lines 324 - 334, В текущей проверке нужно гарантировать, что метод —
процедура, а не функция: дополнительно проверить свойство рефлектора
СвойстваМетода.ЭтоФункция и при его истинном значении возвращать Ложь; т.е. в
логике валидатора рядом с существующими проверками (СвойстваМетода.Экспорт и
проверкой ПараметрыМетода) добавить условие, которое отбрасывает методы, у
которых СвойстваМетода.ЭтоФункция = Истина, чтобы допускались только процедуры.

@sonar-openbsl-ru-qa-bot
Copy link
Copy Markdown

Failed Quality Gate failed

  • 1 New Issues (is greater than 0)

Project ID: benchmark

View in SonarQube

- проверять методы бенчмарков, поля параметров и источники параметров
- учитывать источники параметров из внешних модулей
- добавить интеграционные тесты валидации запуска
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (2)
tests/ТестыВалидацииЗапускаБенчмарков.os (2)

8-9: ⚡ Quick win

Добавьте обязательную секцию #Область ОбработчикиСобытий.

В файле с тестами сейчас отсутствует одна из требуемых секций регионов.

♻️ Proposed fix
+ `#Область` ОбработчикиСобытий
+
+ `#КонецОбласти`
+
  `#Область` Тесты

As per coding guidelines: tests/**/*.os: Use region structure in tests with sections: #Область ОбработчикиСобытий, #Область Тесты, #Область СлужебныеПроцедурыИФункции.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/ТестыВалидацииЗапускаБенчмарков.os` around lines 8 - 9, Файл теста
отсутствует обязательная секция регионов: добавьте заголовок региона "#Область
ОбработчикиСобытий" (можно пустой блок если обработчиков нет) в структуру теста,
сохранив порядок и наличие всех трех секций: "#Область ОбработчикиСобытий",
"#Область Тесты" и "#Область СлужебныеПроцедурыИФункции" чтобы соответствовать
требованиям для файлов tests/**/*.os; убедитесь, что названия секций точно
совпадают с указанными символами.

10-96: ⚡ Quick win

Сведите однотипные тесты к параметризованному сценарию через &Параметры(...).

Здесь повторяется одна и та же структура шага с разными входами и ожидаемым текстом исключения; лучше объединить в один параметризованный тест.

As per coding guidelines: tests/**/*.os: Prefer parameterized tests through &Параметры(...) when only input data and expectations change.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/ТестыВалидацииЗапускаБенчмарков.os` around lines 10 - 96, В этих тестах
повторяется одна и та же проверка запуска с разными входными данными и
ожидаемыми сообщениями; объедините процедуры
ТестДолжен_ВыброситьИсключениеНаНепубличномМетодеБенчмарка,
ТестДолжен_ВыброситьИсключениеНаНепубличномПолеПараметра,
ТестДолжен_ВыброситьИсключениеНаНепубличномИсточникеОбщегоПараметра,
ТестДолжен_ВыброситьИсключениеНаНепубличномИсточникеОбщегоПараметраИзМодуля и
ТестДолжен_ВыброситьИсключениеНаНепубличномИсточникеПараметровБенчмарка в один
параметризованный тест через &Параметры(...), перечислив сценарии с полями:
дескрипторы (создавать через СоздатьКоллекциюСДескриптором), конфигурация
(ТестированиеБенчмарков.КонфигурацияПоУмолчанию() плюс вызовы
Конфигурация.ДобавитьПараметр или Конфигурация.ДобавитьИсточникПараметров или
модификация дескриптора через ПолучитьПервый().ДобавитьИсточникПараметров) и
ожидаемое сообщение; внутри параметризованного теста вызывать существующий
помощник ПроверитьИсключениеЗапуска с параметрами из набора и удалить старые
однотипные процедуры.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@tests/ТестыВалидацииЗапускаБенчмарков.os`:
- Around line 8-9: Файл теста отсутствует обязательная секция регионов: добавьте
заголовок региона "#Область ОбработчикиСобытий" (можно пустой блок если
обработчиков нет) в структуру теста, сохранив порядок и наличие всех трех
секций: "#Область ОбработчикиСобытий", "#Область Тесты" и "#Область
СлужебныеПроцедурыИФункции" чтобы соответствовать требованиям для файлов
tests/**/*.os; убедитесь, что названия секций точно совпадают с указанными
символами.
- Around line 10-96: В этих тестах повторяется одна и та же проверка запуска с
разными входными данными и ожидаемыми сообщениями; объедините процедуры
ТестДолжен_ВыброситьИсключениеНаНепубличномМетодеБенчмарка,
ТестДолжен_ВыброситьИсключениеНаНепубличномПолеПараметра,
ТестДолжен_ВыброситьИсключениеНаНепубличномИсточникеОбщегоПараметра,
ТестДолжен_ВыброситьИсключениеНаНепубличномИсточникеОбщегоПараметраИзМодуля и
ТестДолжен_ВыброситьИсключениеНаНепубличномИсточникеПараметровБенчмарка в один
параметризованный тест через &Параметры(...), перечислив сценарии с полями:
дескрипторы (создавать через СоздатьКоллекциюСДескриптором), конфигурация
(ТестированиеБенчмарков.КонфигурацияПоУмолчанию() плюс вызовы
Конфигурация.ДобавитьПараметр или Конфигурация.ДобавитьИсточникПараметров или
модификация дескриптора через ПолучитьПервый().ДобавитьИсточникПараметров) и
ожидаемое сообщение; внутри параметризованного теста вызывать существующий
помощник ПроверитьИсключениеЗапуска с параметрами из набора и удалить старые
однотипные процедуры.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: f7879bd8-eb10-4186-a78a-2582d17a2ebe

📥 Commits

Reviewing files that changed from the base of the PR and between fe15abe and d676366.

📒 Files selected for processing (4)
  • src/BenchmarkOneScript/core/running/Классы/ВалидаторЗапускаБенчмарков.os
  • tests/fixtures/benchmarks/Классы/БенчмаркСНепубличнымиЭлементами.os
  • tests/fixtures/paramsSources/Модули/МодульСИсточникамиПараметров.os
  • tests/ТестыВалидацииЗапускаБенчмарков.os
✅ Files skipped from review due to trivial changes (1)
  • tests/fixtures/benchmarks/Классы/БенчмаркСНепубличнымиЭлементами.os
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/BenchmarkOneScript/core/running/Классы/ВалидаторЗапускаБенчмарков.os

- проверять имя модуля перед вызовом Вычислить
- запретить небезопасные выражения в квалифицированном имени метода
- покрыть разбор имени метода для объекта, модуля, типа и ошибок формата
@Stivo182 Stivo182 merged commit 232bc65 into main Apr 30, 2026
1 of 27 checks passed
@Stivo182 Stivo182 deleted the feat/validate-event-handler-context branch April 30, 2026 07:06
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