From 59c39f06fa4d80b4f03f3fd7ad0157490b3e0e12 Mon Sep 17 00:00:00 2001 From: Julia Beliaeva Date: Fri, 9 Feb 2018 17:48:32 +0300 Subject: [PATCH] [vcs-log] try to cut at the end of the word If cut after a punctuation mark, skip adding ellipsis. --- .../log/ui/frame/CommitPresentationUtil.java | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/CommitPresentationUtil.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/CommitPresentationUtil.java index d5d155de6cb7..1284ec018444 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/CommitPresentationUtil.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/CommitPresentationUtil.java @@ -30,6 +30,7 @@ import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; +import static com.intellij.diff.comparison.TrimUtil.isPunctuation; import static com.intellij.openapi.vcs.changes.issueLinks.IssueLinkHtmlRenderer.formatTextWithLinks; import static com.intellij.openapi.vcs.ui.FontUtil.getCommitMessageFont; import static com.intellij.util.containers.ContainerUtil.getFirstItem; @@ -40,6 +41,7 @@ public class CommitPresentationUtil { @NotNull static final String GO_TO_HASH = "go-to-hash:"; @NotNull static final String SHOW_HIDE_BRANCHES = "show-hide-branches"; private static final String ELLIPSIS = "..."; + private static final int BIG_CUT_SIZE = 10; @NotNull private static String escapeMultipleSpaces(@NotNull String text) { @@ -117,9 +119,24 @@ public class CommitPresentationUtil { if (isSubjectMarginEnabled(project)) { int margin = CommitMessageInspectionProfile.getSubjectRightMargin(project); if (subject.length() > margin) { - String tail = subject.substring(margin - ELLIPSIS.length()); - subject = subject.substring(0, margin - ELLIPSIS.length()) + ELLIPSIS; - description = "\n\n" + ELLIPSIS + tail + description; + int placeToCut = margin - ELLIPSIS.length(); + for (int i = placeToCut; i >= Math.max(margin - BIG_CUT_SIZE, BIG_CUT_SIZE); i--) { + if (subject.charAt(i) == ' ') { + placeToCut = i; + break; + } + } + + String tail = subject.substring(placeToCut); + subject = subject.substring(0, placeToCut); + if (isPunctuation(subject.charAt(placeToCut - 1))) { + tail = StringUtil.trimStart(tail, " "); + } + else { + subject += ELLIPSIS; + tail = ELLIPSIS + tail; + } + description = "\n\n" + tail + description; } }