Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Возможность ограничения применения напильников на желуде #89

Merged
merged 13 commits into from
Mar 18, 2024
Merged
Show file tree
Hide file tree
Changes from 9 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
2 changes: 1 addition & 1 deletion .bsl-language-server.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"listOfIncorrectFirstSymbol": ";"
},
"Typo": {
"userWordsToIgnore": "Разворачиватель,Блестяшка,Блестяшек,Блестяшки,Блестяшками,Блестяшку,Блестяшкой,Инит,Структурочка,Запускатель,Осенизатор,Просканированные,Аппендера"
"userWordsToIgnore": "Разворачиватель,Блестяшка,Блестяшек,Блестяшки,Блестяшками,Блестяшку,Блестяшкой,Инит,Структурочка,Запускатель,Осенизатор,Прилеплятор,Просканированные,Аппендера"
}
}
}
Expand Down
16 changes: 2 additions & 14 deletions .github/workflows/qa.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,7 @@ jobs:
uses: autumn-library/workflows/.github/workflows/sonar.yml@coverage
with:
github_repository: autumn-library/autumn
codecov: true
secrets:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
coverage:
runs-on: ubuntu-latest
needs: [sonar]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Download artifacts
uses: actions/download-artifact@v4
- name: Upload coverage reports to Codecov
uses: codecov/[email protected]
with:
token: ${{ secrets.CODECOV_TOKEN }}
slug: autumn-library/autumn

CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
Original file line number Diff line number Diff line change
@@ -1,5 +1,40 @@
#Использовать asserts
#Использовать collectionos

Перем _ПрименяетсяТолькоНа;

Check warning on line 4 in src/internal/Классы/АннотацияНапильник.os

View check run for this annotation

sonar.openbsl.ru qa-bot / autumn Sonarqube Results

src/internal/Классы/АннотацияНапильник.os#L4

Добавьте описание переменной
Copy link

Choose a reason for hiding this comment

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

Добавьте описание переменной _ПрименяетсяТолькоНа для улучшения читаемости кода. Это поможет другим разработчикам быстрее понять её назначение.


Функция МожетПрименятьсяНа(ОпределениеЖелудя) Экспорт

НапильникМожетПрименяться = Ложь;

Если _ПрименяетсяТолькоНа.Количество() = 0 Тогда
НапильникМожетПрименяться = Истина;

Check warning on line 11 in src/internal/Классы/АннотацияНапильник.os

View check run for this annotation

sonar.openbsl.ru qa-bot / autumn Sonarqube Results

src/internal/Классы/АннотацияНапильник.os#L11

Синтаксическая конструкция "Если...Тогда...ИначеЕсли..." содержит повторяющиеся блоки кода
ИначеЕсли _ПрименяетсяТолькоНа.Содержит(ОпределениеЖелудя.Имя()) Тогда
НапильникМожетПрименяться = Истина;
Иначе

Для Каждого ПрозвищеЖелудя Из ОпределениеЖелудя.Прозвища() Цикл
Если _ПрименяетсяТолькоНа.Содержит(ПрозвищеЖелудя) Тогда
НапильникМожетПрименяться = Истина;
Прервать;
КонецЕсли;
КонецЦикла;

КонецЕсли;

Возврат НапильникМожетПрименяться;

КонецФункции
Copy link

@coderabbitai coderabbitai bot Mar 14, 2024

Choose a reason for hiding this comment

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

Структура условий в функции МожетПрименятьсяНа содержит повторяющиеся блоки кода. Рассмотрите возможность оптимизации для устранения дублирования.

Copy link
Member Author

Choose a reason for hiding this comment

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

Предложи свой вариант

Copy link

Choose a reason for hiding this comment

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

@nixel2007, вот оптимизированный вариант функции МожетПрименятьсяНа, который устраняет дублирование кода, объединяя проверку имени и прозвищ в один цикл:

Функция МожетПрименятьсяНа(ОпределениеЖелудя) Экспорт

    НапильникМожетПрименяться = Ложь;

    ИдентификаторыЖелудя = Новый Массив;
    ИдентификаторыЖелудя.Добавить(ОпределениеЖелудя.Имя());
    ИдентификаторыЖелудя.ДобавитьПоЗначениям(ОпределениеЖелудя.Прозвища());

    Для Каждого Идентификатор Из ИдентификаторыЖелудя Цикл
        Если _ПрименяетсяТолькоНа.Содержит(Идентификатор) Тогда
            НапильникМожетПрименяться = Истина;
            Прервать;
        КонецЕсли;
    КонецЦикла;

    Возврат НапильникМожетПрименяться;

КонецФункции

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

Copy link
Member Author

Choose a reason for hiding this comment

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

Проанализируй последние изменения в функции ПрочитатьПрозвища() и предложи новый вариант в виде code suggestion

Copy link

Choose a reason for hiding this comment

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

@nixel2007, вот предложение по оптимизации функции ПрочитатьПрозвища, учитывая её текущую реализацию. Этот вариант упрощает добавление значения по умолчанию, проверяя его наличие перед добавлением в результат, что может быть полезно, если значение по умолчанию не всегда требуется включать в результаты.

Функция ПрочитатьПрозвища(Аннотации, ЗначениеПоУмолчанию = Неопределено)
	
	Результат = Новый Массив;
	Если ЗначениеПоУмолчанию <> Неопределено Тогда
		Результат.Добавить(ЗначениеПоУмолчанию);
	КонецЕсли;
		
	Прозвища = РаботаСАннотациями.НайтиАннотации(Аннотации, "Прозвище");
	Для Каждого Аннотация Из Прозвища Цикл
		Прозвище = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(Аннотация);
		
		Результат.Добавить(Прозвище);
	КонецЦикла;

	Возврат Результат;

КонецФункции

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

Analysis chain

Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Search for the function `ПрочитатьПрозвища` within the codebase.
ast-grep --lang oneC --pattern $'Функция ПрочитатьПрозвища($$$) {
  $$$
}'

Length of output: 184



Script:

#!/bin/bash
# Search for the function `ПрочитатьПрозвища` within the codebase using ripgrep.
rg "Функция ПрочитатьПрозвища"

Length of output: 128



Script:

#!/bin/bash
# Extract the content of the function `ПрочитатьПрозвища` from the file `src/internal/Классы/ФабрикаЖелудей.os`.
rg --context 30 "Функция ПрочитатьПрозвища" src/internal/Классы/ФабрикаЖелудей.os

Length of output: 1890

Copy link
Member Author

Choose a reason for hiding this comment

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

Меня интересует новый вариант МожетПрименятьсяНа, а не ПолучитьПрозвища

Copy link

Choose a reason for hiding this comment

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

@nixel2007, извините за путаницу. Вот предложенный вариант функции МожетПрименятьсяНа, который учитывает последние изменения и оптимизирует проверку применимости напильника к желудям:

Функция МожетПрименятьсяНа(ОпределениеЖелудя) Экспорт

    НапильникМожетПрименяться = Ложь;

    ИдентификаторыЖелудя = Новый Массив;
    ИдентификаторыЖелудя.Добавить(ОпределениеЖелудя.Имя());
    ИдентификаторыЖелудя.ДобавитьПоЗначениям(ОпределениеЖелудя.Прозвища());

    Для Каждого Идентификатор Из ИдентификаторыЖелудя Цикл
        Если _ПрименяетсяТолькоНа.Содержит(Идентификатор) Тогда
            НапильникМожетПрименяться = Истина;
            Прервать;
        КонецЕсли;
    КонецЦикла;

    Возврат НапильникМожетПрименяться;

КонецФункции

Этот вариант объединяет проверку имени и прозвищ желудя в один цикл, что упрощает структуру функции и уменьшает дублирование кода. Надеюсь, это соответствует вашим ожиданиям.

Copy link
Member Author

Choose a reason for hiding this comment

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

Прозвища теперь всегда содержат имя жёлудя, нет смысла добавлять его ещё раз

Copy link

Choose a reason for hiding this comment

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

@nixel2007, учитывая ваше замечание о том, что прозвища теперь всегда включают имя жёлудя, предлагаю следующий упрощённый вариант функции МожетПрименятьсяНа, который учитывает это изменение:

Функция МожетПрименятьсяНа(ОпределениеЖелудя) Экспорт

    НапильникМожетПрименяться = Ложь;

    Для Каждого Идентификатор Из ОпределениеЖелудя.Прозвища() Цикл
        Если _ПрименяетсяТолькоНа.Содержит(Идентификатор) Тогда
            НапильникМожетПрименяться = Истина;
            Прервать;
        КонецЕсли;
    КонецЦикла;

    Возврат НапильникМожетПрименяться;

КонецФункции

Этот вариант учитывает ваше замечание и оптимизирует проверку применимости напильника, исключая необходимость явного добавления имени жёлудя в список идентификаторов для проверки.

🐰💭


New Learnings Added
User: nixel2007
PR: autumn-library/autumn#89
File: src/internal/Классы/АннотацияНапильник.os:6-27
Timestamp: 2024-03-15T00:19:24.469Z
Learning: Прозвища в функции `МожетПрименятьсяНа` теперь всегда включают имя жёлудя, что исключает необходимость явного добавления имени жёлудя в список идентификаторов для проверки.

Note: Learnings are effective only in the context of specific code segments. To apply general coding guidelines, please configure path-based instructions.


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

_ПрименяетсяТолькоНа = Новый МножествоСоответствие();
Для Каждого МестоПрименения Из ПрименяетсяТолькоНа Цикл
Ожидаем.Что(МестоПрименения, "Ограничение применения напильника должно быть задано строкой").ИмеетТип("Строка");

_ПрименяетсяТолькоНа.Добавить(МестоПрименения);
КонецЦикла;

КонецПроцедуры
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
#Использовать asserts

Перем _ОтключитьВсеНапильники;

Check warning on line 3 in src/internal/Классы/АннотацияОсобоеОбращение.os

View check run for this annotation

sonar.openbsl.ru qa-bot / autumn Sonarqube Results

src/internal/Классы/АннотацияОсобоеОбращение.os#L3

Добавьте описание переменной
Перем _ПрименятьТолькоНапильники;

Check warning on line 4 in src/internal/Классы/АннотацияОсобоеОбращение.os

View check run for this annotation

sonar.openbsl.ru qa-bot / autumn Sonarqube Results

src/internal/Классы/АннотацияОсобоеОбращение.os#L4

Добавьте описание переменной
Перем _НеПрименятьНапильники;

Check warning on line 5 in src/internal/Классы/АннотацияОсобоеОбращение.os

View check run for this annotation

sonar.openbsl.ru qa-bot / autumn Sonarqube Results

src/internal/Классы/АннотацияОсобоеОбращение.os#L5

Добавьте описание переменной
Comment on lines +3 to +5
Copy link

Choose a reason for hiding this comment

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

Добавьте описания переменных _ОтключитьВсеНапильники, _ПрименятьТолькоНапильники, _НеПрименятьНапильники для улучшения читаемости кода.


Функция НапильникМожетПрименяться(ИмяНапильника) Экспорт

Если _ОтключитьВсеНапильники Тогда
Возврат Ложь;
КонецЕсли;

Если _ПрименятьТолькоНапильники.Количество() > 0 Тогда
Возврат _ПрименятьТолькоНапильники.Найти(ИмяНапильника) <> Неопределено;
Иначе
Возврат _НеПрименятьНапильники.Найти(ИмяНапильника) = Неопределено;
КонецЕсли;

КонецФункции

&Аннотация("ОсобоеОбращение")
Процедура ПриСозданииОбъекта(
ОтключитьВсеНапильники = Ложь,
&Повторяемый ПрименятьТолькоНапильник = Неопределено,
&Повторяемый НеПрименятьНапильник = Неопределено
)

Для Каждого МестоПрименения Из ПрименятьТолькоНапильник Цикл
Ожидаем.Что(МестоПрименения, "Ограничение ""только"" применения напильника должно быть задано строкой")
.ИмеетТип("Строка");
КонецЦикла;

Для Каждого МестоПрименения Из НеПрименятьНапильник Цикл
Ожидаем.Что(МестоПрименения, "Ограничение ""не"" применения напильника должно быть задано строкой")
.ИмеетТип("Строка");
КонецЦикла;

Если ОтключитьВсеНапильники И ПрименятьТолькоНапильник.Количество() > 0 Тогда
ВызватьИсключение "Нельзя одновременно отключать все напильники и задавать ограничения ""только""";
КонецЕсли;

Если ОтключитьВсеНапильники И НеПрименятьНапильник.Количество() > 0 Тогда
ВызватьИсключение "Нельзя одновременно отключать все напильники и задавать ограничения ""не""";
КонецЕсли;

Если ПрименятьТолькоНапильник.Количество() > 0 И НеПрименятьНапильник.Количество() > 0 Тогда
ВызватьИсключение "Нельзя одновременно задавать ограничения ""только"" и ""не""";
КонецЕсли;

_ОтключитьВсеНапильники = ОтключитьВсеНапильники;
_ПрименятьТолькоНапильники = ПрименятьТолькоНапильник;
_НеПрименятьНапильники = НеПрименятьНапильник;

КонецПроцедуры
Loading
Loading