blob: 3e4449f714a85f28b53b02871131ba368e4e03c3 [file] [log] [blame]
package com.intellij.codeInsight.editorActions.fillParagraph;
import com.intellij.codeInsight.CodeInsightActionHandler;
import com.intellij.codeInsight.actions.BaseCodeInsightAction;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull;
/**
* User : ktisha
*
* Action to re-flow paragraph to fit right margin.
* Glues paragraph and then splits into lines with appropriate length
*
* The action came from Emacs users // PY-4775
*/
public class FillParagraphAction extends BaseCodeInsightAction {
@NotNull
@Override
protected CodeInsightActionHandler getHandler() {
return new Handler();
}
private static class Handler implements CodeInsightActionHandler {
@Override
public void invoke(@NotNull final Project project, @NotNull final Editor editor, @NotNull final PsiFile file) {
ParagraphFillHandler paragraphFillHandler = LanguageFillParagraphExtension.INSTANCE.forLanguage(file.getLanguage());
final int offset = editor.getCaretModel().getOffset();
PsiElement element = file.findElementAt(offset);
if (element != null && paragraphFillHandler != null && paragraphFillHandler.isAvailableForFile(file)
&& paragraphFillHandler.isAvailableForElement(element)) {
paragraphFillHandler.performOnElement(element, editor);
}
}
@Override
public boolean startInWriteAction() {
return true;
}
}
@Override
protected boolean isValidForFile(@NotNull Project project, @NotNull Editor editor, @NotNull PsiFile file) {
final ParagraphFillHandler handler =
LanguageFillParagraphExtension.INSTANCE.forLanguage(file.getLanguage());
return handler != null && handler.isAvailableForFile(file);
}
}