abl-tmlanguage 1.1.3 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +12 -0
  3. package/abl.tmLanguage.json +2736 -216
  4. package/azure-pipelines.yml +3 -2
  5. package/package.json +7 -6
  6. package/spec/analyze-suspend-resume/analyze-suspend-resume.spec.js +10 -10
  7. package/spec/array-extent/issue#5.spec.js +18 -18
  8. package/spec/define-buffer/simple-single-line.spec.js +138 -0
  9. package/spec/define-parameter/simple-single-line.spec.js +100 -100
  10. package/spec/define-stream/simple-single-line.spec.js +32 -31
  11. package/spec/define-variable/extent.spec.js +228 -0
  12. package/spec/define-variable/issue#6.spec.js +256 -198
  13. package/spec/define-variable/issue#9.spec.js +38 -32
  14. package/spec/define-variable/simple-single-line.spec.js +87 -87
  15. package/spec/define-variable/single-line-with-a-comment-at-the-end.spec.js +62 -62
  16. package/spec/define-variable/single-line-with-a-space-and-a-comment-at-the-end.spec.js +56 -56
  17. package/spec/define-variable/tm-issue#2.spec.js +20 -20
  18. package/spec/do/do-blocks.spec.js +89 -0
  19. package/spec/do/issue#3.spec.js +67 -60
  20. package/spec/function-call/vscode-abl-issue#19.spec.js +110 -107
  21. package/spec/global-scoped-define/global-define.spec.js +11 -11
  22. package/spec/global-scoped-define/scoped-define-with-procedure-keyword.spec.js +26 -26
  23. package/spec/include/abl-tmlanguage-issues#5.spec.js +44 -44
  24. package/spec/include/vscode-abl-issue#45.spec.js +14 -14
  25. package/spec/include/vscode-abl-issue#80.spec.js +26 -26
  26. package/spec/method-definition/constructor.spec.js +174 -0
  27. package/spec/method-definition/method.spec.js +185 -0
  28. package/spec/procedure-definition/empty-proc.spec.js +20 -18
  29. package/spec/procedure-definition/vscode-abl-issue#22.spec.js +46 -42
  30. package/spec/procedure-definition/vscode-abl-issue#26.spec.js +23 -16
  31. package/spec/procedure-definition/vscode-abl-issue#62.spec.js +36 -0
  32. package/spec/shared.js +84 -42
  33. package/spec/strings/vscode-abl-issue#11.spec.js +110 -114
  34. package/spec/strings/vscode-abl-issue#28.spec.js +27 -27
  35. package/spec/type-name/argument.spec.js +209 -0
  36. package/spec/type-name/cast.spec.js +165 -0
  37. package/spec/type-name/define-class.spec.js +471 -0
  38. package/spec/type-name/define-enum.spec.js +44 -0
  39. package/spec/type-name/define-interface.spec.js +159 -0
  40. package/spec/type-name/define-property.spec.js +301 -0
  41. package/spec/type-name/define-temp-table.spec.js +434 -0
  42. package/spec/type-name/define-type-spec.js +435 -0
  43. package/spec/type-name/define-variable-property.spec.js +264 -0
  44. package/spec/type-name/define-variable.spec.js +504 -0
  45. package/spec/type-name/get-class.spec.js +91 -0
  46. package/spec/type-name/new.spec.js +126 -0
  47. package/spec/type-name/parameter-as.spec.js +838 -0
  48. package/spec/type-name/type-name-spec.js +587 -0
  49. package/spec/type-name/using.spec.js +115 -0
@@ -0,0 +1,504 @@
1
+ const { assert, expect } = require('chai');
2
+ const shared = require('../shared.js');
3
+
4
+
5
+ describe('', () => {
6
+ let statement = `define variable xxx as foo.bar.baz no-undo.`;
7
+
8
+ let expectedTokens = [
9
+ { "startIndex": 0, "endIndex": 6, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'define'
10
+ { "startIndex": 6, "endIndex": 7, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
11
+ { "startIndex": 7, "endIndex": 15, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'variable'
12
+ { "startIndex": 15, "endIndex": 16, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
13
+ { "startIndex": 16, "endIndex": 19, "scopes": ["source.abl", "meta.define.abl", "variable.other.abl"] }, // 'xxx'
14
+ { "startIndex": 19, "endIndex": 20, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
15
+ { "startIndex": 20, "endIndex": 22, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'as'
16
+ { "startIndex": 22, "endIndex": 23, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
17
+ { "startIndex": 23, "endIndex": 34, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.abl"] }, // 'foo.bar.baz'
18
+ { "startIndex": 34, "endIndex": 35, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
19
+ { "startIndex": 35, "endIndex": 42, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'no-undo'
20
+ { "startIndex": 42, "endIndex": 43, "scopes": ["source.abl", "meta.define.abl", "punctuation.terminator.abl"] } // '.'
21
+
22
+ ];
23
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
24
+ })
25
+
26
+ describe('', () => {
27
+ let statement = `define variable xxx as class foo.bar.baz no-undo.`;
28
+
29
+ let expectedTokens = [{ "startIndex": 0, "endIndex": 6, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'define'
30
+ { "startIndex": 6, "endIndex": 7, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
31
+ { "startIndex": 7, "endIndex": 15, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'variable'
32
+ { "startIndex": 15, "endIndex": 16, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
33
+ { "startIndex": 16, "endIndex": 19, "scopes": ["source.abl", "meta.define.abl", "variable.other.abl"] }, // 'xxx'
34
+ { "startIndex": 19, "endIndex": 20, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
35
+ { "startIndex": 20, "endIndex": 22, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'as'
36
+ { "startIndex": 22, "endIndex": 23, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
37
+ { "startIndex": 23, "endIndex": 28, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'class'
38
+ { "startIndex": 28, "endIndex": 29, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
39
+ { "startIndex": 29, "endIndex": 40, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.abl"] }, // 'foo.bar.baz'
40
+ { "startIndex": 40, "endIndex": 41, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
41
+ { "startIndex": 41, "endIndex": 48, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'no-undo'
42
+ { "startIndex": 48, "endIndex": 49, "scopes": ["source.abl", "meta.define.abl", "punctuation.terminator.abl"] } // '.'
43
+ ];
44
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
45
+ })
46
+
47
+ describe('', () => {
48
+ let statement = `define variable xxx as class foo.bar.baz no-undo extent.`;
49
+
50
+ let expectedTokens = [
51
+ { "startIndex": 0, "endIndex": 6, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'define'
52
+ { "startIndex": 6, "endIndex": 7, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
53
+ { "startIndex": 7, "endIndex": 15, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'variable'
54
+ { "startIndex": 15, "endIndex": 16, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
55
+ { "startIndex": 16, "endIndex": 19, "scopes": ["source.abl", "meta.define.abl", "variable.other.abl"] }, // 'xxx'
56
+ { "startIndex": 19, "endIndex": 20, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
57
+ { "startIndex": 20, "endIndex": 22, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'as'
58
+ { "startIndex": 22, "endIndex": 23, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
59
+ { "startIndex": 23, "endIndex": 28, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'class'
60
+ { "startIndex": 28, "endIndex": 29, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
61
+ { "startIndex": 29, "endIndex": 40, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.abl"] }, // 'foo.bar.baz'
62
+ { "startIndex": 40, "endIndex": 41, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
63
+ { "startIndex": 41, "endIndex": 48, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'no-undo'
64
+ { "startIndex": 48, "endIndex": 49, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
65
+ { "startIndex": 49, "endIndex": 55, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'extent'
66
+ { "startIndex": 55, "endIndex": 56, "scopes": ["source.abl", "meta.define.abl", "punctuation.terminator.abl"] } // '.'
67
+ ];
68
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
69
+ })
70
+
71
+ describe('', () => {
72
+ let statement = `define variable xxx as class foo.bar.baz no-undo extent .`;
73
+
74
+ let expectedTokens = [
75
+ { "startIndex": 0, "endIndex": 6, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'define'
76
+ { "startIndex": 6, "endIndex": 7, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
77
+ { "startIndex": 7, "endIndex": 15, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'variable'
78
+ { "startIndex": 15, "endIndex": 16, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
79
+ { "startIndex": 16, "endIndex": 19, "scopes": ["source.abl", "meta.define.abl", "variable.other.abl"] }, // 'xxx'
80
+ { "startIndex": 19, "endIndex": 20, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
81
+ { "startIndex": 20, "endIndex": 22, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'as'
82
+ { "startIndex": 22, "endIndex": 23, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
83
+ { "startIndex": 23, "endIndex": 28, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'class'
84
+ { "startIndex": 28, "endIndex": 29, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
85
+ { "startIndex": 29, "endIndex": 40, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.abl"] }, // 'foo.bar.baz'
86
+ { "startIndex": 40, "endIndex": 41, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
87
+ { "startIndex": 41, "endIndex": 48, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'no-undo'
88
+ { "startIndex": 48, "endIndex": 49, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
89
+ { "startIndex": 49, "endIndex": 55, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'extent'
90
+ { "startIndex": 55, "endIndex": 56, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
91
+ { "startIndex": 56, "endIndex": 57, "scopes": ["source.abl", "meta.define.abl", "punctuation.terminator.abl"] } // '.'
92
+ ];
93
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
94
+ })
95
+
96
+ describe('', () => {
97
+ let statement = `define variable xxx as class foo.bar.baz extent 14 no-undo.`;
98
+
99
+ let expectedTokens = [
100
+ { "startIndex": 0, "endIndex": 6, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'define'
101
+ { "startIndex": 6, "endIndex": 7, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
102
+ { "startIndex": 7, "endIndex": 15, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'variable'
103
+ { "startIndex": 15, "endIndex": 16, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
104
+ { "startIndex": 16, "endIndex": 19, "scopes": ["source.abl", "meta.define.abl", "variable.other.abl"] }, // 'xxx'
105
+ { "startIndex": 19, "endIndex": 20, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
106
+ { "startIndex": 20, "endIndex": 22, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'as'
107
+ { "startIndex": 22, "endIndex": 23, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
108
+ { "startIndex": 23, "endIndex": 28, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'class'
109
+ { "startIndex": 28, "endIndex": 29, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
110
+ { "startIndex": 29, "endIndex": 40, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.abl"] }, // 'foo.bar.baz'
111
+ { "startIndex": 40, "endIndex": 42, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
112
+ { "startIndex": 42, "endIndex": 48, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'extent'
113
+ { "startIndex": 48, "endIndex": 49, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
114
+ { "startIndex": 49, "endIndex": 51, "scopes": ["source.abl", "meta.define.abl", "constant.numeric.source.abl"] }, // '14'
115
+ { "startIndex": 51, "endIndex": 52, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
116
+ { "startIndex": 52, "endIndex": 59, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'no-undo'
117
+ { "startIndex": 59, "endIndex": 60, "scopes": ["source.abl", "meta.define.abl", "punctuation.terminator.abl"] } // '.'
118
+ ];
119
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
120
+ })
121
+
122
+ describe('', () => {
123
+ let statement = `define static package-protected abstract variable xxx as foo.bar.baz no-undo`;
124
+
125
+ let expectedTokens = [
126
+ { "startIndex": 0, "endIndex": 6, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'define'
127
+ { "startIndex": 6, "endIndex": 7, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
128
+ { "startIndex": 7, "endIndex": 13, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'static'
129
+ { "startIndex": 13, "endIndex": 14, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
130
+ { "startIndex": 14, "endIndex": 31, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'package-protected'
131
+ { "startIndex": 31, "endIndex": 32, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
132
+ { "startIndex": 32, "endIndex": 40, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'abstract'
133
+ { "startIndex": 40, "endIndex": 41, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
134
+ { "startIndex": 41, "endIndex": 49, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'variable'
135
+ { "startIndex": 49, "endIndex": 50, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
136
+ { "startIndex": 50, "endIndex": 53, "scopes": ["source.abl", "meta.define.abl", "variable.other.abl"] }, // 'xxx'
137
+ { "startIndex": 53, "endIndex": 54, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
138
+ { "startIndex": 54, "endIndex": 56, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'as'
139
+ { "startIndex": 56, "endIndex": 58, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
140
+ { "startIndex": 58, "endIndex": 69, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.abl"] }, // 'foo.bar.baz'
141
+ { "startIndex": 69, "endIndex": 71, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
142
+ { "startIndex": 71, "endIndex": 78, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] } // 'no-undo'
143
+ ];
144
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
145
+ })
146
+
147
+
148
+
149
+ describe('', () => {
150
+ let statement = `define static package-protected abstract variable When as datetime-tz initial now no-undo
151
+ . //end on a different line`;
152
+
153
+ let expectedTokens = [
154
+ [
155
+ { "startIndex": 0, "endIndex": 6, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'define'
156
+ { "startIndex": 6, "endIndex": 7, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
157
+ { "startIndex": 7, "endIndex": 13, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'static'
158
+ { "startIndex": 13, "endIndex": 14, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
159
+ { "startIndex": 14, "endIndex": 31, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'package-protected'
160
+ { "startIndex": 31, "endIndex": 32, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
161
+ { "startIndex": 32, "endIndex": 40, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'abstract'
162
+ { "startIndex": 40, "endIndex": 41, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
163
+ { "startIndex": 41, "endIndex": 49, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'variable'
164
+ { "startIndex": 49, "endIndex": 50, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
165
+ { "startIndex": 50, "endIndex": 54, "scopes": ["source.abl", "meta.define.abl", "variable.other.abl"] }, // 'When'
166
+ { "startIndex": 54, "endIndex": 55, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
167
+ { "startIndex": 55, "endIndex": 57, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'as'
168
+ { "startIndex": 57, "endIndex": 58, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
169
+ { "startIndex": 58, "endIndex": 69, "scopes": ["source.abl", "meta.define.abl", "storage.type.abl"] }, // 'datetime-tz'
170
+ { "startIndex": 69, "endIndex": 70, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
171
+ { "startIndex": 70, "endIndex": 77, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'initial'
172
+ { "startIndex": 77, "endIndex": 78, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
173
+ { "startIndex": 78, "endIndex": 81, "scopes": ["source.abl", "meta.define.abl", "constant.language.abl"] }, // 'now'
174
+ { "startIndex": 81, "endIndex": 82, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
175
+ { "startIndex": 82, "endIndex": 89, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] } // 'no-undo'
176
+ ],
177
+ [
178
+ { "startIndex": 0, "endIndex": 2, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
179
+ { "startIndex": 2, "endIndex": 3, "scopes": ["source.abl", "meta.define.abl", "punctuation.terminator.abl"] }, // '.'
180
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
181
+ { "startIndex": 4, "endIndex": 29, "scopes": ["source.abl", "comment.line.double-slash.abl"] } // '//end on a different line'
182
+ ]
183
+ ];
184
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
185
+ })
186
+
187
+ describe('', () => {
188
+ let statement = `define variable ListString as Progress.Collections.List<String> no-undo`;
189
+
190
+ let expectedTokens = [
191
+ { "startIndex": 0, "endIndex": 6, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'define'
192
+ { "startIndex": 6, "endIndex": 7, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
193
+ { "startIndex": 7, "endIndex": 15, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'variable'
194
+ { "startIndex": 15, "endIndex": 16, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
195
+ { "startIndex": 16, "endIndex": 26, "scopes": ["source.abl", "meta.define.abl", "variable.other.abl"] }, // 'ListString'
196
+ { "startIndex": 26, "endIndex": 27, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
197
+ { "startIndex": 27, "endIndex": 29, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'as'
198
+ { "startIndex": 29, "endIndex": 30, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
199
+ { "startIndex": 30, "endIndex": 55, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl", "entity.name.type.abl"] }, // 'Progress.Collections.List'
200
+ { "startIndex": 55, "endIndex": 56, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl"] }, // '<'
201
+ { "startIndex": 56, "endIndex": 62, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl", "entity.name.type.abl"] }, // 'String'
202
+ { "startIndex": 62, "endIndex": 63, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl"] }, // '> '
203
+ { "startIndex": 63, "endIndex": 64, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
204
+ { "startIndex": 64, "endIndex": 71, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] } // 'no-undo'
205
+ ];
206
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
207
+ })
208
+
209
+ describe('', () => {
210
+ let statement = `define variable strList as Progress.Collections.List<String> no-undo.
211
+ define variable strList2 as Progress.Collections.List<String> no-undo.`;
212
+
213
+ let expectedTokens = [
214
+ [
215
+ { "startIndex": 0, "endIndex": 6, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'define'
216
+ { "startIndex": 6, "endIndex": 7, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
217
+ { "startIndex": 7, "endIndex": 15, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'variable'
218
+ { "startIndex": 15, "endIndex": 16, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
219
+ { "startIndex": 16, "endIndex": 23, "scopes": ["source.abl", "meta.define.abl", "variable.other.abl"] }, // 'strList'
220
+ { "startIndex": 23, "endIndex": 24, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
221
+ { "startIndex": 24, "endIndex": 26, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'as'
222
+ { "startIndex": 26, "endIndex": 27, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
223
+ { "startIndex": 27, "endIndex": 52, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl", "entity.name.type.abl"] }, // 'Progress.Collections.List'
224
+ { "startIndex": 52, "endIndex": 53, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl"] }, // '<'
225
+ { "startIndex": 53, "endIndex": 59, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl", "entity.name.type.abl"] }, // 'String'
226
+ { "startIndex": 59, "endIndex": 60, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl"] }, // '>'
227
+ { "startIndex": 60, "endIndex": 61, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
228
+ { "startIndex": 61, "endIndex": 68, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'no-undo'
229
+ { "startIndex": 68, "endIndex": 69, "scopes": ["source.abl", "meta.define.abl", "punctuation.terminator.abl"] } // '.'
230
+ ],
231
+ [
232
+ { "startIndex": 0, "endIndex": 2, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
233
+ { "startIndex": 2, "endIndex": 8, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'define'
234
+ { "startIndex": 8, "endIndex": 9, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
235
+ { "startIndex": 9, "endIndex": 17, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'variable'
236
+ { "startIndex": 17, "endIndex": 18, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
237
+ { "startIndex": 18, "endIndex": 26, "scopes": ["source.abl", "meta.define.abl", "variable.other.abl"] }, // 'strList2'
238
+ { "startIndex": 26, "endIndex": 27, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
239
+ { "startIndex": 27, "endIndex": 29, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'as'
240
+ { "startIndex": 29, "endIndex": 30, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
241
+ { "startIndex": 30, "endIndex": 55, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl", "entity.name.type.abl"] }, // 'Progress.Collections.List'
242
+ { "startIndex": 55, "endIndex": 56, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl"] }, // '<'
243
+ { "startIndex": 56, "endIndex": 62, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl", "entity.name.type.abl"] }, // 'String'
244
+ { "startIndex": 62, "endIndex": 63, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl"] }, // '> '
245
+ { "startIndex": 63, "endIndex": 64, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
246
+ { "startIndex": 64, "endIndex": 71, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'no-undo'
247
+ { "startIndex": 71, "endIndex": 72, "scopes": ["source.abl", "meta.define.abl", "punctuation.terminator.abl"] } // '.'
248
+ ]
249
+ ];
250
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
251
+ })
252
+
253
+ describe('', () => {
254
+ let statement = `define variable strList as class Progress.Collections.List<String> no-undo.
255
+ define variable strList2 as class Progress.Collections.List<String> no-undo.`;
256
+
257
+ let expectedTokens = [
258
+ [
259
+ { "startIndex": 0, "endIndex": 6, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'define'
260
+ { "startIndex": 6, "endIndex": 7, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
261
+ { "startIndex": 7, "endIndex": 15, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'variable'
262
+ { "startIndex": 15, "endIndex": 16, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
263
+ { "startIndex": 16, "endIndex": 23, "scopes": ["source.abl", "meta.define.abl", "variable.other.abl"] }, // 'strList'
264
+ { "startIndex": 23, "endIndex": 24, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
265
+ { "startIndex": 24, "endIndex": 26, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'as'
266
+ { "startIndex": 26, "endIndex": 27, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
267
+ { "startIndex": 27, "endIndex": 32, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'class'
268
+ { "startIndex": 32, "endIndex": 33, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl"] }, // ' '
269
+ { "startIndex": 33, "endIndex": 58, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl", "entity.name.type.abl"] }, // 'Progress.Collections.List'
270
+ { "startIndex": 58, "endIndex": 59, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl"] }, // '<'
271
+ { "startIndex": 59, "endIndex": 65, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl", "entity.name.type.abl"] }, // 'String'
272
+ { "startIndex": 65, "endIndex": 66, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl"] }, // '>'
273
+ { "startIndex": 66, "endIndex": 67, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
274
+ { "startIndex": 67, "endIndex": 74, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'no-undo'
275
+ { "startIndex": 74, "endIndex": 75, "scopes": ["source.abl", "meta.define.abl", "punctuation.terminator.abl"] } // '.'
276
+ ],
277
+ [
278
+ { "startIndex": 0, "endIndex": 2, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
279
+ { "startIndex": 2, "endIndex": 8, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'define'
280
+ { "startIndex": 8, "endIndex": 9, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
281
+ { "startIndex": 9, "endIndex": 17, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'variable'
282
+ { "startIndex": 17, "endIndex": 18, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
283
+ { "startIndex": 18, "endIndex": 26, "scopes": ["source.abl", "meta.define.abl", "variable.other.abl"] }, // 'strList2'
284
+ { "startIndex": 26, "endIndex": 27, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
285
+ { "startIndex": 27, "endIndex": 29, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'as'
286
+ { "startIndex": 29, "endIndex": 30, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
287
+ { "startIndex": 30, "endIndex": 35, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'class'
288
+ { "startIndex": 35, "endIndex": 36, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl"] }, // ' '
289
+ { "startIndex": 36, "endIndex": 61, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl", "entity.name.type.abl"] }, // 'Progress.Collections.List'
290
+ { "startIndex": 61, "endIndex": 62, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl"] }, // '<'
291
+ { "startIndex": 62, "endIndex": 68, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl", "entity.name.type.abl"] }, // 'String'
292
+ { "startIndex": 68, "endIndex": 69, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl"] }, // '>'
293
+ { "startIndex": 69, "endIndex": 70, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
294
+ { "startIndex": 70, "endIndex": 77, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'no-undo'
295
+ { "startIndex": 77, "endIndex": 78, "scopes": ["source.abl", "meta.define.abl", "punctuation.terminator.abl"] } // '.'
296
+ ]
297
+ ];
298
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
299
+ })
300
+
301
+ describe('', () => {
302
+ let statement = `define variable strList as Franwork.List<String> no-undo.
303
+ define variable strList2 as List<String> no-undo.
304
+ define variable cls as Progress.Lang.Class no-undo.`;
305
+
306
+ let expectedTokens = [
307
+ [
308
+ { "startIndex": 0, "endIndex": 6, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'define'
309
+ { "startIndex": 6, "endIndex": 7, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
310
+ { "startIndex": 7, "endIndex": 15, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'variable'
311
+ { "startIndex": 15, "endIndex": 16, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
312
+ { "startIndex": 16, "endIndex": 23, "scopes": ["source.abl", "meta.define.abl", "variable.other.abl"] }, // 'strList'
313
+ { "startIndex": 23, "endIndex": 24, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
314
+ { "startIndex": 24, "endIndex": 26, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'as'
315
+ { "startIndex": 26, "endIndex": 27, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
316
+ { "startIndex": 27, "endIndex": 40, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl", "entity.name.type.abl"] }, // 'Franwork.List'
317
+ { "startIndex": 40, "endIndex": 41, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl"] }, // '<'
318
+ { "startIndex": 41, "endIndex": 47, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl", "entity.name.type.abl"] }, // 'String'
319
+ { "startIndex": 47, "endIndex": 48, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl"] }, // '>'
320
+ { "startIndex": 48, "endIndex": 49, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
321
+ { "startIndex": 49, "endIndex": 56, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'no-undo'
322
+ { "startIndex": 56, "endIndex": 57, "scopes": ["source.abl", "meta.define.abl", "punctuation.terminator.abl"] } // '.'
323
+ ],
324
+ [
325
+ { "startIndex": 0, "endIndex": 2, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
326
+ { "startIndex": 2, "endIndex": 8, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'define'
327
+ { "startIndex": 8, "endIndex": 9, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
328
+ { "startIndex": 9, "endIndex": 17, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'variable'
329
+ { "startIndex": 17, "endIndex": 18, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
330
+ { "startIndex": 18, "endIndex": 26, "scopes": ["source.abl", "meta.define.abl", "variable.other.abl"] }, // 'strList2'
331
+ { "startIndex": 26, "endIndex": 27, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
332
+ { "startIndex": 27, "endIndex": 29, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'as'
333
+ { "startIndex": 29, "endIndex": 30, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
334
+ { "startIndex": 30, "endIndex": 34, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl", "entity.name.type.abl"] }, // 'List'
335
+ { "startIndex": 34, "endIndex": 35, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl"] }, // '<'
336
+ { "startIndex": 35, "endIndex": 41, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl", "entity.name.type.abl"] }, // 'String'
337
+ { "startIndex": 41, "endIndex": 42, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl"] }, // '>'
338
+ { "startIndex": 42, "endIndex": 43, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
339
+ { "startIndex": 43, "endIndex": 50, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'no-undo'
340
+ { "startIndex": 50, "endIndex": 51, "scopes": ["source.abl", "meta.define.abl", "punctuation.terminator.abl"] } // '.'
341
+ ],
342
+ [
343
+ { "startIndex": 0, "endIndex": 2, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
344
+ { "startIndex": 2, "endIndex": 8, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'define'
345
+ { "startIndex": 8, "endIndex": 9, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
346
+ { "startIndex": 9, "endIndex": 17, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'variable'
347
+ { "startIndex": 17, "endIndex": 18, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
348
+ { "startIndex": 18, "endIndex": 21, "scopes": ["source.abl", "meta.define.abl", "variable.other.abl"] }, // 'cls'
349
+ { "startIndex": 21, "endIndex": 22, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
350
+ { "startIndex": 22, "endIndex": 24, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'as'
351
+ { "startIndex": 24, "endIndex": 25, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
352
+ { "startIndex": 25, "endIndex": 44, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.abl"] }, // 'Progress.Lang.Class'
353
+ { "startIndex": 44, "endIndex": 45, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
354
+ { "startIndex": 45, "endIndex": 52, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'no-undo'
355
+ { "startIndex": 52, "endIndex": 53, "scopes": ["source.abl", "meta.define.abl", "punctuation.terminator.abl"] } // '.'
356
+ ]
357
+ ];
358
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
359
+ })
360
+
361
+ describe('', () => {
362
+ let statement = `define variable strList as class Franwork.List<String> no-undo.
363
+ define variable strList2 as class List<String> no-undo.
364
+ define variable cls as class Progress.Lang.Class no-undo.
365
+ `;
366
+
367
+ let expectedTokens = [
368
+ [
369
+ { "startIndex": 0, "endIndex": 6, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'define'
370
+ { "startIndex": 6, "endIndex": 7, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
371
+ { "startIndex": 7, "endIndex": 15, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'variable'
372
+ { "startIndex": 15, "endIndex": 16, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
373
+ { "startIndex": 16, "endIndex": 23, "scopes": ["source.abl", "meta.define.abl", "variable.other.abl"] }, // 'strList'
374
+ { "startIndex": 23, "endIndex": 24, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
375
+ { "startIndex": 24, "endIndex": 26, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'as'
376
+ { "startIndex": 26, "endIndex": 27, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
377
+ { "startIndex": 27, "endIndex": 32, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'class'
378
+ { "startIndex": 32, "endIndex": 33, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl"] }, // ' '
379
+ { "startIndex": 33, "endIndex": 46, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl", "entity.name.type.abl"] }, // 'Franwork.List'
380
+ { "startIndex": 46, "endIndex": 47, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl"] }, // '<'
381
+ { "startIndex": 47, "endIndex": 53, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl", "entity.name.type.abl"] }, // 'String'
382
+ { "startIndex": 53, "endIndex": 54, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl"] }, // '>'
383
+ { "startIndex": 54, "endIndex": 55, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
384
+ { "startIndex": 55, "endIndex": 62, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'no-undo'
385
+ { "startIndex": 62, "endIndex": 63, "scopes": ["source.abl", "meta.define.abl", "punctuation.terminator.abl"] } // '.'
386
+ ],
387
+ [
388
+ { "startIndex": 0, "endIndex": 2, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
389
+ { "startIndex": 2, "endIndex": 8, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'define'
390
+ { "startIndex": 8, "endIndex": 9, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
391
+ { "startIndex": 9, "endIndex": 17, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'variable'
392
+ { "startIndex": 17, "endIndex": 18, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
393
+ { "startIndex": 18, "endIndex": 26, "scopes": ["source.abl", "meta.define.abl", "variable.other.abl"] }, // 'strList2'
394
+ { "startIndex": 26, "endIndex": 27, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
395
+ { "startIndex": 27, "endIndex": 29, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'as'
396
+ { "startIndex": 29, "endIndex": 30, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
397
+ { "startIndex": 30, "endIndex": 35, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'class'
398
+ { "startIndex": 35, "endIndex": 36, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl"] }, // ' '
399
+ { "startIndex": 36, "endIndex": 40, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl", "entity.name.type.abl"] }, // 'List'
400
+ { "startIndex": 40, "endIndex": 41, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl"] }, // '<'
401
+ { "startIndex": 41, "endIndex": 47, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl", "entity.name.type.abl"] }, // 'String'
402
+ { "startIndex": 47, "endIndex": 48, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.generic.abl"] }, // '>'
403
+ { "startIndex": 48, "endIndex": 49, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
404
+ { "startIndex": 49, "endIndex": 56, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'no-undo'
405
+ { "startIndex": 56, "endIndex": 57, "scopes": ["source.abl", "meta.define.abl", "punctuation.terminator.abl"] } // '.'
406
+ ],
407
+ [
408
+ { "startIndex": 0, "endIndex": 2, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
409
+ { "startIndex": 2, "endIndex": 8, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'define'
410
+ { "startIndex": 8, "endIndex": 9, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
411
+ { "startIndex": 9, "endIndex": 17, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'variable'
412
+ { "startIndex": 17, "endIndex": 18, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
413
+ { "startIndex": 18, "endIndex": 21, "scopes": ["source.abl", "meta.define.abl", "variable.other.abl"] }, // 'cls'
414
+ { "startIndex": 21, "endIndex": 22, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
415
+ { "startIndex": 22, "endIndex": 24, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'as'
416
+ { "startIndex": 24, "endIndex": 25, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
417
+ { "startIndex": 25, "endIndex": 30, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'class'
418
+ { "startIndex": 30, "endIndex": 31, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
419
+ { "startIndex": 31, "endIndex": 50, "scopes": ["source.abl", "meta.define.abl", "entity.name.type.abl"] }, // 'Progress.Lang.Class'
420
+ { "startIndex": 50, "endIndex": 51, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
421
+ { "startIndex": 51, "endIndex": 58, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'no-undo'
422
+ { "startIndex": 58, "endIndex": 59, "scopes": ["source.abl", "meta.define.abl", "punctuation.terminator.abl"] } // '.'
423
+ ],
424
+ [
425
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl"] } // ' '
426
+ ]
427
+ ];
428
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
429
+ })
430
+
431
+
432
+ describe('', () => {
433
+ let statement = `define variable dTaxRate as decimal decimals 4 no-undo.`;
434
+
435
+ let expectedTokens = [
436
+ { "startIndex": 0, "endIndex": 6, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'define'
437
+ { "startIndex": 6, "endIndex": 7, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
438
+ { "startIndex": 7, "endIndex": 15, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'variable'
439
+ { "startIndex": 15, "endIndex": 16, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
440
+ { "startIndex": 16, "endIndex": 24, "scopes": ["source.abl", "meta.define.abl", "variable.other.abl"] }, // 'dTaxRate'
441
+ { "startIndex": 24, "endIndex": 25, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
442
+ { "startIndex": 25, "endIndex": 27, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'as'
443
+ { "startIndex": 27, "endIndex": 28, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
444
+ { "startIndex": 28, "endIndex": 35, "scopes": ["source.abl", "meta.define.abl", "storage.type.abl"] }, // 'decimal'
445
+ { "startIndex": 35, "endIndex": 36, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
446
+ { "startIndex": 36, "endIndex": 44, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'decimals'
447
+ { "startIndex": 44, "endIndex": 45, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
448
+ { "startIndex": 45, "endIndex": 46, "scopes": ["source.abl", "meta.define.abl", "constant.numeric.source.abl"] }, // '4'
449
+ { "startIndex": 46, "endIndex": 47, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
450
+ { "startIndex": 47, "endIndex": 54, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'no-undo'
451
+ { "startIndex": 54, "endIndex": 55, "scopes": ["source.abl", "meta.define.abl", "punctuation.terminator.abl"] } // '.'
452
+ ];
453
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
454
+ })
455
+
456
+ describe('', () => {
457
+ let statement = `define variable dTaxRate as decimal decimals 4 . `;
458
+
459
+ let expectedTokens = [
460
+ { "startIndex": 0, "endIndex": 6, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'define'
461
+ { "startIndex": 6, "endIndex": 7, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
462
+ { "startIndex": 7, "endIndex": 15, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'variable'
463
+ { "startIndex": 15, "endIndex": 16, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
464
+ { "startIndex": 16, "endIndex": 24, "scopes": ["source.abl", "meta.define.abl", "variable.other.abl"] }, // 'dTaxRate'
465
+ { "startIndex": 24, "endIndex": 25, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
466
+ { "startIndex": 25, "endIndex": 27, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'as'
467
+ { "startIndex": 27, "endIndex": 28, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
468
+ { "startIndex": 28, "endIndex": 35, "scopes": ["source.abl", "meta.define.abl", "storage.type.abl"] }, // 'decimal'
469
+ { "startIndex": 35, "endIndex": 36, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
470
+ { "startIndex": 36, "endIndex": 44, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'decimals'
471
+ { "startIndex": 44, "endIndex": 45, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
472
+ { "startIndex": 45, "endIndex": 46, "scopes": ["source.abl", "meta.define.abl", "constant.numeric.source.abl"] }, // '4'
473
+ { "startIndex": 46, "endIndex": 48, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
474
+ { "startIndex": 48, "endIndex": 49, "scopes": ["source.abl", "meta.define.abl", "punctuation.terminator.abl"] }, // '.'
475
+ { "startIndex": 49, "endIndex": 51, "scopes": ["source.abl"] } // ' '
476
+ ];
477
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
478
+ })
479
+
480
+ describe('', () => {
481
+ let statement = `define variable dTaxRate as decimal no-undo decimals 4 . `;
482
+
483
+ let expectedTokens = [
484
+ { "startIndex": 0, "endIndex": 6, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'define'
485
+ { "startIndex": 6, "endIndex": 7, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
486
+ { "startIndex": 7, "endIndex": 15, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'variable'
487
+ { "startIndex": 15, "endIndex": 16, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
488
+ { "startIndex": 16, "endIndex": 24, "scopes": ["source.abl", "meta.define.abl", "variable.other.abl"] }, // 'dTaxRate'
489
+ { "startIndex": 24, "endIndex": 25, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
490
+ { "startIndex": 25, "endIndex": 27, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'as'
491
+ { "startIndex": 27, "endIndex": 28, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
492
+ { "startIndex": 28, "endIndex": 35, "scopes": ["source.abl", "meta.define.abl", "storage.type.abl"] }, // 'decimal'
493
+ { "startIndex": 35, "endIndex": 36, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
494
+ { "startIndex": 36, "endIndex": 43, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'no-undo'
495
+ { "startIndex": 43, "endIndex": 44, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
496
+ { "startIndex": 44, "endIndex": 52, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'decimals'
497
+ { "startIndex": 52, "endIndex": 53, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
498
+ { "startIndex": 53, "endIndex": 54, "scopes": ["source.abl", "meta.define.abl", "constant.numeric.source.abl"] }, // '4'
499
+ { "startIndex": 54, "endIndex": 56, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
500
+ { "startIndex": 56, "endIndex": 57, "scopes": ["source.abl", "meta.define.abl", "punctuation.terminator.abl"] }, // '.'
501
+ { "startIndex": 57, "endIndex": 59, "scopes": ["source.abl"] } // ' '
502
+ ];
503
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
504
+ })