Fix message completion trigger to work anywhere in the message (#3696)

* Fix message completion trigger to work anywhere in the message

* Add tests for display suggestion in difference message positions

* Fix suggestion trigger could support multiple mention symbol

* Remove optional parameter type and tweak argument name to hide

* Optimize the suggestions trigger using regex

* Fix the cursor at wrong position after selected suggestion

* Modify the rawSuggestionText pass data in right way

* Modify mention symbol to use regex type

* Update ElementX/Sources/Screens/RoomScreen/ComposerToolbar/CompletionSuggestionService.swift

Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>

* Update generated mock

---------

Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>
This commit is contained in:
Vickcoo
2025-02-13 23:13:09 +08:00
committed by GitHub
parent 8ee1427809
commit 4b43d901f8
14 changed files with 151 additions and 59 deletions
@@ -5130,15 +5130,15 @@ class CompletionSuggestionServiceMock: CompletionSuggestionServiceProtocol, @unc
//MARK: - processTextMessage
var processTextMessageUnderlyingCallsCount = 0
var processTextMessageCallsCount: Int {
var processTextMessageSelectedRangeUnderlyingCallsCount = 0
var processTextMessageSelectedRangeCallsCount: Int {
get {
if Thread.isMainThread {
return processTextMessageUnderlyingCallsCount
return processTextMessageSelectedRangeUnderlyingCallsCount
} else {
var returnValue: Int? = nil
DispatchQueue.main.sync {
returnValue = processTextMessageUnderlyingCallsCount
returnValue = processTextMessageSelectedRangeUnderlyingCallsCount
}
return returnValue!
@@ -5146,28 +5146,28 @@ class CompletionSuggestionServiceMock: CompletionSuggestionServiceProtocol, @unc
}
set {
if Thread.isMainThread {
processTextMessageUnderlyingCallsCount = newValue
processTextMessageSelectedRangeUnderlyingCallsCount = newValue
} else {
DispatchQueue.main.sync {
processTextMessageUnderlyingCallsCount = newValue
processTextMessageSelectedRangeUnderlyingCallsCount = newValue
}
}
}
}
var processTextMessageCalled: Bool {
return processTextMessageCallsCount > 0
var processTextMessageSelectedRangeCalled: Bool {
return processTextMessageSelectedRangeCallsCount > 0
}
var processTextMessageReceivedTextMessage: String?
var processTextMessageReceivedInvocations: [String?] = []
var processTextMessageClosure: ((String?) -> Void)?
var processTextMessageSelectedRangeReceivedArguments: (textMessage: String, selectedRange: NSRange)?
var processTextMessageSelectedRangeReceivedInvocations: [(textMessage: String, selectedRange: NSRange)] = []
var processTextMessageSelectedRangeClosure: ((String, NSRange) -> Void)?
func processTextMessage(_ textMessage: String?) {
processTextMessageCallsCount += 1
processTextMessageReceivedTextMessage = textMessage
func processTextMessage(_ textMessage: String, selectedRange: NSRange) {
processTextMessageSelectedRangeCallsCount += 1
processTextMessageSelectedRangeReceivedArguments = (textMessage: textMessage, selectedRange: selectedRange)
DispatchQueue.main.async {
self.processTextMessageReceivedInvocations.append(textMessage)
self.processTextMessageSelectedRangeReceivedInvocations.append((textMessage: textMessage, selectedRange: selectedRange))
}
processTextMessageClosure?(textMessage)
processTextMessageSelectedRangeClosure?(textMessage, selectedRange)
}
//MARK: - setSuggestionTrigger