2010-03-10 3 views
15

Sto lavorando con una base di codice ereditata che contiene migliaia di righe di codice commentato. So che il programmatore precedente voleva salvare tutto il suo duro lavoro per i posteri invece di limitarsi a cancellarlo ma: non lo leggerò mai e questo si mette di mezzo. Un esempio di problema è che quando eseguo ricerche di testo per determinati segmenti di codice ottengo dozzine di hit "falsi" nel codice commentato. PITA.Modo rapido e semplice per rimuovere il codice "morto" (commentato)

C'è un modo rapido/semplice per rilevare grandi blocchi di codice commentato? Forse un RegEx intelligente?

Mi capita di lavorare in VB.NET in questo momento e il carattere di commento è un singolo apostrofo.

+1

Ci sono commenti che si desidera conservare? Il commento dovrebbe essere cancellato solo se sembra che contenga codice, e non se contenga testo normale? –

+0

Questo è il problema. Ci sono alcuni commenti utili ma sono in cima a due, tre o quattro righe. Il codice inutile e commentato tende a funzionare per dozzine e centinaia di righe commentate. –

+0

Penso che qualche regex intelligente possa occuparsene. Qualcosa che troverà 10 o più linee contigue che iniziano con un singolo apostrofo. Se la regex seleziona per me il codice commentato posso semplicemente premere delete e passare al blocco successivo. –

risposta

13

È possibile utilizzare una ricerca di espressioni regolari. Cerca

^.*'.*$ 

Per trovare una singola riga con un commento. Probabilmente si vorrà trovare almeno 3 linee che iniziano con un commento:

^.*'.*\n.*'.*\n.*'.*$ 

tenere il gatto lontano dalla tastiera.

+1

Non rimuoverà anche tutti i commenti desiderati? Come si fa a distinguere tra vecchio codice e commenti desiderati? –

+5

Questo era pensato per trovare e selezionare il codice commentato, premendo DEL è il lavoro dell'OP. –

+1

+1. Questo sarebbe molto più veloce e più controllato dall'utente della mia risposta che coinvolge una macro. –

0

Ecco a cosa servono i sistemi di controllo versione.

mi piacerebbe assicurarsi che era sotto il controllo di versione (si spera non Visual Source sicuro), il check-out, rimuovere tutto il codice commentato, e controllare nuovamente.

Mi piacerebbe anche scoraggiare la pratica in il tuo team di sviluppo per il futuro.

+0

Usiamo Subversion quindi non sono preoccupato di "perdere" nulla. Questo codice ha iniziato la sua vita molti anni fa come, aspettalo, VB3, prima che i sistemi di controllo delle versioni fossero la norma. Sto rimuovendo manualmente il crud ma è labour-intensive e quindi sto cercando un modo più veloce. Mi piacerebbe andare avanti e refactoring codice "live". –

+0

Sembra un problema educativo. Di 'alla tua squadra di non farlo più, quindi inizia il duro slogging per ripulire il casino. – duffymo

4

Temo di essere d'accordo con duffymo. Non penso che troverai un modo automatico affidabile per rimuovere il codice commentato. Sono sicuro che se cerchi abbastanza, ne troverai uno, ma il tuo tempo sarebbe meglio speso per il tuo lavoro.

Sono stato in questa situazione in passato (troppo spesso) e quello che sto facendo è rimuovere il codice commentato mentre lavoro su vari moduli.

Come esempio, apro la classe Person per apportare una modifica e vedo il codice commentato che deve ancora essere rimosso. Eseguo il checkout del codice (utilizziamo VSS), rimuovo il codice errato, lo controllo e, infine, lo controllo per fare il mio lavoro.

Ci vuole tempo prima che tutto vada via, ma ritengo che sia un uso efficace del tempo per risolvere il problema.

+1

"usiamo VSS" - Mi dispiace tanto. È il peggior prodotto sul mercato, a mani basse.Perché dovresti farlo quando ci sono alternative più efficaci disponibili che non costano nulla? Ma grazie per il supporto. – duffymo

+1

+1. Anch'io sono stato in quella situazione e ho fatto lo stesso. Se qualche codice commentato specifico ti infastidisce, cancellalo. Se esiste altrove, ma non sta andando a modo tuo ora, è una perdita di tempo per eliminarlo. Sii pragmatico e non perdere tempo a riordinare il codice che funziona e non ha bisogno di essere modificato o letto. – MarkJ

+0

@duffymo: sono d'accordo ma è fuori dal mio controllo. (Ho avanzato suggerimenti) Ma è lo standard aziendale ed è una grande azienda. –

0

Suggerisco di scrivere o trovare una macro per Visual Studio che consentirà di eliminare i commenti.

Alcuni pseudo-logica:

  • inizio ad un numero di riga, leggere primo carattere. ricorda questo numero di linea.
  • se è il carattere di commento VB ', quindi continuare
  • leggere il primo carattere della riga successiva. se è un personaggio dei commenti, continua.
  • quando si trova una riga che non è un carattere di commento, analizzare il numero di righe attraversate.
  • se il numero di righe attraversate corrisponde alla soglia di n, quindi eliminarle.
3
(^\s*//.*\n)^10 

Trova 10 simultanei linee commentate fuori dello stile //.

commentata prove:

\s*//\s*\[Test\].*\n 
+0

Questo mi ha aiutato a trovare un carico di codice commentato :) – Ronnie

+3

Per qualche motivo questo non funziona più per me, devo usare (^ \ s * //. * \ N) {10} – Ronnie

+0

@Ronnie: grazie per questo . Dovevo fare come hai detto in VS2010. Mi ci è voluto un po 'per rendermi conto che questo è stato inviato alla casella di controllo "Trova/Sostituisci + usa l'espressione regolare". Questo è un consiglio fantastico! – MikeJ

1

Per le persone C# che finiscono qui, utilizzare la seguente espressione regolare per trovare le righe commentate.

(^|[^/])//[^/] 
0

So che questo è un thread vecchio ma il trucco che mi aiuta non è stato menzionato.

Cerco questo regex:

(^ \ s *' = \ n..)^

Si reperti commentata righe che contengono un segno di uguale. La mia esperienza è che la maggior parte dei blocchi di codice commentato contiene almeno una riga che ha un compito e che i segni uguali sono piuttosto rari nei commenti reali.

Non automatizzo la sostituzione, premo semplicemente F3 e se corrisponde a una sola riga, premo semplicemente il tasto Invio per sostituire il testo evidenziato con una nuova riga. Se atterra su una linea che fa parte di un blocco di righe commentate, seleziono manualmente, premi di nuovo invio e F3.