O LintSpy é uma extensão desenvolvida para o Visual Studio que visa facilitar o trabalho em equipe, sugerindo a adoção das melhores práticas de nomenclatura e documentação em tempo real, visando assim um código C# limpo, claro e objetivo.
Notas de versão
Versão |
Principais alterações |
1.0.0 |
Versão inicial |
1.0.1 |
Ignora classes do Scaffold (.NET) que tenham anotações [Table()] ou que estendam de DbContext |
1.0.2 |
Verifica todos os métodos, menos os com Data Anotations específicos |
Resumo
O LintSpy visa padronizar nomenclatura e documentação de códigos no momento da programação, sublinhando códigos em desacordo, exibindo na barra de rolagem a localização do ocorrido e sugerindo adoção das regras abaixo descritas. Também é possível visualizar todos as ocorrências através da lista de warnings do Visual Studio.
Desenvolvida pela equipe de TI da Coopavel (Cooperativa Agroindustrial de Cascavel/PR)
Veja abaixo um exemplo do LintSpy em funcionamento:
Exibição do warning no trecho incorreto e na barra de rolagem
Exibição da mensagem de erro ao deixar o cursor sobre o trecho marcado
Exibição de possibilidade de correção
Regras
- Classes devem estar em Pascal Case;
- O prefixo de variáveis deve seguir as tabelas na seção Prefixos. Classes internas não são consideradas;
- Namespaces devem estar em Pascal Case;
- Interfaces e classes abstratas devem ter o nome começando com a letra 'I';
- Métodos devem possuir comentário de documentação;
- O nome do método deve estar em Pascal Case;
- Parâmetros de métodos devem iniciar com a letra 'p';
- Atributos de classe devem possuir summary;
- Underscores (_) não são permitidos para nenhum nome;
- Constantes devem estar em Upper Case (Caso em que é permitido o uso de underscores);
- Enums devem estar em Pascal Case;
- Interfaces devem estar em Pascal Case após a letra 'I';
- Parâmetros devem estar em Pascal Case após o 'p';
- Variáveis devem estar em Pascal Case após o prefixo;
- Underscores (_) não são permitidos para nomes de variáveis (Caso especial);
- Parâmetros de um método devem estar no Summary do mesmo;
- Campos do Summary não podem ficar em branco;
- Propriedades devem estar em Pascal Case;
- Estruturas de controle de fluxo devem possuir bloco delimitado por chaves ({});
- Comentário não pode possuir parâmetros que não possuam correspondência;
- Comentário deve ter o retorno do método devidamente comentado;
- Pragma para desabilitar regras deve ter comentário com razão;
Prefixos
Prefixos de variáveis possuem três letras minúsculas seguindo as tabelas abaixo descritas.
Sobre Todos
As variáveis devem ser nomeadas utilizando o prefixo da tabela a seguir caso a classe em questão possua alguma das palavras listadas.
Palavra |
Prefixo |
Collection |
clt |
Column |
cln |
Row |
row |
Demais
Classes que não possuam as palavras da tabela anterior devem utilizar o prefixo indicado na tabela abaixo de acordo com o nome da classe ou agrupamento.
Classe |
Pref. |
Classe |
Pref. |
Classe |
Pref. |
AdvRichTextBox |
rtb |
ImageList |
ils |
SqlCommand |
scm |
ArrayList |
arl |
Int |
int |
SqlConnection |
scn |
Backgroundworker |
bgw |
Jarray |
jar |
SqlDataAdapter |
sda |
Bool |
bln |
Jobject |
job |
StatusBar |
sta |
Boolean |
bln |
Jtoken |
jtk |
StatusStrip |
sst |
Button |
btn |
Label |
lbl |
StreamWriter |
stw |
Byte |
byt |
LinkLabel |
lnk |
String |
str |
CampoData |
txt |
List |
lst |
StringBuilder |
stb |
CampoDataHora |
txt |
ListBox |
lst |
TabControl |
tbc |
CampoDecimal |
txt |
ListView |
lvw |
TableLayoutPanel |
tlp |
CampoNumerico |
txt |
Long |
lon |
TabPage |
tbp |
CampoTelefone |
txt |
MaskedTextBox |
txt |
TextBox |
txt |
Char |
chr |
MemoryStream |
mms |
Textboxnumauto |
txt |
CheckBox |
chk |
Menu |
mnu |
Timer |
tmr |
CheckedListBox |
clb |
MenuStrip |
mns |
TimeSpan |
tms |
ColorDialog |
cld |
MonthCalendar |
mcl |
ToolBar |
tlb |
ComboBox |
cbo |
NotifyIcon |
nti |
ToolStrip |
tsp |
ContextMenu |
cmn |
NumericUpDown |
nud |
ToolStripButton |
tsb |
Control |
ctr |
OleDbCommand |
ocm |
ToolStripDrop... |
|
DataGridView |
dgv |
OleDbConnection |
ocn |
DownButton |
btn |
DataGridViewCoopavel |
dgv |
OleDbDataAdapter |
oda |
ToolStripMenuItem |
tmi |
DataSet |
dts |
OpenFileDialog |
ofd |
ToolStripProgressBar |
prg |
DataTable |
dtt |
PageSetup Dialog |
psd |
ToolStripSplitButton |
btn |
DataView |
dtv |
Panel |
pnl |
ToolStripStatusLabel |
lbl |
DateTime |
dta |
PictureBox |
pic |
ToolTip |
tip |
DateTimePicker |
dtp |
PrintDialog |
ptd |
TrackBar |
trb |
DB2Command |
dcm |
PrintDocument |
prn |
TreeView |
tre |
DB2Connection |
dcn |
PrintPreviewControl |
ppc |
Uint |
uin |
DB2DataAdapter |
dda |
PrintPreviewDialog |
ppd |
Ulong |
uln |
Decimal |
dec |
Process |
prc |
Ushort |
ush |
Dictionary |
dic |
Processando |
pro |
VScrollBar |
vsb |
DomainUpDown |
upd |
ProgressBar |
prg |
XmlAttribute |
xat |
Double |
dob |
RadioButton |
rad |
XmlDictionary |
xdi |
ErrorProvider |
err |
Regex |
rgx |
XmlDocument |
xdo |
Float |
flt |
RichTextBox |
rtf |
XmlElement |
xel |
FontDialog |
ftd |
SaveFileDialog |
sfd |
XmlEntity |
xen |
Formulários |
frm |
Sbyte |
sby |
XmlNode |
xnd |
GroupBox |
grp |
Short |
sht |
XmlNodeList |
xnl |
HelpProvider |
hlp |
SpliterContainer |
spc |
XmlReader |
xre |
HScrollBar |
hsb |
Splitter |
spt |
XmlWriter |
xwr |
Classes que não se encaixam nas regras de prefixagem acima listadas devem possuir o prefixo 'obj'.