2010-02-16 12 views
7

Quale regola di controllo del codice statico definibile vuoi vedere aggiunto a FxCop e/o Gendarme?Quale regola desideri avere FxCop/Gendarme?

Perché vuoi vedere la regola aggiunta, ad esempio quali sono i vantaggi ecc.?

Come si può implementare la regola?

+0

FXCop non esegue il controllo del codice statico, controlla l'assembly compilato (IL). L'analisi del codice statico viene eseguita tramite StyleCop. –

+0

@BeowulfOF, direi che FXCop ha fatto il controllo del codice statico, semplicemente non controlla il numero di spazi su ciascun lato di un "=" ecc. StyleCop fa più controllo di stile, ad es. id non traccia il flusso di controllo tra i metodi ecc. –

+0

Microsoft dichiara che solo gli assembly vengono analizzati da FXCop, non il codice sorgente. http://msdn.microsoft.com/en-us/library/bb429476%28VS.80%29.aspx –

risposta

1

Personalmente, preferirei non vedere le implementazioni IDisposable nelle dichiarazioni using.

Quindi, se si ha il codice come questo:

var fs = new FileStream(...); 

// Other code. 

fs.Dispose(); 

E si direbbe di usarlo in un comunicato using.

Il vantaggio sarebbe che ti avviserà di casi in cui potresti non essere a conoscenza di dove gli oggetti che devono essere smaltiti non vengono smaltiti in modo tempestivo.

Tuttavia, ci sono abbastanza volte in cui è una situazione valida NON dichiarare le implementazioni IDisposable in un'istruzione using per una regola come questa per diventare un dolore molto rapidamente. Molto spesso, questo caso sta prendendo un'implementazione IDisposable come parametro per un metodo.

Quello che faccio non dire è usi delle classi in cui i dettagli di implementazione eliminano la necessità di chiamare Dispose, (ad esempio MemoryStream o DataContext); quelli implementano IDisposable e devono sempre avere Dispose chiamato su di essi, indipendentemente dall'implementazione dettagli, poiché è sempre meglio codificare il contratto esposto.

+0

@Ian Ringrose: aggiornata la mia risposta per chiarire. – casperOne

+0

L'analisi del codice VS2010 ha una regola per questo: http://msdn.microsoft.com/en-us/library/ms182289%28VS.100%29.aspx –

2

Mi piacerebbe definire e implementare le mie regole molto rapidamente. L'ho provato una volta per FxCop, ma ho trovato che l'API non era molto chiara - e non c'era troppa documentazione in giro. Ho usato FxCop 1,36, forse le cose sono cambiate ...

Così mi piacerebbe vedere FxCop avere una chiara e facile da usare l'interfaccia ... che sarebbe grande :)

Le regole che ho cercato di implementare sono stati:

  • DocumentInternalMethods
  • DocumentInternalTypes
  • ...

Bas volevo forzare i commenti xml sui membri non pubblici.

+1

Usa StyleCop per questo, ha una regola per quel built-in. I commenti XML non sono comunque compilati per l'assembly, quindi FXCop non può vedere se questi sono definiti o meno, dal momento che analizza solo gli assembly compilati. –

+1

So di StyleCop, ma in questo momento volevo implementarlo in FxCop - e l'ho fatto. Hai ragione, devi caricare i file xml separatamente. – tanascius

1

Mi piacerebbe che l'analisi binaria fosse abbastanza intelligente da riconoscere la possibilità di un'interfaccia.

Se poteva determinare l'avvicinamento ai tipi definiti e ai loro membri, se ci sono commons che potrebbero essere estrapolati in un'interfaccia.

Chiaramente, questo non dovrebbe essere più di un avvertimento, poiché a volte è richiesto di non utilizzare esplicitamente un'interfaccia.

1

Pensando a questo, vorrei anche vedere l'analisi binaria abbastanza intelligente da verificare il possibile downgrade dei modificatori di accesso.

Non dovrebbe essere difficile stabilire se una classe, una proprietà o un metodo potrebbero essere più limitati.