FxCop: Сложное слово нужно рассматривать как дискретный термин

FxCop хочет, чтобы я записал Имя пользователя с капиталом N (т.е. UserName), из-за него являющийся сложным словом. Однако из-за непротиворечивости обосновывает, что мы должны записать ее с нижним регистром n - так или имя пользователя или Имя пользователя.

Я попытался настроить CodeAnalysisDictionary.xml путем добавления следующего раздела к разделу:

<DiscreteExceptions>
  <Term>username</Term>
</DiscreteExceptions>

Из того, что я понимаю, как пользовательские словари работают, это должно сказать FxCop рассматривать имя пользователя как дискретный термин и предотвращать CompoundWordsShouldBeCasedCorrectly (CA1702) проверка для увольнения ошибки.

К сожалению, это не работает. У кого-либо есть идея, почему это и как решить это? Я не хочу добавлять подавления, потому что это серьезно создало бы помехи файлу GlobalSuppressions, поскольку существует довольно много случаев.

Отредактированный для добавления: В настоящее время я решил это при помощи GlobalSuppressions, но дал природу проблемы, это не походит на идеальный способ решить это. Кто-либо может дать подсказку на том, где искать дополнительную информацию о том, как FxCop применяет правила, определенные в словаре?

32
задан Anne Schuessler 6 March 2010 в 08:58
поделиться

2 ответа

<?php
// keywords are between *
$str = "PHP is the *best*, its the *most popular* and *I* love it.";    
if(preg_match_all('/\*(.*?)\*/',$str,$match)) {            
        var_dump($match[1]);            
}
?>

Вывод:

array(3) {
  [0]=>
  string(4) "best"
  [1]=>
  string(12) "most popular"
  [2]=>
  string(1) "I"
}
-121--2749663-

restrict стал ключевым словом в C99. Это реализация, посягающая на пространство имен пользователей. При наличии действительной программы C89, содержащей слово restrict , необходимо изменить программу, чтобы она работала с C99. Другими словами: нет обратной совместимости. Если они собирались нарушить обратную совместимость, они должны были сначала удалить получает из стандарта.

-121--2271297-

Я был разработчиком в группе анализа FxCop/Managed Code в течение 3 лет, и у меня есть ваш ответ. Все изменилось с моего времени, и я забыл, как именно работает обработка пользовательского словаря, и поэтому мне потребовалось довольно много времени, чтобы выяснить это.:)

Резюме

Короткий ответ: вы должны удалить все ссылки на имя пользователя, имена пользователей, UserName и UserNames из C :\Program Files (x86 )\Microsoft FxCop

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

Полная история

OK, теперь для длинного ответа...

Правило имеет две различные проверки, которые работают следующим образом:

A. Проверьте наличие составных слов, которые должны быть дискретными

  1. Разбить идентификатор на маркеры: например, FileName -- > {«file», «name»}
  2. Проверка периода каждой смежной пары маркеров.
  3. Если проверка периода выполнена успешно (например, имя файла считается допустимым словом),
    тогда мы нашли потенциальную проблему, так как одно слово не должно быть выражено как два жетона.
  4. Однако при наличии файла < Term CompoundAltive = «FileName» > имя файла в разделе < Составное > пользовательского словаря это означает, что несмотря на то, что имя файла является словом, руководство по проектированию (в значительной степени как кивок к согласованности с предшествующим уровнем техники в Рамках, которые предшествовали существованию правила) настаивают на должен быть записан как FileName , и поэтому мы должны подавить предупреждение.
  5. Кроме того, если в поле < Исключения > имеется запись < Term > имя файла раздела пользовательского словаря, то считается, что, хотя «имя файла» слово, это также могут быть два слова «file» и «name» в другом контексте. например. Начало - это слово, но пользователь должен изменить DoTanOnSet на DoImentedNegth будет шумом, и поэтому мы должны подавить предупреждение.

B. Проверка дискретных слов, которые должны быть составными:

  1. Взяв маркеры из A.1, проверьте каждый по отдельности по набору составных термины в пользовательском словаре.
  2. Если есть совпадение, то мы должны предупредить в соответствии с интерпретацией на шаге A.4.

Обратите внимание, что ваше предупреждение: Имя пользователя должно быть Имя пользователя обнаружено в части B,, который не находится в разделе ExecutionExceptions, поэтому вы не можете подавить предупреждение, изменив этот раздел. Проблема заключается в том, что в пользовательском словаре по умолчанию есть запись, в которой указано, что для username всегда используется правильное имя пользователя UserName . Его нужно каким-то образом удалить или переопределить.

Ошибка

Теперь идеальным решением будет оставить пользовательский словарь по умолчанию в покое, указать SeureFxCopDir = false в файле проекта, а затем объединить только части пользовательского словаря по умолчанию в файле CustomDictionary.xml, который используется для проекта. К сожалению, это не работает, так как FxCop 1.36 игнорирует директиву SeureFxCopDir и всегда рассматривает ее как истинную. Я считаю, что это ошибка, но также возможно, что это было преднамеренное изменение, так как директива не задокументирована и не имеет соответствующего пользовательского интерфейса. Я, честно говоря, не знаю...

Вывод

Учитывая, что FxCop всегда использует свой пользовательский словарь по умолчанию в дополнение к пользовательскому словарю проекта, вы можете удалить соответствующие статьи из пользовательского словаря по умолчанию.

Если у меня есть шанс, я свяжусь с текущей группой анализа кода, чтобы узнать, действительно ли это ошибка, и сообщу здесь...

33
ответ дан 27 November 2019 в 21:07
поделиться

В пользовательском словаре, который поставляется с FXCOP (расположен в моей системе в C: \ Program Files \ Microsoft FXCOP 1.36 \ customdixtionary.xml , но YMMV) в словах \ Соединения имеют <термин Compentalternate = «Имя пользователя»> Имя пользователя вход. Удалите это. Вам все еще нужно дискретное исключение.

4
ответ дан 27 November 2019 в 21:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: