Skip to content

Commit 829e527

Browse files
committed
Support While statement
1 parent c082aaa commit 829e527

File tree

8 files changed

+75
-2
lines changed

8 files changed

+75
-2
lines changed

domain/vbscript.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ const (
99
VBScriptNextPattern = `(?i)^(\s*?)(\t*?)(Next)($|(\s+?)(\t+?))`
1010
VBScriptDoPattern = `(?i)^(\s*?)(\t*?)(Do)($|(\s+?)|(\t+?)| While | Until )`
1111
VBScriptLoopPattern = `(?i)^(\s*?)(\t*?)(Loop)($|(\s+?)|(\t+?)| While | Until )`
12+
VBScriptWhilePattern = `(?i)^(\s*?)(\t*?)(While )`
13+
VBScriptWhileEndPattern = `(?i)^(\s*?)(\t*?)(End While|Wend)`
1214
VBScriptFunctionPattern = `(?i)^(\s*?)(\t*?)(Private |Public (Default )?)?(Function|Sub)`
1315
VBScriptEndFunctionPattern = `(?i)^(\s*?)(\t*?)(End (Function|Sub))`
1416
)

internal/process_control.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,12 @@ func isBeginNestStatement(str string) bool {
7575
fmt.Printf("err: %v", err)
7676
}
7777

78-
return isIf || isFor || isDo
78+
isWhile, err := regexp.MatchString(domain.VBScriptWhilePattern, str)
79+
if err != nil {
80+
fmt.Printf("err: %v", err)
81+
}
82+
83+
return isIf || isFor || isDo || isWhile
7984
}
8085

8186
func isEndNestStatement(str string) bool {
@@ -94,7 +99,12 @@ func isEndNestStatement(str string) bool {
9499
fmt.Printf("err: %v", err)
95100
}
96101

97-
return isEndIf || isNext || isLoop
102+
isWhileEnd, err := regexp.MatchString(domain.VBScriptWhileEndPattern, str)
103+
if err != nil {
104+
fmt.Printf("err: %v", err)
105+
}
106+
107+
return isEndIf || isNext || isLoop || isWhileEnd
98108
}
99109

100110
func isIncrementStatement(str string) bool {

test/testdata/while/while.vbs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
While i <= 10 ' +1
2+
i += 1
3+
End While
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
While i <= 10 ' +1
2+
i += 1
3+
End While
4+
5+
While i <= 10 ' +1
6+
i += 1
7+
End While

test/testdata/while/while_nest.vbs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
While i <= 10 ' +1
2+
While j <= 10 ' +2
3+
j += 1
4+
End While
5+
i += 1
6+
End While
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
While i <= 10 ' +1
2+
While j <= 10 ' +2
3+
While k <= 10 ' +3
4+
k += 1
5+
End While
6+
j += 1
7+
End While
8+
i += 1
9+
End While

test/testdata/while/while_wend.vbs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
While i <= 10 ' +1
2+
i += 1
3+
Wend
4+
5+
While i <= 10 ' +1
6+
i += 1
7+
End While

test/while_statements_test.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package test_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/st-tech/refactoring-conductor/domain"
7+
"github.com/st-tech/refactoring-conductor/internal"
8+
)
9+
10+
func TestWhileStatements(t *testing.T) {
11+
tests := []struct {
12+
filename string
13+
expectedValue int
14+
}{
15+
{"testdata/while/while.vbs", 1},
16+
{"testdata/while/while_nest.vbs", 3},
17+
{"testdata/while/while_triple_nest.vbs", 6},
18+
{"testdata/while/while_multi.vbs", 2},
19+
{"testdata/while/while_wend.vbs", 2},
20+
}
21+
for _, test := range tests {
22+
vbscript := domain.VBScript{}
23+
internal.Read(test.filename, &vbscript)
24+
25+
if test.expectedValue != vbscript.CognitiveComplexity {
26+
t.Errorf("wrong cognitive complexity output: got %v, expected %v (%s)", vbscript.CognitiveComplexity, test.expectedValue, test.filename)
27+
}
28+
}
29+
}

0 commit comments

Comments
 (0)