2011-04-11 33 views
18

Qualcuno ha incontrato uno strumento per segnalare un codice commentato in un'app .NET? Sto parlando di modelli come:Esistono strumenti che possono segnalare un codice .NET commentato?

//var foo = "This is dead"; 

E

/* 
var foo = "This is dead"; 
*/ 

Questo non verrà trovato da strumenti come ReSharper o FxCop che guardano il codice senza riferimenti. Ci sono ovvie implicazioni nel distinguere il codice commentato dal testo commentato, ma non sembra un compito troppo grande.

Esiste uno strumento esistente che può essere prelevato? Anche se si trattava solo di segnalazioni di occorrenze per file anziché integrazione completa di IDE.

Modifica 1: Ho anche logged this as a StyleCop feature request. Sembra una buona misura per lo strumento.

Edit 2: Sì, c'è una buona ragione per cui mi piacerebbe fare questo e si riferisce alla qualità del codice. Vedi il mio commento qui sotto.

+1

Per curiosità, perché questo è importante? Qual è il gioco finale? – jcolebrand

+1

Buona domanda! Lo sto guardando come una metrica di qualità del codice. A volte mi imbatto in un'app (cioè costruita da un venditore secondo i propri standard rigorosi!) Con serie quantità di codice morto commentato e mi piacerebbe un modo per quantificarlo. Simile ai report di strumenti come NDepend su metodi lunghi e troppi parametri. Anche se non viene mai compilato ed eseguito, dal punto di vista della manutenibilità e dell'eleganza del codice, non è bello. È male odore di codice nel migliore dei casi. –

+0

Gotcha. Penso che il modo migliore per farlo sia quello di trovare tutti i blocchi di commento e le righe di codice commentate, di estrapolarle nei loro file, per così dire, e quindi vedere quali di questi sembrano codice per il compilatore. Immagino che dovrebbe essere in grado di determinare che una linea non si adatta e quindi rimuovere quella linea così com'è. Il problema è che potrebbe esserci un segmento come questo: '// se usiamo 'x = y.Get (z);' qui allora dobbiamo occuparci di ... "che possono o meno rispettare le tue linee guida sull'odore del codice. Quelle non possono essere analizzate automaticamente. – jcolebrand

risposta

5

È possibile ottenere una risposta approssimativa utilizzando un'espressione regolare che riconosce i commenti, che terminano con ";" o "}".

Per uno schema più precisa, vedere questa risposta: Tool to find commented out VHDL code

0

StyleCop sarà prendere il primo modello. Ti suggerisce di utilizzare //// come commento per il codice in modo che ignori la regola.

+0

Sì, ci sono molti altri modelli di commento sintatticamente corretti a cui non ho fatto riferimento. Il trucco è identificare il testo commentato rispetto al codice commentato che StyleCop non farà (ancora). –

0

Visto che hai menzionato NDepends, può anche dirti Percentage commentato http://www.ndepend.com/Metrics.aspx#PercentageComment. Questo è definito per applicazioni, assiemi, spazi dei nomi, tipi e metodi.

+0

Sì, ma non può dirti quando un commento non è un commento! Con ciò intendo che non può identificare un codice che è stato semplicemente escluso dalla compilazione/esecuzione in contrasto con i commenti di natura istruttiva o descrittiva. –

1

Ho fatto questa strada per lo stesso motivo. Ho suggerito Ira Baxter (anche se mi sono concentrato su variable_type variable = value e ho cercato specificatamente linee costituite da 0 o più spazi bianchi all'inizio seguiti da // seguiti da codice (e per gestire/* * /, ho scritto un preprocessore che lo ha convertito in //. Ho ottimizzato il reg exp per ridurre i falsi positivi e fatto anche un'ispezione manuale solo per sicurezza, per fortuna c'erano pochissimi casi in cui il commento stava facendo pseudo-codice come cose come Drachenstern suggerisce sopra, YMMV. Mi piacerebbe trovare uno strumento che possa fare questo, ma alcuni falsi positivi da pseudo-codice valido ma possibilmente eccessivamente dettagliato saranno davvero da escludere, specialmente se stanno usando tecniche di programmazione letterale per rendere il codice "leggibile" come pseudo codice

(l'ho fatto anche per codice VB6, da un lato la mancanza di; ha reso più difficile raddrizzare un "eas" y "reg exp, d'altra parte il codice usava molto meno classi quindi era più facile abbinare su tipi variabili che tendono a non essere in pseudo codice)

Un'altra opzione che ho guardato ma che non avevo disponibile era per vedere i registri di controllo di revisione per le linee che erano codice nella versione X e poi // stessa riga nella versione Y ... questo dei corsi presuppone che A) stiano usando il controllo di revisione B) puoi vederlo, e C) loro non ha scritto il codice e lo ha commentato nella stessa revisione. (E ottiene un po 'più complicato se usano/* */commenti

1

C'è un'altra opzione per questo, Sonar. In realtà è un centrica un'applicazione Java, ma c'è un plugin in grado di gestire il codice C#.Attualmente si può riferire in merito:

  1. errori StyleCop
  2. FxCop errori
  3. Gendarme errori
  4. codice duplicato
  5. codice commentato
  6. prova Unità di risultati
  7. copertura del codice (utilizzando NCover , OpenCover)

È necessario un po 'di tempo per eseguire la scansione principalmente a causa dei controlli di duplicazione (AFAIK utilizza la corrispondenza del testo anziché gli alberi di sintassi C#) e se si utilizza il database predefinito interno di derby può avere esito negativo su basi di codice di grandi dimensioni. Tuttavia è molto utile per le metriche basate sul codice che si ottengono e ha funzionalità di snapshot che consentono di vedere come le cose sono cambiate e (si spera) migliorate nel tempo.

Problemi correlati