Skip to content

Commit 257df80

Browse files
committed
+ Event declaration
1 parent 1133003 commit 257df80

File tree

5 files changed

+58
-18
lines changed

5 files changed

+58
-18
lines changed

Tests/ACLibDeclarationDict/DeclarationDictTestCodemodule.cls

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,30 +18,46 @@ Private m_AccUnitInfo As String
1818
Private Enum TestEnum
1919
TestEnum_P1 = 2
2020
End Enum
21-
Private Type TypTest1
21+
Private Type TestType1
2222
FldA As Long
2323
FldB As String
24+
FldC As Boolean
2425
End Type
2526

2627
Private Enum TestEnum2
2728
TestEnum2_P1 = 2
2829
TestEnum2_P2 = 3
2930
End Enum
3031

31-
Private Type TypTest2
32+
Private Type TestType2
3233
Fld2A As Long
3334
Fld2B As String
35+
FldC As Date
3436
End Type
3537

38+
Public Event RaiseSomething(ByVal EventParam1 As Variant)
39+
3640
Private Sub Class_Initialize()
3741
'
3842
End Sub
3943

4044
Public Function AccUnitTestFunct(ByVal FuncParam1 As Variant, FuncParam2() As String) As Variant
4145

42-
Dim FuncVar1 As Variant
43-
Dim FuncVar2
44-
46+
Dim FuncVar1 As Variant, FuncVar2
4547
Dim FuncVar3()
48+
49+
Dim FuncVar4 As Long: FuncVar4 = 5
4650

4751
End Function
52+
53+
' Declaration of a property procedure in one line:
54+
Friend Property Get Name1() As String: Name1 = "TestName": End Property
55+
56+
Friend Property Let Name2(ByVal NewValue As String)
57+
'
58+
End Property
59+
60+
Friend Property Set Formatter(ByVal ObjRef As Object)
61+
'
62+
End Property
63+

Tests/ACLibDeclarationDict/DeclarationDictTests.cls

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ End Sub
4545
'AccUnit:Row("Private Function Func1(a(), b) As String()", "Func1|a|b")
4646
'AccUnit:Row("Private Function Func1(a(), b()) As String()", "Func1|a|b")
4747
'AccUnit:Row("Dim Abc() As String, b(), C As Long", "Abc|b|C")
48+
'AccUnit:Row("Function Abc(ByVal X as Long) as Long: Abc = X*X: End Function", "Abc|X")
4849
Public Sub ImportCode_InsertCodeLine_CheckKeysExists(ByVal Code As String, ByVal Expected As String)
4950

5051
Dim Actual As String
@@ -120,18 +121,28 @@ Public Sub ImportCodeModule_CheckKeys()
120121
Dim ExpectedKeys() As Variant
121122
ExpectedKeys = Array("AccUnitX", "m_AccUnitInfo", _
122123
"TestEnum", "TestEnum_P1", _
123-
"TypTest1", "FldA", "FldB", _
124+
"TestType1", "FldA", "FldB", "FldC", _
124125
"TestEnum2", "TestEnum2_P1", "TestEnum2_P2", _
125-
"TypTest2", "Fld2A", "Fld2B", _
126+
"TestType2", "Fld2A", "Fld2B", _
127+
"RaiseSomething", "EventParam1", _
126128
"Class_Initialize", _
127-
"AccUnitTestFunct", "FuncParam1", "FuncParam2", "FuncVar1", "FuncVar2", "FuncVar3")
128-
129+
"AccUnitTestFunct", "FuncParam1", "FuncParam2", "FuncVar1", "FuncVar2", "FuncVar3", "FuncVar4", _
130+
"Name1", "Name2", "NewValue", _
131+
"Formatter", "ObjRef")
132+
133+
'
129134
m_DeclDict.ImportVBComponent CurrentVbProject.VBComponents("DeclarationDictTestCodemodule")
130135

131136
Set ActualDict = m_DeclDict.Dict
132137

138+
' Dim k As Long
139+
' For k = 0 To m_DeclDict.Count - 1
140+
' Debug.Print m_DeclDict.Dict.Keys(k)
141+
' Next
142+
133143
Assert.That ActualDict.Count, Iz.EqualTo(UBound(ExpectedKeys) + 1), "Count of items"
134144

145+
135146
Dim i As Long
136147
For i = 0 To UBound(ExpectedKeys)
137148
Assert.IsTrue ActualDict.Exists(ExpectedKeys(i)), ExpectedKeys(i) & " not exists"

source/forms/DeclarationDictForm.cls

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Option Compare Database
66
Option Explicit
77

88
Private WithEvents m_DeclarationDict As DeclarationDict
9+
Attribute m_DeclarationDict.VB_VarHelpID = -1
910

1011
Private m_InsertRecordset As DAO.Recordset
1112

source/modules/DeclarationDict.cls

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -143,18 +143,21 @@ Public Sub ImportCode(ByVal Code As String)
143143

144144
Code = PrepareCode(Code, RegEx)
145145

146-
Dim Patterns(2) As String
147146
Const ProcIndex As Long = 0
148-
Const EnumTypeIndex As Long = 1
147+
Const EventIndex As Long = 1
148+
Const EnumTypeIndex As Long = 2
149149

150-
Patterns(ProcIndex) = "(?:\r|\n|^)\s*(?:Sub|Function|Property Get|Property Let)\s+(.*)\s*"
150+
Dim Patterns(3) As String
151+
152+
Patterns(ProcIndex) = "(?:\r|\n|^)\s*(?:Sub|Function|Property Get|Property Let|Property Set)\s+(.*)\s*"
153+
Patterns(EventIndex) = "(?:\r|\n|^)\s*(?:Event)\s+(.*)\s*"
151154
Patterns(EnumTypeIndex) = "(?:\r|\n|^)\s*(?:Enum|Type)([\s\S]*?)(?:End\s+(?:Enum|Type))"
152-
Patterns(2) = "(?:\r|\n|^)\s*(?:Dim|Private|Friend|Public|Const)\s+(.*)"
155+
Patterns(3) = "(?:\r|\n|^)\s*(?:Dim|Private|Friend|Public|Const)\s+(.*)"
153156

154157
Dim i As Long
155158
For i = 0 To UBound(Patterns)
156159
RegEx.Pattern = Patterns(i)
157-
AddFromCode Code, RegEx, i = ProcIndex, i = EnumTypeIndex
160+
AddFromCode Code, RegEx, i = ProcIndex Or i = EventIndex, i = EnumTypeIndex
158161
Next
159162

160163
End Sub
@@ -177,12 +180,19 @@ Private Function PrepareCode(ByVal Code As String, ByVal RegEx As RegExp) As Str
177180

178181
With RegEx
179182

183+
' clear all strings
180184
.Pattern = """[^""\r\n]*"""
181185
Code = .Replace(Code, "")
182186

187+
' remove comments
183188
.Pattern = "'(.*)[\r\n]"
184189
Code = .Replace(Code, "")
185190

191+
' dim a as String: a = 5 => insert line break
192+
.Pattern = "(\:\s)"
193+
Code = .Replace(Code, vbNewLine)
194+
195+
' API declaration => rename to normal procedure declaration
186196
.Pattern = "(?:Declare PtrSafe)\s(Function|Sub)\s"
187197
Code = .Replace(Code, "Declare $1 ")
188198

@@ -192,7 +202,8 @@ Private Function PrepareCode(ByVal Code As String, ByVal RegEx As RegExp) As Str
192202
.Pattern = "(?:Declare)\s(Function|Sub)\s(.*)Lib\s*[(]"
193203
Code = .Replace(Code, "$1 $2(")
194204

195-
.Pattern = "(?:Public|Private|Friend)\s(Function|Sub|Property|Enum|Type|Const)\s"
205+
' remove Public, Private, Friend before Function, Sub, Property, ..
206+
.Pattern = "(?:Public|Private|Friend)\s(Function|Sub|Property|Event|Enum|Type|Const)\s"
196207
Code = .Replace(Code, "$1 ")
197208

198209
End With
@@ -207,6 +218,7 @@ Private Sub AddFromCode(ByVal Code As String, ByVal RegEx As RegExp, ByVal IsPro
207218
Dim i As Long
208219

209220
For Each Match In RegEx.Execute(Code)
221+
If IsProcedure Then Debug.Print Match.Value
210222
For i = 0 To Match.SubMatches.Count - 1
211223
AddWordFromDeclaration Match.SubMatches(i), IsProcedure, IsEnumTypeBlock
212224
Next
@@ -226,7 +238,6 @@ Private Sub AddWordFromDeclaration(ByRef Declarations As String, ByVal IsProcedu
226238
If IsEnumTypeBlock Then
227239
Declarations = Replace(Declarations, vbCr, ",")
228240
Declarations = Replace(Declarations, vbLf, vbNullString)
229-
Debug.Print Declarations
230241
Else
231242
Declarations = Replace(Declarations, vbCr, vbNullString)
232243
Declarations = Replace(Declarations, vbLf, vbNullString)
@@ -235,6 +246,7 @@ Private Sub AddWordFromDeclaration(ByRef Declarations As String, ByVal IsProcedu
235246
Declarations = Trim(Declarations)
236247

237248
If IsProcedure Then
249+
' Debug.Print Declarations
238250
Declarations = Replace(Declarations, "()", vbNullString)
239251
Declarations = Replace(Declarations, "Optional ", vbNullString)
240252
Declarations = Replace(Declarations, "ByRef ", vbNullString)
@@ -246,7 +258,7 @@ Private Sub AddWordFromDeclaration(ByRef Declarations As String, ByVal IsProcedu
246258
End If
247259
Declarations = Replace(Declarations, ")", vbNullString)
248260
ElseIf IsEnumTypeBlock Then
249-
Debug.Print Declarations
261+
' Debug.Print Declarations
250262
End If
251263

252264
Do While InStr(1, Declarations, " ") > 0

source/modules/_config_Application.bas

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ Option Explicit
1818
Option Private Module
1919

2020
'Version number
21-
Private Const APPLICATION_VERSION As String = "0.2.0.250304"
21+
Private Const APPLICATION_VERSION As String = "0.2.1.250304"
2222

2323
Private Const APPLICATION_NAME As String = "ACLib Declaration Dictionary"
2424
Private Const APPLICATION_FULLNAME As String = "Access-CodeLib - Declaration Dictionary"

0 commit comments

Comments
 (0)