Microsoft порадовал новым инструментом: StyleCop.
StyleCop проверяет стиль исходного кода (Csharp only), более 100-х правил разбитых на 7 групп:
- Документация — проверка оформления документации для классов, методов, полей. Именно оформление, а не содержание :), то есть главное что бы был xml валидный текст, присутствовали нужные элементы. И внимание в конце предложения стояла точка, а описание параметра в методе было длинее 10 символов. Всего 42 правила.
- Разметка кода и пустые строки - анализ расположения скобочек (фигурных) и отступов в виде пустых строк. 16 правил
- Сопровождаемость — всего 7 правил, например, что в одном файл задекларирован только один класс.
- Наименования — проверяет, что класс назван с заглавной буквы, поле с маленькой, что нет символов подчеркивания, и т.д. 11 правил.
- Расположение в определенном порядке — проверяет расположения частей кода, и их порядок. 8 правил.
- Читаемость — проверка на "читаемость" и что код правильно отформатирован. 22 правила.
- Пространство между элементами — проверка отступов между элементами, например наличие проблема перед запятой, и т.д. 28 правил.
Полный список правил можно найти у Wojciech Zimirski. Человек не поленился и "выдрал" всё из ресурсов.
Если Вы проверите любой свой проект на "стильность" — будете приятно удивлены, сколько же оказывается ошибок по стилю. Второе замечание — всё, что генерируется Visual Studio — так же неверно с точки зрения стиля. В третьих Microsoft не следует этому стилю. Достаточно загрузить исходники .net, что бы в этом убедится.
Как всегда сыр-бор разгорелся вокруг нескольких правил:
Использование префикса m_ вместо this. в полях класса. Рекомендовано this. (Это я еще могу понять, я ненавижу символ подчеркивания).
Использование табуляции. Рекомендуются только пробелы. Это вообще идиотское правило.
Во-первых, потому что кому-то нравится отступ в 2 пробела, кому-то в 3, кому-то в 4, а кому-то и в 8, и редактор (нормальный редактор), имеет настройки сколько пробелов должен показывать символ табуляции. И все довольны.
Во-вторых, эта проблема должна спокойно решится с помощью Edit->Advanced->Format Document, как и все правила относящиеся к разметке кода, пустым строкам, читаемости и пробелов между элементами. Документацию, по крайней мере, можно было бы генерировать. (Хотя бы "рыбу"). Правда тогда пользы от такого инструмента вообще не будет, останется проверить что using расположен внутри namespace и что нет префикса m_, да и символа подчеркивания в элементах.
Консольное приложение сгенерированное Visual Studio — я добавил одну строку.
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World");
}
}
}
Итого 8 ошибок:
Правильная версия:
// <copyright file="Program.cs" company="MP">
// Copyright (c) 2008 All Right Reserved
// </copyright>
// <author>M P</author>
// <email>email@nowhere.com</email>
// <date>2008-05-24</date>
// <summary>Contains assembly information.</summary>
namespace ConsoleApplication1
{
using System;
/// <summary>
/// Just a class.
/// </summary>
public class Program
{
/// <summary>
/// Mains the specified args.
/// </summary>
/// <param name="args">Array of command line arguments.</param>
public static void Main(string[] args)
{
Console.WriteLine("Hello World");
}
}
}
К счастью все правила можно отключить.
Справедливости ради что-то новое я почерпнул:
Почему using желателен внутри namespace.
Почему название поля не должно начинаться с подчеркивания.
И самое главное они думают что в будущем StyleCop будет не только находить ошибки, но и исправлять их.