Add factors about usage of mnemonics in completion
authorVitaliy.Bibaev <vitaliy.bibaev@jetbrains.com>
Tue, 5 Dec 2017 14:08:03 +0000 (17:08 +0300)
committerVitaliy.Bibaev <vitaliy.bibaev@jetbrains.com>
Tue, 5 Dec 2017 14:08:03 +0000 (17:08 +0300)
plugins/stats-collector/src/com/intellij/stats/completion/LookupCompletedTracker.kt
plugins/stats-collector/src/com/intellij/stats/personalization/UserFactorDescriptions.kt
plugins/stats-collector/src/com/intellij/stats/personalization/impl/MnemonicsUsageFactors.kt [new file with mode: 0644]
plugins/stats-collector/src/com/intellij/stats/personalization/impl/UserFactorsManagerImpl.kt

index 3cb1c8162bf551ac45edbeb5c2e7015da50385a7..507f56a2df3074d960000c73d97da35e853dd97b 100644 (file)
@@ -71,6 +71,14 @@ class LookupCompletedTracker : LookupAdapter() {
                 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) {
index 4fd3dce47a98982bb1d5f6dd587b575335ca0dc2..df72c19a152a3923fdb293376743fdc44286f892 100644 (file)
@@ -13,6 +13,7 @@ object UserFactorDescriptions {
     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,
diff --git a/plugins/stats-collector/src/com/intellij/stats/personalization/impl/MnemonicsUsageFactors.kt b/plugins/stats-collector/src/com/intellij/stats/personalization/impl/MnemonicsUsageFactors.kt
new file mode 100644 (file)
index 0000000..2c645a9
--- /dev/null
@@ -0,0 +1,32 @@
+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
index 707c8a2a093a75af5537ae923eb7aa0af5b67ecf..b190b41a98676d2cab6639c67fca02bbbf852f96 100644 (file)
@@ -37,6 +37,8 @@ class UserFactorsManagerImpl : UserFactorsManager, ProjectComponent {
         register(MostFrequentSelectedItemPosition())
 
         register(AverageTimeBetweenTyping())
+
+        register(MnemonicsRatio())
     }
 
     override fun getAllFactors(): List<UserFactor> = userFactors.values.toList()