Опциональный параметр диагностики Typo (caseInsensitive)#2945
Опциональный параметр диагностики Typo (caseInsensitive)#2945ovcharenko-di wants to merge 3 commits into1c-syntax:developfrom
Conversation
|
Не могу не задать вопрос. Что по перфомансу на большой конфигурации типа ерп? |
|
|
||
| Arrays.stream(camelCaseSplitedWords) | ||
| Arrays.stream(camelCaseSplitWords) | ||
| .distinct() |
There was a problem hiding this comment.
в пользовательских конфигах могут использоваться варианты слов с заглавной\строчной, да и случайно могут дубли оказаться.
этот distinct() призван сократить количество элементов коллекции, а даже если дублей нет, то производительность не должна сильно пострадать
| if (caseInsensitive) { | ||
| camelCaseSplitWords = Arrays.stream(camelCaseSplitWords) | ||
| .map(String::toLowerCase) | ||
| .toArray(String[]::new); |
There was a problem hiding this comment.
Если на этом шаге уже есть перегонка в стрим, но нет смысла гонять их стрима в массив и обратно. Можно сразу начать обрабатывать стрим. Предлагаю засунуть в Stream до условия, в условии сделать toLowerCase и distinct() (если он действительно нужен), а вне условия уже оставить оставшийся код стрима.
There was a problem hiding this comment.
стало не актуально
вместо приведения к нижнему регистру я изменил тип коллекции, чтобы можно было их сравнивать либо с учетом, либо без учета регистра в зависимости от параметра диагностики
There was a problem hiding this comment.
Только ты сложность алгоритма увеличил. contains в set работает за O(1), а в List - за O(n)
|
Спасибо! Пара мелких замечаний. |
проверю) нужна будет консультация по тому, как грамотно сделать замер |
|
@ovcharenko-di Только не забыть выключить защитник винды и прогонять два-три раза подряд (без больших пауз), чтобы на прогретых дисках |
Исправил замечания по Stream->Array->Stream. Проверка ERP без регл. отчетов на одной этой диагностике выполняется с разницей +/- 2 секунды относительно develop. |
|
@nixel2007 разобрался. Далее в дело вступает JLanguageTool, который, видимо, пропускает аббревиатуры. А раз я сейчас все токены лихо привожу к нижнему регистру, то он считает, что это обычное слово. Буду думать, как это исправить. @EightM , может быть, у тебя есть идеи? |
параметр позволяет не учитывать регистр в словаре исключений
7f163b9 to
d55c07a
Compare
проверил, разницы особой нет |
|
Kudos, SonarCloud Quality Gate passed! |
|
@EightM plz review |
| } | ||
|
|
||
| if (caseInsensitive) { | ||
| exceptions = exceptions.toLowerCase(); |
There was a problem hiding this comment.
В параметрах lowerCase должна быть явно указана локаль (в проекте вроде используется English)
https://rules.sonarsource.com/java/RSPEC-1449
| } | ||
|
|
||
| private Set<String> getWordsToIgnore() { | ||
| private List<String> getWordsToIgnore() { |
There was a problem hiding this comment.
В чем логика замены Set на List?
| .filter(Predicate.not(String::isBlank)) | ||
| .filter(element -> element.length() >= minWordLength) | ||
| .filter(Predicate.not(wordsToIgnore::contains)) | ||
| .filter(element -> wordsToIgnore.stream().noneMatch(word |
There was a problem hiding this comment.
Здесь замена Set на List сделала поиск слова медленнее. contains в сете работает за О(1), здесь же теперь линейный поиск за O(N), в результате сложность всего стрима стала из линейной квадратичной
|
@ovcharenko-di |
|
@theshadowco на своих проектах я как-то уже смирился с тем, что словарь чувствителен к регистру сейчас я бы вообще закрыл этот issue, но если сообщество считает, что надо реализовать - могу добить, в принципе) |
|
Добрый день. Не такой пробовали подход. Взять все исключения и если caseInsensitive=true, просто переводить каждое слово в три варианта регистра: титульном, в нижнем, в верхнем. Например, исключения: вася, ВТБ Если caseInsensitive=true: Вася, вася, ВАСЯ, Втб, втб, ВТБ Кейсы типа вАсЯ - все равно не жизнеспособные, парсер их разобьет на слова "в, ас, я" |
|
Superseded by #3630 |








Параметр позволяет не учитывать регистр в словаре исключений.
Описание
Добавил необязательный параметр в диагностику Typo, который позволяет не учитывать регистр в словаре исключений.
Реализовано путем приведения элементов коллекции слов-исключений и токенов к нижнему регистру.
Связанные задачи
Closes #2889
Чеклист
Общие
gradlew precommit)Для диагностик
Дополнительно