in src/java/org/jetbrains/plugins/clojure/editor/ClojureEnterHandler.java [23:53]
public Result preprocessEnter(@NotNull final PsiFile file, @NotNull final Editor editor, @NotNull final Ref<Integer> caretOffsetRef,
@NotNull final Ref<Integer> caretAdvance, @NotNull final DataContext dataContext,
@Nullable final EditorActionHandler originalHandler) {
if (file instanceof ClojureFile) {
Document document = editor.getDocument();
PsiDocumentManager.getInstance(file.getProject()).commitDocument(document);
int caret = caretOffsetRef.get().intValue();
PsiElement leaf = file.findElementAt(caret);
if (leaf instanceof PsiComment && ClojureTokenTypes.LINE_COMMENT == leaf.getNode().getElementType()) {
String beforeCaret = leaf.getText().substring(0, caret - leaf.getTextRange().getStartOffset());
int semicolonCount = 0;
while (semicolonCount < beforeCaret.length() && beforeCaret.charAt(semicolonCount) == ';') {
semicolonCount++;
}
if (!StringUtil.startsWith(document.getCharsSequence(), caret, ";")) {
String prefix = StringUtil.repeat(";", semicolonCount);
if (document.getCharsSequence().charAt(caret) != ' ') {
prefix += " ";
}
document.insertString(caret, prefix);
editor.getCaretModel().moveToOffset(caret);
originalHandler.execute(editor, dataContext);
editor.getCaretModel().moveToOffset(editor.getCaretModel().getOffset() + prefix.length());
return Result.Stop;
}
}
}
return Result.Continue;
}