Skip to content

Commit 4df4626

Browse files
authored
Merge pull request #22 from deresmos/feature/add_case_statement
Support Select Case statement
2 parents e69ece2 + 08e31a3 commit 4df4626

File tree

8 files changed

+104
-2
lines changed

8 files changed

+104
-2
lines changed

domain/vbscript.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ const (
1111
VBScriptLoopPattern = `(?i)^(\s*?)(\t*?)(Loop)($|(\s+?)|(\t+?)| While | Until )`
1212
VBScriptWhilePattern = `(?i)^(\s*?)(\t*?)(While )`
1313
VBScriptWhileEndPattern = `(?i)^(\s*?)(\t*?)(End While|Wend)`
14+
VBScriptSelectPattern = `(?i)^(\s*?)(\t*?)(Select Case )`
15+
VBScriptEndSelectPattern = `(?i)^(\s*?)(\t*?)(End Select)($|(\s+?)|(\t+?))`
1416
VBScriptFunctionPattern = `(?i)^(\s*?)(\t*?)(Private |Public (Default )?)?(Function|Sub)`
1517
VBScriptEndFunctionPattern = `(?i)^(\s*?)(\t*?)(End (Function|Sub))`
1618
)

internal/process_control.go

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

83-
return isIf || isFor || isDo || isWhile
83+
isSelect, err := regexp.MatchString(domain.VBScriptSelectPattern, str)
84+
if err != nil {
85+
fmt.Printf("err: %v", err)
86+
}
87+
88+
return isIf || isFor || isDo || isWhile || isSelect
8489
}
8590

8691
func isEndNestStatement(str string) bool {
@@ -104,7 +109,12 @@ func isEndNestStatement(str string) bool {
104109
fmt.Printf("err: %v", err)
105110
}
106111

107-
return isEndIf || isNext || isLoop || isWhileEnd
112+
isEndSelect, err := regexp.MatchString(domain.VBScriptEndSelectPattern, str)
113+
if err != nil {
114+
fmt.Printf("err: %v", err)
115+
}
116+
117+
return isEndIf || isNext || isLoop || isWhileEnd || isEndSelect
108118
}
109119

110120
func isIncrementStatement(str string) bool {

test/select_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 TestSelectStatements(t *testing.T) {
11+
tests := []struct {
12+
filename string
13+
expectedValue int
14+
}{
15+
{"testdata/select/select.vbs", 1},
16+
{"testdata/select/select_multi.vbs", 2},
17+
{"testdata/select/select_nest.vbs", 3},
18+
{"testdata/select/select_triple_nest.vbs", 6},
19+
{"testdata/select/select_whitespace.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+
}

test/testdata/select/select.vbs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
Select Case number ' +1
2+
Case 1
3+
i = 1
4+
Case Else
5+
i = 0
6+
End Select
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
Select Case number ' +1
2+
Case 1
3+
i = 1
4+
Case Else
5+
i = 0
6+
End Select
7+
8+
Select Case number ' +1
9+
Case 1
10+
i = 1
11+
Case Else
12+
i = 0
13+
End Select
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
Select Case number ' +1
2+
Case 1
3+
Select Case number ' +2
4+
Case 1
5+
i = 1
6+
Case Else
7+
i = 0
8+
End Select
9+
i = 1
10+
Case Else
11+
i = 0
12+
End Select
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
Select Case number ' +1
2+
Case 1
3+
Select Case number ' +2
4+
Case 1
5+
Select Case number ' +3
6+
Case 1
7+
i = 1
8+
Case Else
9+
i = 0
10+
End Select
11+
Case Else
12+
i = 0
13+
End Select
14+
i = 1
15+
Case Else
16+
i = 0
17+
End Select
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
Select Case number ' +1
2+
Case 1
3+
i = 1
4+
Case Else
5+
i = 0
6+
End Select ' whitespace check
7+
8+
Select Case number ' +1
9+
Case 1
10+
i = 1
11+
Case Else
12+
i = 0
13+
End Select

0 commit comments

Comments
 (0)