Skip to content
This repository was archived by the owner on Nov 12, 2025. It is now read-only.

Commit be07897

Browse files
committed
Work on accuracy for code counter
1 parent aa69161 commit be07897

2 files changed

Lines changed: 74 additions & 1 deletion

File tree

src/main/java/com/searchcode/app/util/SlocCounter.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ public SlocCount countStats(String contents, String languageName) {
162162
if (fileClassifierResult.nestedmultiline || endComments.size() == 0) {
163163
endString = this.checkForMatchMultiOpen(contents.charAt(index), index, endPoint, fileClassifierResult.multi_line, contents);
164164
if (endString != null) {
165+
index += endString.length() - 1;
165166
endComments.add(endString);
166167
currentState = State.S_MULTICOMMENT_CODE;
167168
break;
@@ -192,6 +193,7 @@ public SlocCount countStats(String contents, String languageName) {
192193
if (fileClassifierResult.nestedmultiline || endComments.size() == 0) {
193194
endString = this.checkForMatchMultiOpen(contents.charAt(index), index, endPoint, fileClassifierResult.multi_line, contents);
194195
if (endString != null) {
196+
index += endString.length() - 1;
195197
endComments.add(endString);
196198
currentState = State.S_MULTICOMMENT_CODE;
197199
break;
@@ -220,8 +222,9 @@ public SlocCount countStats(String contents, String languageName) {
220222
if (fileClassifierResult.nestedmultiline || endComments.size() == 0) {
221223
endString = this.checkForMatchMultiOpen(contents.charAt(index), index, endPoint, fileClassifierResult.multi_line, contents);
222224
if (endString != null) {
225+
index += endString.length() - 1;
223226
endComments.add(endString);
224-
currentState = State.S_MULTICOMMENT_CODE;
227+
currentState = State.S_MULTICOMMENT;
225228
break;
226229
}
227230
}

src/test/java/com/searchcode/app/util/SlocCounterTest.java

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,76 @@ public void testBoundsExceptions() {
4848
assertThat(slocCount.complexity).isEqualTo(8);
4949
}
5050

51+
public void testMultiLine() {
52+
String language = "C++";
53+
String contents = "/*\n" +
54+
"*\n" +
55+
"*/";
56+
57+
SlocCounter.SlocCount slocCount = this.slocCounter.countStats(contents, language);
58+
assertThat(slocCount.linesCount).isEqualTo(3);
59+
assertThat(slocCount.codeCount).isEqualTo(0);
60+
assertThat(slocCount.commentCount).isEqualTo(3);
61+
}
62+
63+
public void testRegression() {
64+
String language = "C++";
65+
String contents = "/**/\n" +
66+
"i\n";
67+
68+
SlocCounter.SlocCount slocCount = this.slocCounter.countStats(contents, language);
69+
70+
assertThat(slocCount.linesCount).isEqualTo(2);
71+
assertThat(slocCount.codeCount).isEqualTo(1);
72+
assertThat(slocCount.commentCount).isEqualTo(1);
73+
assertThat(slocCount.blankCount).isEqualTo(1);
74+
}
75+
76+
public void testRakefile() {
77+
String language = "Rakefile";
78+
String contents = "# 10 lines 4 code 2 comments 4 blanks\n" +
79+
"\n" +
80+
"# this is a rakefile\n" +
81+
"\n" +
82+
"task default: %w[test]\n" +
83+
"\n" +
84+
"task :test do # not counted\n" +
85+
" ruby \"test/unittest.rb\"\n" +
86+
"end\n" +
87+
"\n";
88+
89+
SlocCounter.SlocCount slocCount = this.slocCounter.countStats(contents, language);
90+
assertThat(slocCount.linesCount).isEqualTo(10);
91+
assertThat(slocCount.codeCount).isEqualTo(4);
92+
assertThat(slocCount.commentCount).isEqualTo(2);
93+
assertThat(slocCount.blankCount).isEqualTo(4);
94+
}
95+
96+
public void testCPlusPlus() {
97+
String language = "C++";
98+
String contents = "/* 15 lines 7 code 4 comments 4 blanks */\n" +
99+
"\n" +
100+
"#include <iostream>\n" +
101+
"\n" +
102+
"\n" +
103+
"using namespace std;\n" +
104+
"\n" +
105+
"/*\n" +
106+
" * Simple test\n" +
107+
" */\n" +
108+
"int main()\n" +
109+
"{\n" +
110+
" cout<<\"Hello world\"<<endl;\n" +
111+
" return 0;\n" +
112+
"}\n";
113+
114+
SlocCounter.SlocCount slocCount = this.slocCounter.countStats(contents, language);
115+
assertThat(slocCount.linesCount).isEqualTo(15);
116+
assertThat(slocCount.codeCount).isEqualTo(7);
117+
assertThat(slocCount.commentCount).isEqualTo(4);
118+
assertThat(slocCount.blankCount).isEqualTo(4);
119+
}
120+
51121
public void testTokeiTest() {
52122
String language = "Rust";
53123
String contents = "// 39 lines 32 code 2 comments 5 blanks\n" +

0 commit comments

Comments
 (0)