diff --git a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/AutoHardWrapHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/AutoHardWrapHandler.java index 8639d87c9d79..561561b29f49 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/AutoHardWrapHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/AutoHardWrapHandler.java @@ -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); diff --git a/platform/lang-impl/src/com/intellij/formatting/FormatConstants.java b/platform/lang-impl/src/com/intellij/formatting/FormatConstants.java index 8970fcd9d656..20047f06836a 100644 --- a/platform/lang-impl/src/com/intellij/formatting/FormatConstants.java +++ b/platform/lang-impl/src/com/intellij/formatting/FormatConstants.java @@ -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. *

@@ -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())); + } } diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/CodeFormatterFacade.java b/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/CodeFormatterFacade.java index ad37e57b812c..cf7da43a22c1 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/CodeFormatterFacade.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/CodeFormatterFacade.java @@ -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; }