Есть ли какой-нибудь инструмент/плагин Eclipse, который может удалить все комментарии JavaDoc в файле?
После запуска инструмента нормальные (не-JavaDoc) комментарии должны быть целыми.
Есть ли какой-нибудь инструмент/плагин Eclipse, который может удалить все комментарии JavaDoc в файле?
После запуска инструмента нормальные (не-JavaDoc) комментарии должны быть целыми.
Попробуйте это регулярное выражение для поиска, замените либо в eclipse/sed/вашем любимом редакторе, поддерживающем регулярное выражение.
/\*\*(?s:(?!\*/).)*\*/
?s
обрабатывать ввод как одну строку\**
*/
*/
Edit
Чтобы разрешить случаи, когда строки, содержащие javadoc, используйте это регулярное выражение
((?<!\\)"([^"]|(?<=\\)")*")|(/\*\*(?s:(?!\*/).)*\*/)
и замените его на первую группу захвата
/1
Затем, если вы говорите, что это не должно совпадать с
///** */
или более сложные случаи
Я предлагаю использовать инструмент парсера, такой как antlr, для анализа с помощью java-грамматики для токенов, таких как комментарии и строки, и удалить элементы, которые вы не хотите
Когда-то я нахожу, что мои собственные регулярные выражения отвечают загадочным!
Итак, вот какая визуальная обратная связь
((?!\\)"([^"]|(?=\\)")*")|(/\*\*(?:(?!\*/).)*\*/)
/\*\*(?:(?!\*/).)*\*/
Я создал открытую исходную библиотеку для этой цели, ее названный CommentRemover вы можете удалить однострочные и несколько строк Java-комментариев.
Он поддерживает удаление или удаление TODO.
Также он поддерживает JavaScript, HTML, CSS, Свойства, JSP и комментарии XML.
Маленький фрагмент кода, как его использовать (используется 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();
}
Для меня в vim работает следующее:
/\/\*\*\_.\{-}\*\/
Шаблон \_.\{-}
соответствует любому символу (.
), включая новую строку (\_
), как можно меньше (\{-}
).
Это соответствует многострочным комментариям Javadoc, таким как:
/**
* My Javadoc comment here
*/
Но не будет соответствовать комментариям, например:
// My non-Javadoc comment
Ответ Прашанта Бхате не помог мне в затмении:
/\*\*(?s:(?!\*/).)*\*/
Мне пришлось использовать
/\*/*(?s:(?!\*/).)*\*/
вместо.