abl-tmlanguage 1.1.3 → 1.3.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 (71) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +54 -1
  3. package/abl.tmLanguage.json +3534 -230
  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/annotations/annotation.spec.js +232 -0
  8. package/spec/array-extent/issue#5.spec.js +18 -18
  9. package/spec/blocks/finally-blocks.spec.js +90 -0
  10. package/spec/blocks/on-quit.spec.js +59 -0
  11. package/spec/comments/vscode-abl-issue#127.spec.js +165 -0
  12. package/spec/db-table-and-field/fields-except.spec.js +69 -0
  13. package/spec/db-table-and-field/foreach.spec.js +588 -0
  14. package/spec/db-table-and-field/issue#88.spec.js +120 -0
  15. package/spec/define-buffer/create-buffer.spec.js +110 -0
  16. package/spec/define-buffer/simple-single-line.spec.js +138 -0
  17. package/spec/define-parameter/simple-single-line.spec.js +140 -100
  18. package/spec/define-stream/simple-single-line.spec.js +32 -31
  19. package/spec/define-temp-table/define-index.spec.js +138 -0
  20. package/spec/define-variable/extent.spec.js +228 -0
  21. package/spec/define-variable/issue#6.spec.js +256 -198
  22. package/spec/define-variable/issue#9.spec.js +38 -32
  23. package/spec/define-variable/simple-single-line.spec.js +168 -87
  24. package/spec/define-variable/single-line-with-a-comment-at-the-end.spec.js +62 -62
  25. package/spec/define-variable/single-line-with-a-space-and-a-comment-at-the-end.spec.js +56 -56
  26. package/spec/define-variable/tm-issue#2.spec.js +20 -20
  27. package/spec/do/do-blocks.spec.js +224 -0
  28. package/spec/do/issue#3.spec.js +69 -60
  29. package/spec/function-call/nested-functions.spec.js +128 -0
  30. package/spec/function-call/vscode-abl-issue#19.spec.js +110 -107
  31. package/spec/global-scoped-define/global-define.spec.js +11 -11
  32. package/spec/global-scoped-define/scoped-define-with-procedure-keyword.spec.js +26 -26
  33. package/spec/include/abl-tmlanguage-issues#5.spec.js +40 -57
  34. package/spec/include/vscode-abl-issue#45.spec.js +15 -15
  35. package/spec/include/vscode-abl-issue#77.spec.js +129 -0
  36. package/spec/include/vscode-abl-issue#80.spec.js +40 -27
  37. package/spec/method-attribute-property-call/abl-method-attribute-call.spec.js +99 -0
  38. package/spec/method-attribute-property-call/connected-method.spec.js +30 -0
  39. package/spec/method-attribute-property-call/get-set-method-name.spec.js +96 -0
  40. package/spec/method-attribute-property-call/method-call.spec.js +112 -0
  41. package/spec/method-definition/constructor.spec.js +174 -0
  42. package/spec/method-definition/method.spec.js +320 -0
  43. package/spec/misc-statements/case-statement.spec.js +96 -0
  44. package/spec/misc-statements/copy-lob.spec.js +137 -0
  45. package/spec/misc-statements/if-then.spec.js +170 -0
  46. package/spec/misc-statements/return-statement.spec.js +53 -0
  47. package/spec/operators/operators.spec.js +78 -0
  48. package/spec/procedure-definition/empty-proc.spec.js +101 -18
  49. package/spec/procedure-definition/vscode-abl-issue#22.spec.js +46 -42
  50. package/spec/procedure-definition/vscode-abl-issue#26.spec.js +23 -16
  51. package/spec/procedure-definition/vscode-abl-issue#62.spec.js +36 -0
  52. package/spec/run-statement/run-statement.spec.js +162 -0
  53. package/spec/shared.js +84 -42
  54. package/spec/strings/translation-attribute.spec.js +52 -0
  55. package/spec/strings/vscode-abl-issue#11.spec.js +110 -114
  56. package/spec/strings/vscode-abl-issue#28.spec.js +27 -27
  57. package/spec/type-name/argument.spec.js +209 -0
  58. package/spec/type-name/cast.spec.js +165 -0
  59. package/spec/type-name/define-class.spec.js +468 -0
  60. package/spec/type-name/define-enum.spec.js +44 -0
  61. package/spec/type-name/define-interface.spec.js +159 -0
  62. package/spec/type-name/define-property.spec.js +301 -0
  63. package/spec/type-name/define-temp-table.spec.js +434 -0
  64. package/spec/type-name/define-type-spec.js +435 -0
  65. package/spec/type-name/define-variable-property.spec.js +264 -0
  66. package/spec/type-name/define-variable.spec.js +504 -0
  67. package/spec/type-name/get-class.spec.js +91 -0
  68. package/spec/type-name/new.spec.js +126 -0
  69. package/spec/type-name/parameter-as.spec.js +838 -0
  70. package/spec/type-name/type-name.spec.js +879 -0
  71. package/spec/type-name/using.spec.js +115 -0
@@ -0,0 +1,588 @@
1
+ const { assert, expect } = require('chai');
2
+ const shared = require('../shared.js');
3
+
4
+ describe('', () => {
5
+ let statement = `for each customer , first salesrep of customer where salesrep.salesrep begins 'd' no-lock, first order of customer no-lock where order.orderdate < today:
6
+ displ customer.custnum salesrep.salesrep.
7
+ end. `;
8
+ let expectedTokens = [
9
+ [
10
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'for'
11
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
12
+ { "startIndex": 4, "endIndex": 8, "scopes": ["source.abl", "keyword.other.abl"] }, // 'each'
13
+ { "startIndex": 8, "endIndex": 9, "scopes": ["source.abl"] }, // ' '
14
+ { "startIndex": 9, "endIndex": 17, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'customer'
15
+ { "startIndex": 17, "endIndex": 18, "scopes": ["source.abl"] }, // ' '
16
+ { "startIndex": 18, "endIndex": 19, "scopes": ["source.abl", "punctuation.separator.comma.abl"] }, // ','
17
+ { "startIndex": 19, "endIndex": 20, "scopes": ["source.abl"] }, // ' '
18
+ { "startIndex": 20, "endIndex": 25, "scopes": ["source.abl", "keyword.other.abl"] }, // 'first'
19
+ { "startIndex": 25, "endIndex": 26, "scopes": ["source.abl"] }, // ' '
20
+ { "startIndex": 26, "endIndex": 34, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'salesrep'
21
+ { "startIndex": 34, "endIndex": 35, "scopes": ["source.abl"] }, // ' '
22
+ { "startIndex": 35, "endIndex": 37, "scopes": ["source.abl", "keyword.other.abl"] }, // 'of'
23
+ { "startIndex": 37, "endIndex": 38, "scopes": ["source.abl"] }, // ' '
24
+ { "startIndex": 38, "endIndex": 46, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'customer'
25
+ { "startIndex": 46, "endIndex": 47, "scopes": ["source.abl"] }, // ' '
26
+ { "startIndex": 47, "endIndex": 52, "scopes": ["source.abl", "keyword.other.abl"] }, // 'where'
27
+ { "startIndex": 52, "endIndex": 53, "scopes": ["source.abl"] }, // ' '
28
+ { "startIndex": 53, "endIndex": 70, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'salesrep.salesrep'
29
+ { "startIndex": 70, "endIndex": 71, "scopes": ["source.abl"] }, // ' '
30
+ { "startIndex": 71, "endIndex": 77, "scopes": ["source.abl", "keyword.operator.source.abl"] }, // 'begins'
31
+ { "startIndex": 77, "endIndex": 78, "scopes": ["source.abl"] }, // ' '
32
+ { "startIndex": 78, "endIndex": 79, "scopes": ["source.abl", "string.single.complex.abl", "punctuation.definition.string.begin.abl"] }, // '''
33
+ { "startIndex": 79, "endIndex": 80, "scopes": ["source.abl", "string.single.complex.abl"] }, // 'd'
34
+ { "startIndex": 80, "endIndex": 81, "scopes": ["source.abl", "string.single.complex.abl", "punctuation.definition.string.end.abl"] }, // '''
35
+ { "startIndex": 81, "endIndex": 82, "scopes": ["source.abl"] }, // ' '
36
+ { "startIndex": 82, "endIndex": 89, "scopes": ["source.abl", "keyword.other.abl"] }, // 'no-lock'
37
+ { "startIndex": 89, "endIndex": 90, "scopes": ["source.abl", "punctuation.separator.comma.abl"] }, // ','
38
+ { "startIndex": 90, "endIndex": 91, "scopes": ["source.abl"] }, // ' '
39
+ { "startIndex": 91, "endIndex": 96, "scopes": ["source.abl", "keyword.other.abl"] }, // 'first'
40
+ { "startIndex": 96, "endIndex": 97, "scopes": ["source.abl"] }, // ' '
41
+ { "startIndex": 97, "endIndex": 102, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'order'
42
+ { "startIndex": 102, "endIndex": 103, "scopes": ["source.abl"] }, // ' '
43
+ { "startIndex": 103, "endIndex": 105, "scopes": ["source.abl", "keyword.other.abl"] }, // 'of'
44
+ { "startIndex": 105, "endIndex": 106, "scopes": ["source.abl"] }, // ' '
45
+ { "startIndex": 106, "endIndex": 114, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'customer'
46
+ { "startIndex": 114, "endIndex": 115, "scopes": ["source.abl"] }, // ' '
47
+ { "startIndex": 115, "endIndex": 122, "scopes": ["source.abl", "keyword.other.abl"] }, // 'no-lock'
48
+ { "startIndex": 122, "endIndex": 123, "scopes": ["source.abl"] }, // ' '
49
+ { "startIndex": 123, "endIndex": 128, "scopes": ["source.abl", "keyword.other.abl"] }, // 'where'
50
+ { "startIndex": 128, "endIndex": 129, "scopes": ["source.abl"] }, // ' '
51
+ { "startIndex": 129, "endIndex": 144, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'order.orderdate'
52
+ { "startIndex": 144, "endIndex": 145, "scopes": ["source.abl"] }, // ' '
53
+ { "startIndex": 145, "endIndex": 146, "scopes": ["source.abl", "keyword.operator.source.abl"] }, // '<'
54
+ { "startIndex": 146, "endIndex": 147, "scopes": ["source.abl"] }, // ' '
55
+ { "startIndex": 147, "endIndex": 152, "scopes": ["source.abl", "constant.language.abl"] }, // 'today'
56
+ { "startIndex": 152, "endIndex": 153, "scopes": ["source.abl", "punctuation.terminator.abl"] } // ':'
57
+ ],
58
+ [
59
+ { "startIndex": 0, "endIndex": 2, "scopes": ["source.abl"] }, // ' '
60
+ { "startIndex": 2, "endIndex": 7, "scopes": ["source.abl", "keyword.other.abl"] }, // 'displ'
61
+ { "startIndex": 7, "endIndex": 8, "scopes": ["source.abl"] }, // ' '
62
+ { "startIndex": 8, "endIndex": 24, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'customer.custnum'
63
+ { "startIndex": 24, "endIndex": 25, "scopes": ["source.abl"] }, // ' '
64
+ { "startIndex": 25, "endIndex": 42, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'salesrep.salesrep'
65
+ { "startIndex": 42, "endIndex": 43, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
66
+ ],
67
+ [
68
+ { "startIndex": 0, "endIndex": 2, "scopes": ["source.abl"] }, // ' '
69
+ { "startIndex": 2, "endIndex": 5, "scopes": ["source.abl", "keyword.other.abl"] }, // 'end'
70
+ { "startIndex": 5, "endIndex": 6, "scopes": ["source.abl", "punctuation.terminator.abl"] }, // '.'
71
+ { "startIndex": 6, "endIndex": 9, "scopes": ["source.abl"] } // ' '
72
+ ]
73
+ ];
74
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
75
+ })
76
+
77
+ describe('', () => {
78
+ let statement = `for each customer, salesrep of customer no-lock, first order of customer no-lock where order.orderdate < today:
79
+ displ customer.custnum salesrep.salesrep.
80
+ end. `;
81
+ let expectedTokens = [
82
+ [
83
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'for'
84
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
85
+ { "startIndex": 4, "endIndex": 8, "scopes": ["source.abl", "keyword.other.abl"] }, // 'each'
86
+ { "startIndex": 8, "endIndex": 9, "scopes": ["source.abl"] }, // ' '
87
+ { "startIndex": 9, "endIndex": 17, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'customer'
88
+ { "startIndex": 17, "endIndex": 18, "scopes": ["source.abl", "punctuation.separator.comma.abl"] }, // ','
89
+ { "startIndex": 18, "endIndex": 19, "scopes": ["source.abl"] }, // ' '
90
+ { "startIndex": 19, "endIndex": 27, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'salesrep'
91
+ { "startIndex": 27, "endIndex": 28, "scopes": ["source.abl"] }, // ' '
92
+ { "startIndex": 28, "endIndex": 30, "scopes": ["source.abl", "keyword.other.abl"] }, // 'of'
93
+ { "startIndex": 30, "endIndex": 31, "scopes": ["source.abl"] }, // ' '
94
+ { "startIndex": 31, "endIndex": 39, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'customer'
95
+ { "startIndex": 39, "endIndex": 40, "scopes": ["source.abl"] }, // ' '
96
+ { "startIndex": 40, "endIndex": 47, "scopes": ["source.abl", "keyword.other.abl"] }, // 'no-lock'
97
+ { "startIndex": 47, "endIndex": 48, "scopes": ["source.abl", "punctuation.separator.comma.abl"] }, // ','
98
+ { "startIndex": 48, "endIndex": 49, "scopes": ["source.abl"] }, // ' '
99
+ { "startIndex": 49, "endIndex": 54, "scopes": ["source.abl", "keyword.other.abl"] }, // 'first'
100
+ { "startIndex": 54, "endIndex": 55, "scopes": ["source.abl"] }, // ' '
101
+ { "startIndex": 55, "endIndex": 60, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'order'
102
+ { "startIndex": 60, "endIndex": 61, "scopes": ["source.abl"] }, // ' '
103
+ { "startIndex": 61, "endIndex": 63, "scopes": ["source.abl", "keyword.other.abl"] }, // 'of'
104
+ { "startIndex": 63, "endIndex": 64, "scopes": ["source.abl"] }, // ' '
105
+ { "startIndex": 64, "endIndex": 72, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'customer'
106
+ { "startIndex": 72, "endIndex": 73, "scopes": ["source.abl"] }, // ' '
107
+ { "startIndex": 73, "endIndex": 80, "scopes": ["source.abl", "keyword.other.abl"] }, // 'no-lock'
108
+ { "startIndex": 80, "endIndex": 81, "scopes": ["source.abl"] }, // ' '
109
+ { "startIndex": 81, "endIndex": 86, "scopes": ["source.abl", "keyword.other.abl"] }, // 'where'
110
+ { "startIndex": 86, "endIndex": 87, "scopes": ["source.abl"] }, // ' '
111
+ { "startIndex": 87, "endIndex": 102, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'order.orderdate'
112
+ { "startIndex": 102, "endIndex": 103, "scopes": ["source.abl"] }, // ' '
113
+ { "startIndex": 103, "endIndex": 104, "scopes": ["source.abl", "keyword.operator.source.abl"] }, // '<'
114
+ { "startIndex": 104, "endIndex": 105, "scopes": ["source.abl"] }, // ' '
115
+ { "startIndex": 105, "endIndex": 110, "scopes": ["source.abl", "constant.language.abl"] }, // 'today'
116
+ { "startIndex": 110, "endIndex": 111, "scopes": ["source.abl", "punctuation.terminator.abl"] } // ':'
117
+ ],
118
+ [
119
+ { "startIndex": 0, "endIndex": 2, "scopes": ["source.abl"] }, // ' '
120
+ { "startIndex": 2, "endIndex": 7, "scopes": ["source.abl", "keyword.other.abl"] }, // 'displ'
121
+ { "startIndex": 7, "endIndex": 8, "scopes": ["source.abl"] }, // ' '
122
+ { "startIndex": 8, "endIndex": 24, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'customer.custnum'
123
+ { "startIndex": 24, "endIndex": 25, "scopes": ["source.abl"] }, // ' '
124
+ { "startIndex": 25, "endIndex": 42, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'salesrep.salesrep'
125
+ { "startIndex": 42, "endIndex": 43, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
126
+ ],
127
+ [
128
+ { "startIndex": 0, "endIndex": 2, "scopes": ["source.abl"] }, // ' '
129
+ { "startIndex": 2, "endIndex": 5, "scopes": ["source.abl", "keyword.other.abl"] }, // 'end'
130
+ { "startIndex": 5, "endIndex": 6, "scopes": ["source.abl", "punctuation.terminator.abl"] }, // '.'
131
+ { "startIndex": 6, "endIndex": 9, "scopes": ["source.abl"] } // ' '
132
+ ]
133
+ ];
134
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
135
+ })
136
+
137
+ describe('', () => {
138
+ let statement = `for each customer :
139
+ displ customer.custnum salesrep.salesrep.
140
+ end. `;
141
+ let expectedTokens = [
142
+ [
143
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'for'
144
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
145
+ { "startIndex": 4, "endIndex": 8, "scopes": ["source.abl", "keyword.other.abl"] }, // 'each'
146
+ { "startIndex": 8, "endIndex": 9, "scopes": ["source.abl"] }, // ' '
147
+ { "startIndex": 9, "endIndex": 17, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'customer'
148
+ { "startIndex": 17, "endIndex": 18, "scopes": ["source.abl"] }, // ' '
149
+ { "startIndex": 18, "endIndex": 19, "scopes": ["source.abl", "punctuation.terminator.abl"] } // ':'
150
+ ],
151
+ [
152
+ { "startIndex": 0, "endIndex": 2, "scopes": ["source.abl"] }, // ' '
153
+ { "startIndex": 2, "endIndex": 7, "scopes": ["source.abl", "keyword.other.abl"] }, // 'displ'
154
+ { "startIndex": 7, "endIndex": 8, "scopes": ["source.abl"] }, // ' '
155
+ { "startIndex": 8, "endIndex": 24, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'customer.custnum'
156
+ { "startIndex": 24, "endIndex": 25, "scopes": ["source.abl"] }, // ' '
157
+ { "startIndex": 25, "endIndex": 42, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'salesrep.salesrep'
158
+ { "startIndex": 42, "endIndex": 43, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
159
+ ],
160
+ [
161
+ { "startIndex": 0, "endIndex": 2, "scopes": ["source.abl"] }, // ' '
162
+ { "startIndex": 2, "endIndex": 5, "scopes": ["source.abl", "keyword.other.abl"] }, // 'end'
163
+ { "startIndex": 5, "endIndex": 6, "scopes": ["source.abl", "punctuation.terminator.abl"] }, // '.'
164
+ { "startIndex": 6, "endIndex": 9, "scopes": ["source.abl"] } // ' '
165
+ ]
166
+ ];
167
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
168
+ })
169
+
170
+ describe('', () => {
171
+ let statement = ` OPEN QUERY qry01_SmartCache
172
+ FOR EACH SmartCache01 WHERE SmartCache01.CacheKey = pcCacheKey NO-LOCK INDEXED-REPOSITION.`;
173
+ let expectedTokens = [
174
+ [
175
+ { "startIndex": 0, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
176
+ { "startIndex": 4, "endIndex": 8, "scopes": ["source.abl", "keyword.other.abl"] }, // 'OPEN'
177
+ { "startIndex": 8, "endIndex": 9, "scopes": ["source.abl"] }, // ' '
178
+ { "startIndex": 9, "endIndex": 14, "scopes": ["source.abl", "keyword.other.abl"] }, // 'QUERY'
179
+ { "startIndex": 14, "endIndex": 15, "scopes": ["source.abl"] }, // ' '
180
+ { "startIndex": 15, "endIndex": 31, "scopes": ["source.abl", "variable.other.abl"] } // 'qry01_SmartCache'
181
+ ],
182
+ [
183
+ { "startIndex": 0, "endIndex": 9, "scopes": ["source.abl"] }, // ' '
184
+ { "startIndex": 9, "endIndex": 12, "scopes": ["source.abl", "keyword.other.abl"] }, // 'FOR'
185
+ { "startIndex": 12, "endIndex": 13, "scopes": ["source.abl"] }, // ' '
186
+ { "startIndex": 13, "endIndex": 17, "scopes": ["source.abl", "keyword.other.abl"] }, // 'EACH'
187
+ { "startIndex": 17, "endIndex": 18, "scopes": ["source.abl"] }, // ' '
188
+ { "startIndex": 18, "endIndex": 30, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'SmartCache01'
189
+ { "startIndex": 30, "endIndex": 31, "scopes": ["source.abl"] }, // ' '
190
+ { "startIndex": 31, "endIndex": 36, "scopes": ["source.abl", "keyword.other.abl"] }, // 'WHERE'
191
+ { "startIndex": 36, "endIndex": 37, "scopes": ["source.abl"] }, // ' '
192
+ { "startIndex": 37, "endIndex": 58, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'SmartCache01.CacheKey'
193
+ { "startIndex": 58, "endIndex": 59, "scopes": ["source.abl"] }, // ' '
194
+ { "startIndex": 59, "endIndex": 60, "scopes": ["source.abl", "keyword.operator.source.abl"] }, // '='
195
+ { "startIndex": 60, "endIndex": 61, "scopes": ["source.abl"] }, // ' '
196
+ { "startIndex": 61, "endIndex": 71, "scopes": ["source.abl", "variable.other.abl"] }, // 'pcCacheKey'
197
+ { "startIndex": 71, "endIndex": 72, "scopes": ["source.abl"] }, // ' '
198
+ { "startIndex": 72, "endIndex": 79, "scopes": ["source.abl", "keyword.other.abl"] }, // 'NO-LOCK'
199
+ { "startIndex": 79, "endIndex": 80, "scopes": ["source.abl"] }, // ' '
200
+ { "startIndex": 80, "endIndex": 98, "scopes": ["source.abl", "keyword.other.abl"] }, // 'INDEXED-REPOSITION'
201
+ { "startIndex": 98, "endIndex": 99, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
202
+ ]
203
+ ];
204
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
205
+ })
206
+
207
+ describe('', () => {
208
+ let statement = ` OPEN QUERY qry01_SmartCache
209
+ FOR EACH SmartCache01 WHERE SmartCache01.CacheKey = pcCacheKey NO-LOCK INDEXED-REPOSITION.`;
210
+ let expectedTokens = [
211
+ [
212
+ { "startIndex": 0, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
213
+ { "startIndex": 4, "endIndex": 8, "scopes": ["source.abl", "keyword.other.abl"] }, // 'OPEN'
214
+ { "startIndex": 8, "endIndex": 9, "scopes": ["source.abl"] }, // ' '
215
+ { "startIndex": 9, "endIndex": 14, "scopes": ["source.abl", "keyword.other.abl"] }, // 'QUERY'
216
+ { "startIndex": 14, "endIndex": 15, "scopes": ["source.abl"] }, // ' '
217
+ { "startIndex": 15, "endIndex": 31, "scopes": ["source.abl", "variable.other.abl"] } // 'qry01_SmartCache'
218
+ ],
219
+ [
220
+ { "startIndex": 0, "endIndex": 9, "scopes": ["source.abl"] }, // ' '
221
+ { "startIndex": 9, "endIndex": 12, "scopes": ["source.abl", "keyword.other.abl"] }, // 'FOR'
222
+ { "startIndex": 12, "endIndex": 13, "scopes": ["source.abl"] }, // ' '
223
+ { "startIndex": 13, "endIndex": 17, "scopes": ["source.abl", "keyword.other.abl"] }, // 'EACH'
224
+ { "startIndex": 17, "endIndex": 18, "scopes": ["source.abl"] }, // ' '
225
+ { "startIndex": 18, "endIndex": 30, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'SmartCache01'
226
+ { "startIndex": 30, "endIndex": 31, "scopes": ["source.abl"] }, // ' '
227
+ { "startIndex": 31, "endIndex": 36, "scopes": ["source.abl", "keyword.other.abl"] }, // 'WHERE'
228
+ { "startIndex": 36, "endIndex": 37, "scopes": ["source.abl"] }, // ' '
229
+ { "startIndex": 37, "endIndex": 58, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'SmartCache01.CacheKey'
230
+ { "startIndex": 58, "endIndex": 59, "scopes": ["source.abl"] }, // ' '
231
+ { "startIndex": 59, "endIndex": 60, "scopes": ["source.abl", "keyword.operator.source.abl"] }, // '='
232
+ { "startIndex": 60, "endIndex": 61, "scopes": ["source.abl"] }, // ' '
233
+ { "startIndex": 61, "endIndex": 71, "scopes": ["source.abl", "variable.other.abl"] }, // 'pcCacheKey'
234
+ { "startIndex": 71, "endIndex": 72, "scopes": ["source.abl"] }, // ' '
235
+ { "startIndex": 72, "endIndex": 79, "scopes": ["source.abl", "keyword.other.abl"] }, // 'NO-LOCK'
236
+ { "startIndex": 79, "endIndex": 80, "scopes": ["source.abl"] }, // ' '
237
+ { "startIndex": 80, "endIndex": 98, "scopes": ["source.abl", "keyword.other.abl"] }, // 'INDEXED-REPOSITION'
238
+ { "startIndex": 98, "endIndex": 99, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
239
+ ]
240
+ ];
241
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
242
+ })
243
+
244
+ describe('', () => {
245
+ let statement = `for each Employee01 WHERE Employee01.EmpNum = piEmpNum, first Department02 where Department02.DeptCode = Employee01.DeptCode.`;
246
+ let expectedTokens = [
247
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'for'
248
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
249
+ { "startIndex": 4, "endIndex": 8, "scopes": ["source.abl", "keyword.other.abl"] }, // 'each'
250
+ { "startIndex": 8, "endIndex": 9, "scopes": ["source.abl"] }, // ' '
251
+ { "startIndex": 9, "endIndex": 19, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'Employee01'
252
+ { "startIndex": 19, "endIndex": 20, "scopes": ["source.abl"] }, // ' '
253
+ { "startIndex": 20, "endIndex": 25, "scopes": ["source.abl", "keyword.other.abl"] }, // 'WHERE'
254
+ { "startIndex": 25, "endIndex": 26, "scopes": ["source.abl"] }, // ' '
255
+ { "startIndex": 26, "endIndex": 43, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'Employee01.EmpNum'
256
+ { "startIndex": 43, "endIndex": 44, "scopes": ["source.abl"] }, // ' '
257
+ { "startIndex": 44, "endIndex": 45, "scopes": ["source.abl", "keyword.operator.source.abl"] }, // '='
258
+ { "startIndex": 45, "endIndex": 46, "scopes": ["source.abl"] }, // ' '
259
+ { "startIndex": 46, "endIndex": 54, "scopes": ["source.abl", "variable.other.abl"] }, // 'piEmpNum'
260
+ { "startIndex": 54, "endIndex": 55, "scopes": ["source.abl", "punctuation.separator.comma.abl"] }, // ','
261
+ { "startIndex": 55, "endIndex": 56, "scopes": ["source.abl"] }, // ' '
262
+ { "startIndex": 56, "endIndex": 61, "scopes": ["source.abl", "keyword.other.abl"] }, // 'first'
263
+ { "startIndex": 61, "endIndex": 62, "scopes": ["source.abl"] }, // ' '
264
+ { "startIndex": 62, "endIndex": 74, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'Department02'
265
+ { "startIndex": 74, "endIndex": 75, "scopes": ["source.abl"] }, // ' '
266
+ { "startIndex": 75, "endIndex": 80, "scopes": ["source.abl", "keyword.other.abl"] }, // 'where'
267
+ { "startIndex": 80, "endIndex": 81, "scopes": ["source.abl"] }, // ' '
268
+ { "startIndex": 81, "endIndex": 102, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'Department02.DeptCode'
269
+ { "startIndex": 102, "endIndex": 103, "scopes": ["source.abl"] }, // ' '
270
+ { "startIndex": 103, "endIndex": 104, "scopes": ["source.abl", "keyword.operator.source.abl"] }, // '='
271
+ { "startIndex": 104, "endIndex": 105, "scopes": ["source.abl"] }, // ' '
272
+ { "startIndex": 105, "endIndex": 124, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'Employee01.DeptCode'
273
+ { "startIndex": 124, "endIndex": 125, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
274
+ ];
275
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
276
+ })
277
+
278
+ describe('', () => {
279
+ let statement = `for each customer, salesrep where salesrep.salesrep EQ customer.salesrep no-lock, first order of customer no-lock where order.orderdate < today:`;
280
+ let expectedTokens = [
281
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'for'
282
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
283
+ { "startIndex": 4, "endIndex": 8, "scopes": ["source.abl", "keyword.other.abl"] }, // 'each'
284
+ { "startIndex": 8, "endIndex": 9, "scopes": ["source.abl"] }, // ' '
285
+ { "startIndex": 9, "endIndex": 17, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'customer'
286
+ { "startIndex": 17, "endIndex": 18, "scopes": ["source.abl", "punctuation.separator.comma.abl"] }, // ','
287
+ { "startIndex": 18, "endIndex": 19, "scopes": ["source.abl"] }, // ' '
288
+ { "startIndex": 19, "endIndex": 27, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'salesrep'
289
+ { "startIndex": 27, "endIndex": 28, "scopes": ["source.abl"] }, // ' '
290
+ { "startIndex": 28, "endIndex": 33, "scopes": ["source.abl", "keyword.other.abl"] }, // 'where'
291
+ { "startIndex": 33, "endIndex": 34, "scopes": ["source.abl"] }, // ' '
292
+ { "startIndex": 34, "endIndex": 51, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'salesrep.salesrep'
293
+ { "startIndex": 51, "endIndex": 52, "scopes": ["source.abl"] }, // ' '
294
+ { "startIndex": 52, "endIndex": 54, "scopes": ["source.abl", "keyword.operator.source.abl"] }, // 'EQ'
295
+ { "startIndex": 54, "endIndex": 55, "scopes": ["source.abl"] }, // ' '
296
+ { "startIndex": 55, "endIndex": 72, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'customer.salesrep'
297
+ { "startIndex": 72, "endIndex": 73, "scopes": ["source.abl"] }, // ' '
298
+ { "startIndex": 73, "endIndex": 80, "scopes": ["source.abl", "keyword.other.abl"] }, // 'no-lock'
299
+ { "startIndex": 80, "endIndex": 81, "scopes": ["source.abl", "punctuation.separator.comma.abl"] }, // ','
300
+ { "startIndex": 81, "endIndex": 82, "scopes": ["source.abl"] }, // ' '
301
+ { "startIndex": 82, "endIndex": 87, "scopes": ["source.abl", "keyword.other.abl"] }, // 'first'
302
+ { "startIndex": 87, "endIndex": 88, "scopes": ["source.abl"] }, // ' '
303
+ { "startIndex": 88, "endIndex": 93, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'order'
304
+ { "startIndex": 93, "endIndex": 94, "scopes": ["source.abl"] }, // ' '
305
+ { "startIndex": 94, "endIndex": 96, "scopes": ["source.abl", "keyword.other.abl"] }, // 'of'
306
+ { "startIndex": 96, "endIndex": 97, "scopes": ["source.abl"] }, // ' '
307
+ { "startIndex": 97, "endIndex": 105, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'customer'
308
+ { "startIndex": 105, "endIndex": 106, "scopes": ["source.abl"] }, // ' '
309
+ { "startIndex": 106, "endIndex": 113, "scopes": ["source.abl", "keyword.other.abl"] }, // 'no-lock'
310
+ { "startIndex": 113, "endIndex": 114, "scopes": ["source.abl"] }, // ' '
311
+ { "startIndex": 114, "endIndex": 119, "scopes": ["source.abl", "keyword.other.abl"] }, // 'where'
312
+ { "startIndex": 119, "endIndex": 120, "scopes": ["source.abl"] }, // ' '
313
+ { "startIndex": 120, "endIndex": 135, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'order.orderdate'
314
+ { "startIndex": 135, "endIndex": 136, "scopes": ["source.abl"] }, // ' '
315
+ { "startIndex": 136, "endIndex": 137, "scopes": ["source.abl", "keyword.operator.source.abl"] }, // '<'
316
+ { "startIndex": 137, "endIndex": 138, "scopes": ["source.abl"] }, // ' '
317
+ { "startIndex": 138, "endIndex": 143, "scopes": ["source.abl", "constant.language.abl"] }, // 'today'
318
+ { "startIndex": 143, "endIndex": 144, "scopes": ["source.abl", "punctuation.terminator.abl"] } // ':'
319
+ ];
320
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
321
+ })
322
+
323
+ describe('', () => {
324
+ let statement = `for each Employee01 WHERE Employee01.EmpNum = piEmpNum, each Department02 where Department02.DeptCode = Employee01.DeptCode
325
+ , last Family02 of Employee01 no-lock.`;
326
+ let expectedTokens = [
327
+ [
328
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'for'
329
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
330
+ { "startIndex": 4, "endIndex": 8, "scopes": ["source.abl", "keyword.other.abl"] }, // 'each'
331
+ { "startIndex": 8, "endIndex": 9, "scopes": ["source.abl"] }, // ' '
332
+ { "startIndex": 9, "endIndex": 19, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'Employee01'
333
+ { "startIndex": 19, "endIndex": 20, "scopes": ["source.abl"] }, // ' '
334
+ { "startIndex": 20, "endIndex": 25, "scopes": ["source.abl", "keyword.other.abl"] }, // 'WHERE'
335
+ { "startIndex": 25, "endIndex": 26, "scopes": ["source.abl"] }, // ' '
336
+ { "startIndex": 26, "endIndex": 43, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'Employee01.EmpNum'
337
+ { "startIndex": 43, "endIndex": 44, "scopes": ["source.abl"] }, // ' '
338
+ { "startIndex": 44, "endIndex": 45, "scopes": ["source.abl", "keyword.operator.source.abl"] }, // '='
339
+ { "startIndex": 45, "endIndex": 46, "scopes": ["source.abl"] }, // ' '
340
+ { "startIndex": 46, "endIndex": 54, "scopes": ["source.abl", "variable.other.abl"] }, // 'piEmpNum'
341
+ { "startIndex": 54, "endIndex": 55, "scopes": ["source.abl", "punctuation.separator.comma.abl"] }, // ','
342
+ { "startIndex": 55, "endIndex": 56, "scopes": ["source.abl"] }, // ' '
343
+ { "startIndex": 56, "endIndex": 60, "scopes": ["source.abl", "keyword.other.abl"] }, // 'each'
344
+ { "startIndex": 60, "endIndex": 61, "scopes": ["source.abl"] }, // ' '
345
+ { "startIndex": 61, "endIndex": 73, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'Department02'
346
+ { "startIndex": 73, "endIndex": 74, "scopes": ["source.abl"] }, // ' '
347
+ { "startIndex": 74, "endIndex": 79, "scopes": ["source.abl", "keyword.other.abl"] }, // 'where'
348
+ { "startIndex": 79, "endIndex": 80, "scopes": ["source.abl"] }, // ' '
349
+ { "startIndex": 80, "endIndex": 101, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'Department02.DeptCode'
350
+ { "startIndex": 101, "endIndex": 102, "scopes": ["source.abl"] }, // ' '
351
+ { "startIndex": 102, "endIndex": 103, "scopes": ["source.abl", "keyword.operator.source.abl"] }, // '='
352
+ { "startIndex": 103, "endIndex": 104, "scopes": ["source.abl"] }, // ' '
353
+ { "startIndex": 104, "endIndex": 123, "scopes": ["source.abl", "storage.data.table.abl"] } // 'Employee01.DeptCode'
354
+ ],
355
+ [
356
+ { "startIndex": 0, "endIndex": 6, "scopes": ["source.abl"] }, // ' '
357
+ { "startIndex": 6, "endIndex": 7, "scopes": ["source.abl", "punctuation.separator.comma.abl"] }, // ','
358
+ { "startIndex": 7, "endIndex": 8, "scopes": ["source.abl"] }, // ' '
359
+ { "startIndex": 8, "endIndex": 12, "scopes": ["source.abl", "keyword.other.abl"] }, // 'last'
360
+ { "startIndex": 12, "endIndex": 13, "scopes": ["source.abl"] }, // ' '
361
+ { "startIndex": 13, "endIndex": 21, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'Family02'
362
+ { "startIndex": 21, "endIndex": 22, "scopes": ["source.abl"] }, // ' '
363
+ { "startIndex": 22, "endIndex": 24, "scopes": ["source.abl", "keyword.other.abl"] }, // 'of'
364
+ { "startIndex": 24, "endIndex": 25, "scopes": ["source.abl"] }, // ' '
365
+ { "startIndex": 25, "endIndex": 35, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'Employee01'
366
+ { "startIndex": 35, "endIndex": 36, "scopes": ["source.abl"] }, // ' '
367
+ { "startIndex": 36, "endIndex": 43, "scopes": ["source.abl", "keyword.other.abl"] }, // 'no-lock'
368
+ { "startIndex": 43, "endIndex": 44, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
369
+ ]
370
+ ];
371
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
372
+ })
373
+
374
+
375
+ describe('', () => {
376
+ let statement = `for
377
+ each customer,
378
+ salesrep where salesrep.salesrep EQ customer.salesrep no-lock,
379
+ first order of customer no-lock where order.orderdate < today:`;
380
+ let expectedTokens = [
381
+ [
382
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] } // 'for'
383
+ ],
384
+ [
385
+ { "startIndex": 0, "endIndex": 4, "scopes": ["source.abl", "keyword.other.abl"] }, // 'each'
386
+ { "startIndex": 4, "endIndex": 5, "scopes": ["source.abl"] }, // ' '
387
+ { "startIndex": 5, "endIndex": 13, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'customer'
388
+ { "startIndex": 13, "endIndex": 14, "scopes": ["source.abl", "punctuation.separator.comma.abl"] } // ','
389
+ ],
390
+ [
391
+ { "startIndex": 0, "endIndex": 8, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'salesrep'
392
+ { "startIndex": 8, "endIndex": 9, "scopes": ["source.abl"] }, // ' '
393
+ { "startIndex": 9, "endIndex": 14, "scopes": ["source.abl", "keyword.other.abl"] }, // 'where'
394
+ { "startIndex": 14, "endIndex": 15, "scopes": ["source.abl"] }, // ' '
395
+ { "startIndex": 15, "endIndex": 32, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'salesrep.salesrep'
396
+ { "startIndex": 32, "endIndex": 33, "scopes": ["source.abl"] }, // ' '
397
+ { "startIndex": 33, "endIndex": 35, "scopes": ["source.abl", "keyword.operator.source.abl"] }, // 'EQ'
398
+ { "startIndex": 35, "endIndex": 36, "scopes": ["source.abl"] }, // ' '
399
+ { "startIndex": 36, "endIndex": 53, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'customer.salesrep'
400
+ { "startIndex": 53, "endIndex": 54, "scopes": ["source.abl"] }, // ' '
401
+ { "startIndex": 54, "endIndex": 61, "scopes": ["source.abl", "keyword.other.abl"] }, // 'no-lock'
402
+ { "startIndex": 61, "endIndex": 62, "scopes": ["source.abl", "punctuation.separator.comma.abl"] } // ','
403
+ ],
404
+ [
405
+ { "startIndex": 0, "endIndex": 5, "scopes": ["source.abl", "keyword.other.abl"] }, // 'first'
406
+ { "startIndex": 5, "endIndex": 6, "scopes": ["source.abl"] }, // ' '
407
+ { "startIndex": 6, "endIndex": 11, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'order'
408
+ { "startIndex": 11, "endIndex": 12, "scopes": ["source.abl"] }, // ' '
409
+ { "startIndex": 12, "endIndex": 14, "scopes": ["source.abl", "keyword.other.abl"] }, // 'of'
410
+ { "startIndex": 14, "endIndex": 15, "scopes": ["source.abl"] }, // ' '
411
+ { "startIndex": 15, "endIndex": 23, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'customer'
412
+ { "startIndex": 23, "endIndex": 24, "scopes": ["source.abl"] }, // ' '
413
+ { "startIndex": 24, "endIndex": 31, "scopes": ["source.abl", "keyword.other.abl"] }, // 'no-lock'
414
+ { "startIndex": 31, "endIndex": 32, "scopes": ["source.abl"] }, // ' '
415
+ { "startIndex": 32, "endIndex": 37, "scopes": ["source.abl", "keyword.other.abl"] }, // 'where'
416
+ { "startIndex": 37, "endIndex": 38, "scopes": ["source.abl"] }, // ' '
417
+ { "startIndex": 38, "endIndex": 53, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'order.orderdate'
418
+ { "startIndex": 53, "endIndex": 54, "scopes": ["source.abl"] }, // ' '
419
+ { "startIndex": 54, "endIndex": 55, "scopes": ["source.abl", "keyword.operator.source.abl"] }, // '<'
420
+ { "startIndex": 55, "endIndex": 56, "scopes": ["source.abl"] }, // ' '
421
+ { "startIndex": 56, "endIndex": 61, "scopes": ["source.abl", "constant.language.abl"] }, // 'today'
422
+ { "startIndex": 61, "endIndex": 62, "scopes": ["source.abl", "punctuation.terminator.abl"] } // ':'
423
+ ]
424
+ ];
425
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
426
+ })
427
+
428
+ describe('', () => {
429
+ let statement = ` @Before.
430
+ method public void BeforeAll():
431
+ // something
432
+ end method.`;
433
+ let expectedTokens = [
434
+ [
435
+ { "startIndex": 0, "endIndex": 4, "scopes": ["source.abl", "meta.declaration.annotation.abl"] }, // ' '
436
+ { "startIndex": 4, "endIndex": 11, "scopes": ["source.abl", "meta.declaration.annotation.abl", "entity.name.tag.abl"] }, // '@Before'
437
+ { "startIndex": 11, "endIndex": 12, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
438
+ ],
439
+ [
440
+ { "startIndex": 0, "endIndex": 4, "scopes": ["source.abl", "meta.define.method.abl"] }, // ' '
441
+ { "startIndex": 4, "endIndex": 10, "scopes": ["source.abl", "meta.define.method.abl", "keyword.other.abl"] }, // 'method'
442
+ { "startIndex": 10, "endIndex": 11, "scopes": ["source.abl", "meta.define.method.abl"] }, // ' '
443
+ { "startIndex": 11, "endIndex": 17, "scopes": ["source.abl", "meta.define.method.abl", "keyword.other.abl"] }, // 'public'
444
+ { "startIndex": 17, "endIndex": 18, "scopes": ["source.abl", "meta.define.method.abl"] }, // ' '
445
+ { "startIndex": 18, "endIndex": 22, "scopes": ["source.abl", "meta.define.method.abl", "keyword.other.abl"] }, // 'void'
446
+ { "startIndex": 22, "endIndex": 23, "scopes": ["source.abl", "meta.define.method.abl"] }, // ' '
447
+ { "startIndex": 23, "endIndex": 32, "scopes": ["source.abl", "meta.define.method.abl", "entity.name.function.abl"] }, // 'BeforeAll'
448
+ { "startIndex": 32, "endIndex": 33, "scopes": ["source.abl", "meta.define.method.abl", "meta.brace.round.js"] }, // '('
449
+ { "startIndex": 33, "endIndex": 34, "scopes": ["source.abl", "meta.define.method.abl", "meta.brace.round.js"] }, // ')'
450
+ { "startIndex": 34, "endIndex": 35, "scopes": ["source.abl", "punctuation.terminator.abl"] } // ':'
451
+ ],
452
+ [
453
+ { "startIndex": 0, "endIndex": 8, "scopes": ["source.abl"] }, // ' '
454
+ { "startIndex": 8, "endIndex": 20, "scopes": ["source.abl", "comment.line.double-slash.abl"] } // '// something'
455
+ ],
456
+ [
457
+ { "startIndex": 0, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
458
+ { "startIndex": 4, "endIndex": 7, "scopes": ["source.abl", "keyword.other.abl"] }, // 'end'
459
+ { "startIndex": 7, "endIndex": 8, "scopes": ["source.abl"] }, // ' '
460
+ { "startIndex": 8, "endIndex": 14, "scopes": ["source.abl", "keyword.other.abl"] }, // 'method'
461
+ { "startIndex": 14, "endIndex": 15, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
462
+ ]
463
+ ];
464
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
465
+ })
466
+
467
+ describe('', () => {
468
+ let statement = ` @Befor.`;
469
+ let expectedTokens = [
470
+ { "startIndex": 0, "endIndex": 4, "scopes": ["source.abl", "meta.declaration.annotation.abl"] }, // ' '
471
+ { "startIndex": 4, "endIndex": 10, "scopes": ["source.abl", "meta.declaration.annotation.abl", "entity.name.tag.abl"] }, // '@Befor'
472
+ { "startIndex": 10, "endIndex": 11, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
473
+ ];
474
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
475
+ })
476
+
477
+ describe('', () => {
478
+ let statement = `FOR EACH ttTaskMethods
479
+ BREAK BY ttTaskMethods.ClassName:`;
480
+ let expectedTokens = [
481
+ [
482
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'FOR'
483
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
484
+ { "startIndex": 4, "endIndex": 8, "scopes": ["source.abl", "keyword.other.abl"] }, // 'EACH'
485
+ { "startIndex": 8, "endIndex": 9, "scopes": ["source.abl"] }, // ' '
486
+ { "startIndex": 9, "endIndex": 22, "scopes": ["source.abl", "storage.data.table.abl"] } // 'ttTaskMethods'
487
+ ],
488
+ [
489
+ { "startIndex": 0, "endIndex": 8, "scopes": ["source.abl"] }, // ' '
490
+ { "startIndex": 8, "endIndex": 13, "scopes": ["source.abl", "keyword.other.abl"] }, // 'BREAK'
491
+ { "startIndex": 13, "endIndex": 14, "scopes": ["source.abl"] }, // ' '
492
+ { "startIndex": 14, "endIndex": 16, "scopes": ["source.abl", "keyword.other.abl"] }, // 'BY'
493
+ { "startIndex": 16, "endIndex": 17, "scopes": ["source.abl"] }, // ' '
494
+ { "startIndex": 17, "endIndex": 40, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'ttTaskMethods.ClassName'
495
+ { "startIndex": 40, "endIndex": 41, "scopes": ["source.abl", "punctuation.terminator.abl"] } // ':'
496
+ ]
497
+ ];
498
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
499
+ })
500
+
501
+ describe('', () => {
502
+ let statement = `FOR EACH ttTaskMethods BY ttTaskMethods.ClassName:`;
503
+ let expectedTokens = [
504
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'FOR'
505
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
506
+ { "startIndex": 4, "endIndex": 8, "scopes": ["source.abl", "keyword.other.abl"] }, // 'EACH'
507
+ { "startIndex": 8, "endIndex": 9, "scopes": ["source.abl"] }, // ' '
508
+ { "startIndex": 9, "endIndex": 22, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'ttTaskMethods'
509
+ { "startIndex": 22, "endIndex": 23, "scopes": ["source.abl"] }, // ' '
510
+ { "startIndex": 23, "endIndex": 25, "scopes": ["source.abl", "keyword.other.abl"] }, // 'BY'
511
+ { "startIndex": 25, "endIndex": 26, "scopes": ["source.abl"] }, // ' '
512
+ { "startIndex": 26, "endIndex": 49, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'ttTaskMethods.ClassName'
513
+ { "startIndex": 49, "endIndex": 50, "scopes": ["source.abl", "punctuation.terminator.abl"] } // ':'
514
+ ];
515
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
516
+ })
517
+
518
+ describe('', () => {
519
+ let statement = `FOR EACH ttTaskMethods transACTION:`;
520
+ let expectedTokens = [
521
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'FOR'
522
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
523
+ { "startIndex": 4, "endIndex": 8, "scopes": ["source.abl", "keyword.other.abl"] }, // 'EACH'
524
+ { "startIndex": 8, "endIndex": 9, "scopes": ["source.abl"] }, // ' '
525
+ { "startIndex": 9, "endIndex": 22, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'ttTaskMethods'
526
+ { "startIndex": 22, "endIndex": 23, "scopes": ["source.abl"] }, // ' '
527
+ { "startIndex": 23, "endIndex": 34, "scopes": ["source.abl", "keyword.other.abl"] }, // 'transACTION'
528
+ { "startIndex": 34, "endIndex": 35, "scopes": ["source.abl", "punctuation.terminator.abl"] } // ':'
529
+ ];
530
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
531
+ })
532
+
533
+ describe('', () => {
534
+ let statement = `FOR EACH ttTaskMethods WHERE ttTaskMethods.field <> ?
535
+ BY ttTaskMethods.ClassName
536
+ TRANSACTION:`;
537
+ let expectedTokens = [
538
+ [
539
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'FOR'
540
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
541
+ { "startIndex": 4, "endIndex": 8, "scopes": ["source.abl", "keyword.other.abl"] }, // 'EACH'
542
+ { "startIndex": 8, "endIndex": 9, "scopes": ["source.abl"] }, // ' '
543
+ { "startIndex": 9, "endIndex": 22, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'ttTaskMethods'
544
+ { "startIndex": 22, "endIndex": 23, "scopes": ["source.abl"] }, // ' '
545
+ { "startIndex": 23, "endIndex": 28, "scopes": ["source.abl", "keyword.other.abl"] }, // 'WHERE'
546
+ { "startIndex": 28, "endIndex": 29, "scopes": ["source.abl"] }, // ' '
547
+ { "startIndex": 29, "endIndex": 48, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'ttTaskMethods.field'
548
+ { "startIndex": 48, "endIndex": 49, "scopes": ["source.abl"] }, // ' '
549
+ { "startIndex": 49, "endIndex": 51, "scopes": ["source.abl", "keyword.operator.source.abl"] }, // '<>'
550
+ { "startIndex": 51, "endIndex": 52, "scopes": ["source.abl"] }, // ' '
551
+ { "startIndex": 52, "endIndex": 53, "scopes": ["source.abl", "constant.language.abl"] } // '?'
552
+ ],
553
+ [
554
+ { "startIndex": 0, "endIndex": 2, "scopes": ["source.abl"] }, // ' '
555
+ { "startIndex": 2, "endIndex": 4, "scopes": ["source.abl", "keyword.other.abl"] }, // 'BY'
556
+ { "startIndex": 4, "endIndex": 5, "scopes": ["source.abl"] }, // ' '
557
+ { "startIndex": 5, "endIndex": 28, "scopes": ["source.abl", "storage.data.table.abl"] } // 'ttTaskMethods.ClassName'
558
+ ],
559
+ [
560
+ { "startIndex": 0, "endIndex": 2, "scopes": ["source.abl"] }, // ' '
561
+ { "startIndex": 2, "endIndex": 13, "scopes": ["source.abl", "meta.block.label.abl"] }, // 'TRANSACTION'
562
+ { "startIndex": 13, "endIndex": 15, "scopes": ["source.abl"] } // ':'
563
+ ]
564
+ ];
565
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
566
+ })
567
+
568
+ describe('', () => {
569
+ let statement = `for each eCustomer ON error undo, throw:`;
570
+ let expectedTokens = [
571
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'for'
572
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
573
+ { "startIndex": 4, "endIndex": 8, "scopes": ["source.abl", "keyword.other.abl"] }, // 'each'
574
+ { "startIndex": 8, "endIndex": 9, "scopes": ["source.abl"] }, // ' '
575
+ { "startIndex": 9, "endIndex": 18, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'eCustomer'
576
+ { "startIndex": 18, "endIndex": 19, "scopes": ["source.abl"] }, // ' '
577
+ { "startIndex": 19, "endIndex": 21, "scopes": ["source.abl", "keyword.other.abl"] }, // 'ON'
578
+ { "startIndex": 21, "endIndex": 22, "scopes": ["source.abl"] }, // ' '
579
+ { "startIndex": 22, "endIndex": 27, "scopes": ["source.abl", "keyword.other.abl"] }, // 'error'
580
+ { "startIndex": 27, "endIndex": 28, "scopes": ["source.abl"] }, // ' '
581
+ { "startIndex": 28, "endIndex": 32, "scopes": ["source.abl", "keyword.other.abl"] }, // 'undo'
582
+ { "startIndex": 32, "endIndex": 33, "scopes": ["source.abl", "punctuation.separator.comma.abl"] }, // ','
583
+ { "startIndex": 33, "endIndex": 34, "scopes": ["source.abl"] }, // ' '
584
+ { "startIndex": 34, "endIndex": 39, "scopes": ["source.abl", "keyword.other.abl"] }, // 'throw'
585
+ { "startIndex": 39, "endIndex": 40, "scopes": ["source.abl", "punctuation.terminator.abl"] } // ':'
586
+ ];
587
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
588
+ })