11// Copyright 2017 Sourcerer Inc. All Rights Reserved.
22// Author: Anatoly Kislov ([email protected] )3+ // Author: Liubov Yaronskaya ([email protected] )34
45package app.hashers
56
67import app.FactCodes
78import app.Logger
89import app.api.Api
10+ import app.extractors.Extractor
911import app.model.Author
1012import app.model.Commit
1113import app.model.Fact
@@ -30,6 +32,7 @@ class FactHasher(private val serverRepo: Repo = Repo(),
3032 private val fsLineLenAvg = hashMapOf<String , Double >()
3133 private val fsLineNum = hashMapOf<String , Long >()
3234 private val fsLinesPerCommits = hashMapOf<String , Array <Int >>()
35+ private val fsVariableNaming = hashMapOf<String , Array <Int >>()
3336
3437 init {
3538 for (author in emails) {
@@ -43,6 +46,7 @@ class FactHasher(private val serverRepo: Repo = Repo(),
4346 fsLineNum.put(author, 0 )
4447 // TODO(anatoly): Do the bin computations on the go.
4548 fsLinesPerCommits.put(author, Array (rehashes.size) {0 })
49+ fsVariableNaming.put(author, Array (3 ) { 0 })
4650 }
4751 }
4852
@@ -102,6 +106,21 @@ class FactHasher(private val serverRepo: Repo = Repo(),
102106 fsLineNum[email] = fsLineNum[email]!! + lines.size
103107
104108 fsLinesPerCommits[email]!! [numCommits - 1 ] + = lines.size
109+
110+ lines.forEach { line ->
111+ val tokens = Extractor ().tokenize(line)
112+ val underscores = tokens.count { it.contains(' _' ) }
113+ val camelCases = tokens.count {
114+ ! it.contains(' _' ) && it.contains(Regex (" [a-z][A-Z]" ))
115+ }
116+ val others = tokens.size - underscores - camelCases
117+ fsVariableNaming[email]!! [FactCodes .VARIABLE_NAMING_SNAKE_CASE ] + =
118+ underscores
119+ fsVariableNaming[email]!! [FactCodes .VARIABLE_NAMING_CAMEL_CASE ] + =
120+ camelCases
121+ fsVariableNaming[email]!! [FactCodes .VARIABLE_NAMING_OTHER ] + =
122+ others
123+ }
105124 }
106125
107126 private fun createFacts (): List <Fact > {
@@ -116,6 +135,11 @@ class FactHasher(private val serverRepo: Repo = Repo(),
116135 fs.add(Fact (serverRepo, FactCodes .COMMIT_DAY_WEEK , day,
117136 count.toString(), author))
118137 }}
138+ fsVariableNaming[email]?.forEachIndexed { naming, count -> if (count > 0 ) {
139+ fs.add(Fact (serverRepo, FactCodes .VARIABLE_NAMING , naming,
140+ count.toString(), author))
141+ }}
142+
119143 fs.add(Fact (serverRepo, FactCodes .REPO_DATE_START , 0 ,
120144 fsRepoDateStart[email].toString(), author))
121145 fs.add(Fact (serverRepo, FactCodes .REPO_DATE_END , 0 ,
0 commit comments