@@ -809,7 +809,6 @@ public final class SegmentsManager {
809809 suggestSelectionIndex = nil
810810 }
811811
812- // swiftlint:disable:next cyclomatic_complexity
813812 public func requestPredictionCandidates( ) -> [ PredictionCandidate ] {
814813 guard Config . DebugPredictiveTyping ( ) . value else {
815814 return [ ]
@@ -820,16 +819,6 @@ public final class SegmentsManager {
820819 return [ ]
821820 }
822821
823- var matchTarget = target
824- if let last = matchTarget. last,
825- last. unicodeScalars. allSatisfy ( { $0. isASCII && CharacterSet . letters. contains ( $0) } ) {
826- matchTarget. removeLast ( )
827- }
828- guard matchTarget. count >= 2 else {
829- return [ ]
830- }
831- matchTarget = matchTarget. toHiragana ( )
832-
833822 if let backspaceAdjustedPredictionCandidate {
834823 return [ backspaceAdjustedPredictionCandidate]
835824 }
@@ -843,23 +832,51 @@ public final class SegmentsManager {
843832 guard !reading. isEmpty else {
844833 continue
845834 }
846- let readingHiragana = reading. toHiragana ( )
847- guard readingHiragana. hasPrefix ( matchTarget) else {
848- continue
849- }
850- guard matchTarget. count < readingHiragana. count else {
851- continue
852- }
853- let appendText = String ( readingHiragana. dropFirst ( matchTarget. count) )
854- guard !appendText. isEmpty else {
855- continue
835+ if let predictionCandidate = Self . makePredictionCandidate (
836+ currentTarget: target,
837+ candidateReading: reading,
838+ displayText: candidate. text
839+ ) {
840+ return [ predictionCandidate]
856841 }
857- return [ . init( displayText: candidate. text, appendText: appendText) ]
858842 }
859843
860844 return [ ]
861845 }
862846
847+ static func makePredictionCandidate(
848+ currentTarget: String ,
849+ candidateReading: String ,
850+ displayText: String
851+ ) -> PredictionCandidate ? {
852+ var matchTarget = currentTarget
853+ var deleteCount = 0
854+ if let last = matchTarget. last,
855+ last. unicodeScalars. allSatisfy ( { $0. isASCII && CharacterSet . letters. contains ( $0) } ) {
856+ matchTarget. removeLast ( )
857+ deleteCount = 1
858+ }
859+ guard matchTarget. count >= 2 else {
860+ return nil
861+ }
862+
863+ let readingHiragana = candidateReading. toHiragana ( )
864+ let matchTargetHiragana = matchTarget. toHiragana ( )
865+ guard readingHiragana. hasPrefix ( matchTargetHiragana) else {
866+ return nil
867+ }
868+ guard matchTargetHiragana. count < readingHiragana. count else {
869+ return nil
870+ }
871+
872+ let appendText = String ( readingHiragana. dropFirst ( matchTargetHiragana. count) )
873+ guard !appendText. isEmpty else {
874+ return nil
875+ }
876+
877+ return . init( displayText: displayText, appendText: appendText, deleteCount: deleteCount)
878+ }
879+
863880 private func requestTypoCorrectionCandidates( composingText targetComposingText: ComposingText , inputStyle: InputStyle ) -> [ String ] {
864881 guard Config . DebugTypoCorrection ( ) . value && self . hasDebugTypoCorrectionWeights ( ) else {
865882 return [ ]
0 commit comments