Que regra você deseja que o FXCOP/Gendarme tenha?
-
20-09-2019 - |
Pergunta
Que regra de verificação de código estático definível você deseja ver adicionado ao FXCOP e/ou gendarme?
Por que você deseja ver a regra adicionada, por exemplo, quais são os benefícios etc?
Como sua regra poderia ser implementada?
Solução
Pessoalmente, eu preferiria ver não usar IDisposable
implementações em using
declarações.
Então, se você tinha código assim:
var fs = new FileStream(...);
// Other code.
fs.Dispose();
Diria para você usá -lo em um using
declaração.
O benefício seria que ele o alertaria para os casos que você não conhecemos onde os objetos que deveriam ser descartados não estão sendo descartados em tempo hábil.
No entanto, há momentos suficientes em que é uma situação válida para não declarar IDisposable
As implementações em uma declaração de uso para uma regra como essa para se tornarem uma dor muito rapidamente. Na maioria das vezes, este caso está tomando um IDisposable
implementação como um parâmetro para um método.
O que eu faço não Mean é o uso das aulas em que os detalhes da implementação removem a necessidade de ligar Dispose
, (por exemplo MemoryStream
ou DataContext
); aqueles implementam IDisposable
e sempre deve ter Dispose
chamou sobre eles, independentemente do implementação Detalhes, pois é sempre melhor codificar contra o contrato exposto.
Outras dicas
Eu gostaria de definir e implementar minhas próprias regras muito rapidamente. Eu tentei isso uma vez para o FXCOP, mas achei a API não ser muito clara - e não havia muita documentação. Eu usei o FXCOP 1.36, talvez as coisas mudassem ...
Então, eu gostaria de ver o FXCOP tendo uma interface clara e fácil de usar ... isso seria ótimo :)
As regras que tentei implementar foram:
- DocumentInternalMethods
- DocumentInternalTypes
- ...
Basicamente, eu queria fazer cumprir os composições XML aos membros não públicos.
Eu realmente gostaria que a análise binária fosse inteligente o suficiente para reconhecer a possibilidade de uma interface.
Se pudesse determinar ao abordar os tipos definidos e seus membros, se houver comuns que possam ser extrapolados para uma interface.
Claramente, isso não deve ser mais do que um aviso, uma vez que às vezes é reclamado de não usar explicitamente uma interface.
Ao pensar sobre isso, eu também gostaria de ver a análise binária para ser inteligente o suficiente para verificar o possível rebaixamento dos modificadores de acesso.
Não deve ser difícil determinar se uma classe, propriedade ou método pode ser mais restrito.