Se il problema è trovare il codice commentato, è necessario un modo per trovare commenti e un modo per decidere se un commento potrebbe contenere codice.
Un modo semplice per eseguire questa operazione consiste nella ricerca di commenti contenenti elementi simili al codice. Sarei tentato di cacciare per i commenti contenenti un ";" carattere (o qualche altro indicatore raro come "="); sarà piuttosto difficile avere qualche codice commentato interessante che non contenga questo e nella mia esperienza con i commenti, non vedo molte persone che scrivono che contengono questo. Una ricerca regolare per questo dovrebbe essere piuttosto semplice, anche se ha rilevato alcuni falsi positivi aggiuntivi (ad es. // in una stringa letterale).
Un modo più sofisticato per eseguire ciò è utilizzare un lexer o parser Java.Se si dispone di un lexer che restituisce i commenti ai token (non tutti lo fanno, i compilatori Java non sono interessati ai commenti), quindi è sufficiente eseguire la scansione dei lessemi per un commento e eseguire il controllo punto e virgola descritto sopra. Con questo approccio non otterrai alcun risultato di falsi positivi per commenti come cose in stringhe letterali.
Se si dispone di un parser re-engineering che cattura i commenti come parte della AST (come il nostro SD Java Front End), è possibile eseguire la scansione meccanicamente l'albero sintattico per i commenti, alimentare il contesto commento torna al parser a verificare se il contenuto è simile al codice e segnalare qualsiasi passaggio che supera tale modulo di test con un tasso di errore dipendente dalla dimensione (10 errori in 15 caratteri implica "è davvero un commento"). Ora il test "simile al codice" richiede che il parser di reingegnerizzazione sia disposto a riconoscere qualsiasi sottostringa della lingua (Java). DMS Software Reengineering Toolkit il nostro front-end Java può effettivamente farlo, utilizzando l'accesso alla grammatica sepolto nel front-end, poiché è disposto ad avviare un'analisi per qualsiasi terminale (non) della lingua, e questa domanda è "puoi trovare un sequenza di terminali (non) che consuma la stringa? ".
Gli approcci lesser e parser sono rispettivamente piccole e grandi mazze. Se OP lo farà una volta sola, può attenersi alla ricerca regex manuale. Se il problema è controllare ripetutamente il codice base (necessario nelle grandi organizzazioni), vorrebbe uno strumento che possa essere eseguito regolarmente.
fonte
2010-11-11 15:27:19
Dubito che troverai qualcosa del genere. Come detto, potrebbe esserci un plugin che lo fa, ma nessuno che io abbia mai incontrato. –
La tua domanda non è chiara. Trovare i commenti è facile: cerca "/ *" o "//". E poiché i commenti non hanno una relazione formale con il codice, quando un commento "riguarda" il codice vicino, e quando si tratta solo di un commento ("un sonetto per ...")? Cosa vuoi veramente fare? –
Penso che voglia trovare il codice che viene commentato, non il codice che ha un commento. – Jorn