Почему UnusedMember.Global игнорирует определенные публичные / внутренние свойства? - PullRequest
0 голосов
/ 04 января 2019

Как мы знаем, когда R # находит тип или элемент, который не используется напрямую, он отключается. Это нормально, что когда мы пишем новый класс, все поля изначально недоступны. Это связано с правилом UnusedMember.Global. Кроме того, это не относится к нескольким именам ...

Если тип / member имеет имя из некоторого определенного набора, это правило не помечает его как недопустимое и каким-то образом решает, что оно действительно используется, даже если в классе нет методов, а сам класс нигде не используется (но это относится только к public и internal, private работает как положено). Тип члена не имеет значения. Капитализация тоже не имеет значения.

Слова, которые я обнаружил, ведут себя так: Id, Guid, System, Configuration, Configurations, Name, Names, Service, Services, var и все ключевые слова, которые просто указывают на класс / структуру, если они написаны не так, как все строчные буквы (например, INT, Object, String и т. Д.), И их формы во множественном числе (это могут быть строчные буквы, поэтому ints)

Итак, давайте возьмем этот класс:

internal class ConfiguredService // Grayed out
{
    internal string RemoteSystem { get; } // Grayed out
    internal string LocalSystem { get; } // Grayed out
    internal string Configuration { get; } // Not grayed
    internal string ints { get; } // Not grayed
}

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

Моя версия Visual Studio - Professional 2017 15.8.5, а R # - версия 2018.1.2

1 Ответ

0 голосов
/ 14 января 2019

Похоже, у вас отключен "анализ всего решения" (SWA) и "показываются неиспользуемые элементы не частного типа, когда анализ всего решения выключен" включен "(обе функции можно включить / выключить в меню ReSharper -> Параметры -> Проверка кода -> Настройки). Когда SWA отключен, анализ использования для не закрытых работ выполняется в облегченном режиме: он ищет файлы, которые содержат имя члена команды в виде текста, а если файлов не так много, то ищет фактические использования. Но если существует много файлов с требуемым именем, тогда он не проверяет фактическое использование и обрабатывает элемент ввода как «использованный». Эта эвристика вызывает ложные отрицания у членов группы с популярными именами, как вы упомянули, но позволяет демону ReSharper работать быстрее. С включенным анализом использования SWA более точен и не должен содержать ложных негативов

...