updater.fireCompletionPerformed(itemPosition)
}
}
+
+ if (prefixLength > 1) {
+ val pattern = lookup.itemPattern(element)
+ val isMmemonicsUsed = !element.lookupString.startsWith(pattern)
+ UserFactorStorage.applyOnBoth(lookup.project, UserFactorDescriptions.MNEMONICS_USAGE) { updater ->
+ updater.fireCompletionFinished(isMmemonicsUsed)
+ }
+ }
}
private fun processTypedSelect(lookup: LookupImpl, element: LookupElement) {
val PREFIX_LENGTH_ON_COMPLETION = Descriptor("prefixLength", ::PrefixLengthUpdater, ::PrefixLengthReader)
val SELECTED_ITEM_POSITION = Descriptor("itemPosition", ::ItemPositionUpdater, ::ItemPositionReader)
val TIME_BETWEEN_TYPING = Descriptor("timeBetweenTyping", ::TimeBetweenTypingUpdater, ::TimeBetweenTypingReader)
+ val MNEMONICS_USAGE = Descriptor("mnemonicsUsage", ::MnemonicsUsageUpdater, ::MnemonicsUsageReader)
class Descriptor<out U : FactorUpdater, out R : FactorReader>(
override val factorId: String,
--- /dev/null
+package com.intellij.stats.personalization.impl
+
+import com.intellij.stats.personalization.*
+
+/**
+ * @author Vitaliy.Bibaev
+ */
+class MnemonicsUsageReader(factor: DailyAggregatedDoubleFactor) : UserFactorReaderBase(factor) {
+ fun mnemonicsUsageRatio(): Double? {
+ val sums = factor.aggregateSum()
+ val total = sums["total"]
+ val used = sums["withMnemonics"]
+ if (total == null || used == null || total < 1.0) return null
+ return used / total
+ }
+}
+
+class MnemonicsUsageUpdater(factor: MutableDoubleFactor) : UserFactorUpdaterBase(factor) {
+ fun fireCompletionFinished(isMnemonicsUsed: Boolean) {
+ factor.updateOnDate(DateUtil.today()) {
+ compute("total", { _, before -> if (before == null) 1.0 else before + 1 })
+ val valueBefore = computeIfAbsent("withMnemonics", { 0.0 })
+ if (isMnemonicsUsed) {
+ set("withMnemonics", valueBefore + 1.0)
+ }
+ }
+ }
+}
+
+class MnemonicsRatio : UserFactorBase<MnemonicsUsageReader>("mnemonicsUsageRatio", UserFactorDescriptions.MNEMONICS_USAGE) {
+ override fun compute(reader: MnemonicsUsageReader): String? = reader.mnemonicsUsageRatio()?.toString()
+}
\ No newline at end of file