<checkinHandlerFactory implementation="com.intellij.openapi.vcs.checkin.CodeCleanupCheckinHandlerFactory" id="codeCleanup"/>
<completion.preselectionBehaviourProvider implementation="com.intellij.openapi.vcs.CommitCompletionPreselectionBehaviourProvider"/>
- <completion.contributor language="TEXT" implementationClass="com.intellij.openapi.vcs.CommitCompletionContributor" id="commitCompletion"
+ <completion.contributor language="TEXT" implementationClass="com.intellij.openapi.vcs.RecentMessagesCommitCompletionContributor" id="commitCompletion"
order="first, before liveTemplates"/>
+ <completion.contributor language="TEXT" implementationClass="com.intellij.openapi.vcs.ChangedFilesCommitCompletionContributor"
+ order="first, before liveTemplates, after commitCompletion"/>
<completion.contributor language="TEXT" implementationClass="com.intellij.openapi.vcs.changes.ChangeListCompletionContributor"
order="first"/>
/**
* @author Dmitry Avdeev
*/
-public class CommitCompletionContributor extends CompletionContributor {
+public class ChangedFilesCommitCompletionContributor extends CompletionContributor {
@Override
public void fillCompletionVariants(@NotNull CompletionParameters parameters, @NotNull CompletionResultSet result) {
result.stopHere();
int count = parameters.getInvocationCount();
+ List<ChangeList> lists = commitMessage.getChangeLists();
+ if (lists.isEmpty()) return;
+
String prefix = TextFieldWithAutoCompletionListProvider.getCompletionPrefix(parameters);
if (count == 0 && prefix.length() < 5) {
result.restartCompletionOnPrefixChange(StandardPatterns.string().withLength(5));
CompletionResultSet resultSet = result.caseInsensitive().withPrefixMatcher(
count == 0 ? new PlainPrefixMatcher(prefix, true) : new CamelHumpMatcher(prefix));
CompletionResultSet prefixed = result.withPrefixMatcher(new PlainPrefixMatcher(prefix, count == 0));
- for (ChangeList list : commitMessage.getChangeLists()) {
+ for (ChangeList list : lists) {
ProgressManager.checkCanceled();
for (Change change : list.getChanges()) {
ProgressManager.checkCanceled();
}
}
}
-
- if (count > 0) {
- result.caseInsensitive()
- .withPrefixMatcher(new PlainPrefixMatcher(prefix))
- .addAllElements(
- StreamEx.of(VcsConfiguration.getInstance(project).getRecentMessages())
- .reverseSorted()
- .map(lookupString -> PrioritizedLookupElement.withPriority(LookupElementBuilder.create(lookupString), Integer.MIN_VALUE)));
- }
}
private static void addFilePathName(CompletionResultSet resultSet, FilePath filePath, boolean strikeout) {
--- /dev/null
+package com.intellij.openapi.vcs
+
+import com.intellij.codeInsight.completion.*
+import com.intellij.codeInsight.lookup.LookupElementBuilder
+import com.intellij.openapi.vcs.ui.CommitMessage
+import com.intellij.psi.PsiDocumentManager
+import com.intellij.ui.TextFieldWithAutoCompletionListProvider
+import one.util.streamex.StreamEx
+
+class RecentMessagesCommitCompletionContributor : CompletionContributor() {
+ override fun fillCompletionVariants(parameters: CompletionParameters, result: CompletionResultSet) {
+ val file = parameters.originalFile
+ val project = file.project
+ val document = PsiDocumentManager.getInstance(project).getDocument(file) ?: return
+ if (document.getUserData(CommitMessage.DATA_KEY) == null) return
+ if (parameters.invocationCount == 0) return
+
+ result.caseInsensitive()
+ .withPrefixMatcher(PlainPrefixMatcher(TextFieldWithAutoCompletionListProvider.getCompletionPrefix(parameters)))
+ .addAllElements(
+ StreamEx.of(VcsConfiguration.getInstance(project).recentMessages)
+ .reverseSorted()
+ .map { lookupString: String ->
+ PrioritizedLookupElement.withPriority(LookupElementBuilder.create(lookupString), Int.MIN_VALUE.toDouble())
+ })
+ }
+}
\ No newline at end of file