public Result preprocessEnter()

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;
  }