Инструмент для удаления комментариев JavaDoc? - PullRequest
11 голосов
/ 31 января 2012

Есть ли какой-нибудь инструмент / плагин Eclipse, который может удалить все комментарии JavaDoc в файле?

нормальные (не JavaDoc) комментарии должны быть неповрежденными послезапуск инструмента.

Ответы [ 4 ]

32 голосов
/ 31 января 2012

Попробуйте это регулярное выражение, чтобы найти замену в eclipse / sed / вашем любимом редакторе с поддержкой регулярных выражений.

/\*\*(?s:(?!\*/).)*\*/
  • ?s обрабатывает ввод как одну строку
  • aначальная строка \**
  • ноль или более
    • отрицательный прогноз для */
    • пробел или непробельный символ
  • aконечная строка */

Редактировать

Для решения случаев, когда строки, содержащие Javadoc, используйте это регулярное выражение

((?<!\\)"([^"]|(?<=\\)")*")|(/\*\*(?s:(?!\*/).)*\*/)

и замените егос первой группой захвата

/1

Тогда, если вы говорите, что это не должно соответствовать

///** */

или более сложным случаям

Я предлагаю использовать инструмент синтаксического анализа, такой как antlrанализировать грамматику Java для токенов, таких как комментарии и строки , и удалять ненужные элементы


Иногда я нахожу свои собственные регулярные выражения загадочными !!

Так вот некоторые визуальные отзывы

((?!\\)"([^"]|(?=\\)")*")|(/\*\*(?:(?!\*/).)*\*/)

Regular expression visualization

Демо Debuggex


/\*\*(?:(?!\*/).)*\*/

Regular expression visualization

Демо Debuggex

2 голосов
/ 23 октября 2015

Ответ Прашанта Бхата мне не помог в затмении:

/\*\*(?s:(?!\*/).)*\*/

Мне пришлось использовать

/\*/*(?s:(?!\*/).)*\*/

вместо.

1 голос
/ 01 июня 2015

Для этой цели я создал библиотеку с открытым исходным кодом , ее под названием CommentRemover можно удалить однострочными и многострочными комментариями Java.

Поддерживает удаление или НЕ удаление TODO.
Также он поддерживает JavaScript, HTML, CSS, Properties, JSP и XML Comments.

Небольшой фрагмент кода, как его использовать (есть 2 типа использования):

Первый способ InternalPath

 public static void main(String[] args) throws CommentRemoverException {

 // root dir is: /Users/user/Projects/MyProject
 // example for startInternalPath

 CommentRemover commentRemover = new CommentRemover.CommentRemoverBuilder()
        .removeJava(true) // Remove Java file Comments....
        .removeJavaScript(true) // Remove JavaScript file Comments....
        .removeJSP(true) // etc.. goes like that
        .removeTodos(false) //  Do Not Touch Todos (leave them alone)
        .removeSingleLines(true) // Remove single line type comments
        .removeMultiLines(true) // Remove multiple type comments
        .startInternalPath("src.main.app") // Starts from {rootDir}/src/main/app , leave it empty string when you want to start from root dir
        .setExcludePackages(new String[]{"src.main.java.app.pattern"}) // Refers to {rootDir}/src/main/java/app/pattern and skips this directory
        .build();

 CommentProcessor commentProcessor = new CommentProcessor(commentRemover);
                  commentProcessor.start();        
  }

Второй способ ExternalPath

 public static void main(String[] args) throws CommentRemoverException {

 // example for externalInternalPath

 CommentRemover commentRemover = new CommentRemover.CommentRemoverBuilder()
        .removeJava(true) // Remove Java file Comments....
        .removeJavaScript(true) // Remove JavaScript file Comments....
        .removeJSP(true) // etc..
        .removeTodos(true) // Remove todos
        .removeSingleLines(false) // Do not remove single line type comments
        .removeMultiLines(true) // Remove multiple type comments
        .startExternalPath("/Users/user/Projects/MyOtherProject")// Give it full path for external directories
        .setExcludePackages(new String[]{"src.main.java.model"}) // Refers to /Users/user/Projects/MyOtherProject/src/main/java/model and skips this directory.
        .build();

 CommentProcessor commentProcessor = new CommentProcessor(commentRemover);
                  commentProcessor.start();        
  }
0 голосов
/ 12 марта 2013

В vim у меня работает следующее:

/\/\*\*\_.\{-}\*\/

Шаблон \_.\{-} соответствует любому символу (.), включая символ новой строки (\_), как можно меньше (* 1007)*).

Соответствует многострочным комментариям Javadoc, таким как:

/**
 * My Javadoc comment here
 */

Но не сопоставляется с такими комментариями, как:

// My non-Javadoc comment
...