Do not use reserved line wrap width for wrapping plain text files

This commit is contained in:
Konstantin Kolosovsky
2017-04-25 16:19:57 +03:00
parent 362be70c8e
commit b25a4da934
3 changed files with 35 additions and 15 deletions
@@ -17,10 +17,8 @@ package com.intellij.codeInsight.editorActions;
import com.intellij.codeInsight.template.TemplateManager;
import com.intellij.formatting.FormatConstants;
import com.intellij.lang.Language;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.formatter.WhiteSpaceFormattingStrategy;
import com.intellij.ide.DataManager;
import com.intellij.lang.Language;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.actionSystem.IdeActions;
import com.intellij.openapi.editor.*;
@@ -30,7 +28,9 @@ import com.intellij.openapi.editor.event.DocumentListener;
import com.intellij.openapi.editor.impl.TextChangeImpl;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.codeStyle.CodeStyleSettings;
import com.intellij.psi.formatter.WhiteSpaceFormattingStrategy;
import com.intellij.psi.formatter.WhiteSpaceFormattingStrategyFactory;
import com.intellij.util.containers.WeakHashMap;
import org.jetbrains.annotations.NotNull;
@@ -160,7 +160,7 @@ public class AutoHardWrapHandler {
// Is assumed to be max possible number of characters inserted on the visual line with caret.
int maxPreferredOffset = editor.logicalPositionToOffset(editor.visualToLogicalPosition(
new VisualPosition(caretModel.getVisualPosition().line, margin - FormatConstants.RESERVED_LINE_WRAP_WIDTH_IN_COLUMNS)
new VisualPosition(caretModel.getVisualPosition().line, margin - FormatConstants.getReservedLineWrapWidthInColumns(editor))
));
int wrapOffset = strategy.calculateWrapPosition(document, project, startOffset, endOffset, maxPreferredOffset, true, false);
@@ -15,6 +15,12 @@
*/
package com.intellij.formatting;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.fileTypes.PlainTextLanguage;
import org.jetbrains.annotations.NotNull;
import static com.intellij.psi.util.PsiUtilBase.getLanguageInEditor;
/**
* Is assumed to be a single place to hold various constants to use during formatting.
* <p/>
@@ -54,4 +60,12 @@ public class FormatConstants {
private FormatConstants() {
}
public static int getReservedLineWrapWidthInColumns(@NotNull Editor editor) {
return isPlainTextFile(editor) ? 0 : RESERVED_LINE_WRAP_WIDTH_IN_COLUMNS;
}
private static boolean isPlainTextFile(@NotNull Editor editor) {
return editor.getProject() != null && PlainTextLanguage.INSTANCE.is(getLanguageInEditor(editor, editor.getProject()));
}
}
@@ -641,20 +641,24 @@ public class CodeFormatterFacade {
}
}
int reservedWidthInColumns = FormatConstants.getReservedLineWrapWidthInColumns(editor);
if (!hasTabs) {
return wrapPositionForTextWithoutTabs(startLineOffset, endLineOffset, targetRangeEndOffset);
return wrapPositionForTextWithoutTabs(startLineOffset, endLineOffset, targetRangeEndOffset, reservedWidthInColumns);
}
else if (canOptimize) {
return wrapPositionForTabbedTextWithOptimization(text, tabSize, startLineOffset, endLineOffset, targetRangeEndOffset);
return wrapPositionForTabbedTextWithOptimization(text, tabSize, startLineOffset, endLineOffset, targetRangeEndOffset,
reservedWidthInColumns);
}
else {
return wrapPositionForTabbedTextWithoutOptimization(editor, text, spaceSize, startLineOffset, endLineOffset, targetRangeEndOffset);
return wrapPositionForTabbedTextWithoutOptimization(editor, text, spaceSize, startLineOffset, endLineOffset, targetRangeEndOffset,
reservedWidthInColumns);
}
}
private int wrapPositionForTextWithoutTabs(int startLineOffset, int endLineOffset, int targetRangeEndOffset) {
private int wrapPositionForTextWithoutTabs(int startLineOffset, int endLineOffset, int targetRangeEndOffset, int reservedWidthInColumns) {
if (Math.min(endLineOffset, targetRangeEndOffset) - startLineOffset > myRightMargin) {
return startLineOffset + myRightMargin - FormatConstants.RESERVED_LINE_WRAP_WIDTH_IN_COLUMNS;
return startLineOffset + myRightMargin - reservedWidthInColumns;
}
return -1;
}
@@ -663,7 +667,8 @@ public class CodeFormatterFacade {
int tabSize,
int startLineOffset,
int endLineOffset,
int targetRangeEndOffset)
int targetRangeEndOffset,
int reservedWidthInColumns)
{
int width = 0;
int symbolWidth;
@@ -675,8 +680,8 @@ public class CodeFormatterFacade {
case '\t': symbolWidth = tabSize - (width % tabSize); break;
default: symbolWidth = 1;
}
if (width + symbolWidth + FormatConstants.RESERVED_LINE_WRAP_WIDTH_IN_COLUMNS >= myRightMargin
&& (Math.min(endLineOffset, targetRangeEndOffset) - i) >= FormatConstants.RESERVED_LINE_WRAP_WIDTH_IN_COLUMNS)
if (width + symbolWidth + reservedWidthInColumns >= myRightMargin
&& (Math.min(endLineOffset, targetRangeEndOffset) - i) >= reservedWidthInColumns)
{
// Remember preferred position.
result = i - 1;
@@ -695,7 +700,8 @@ public class CodeFormatterFacade {
int spaceSize,
int startLineOffset,
int endLineOffset,
int targetRangeEndOffset)
int targetRangeEndOffset,
int reservedWidthInColumns)
{
int width = 0;
int x = 0;
@@ -716,8 +722,8 @@ public class CodeFormatterFacade {
break;
default: newX = x + EditorUtil.charWidth(c, Font.PLAIN, editor); symbolWidth = 1;
}
if (width + symbolWidth + FormatConstants.RESERVED_LINE_WRAP_WIDTH_IN_COLUMNS >= myRightMargin
&& (Math.min(endLineOffset, targetRangeEndOffset) - i) >= FormatConstants.RESERVED_LINE_WRAP_WIDTH_IN_COLUMNS)
if (width + symbolWidth + reservedWidthInColumns >= myRightMargin
&& (Math.min(endLineOffset, targetRangeEndOffset) - i) >= reservedWidthInColumns)
{
result = i - 1;
}