abl-tmlanguage 1.3.2 → 1.3.3

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.
@@ -223,7 +223,18 @@
223
223
  }
224
224
  },
225
225
  {
226
- "match": "(?i)\\s*(dataset|table)\\s+([\\w\\-]+)\\s*",
226
+ "match": "(?i)\\s*(dataset)\\s+([\\w\\-]+)\\s*",
227
+ "captures": {
228
+ "1": {
229
+ "name": "keyword.other.abl"
230
+ },
231
+ "2": {
232
+ "name": "storage.data.dataset.abl"
233
+ }
234
+ }
235
+ },
236
+ {
237
+ "match": "(?i)\\s*(table)\\s+([\\w\\-]+)\\s*",
227
238
  "captures": {
228
239
  "1": {
229
240
  "name": "keyword.other.abl"
@@ -1067,7 +1078,7 @@
1067
1078
  },
1068
1079
  "for-join": {
1069
1080
  "comment": "Captures something like ', salesrep where' or 'salesrep where', when the latter is at the beginning of a line. 'OF' phrases handled by of-phrase",
1070
- "match": "(?i)(?<=,|^)\\s*([\\w\\-#$%]+(\\.[\\w\\-#$%]+)?)\\s+(?=where|no-lock|share-lock|exclusive-lock|tenant-where|use-index|table-scan|using|no-prefetch|left|outer-join|break|by|transaction)",
1081
+ "match": "(?i)(?<=,|^)\\s*([\\w\\-#$%]+(\\.[\\w\\-#$%]+)?)\\s+(?=where|no-lock|exclusive-lock|exclusive-loc|exclusive-lo|exclusive-l|share-lock|share-loc|share-lo|share-|share|tenant-where|use-index|table-scan|using|no-prefetch|left|outer-join|break|by|transaction)",
1071
1082
  "captures": {
1072
1083
  "1": {
1073
1084
  "name": "storage.data.table.abl"
@@ -1084,7 +1095,7 @@
1084
1095
  "name": "storage.data.table.abl"
1085
1096
  }
1086
1097
  },
1087
- "end": "(?i)\\s*(?=where|no-lock|share-lock|exclusive-lock|tenant-where|use-index|table-scan|using|no-prefetch|left|outer-join|break|by|transaction|,|:)\\s*",
1098
+ "end": "(?i)\\s*(?=where|no-lock|exclusive-lock|exclusive-loc|exclusive-lo|exclusive-l|share-lock|share-loc|share-lo|share-|share|tenant-where|use-index|table-scan|using|no-prefetch|left|outer-join|break|by|transaction|,|:)\\s*",
1088
1099
  "patterns": [
1089
1100
  {
1090
1101
  "include": "#fields-except-list"
@@ -1122,7 +1133,7 @@
1122
1133
  "name": "keyword.other.abl"
1123
1134
  }
1124
1135
  },
1125
- "end": "(?i)\\s*(?=where|no-lock|share-lock|exclusive-lock|tenant-where|use-index|table-scan|using|no-prefetch|left|outer-join|break|by|transaction|,|:|on)\\s*",
1136
+ "end": "(?i)\\s*(?=where|no-lock|exclusive-lock|exclusive-loc|exclusive-lo|exclusive-l|share-lock|share-loc|share-lo|share-|share|tenant-where|use-index|table-scan|using|no-prefetch|left|outer-join|break|by|transaction|,|:|on)\\s*",
1126
1137
  "patterns": [
1127
1138
  {
1128
1139
  "match": "(?i)\\s*(each|first|last|of)\\s*",
@@ -1604,6 +1615,9 @@
1604
1615
  {
1605
1616
  "include": "#define-variable"
1606
1617
  },
1618
+ {
1619
+ "include": "#define-parameter"
1620
+ },
1607
1621
  {
1608
1622
  "include": "#define-dataset"
1609
1623
  },
@@ -1731,6 +1745,66 @@
1731
1745
  }
1732
1746
  }
1733
1747
  },
1748
+ "define-parameter": {
1749
+ "begin": "(?i)\\b(parameter|paramete|paramet|parame|param)\\b",
1750
+ "beginCaptures": {
1751
+ "1": {
1752
+ "name": "keyword.other.abl"
1753
+ }
1754
+ },
1755
+ "end": "(?i)(?=\\.)|\\b(?=bgcolor|column-label|contet-help-id|dcolor|decimals|drop-target|extent|font|fgcolor|format|initial|label|mouse-pointer|no-undo|not|case-sensitive|pfcolor|view-as|triggers)\\b",
1756
+ "comment": "The end capture does a lookahead on . so that the 'define' capture can end ",
1757
+ "patterns": [
1758
+ {
1759
+ "match": "(?i)\\b(table)\\s+(for)\\s+([\\w\\-#$%]+(\\.[\\w\\-#$%]+)?)\\b",
1760
+ "captures": {
1761
+ "1": {
1762
+ "name": "keyword.other.abl"
1763
+ },
1764
+ "2": {
1765
+ "name": "keyword.other.abl"
1766
+ },
1767
+ "3": {
1768
+ "name": "storage.data.table.abl"
1769
+ }
1770
+ }
1771
+ },
1772
+ {
1773
+ "match": "(?i)\\b(table-handle|dataset-handle)\\s+([a-zA-Z][a-zA-Z0-9\\#\\$\\-\\_\\%\\&]*)\\b",
1774
+ "captures": {
1775
+ "1": {
1776
+ "name": "keyword.other.abl"
1777
+ },
1778
+ "2": {
1779
+ "name": "variable.other.abl"
1780
+ }
1781
+ }
1782
+ },
1783
+ {
1784
+ "match": "(?i)\\b(dataset)\\s+(for)\\s+([\\w\\-#$%]+(\\.[\\w\\-#$%]+)?)\\b",
1785
+ "captures": {
1786
+ "1": {
1787
+ "name": "keyword.other.abl"
1788
+ },
1789
+ "2": {
1790
+ "name": "keyword.other.abl"
1791
+ },
1792
+ "3": {
1793
+ "name": "storage.data.dataset.abl"
1794
+ }
1795
+ }
1796
+ },
1797
+ {
1798
+ "include": "#parameter-as"
1799
+ },
1800
+ {
1801
+ "include": "#keywords"
1802
+ },
1803
+ {
1804
+ "include": "#expression"
1805
+ }
1806
+ ]
1807
+ },
1734
1808
  "define-property": {
1735
1809
  "begin": "(?i)\\b(property|prop)\\b",
1736
1810
  "beginCaptures": {
@@ -2169,11 +2243,14 @@
2169
2243
  }
2170
2244
  },
2171
2245
  "block-label": {
2172
- "match": "(?i)^\\s*(([a-z][a-z0-9\\-\\_\\$]*):)\\s+",
2173
- "comment": "A colon followed by a space is only legal is for block labels. block labels must be at the beginning of a line",
2246
+ "match": "(?i)^\\s*((?!transaction|no-lock|exclusive-lock|exclusive-loc|exclusive-lo|exclusive-l|share-lock|share-loc|share-lo|share-|share)([a-z][a-z0-9\\-\\$\\#]*)+(:))\\s",
2247
+ "comment": "A colon followed by a space is only legal is for block labels. Block labels must also be at the beginning of a line",
2174
2248
  "captures": {
2175
2249
  "2": {
2176
2250
  "name": "meta.block.label.abl"
2251
+ },
2252
+ "3": {
2253
+ "name": "punctuation.terminator.abl"
2177
2254
  }
2178
2255
  }
2179
2256
  },
@@ -2225,6 +2302,9 @@
2225
2302
  {
2226
2303
  "include": "#type-member-call"
2227
2304
  },
2305
+ {
2306
+ "include": "#abl-functions"
2307
+ },
2228
2308
  {
2229
2309
  "include": "#punctuation-comma"
2230
2310
  },
@@ -2267,6 +2347,12 @@
2267
2347
  },
2268
2348
  {
2269
2349
  "include": "#branch-options"
2350
+ },
2351
+ {
2352
+ "include": "#abl-functions"
2353
+ },
2354
+ {
2355
+ "include": "#expression"
2270
2356
  }
2271
2357
  ]
2272
2358
  },
@@ -2714,6 +2800,9 @@
2714
2800
  {
2715
2801
  "include": "#handle-attributes"
2716
2802
  },
2803
+ {
2804
+ "include": "#preprocessors"
2805
+ },
2717
2806
  {
2718
2807
  "include": "#keywords"
2719
2808
  }
@@ -2748,7 +2837,18 @@
2748
2837
  }
2749
2838
  },
2750
2839
  {
2751
- "match": "(?i)\\b(table|dataset)\\s+([\\w\\-#$%]+(\\.[\\w\\-#$%]+)?)\\b",
2840
+ "match": "(?i)\\b(dataset)\\s+([\\w\\-#$%]+(\\.[\\w\\-#$%]+)?)\\b",
2841
+ "captures": {
2842
+ "1": {
2843
+ "name": "keyword.other.abl"
2844
+ },
2845
+ "2": {
2846
+ "name": "storage.data.dataset.abl"
2847
+ }
2848
+ }
2849
+ },
2850
+ {
2851
+ "match": "(?i)\\b(temp-table|table|buffer)\\s+([\\w\\-#$%]+(\\.[\\w\\-#$%]+)?)\\b",
2752
2852
  "captures": {
2753
2853
  "1": {
2754
2854
  "name": "keyword.other.abl"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "abl-tmlanguage",
3
- "version": "1.3.2",
3
+ "version": "1.3.3",
4
4
  "description": "Textmate grammar for Progress OpenEdge ABL Language",
5
5
  "main": "",
6
6
  "repository": {
@@ -0,0 +1,153 @@
1
+ const { assert, expect } = require('chai');
2
+ const shared = require('../shared.js');
3
+
4
+ describe('', () => {
5
+ let statement = `for each bCustomer
6
+ no-lock:
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": 18, "scopes": ["source.abl", "storage.data.table.abl"] } // 'bCustomer'
15
+ ],
16
+ [
17
+ { "startIndex": 0, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
18
+ { "startIndex": 4, "endIndex": 11, "scopes": ["source.abl", "keyword.other.abl"] }, // 'no-lock'
19
+ { "startIndex": 11, "endIndex": 12, "scopes": ["source.abl", "punctuation.terminator.abl"] } // ':'
20
+ ],
21
+ [
22
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'end'
23
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
24
+ ]
25
+ ]
26
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
27
+ })
28
+
29
+ describe('', () => {
30
+ let statement = `for each bCustomer where true no-lock:
31
+ end.`;
32
+ let expectedTokens = [
33
+ [
34
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'for'
35
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
36
+ { "startIndex": 4, "endIndex": 8, "scopes": ["source.abl", "keyword.other.abl"] }, // 'each'
37
+ { "startIndex": 8, "endIndex": 9, "scopes": ["source.abl"] }, // ' '
38
+ { "startIndex": 9, "endIndex": 18, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'bCustomer'
39
+ { "startIndex": 18, "endIndex": 19, "scopes": ["source.abl"] }, // ' '
40
+ { "startIndex": 19, "endIndex": 24, "scopes": ["source.abl", "keyword.other.abl"] }, // 'where'
41
+ { "startIndex": 24, "endIndex": 25, "scopes": ["source.abl"] }, // ' '
42
+ { "startIndex": 25, "endIndex": 29, "scopes": ["source.abl", "constant.language.abl"] }, // 'true'
43
+ { "startIndex": 29, "endIndex": 30, "scopes": ["source.abl"] }, // ' '
44
+ { "startIndex": 30, "endIndex": 37, "scopes": ["source.abl", "keyword.other.abl"] }, // 'no-lock'
45
+ { "startIndex": 37, "endIndex": 38, "scopes": ["source.abl", "punctuation.terminator.abl"] } // ':'
46
+ ],
47
+ [
48
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'end'
49
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
50
+ ]
51
+ ]
52
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
53
+ })
54
+
55
+ describe('', () => {
56
+ let statement = `for each bCustomer
57
+ exclusive-l:
58
+ end.`;
59
+ let expectedTokens = [
60
+ [
61
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'for'
62
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
63
+ { "startIndex": 4, "endIndex": 8, "scopes": ["source.abl", "keyword.other.abl"] }, // 'each'
64
+ { "startIndex": 8, "endIndex": 9, "scopes": ["source.abl"] }, // ' '
65
+ { "startIndex": 9, "endIndex": 18, "scopes": ["source.abl", "storage.data.table.abl"] } // 'bCustomer'
66
+ ],
67
+ [
68
+ { "startIndex": 0, "endIndex": 11, "scopes": ["source.abl", "keyword.other.abl"] }, // 'exclusive-l'
69
+ { "startIndex": 11, "endIndex": 12, "scopes": ["source.abl", "punctuation.terminator.abl"] } // ':'
70
+ ],
71
+ [
72
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'end'
73
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
74
+ ]
75
+ ]
76
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
77
+ })
78
+
79
+ describe('', () => {
80
+ let statement = `for each bCustomer
81
+ share-lo:
82
+ end.`;
83
+ let expectedTokens = [
84
+ [
85
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'for'
86
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
87
+ { "startIndex": 4, "endIndex": 8, "scopes": ["source.abl", "keyword.other.abl"] }, // 'each'
88
+ { "startIndex": 8, "endIndex": 9, "scopes": ["source.abl"] }, // ' '
89
+ { "startIndex": 9, "endIndex": 18, "scopes": ["source.abl", "storage.data.table.abl"] } // 'bCustomer'
90
+ ],
91
+ [
92
+ { "startIndex": 0, "endIndex": 8, "scopes": ["source.abl", "keyword.other.abl"] }, // 'share-lo'
93
+ { "startIndex": 8, "endIndex": 9, "scopes": ["source.abl", "punctuation.terminator.abl"] } // ':'
94
+ ],
95
+ [
96
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'end'
97
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
98
+ ]
99
+ ]
100
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
101
+ })
102
+
103
+ describe('', () => {
104
+ let statement = `block-label: for each bCustomer
105
+ share-lo:
106
+ end.`;
107
+ let expectedTokens = [
108
+ [
109
+ { "startIndex": 0, "endIndex": 11, "scopes": ["source.abl", "meta.block.label.abl"] }, // 'block-label'
110
+ { "startIndex": 11, "endIndex": 12, "scopes": ["source.abl", "punctuation.terminator.abl"] }, // ':'
111
+ { "startIndex": 12, "endIndex": 13, "scopes": ["source.abl"] }, // ' '
112
+ { "startIndex": 13, "endIndex": 16, "scopes": ["source.abl", "keyword.other.abl"] }, // 'for'
113
+ { "startIndex": 16, "endIndex": 17, "scopes": ["source.abl"] }, // ' '
114
+ { "startIndex": 17, "endIndex": 21, "scopes": ["source.abl", "keyword.other.abl"] }, // 'each'
115
+ { "startIndex": 21, "endIndex": 22, "scopes": ["source.abl"] }, // ' '
116
+ { "startIndex": 22, "endIndex": 31, "scopes": ["source.abl", "storage.data.table.abl"] } // 'bCustomer'
117
+ ],
118
+ [
119
+ { "startIndex": 0, "endIndex": 8, "scopes": ["source.abl", "keyword.other.abl"] }, // 'share-lo'
120
+ { "startIndex": 8, "endIndex": 9, "scopes": ["source.abl", "punctuation.terminator.abl"] } // ':'
121
+ ],
122
+ [
123
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'end'
124
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
125
+ ]
126
+ ]
127
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
128
+ })
129
+
130
+ describe('', () => {
131
+ let statement = `block-label:
132
+ repeat for bCustomer:
133
+ end.`;
134
+ let expectedTokens = [
135
+ [
136
+ { "startIndex": 0, "endIndex": 11, "scopes": ["source.abl", "meta.block.label.abl"] }, // 'block-label'
137
+ { "startIndex": 11, "endIndex": 12, "scopes": ["source.abl", "punctuation.terminator.abl"] } // ':'
138
+ ],
139
+ [
140
+ { "startIndex": 0, "endIndex": 6, "scopes": ["source.abl", "meta.block.abl", "keyword.other.abl"] }, // 'repeat'
141
+ { "startIndex": 6, "endIndex": 7, "scopes": ["source.abl", "meta.block.abl"] }, // ' '
142
+ { "startIndex": 7, "endIndex": 10, "scopes": ["source.abl", "meta.block.abl", "keyword.other.abl"] }, // 'for'
143
+ { "startIndex": 10, "endIndex": 11, "scopes": ["source.abl", "meta.block.abl"] }, // ' '
144
+ { "startIndex": 11, "endIndex": 20, "scopes": ["source.abl", "meta.block.abl", "storage.data.table.abl"] }, // 'bCustomer'
145
+ { "startIndex": 20, "endIndex": 21, "scopes": ["source.abl", "punctuation.terminator.abl"] } // ':'
146
+ ],
147
+ [
148
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'end'
149
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
150
+ ]
151
+ ]
152
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
153
+ })
@@ -558,8 +558,8 @@ describe('', () => {
558
558
  ],
559
559
  [
560
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"] } // ':'
561
+ { "startIndex": 2, "endIndex": 13, "scopes": ["source.abl", "keyword.other.abl"] }, // 'TRANSACTION'
562
+ { "startIndex": 13, "endIndex": 14, "scopes": ["source.abl", "punctuation.terminator.abl"] } // ':'
563
563
  ]
564
564
  ];
565
565
  shared.itShouldMatchExpectedScopes(statement, expectedTokens);
@@ -154,3 +154,75 @@ describe('', () => {
154
154
  ];
155
155
  shared.itShouldMatchExpectedScopes(statement, expectedTokens);
156
156
  })
157
+
158
+ describe('', () => {
159
+ let statement = `define output parameter table for ttCustomer.`;
160
+ let expectedTokens = [
161
+ { "startIndex": 0, "endIndex": 6, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'define'
162
+ { "startIndex": 6, "endIndex": 7, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
163
+ { "startIndex": 7, "endIndex": 13, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'output'
164
+ { "startIndex": 13, "endIndex": 14, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
165
+ { "startIndex": 14, "endIndex": 23, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'parameter'
166
+ { "startIndex": 23, "endIndex": 24, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
167
+ { "startIndex": 24, "endIndex": 29, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'table'
168
+ { "startIndex": 29, "endIndex": 30, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
169
+ { "startIndex": 30, "endIndex": 33, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'for'
170
+ { "startIndex": 33, "endIndex": 34, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
171
+ { "startIndex": 34, "endIndex": 44, "scopes": ["source.abl", "meta.define.abl", "storage.data.table.abl"] }, // 'ttCustomer'
172
+ { "startIndex": 44, "endIndex": 45, "scopes": ["source.abl", "meta.define.abl", "punctuation.terminator.abl"] } // '.'
173
+ ];
174
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
175
+ })
176
+
177
+ describe('', () => {
178
+ let statement = `define output parameter dataset for dsCustomer.`;
179
+ let expectedTokens = [
180
+ { "startIndex": 0, "endIndex": 6, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'define'
181
+ { "startIndex": 6, "endIndex": 7, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
182
+ { "startIndex": 7, "endIndex": 13, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'output'
183
+ { "startIndex": 13, "endIndex": 14, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
184
+ { "startIndex": 14, "endIndex": 23, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'parameter'
185
+ { "startIndex": 23, "endIndex": 24, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
186
+ { "startIndex": 24, "endIndex": 31, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'dataset'
187
+ { "startIndex": 31, "endIndex": 32, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
188
+ { "startIndex": 32, "endIndex": 35, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'for'
189
+ { "startIndex": 35, "endIndex": 36, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
190
+ { "startIndex": 36, "endIndex": 46, "scopes": ["source.abl", "meta.define.abl", "storage.data.dataset.abl"] }, // 'dsCustomer'
191
+ { "startIndex": 46, "endIndex": 47, "scopes": ["source.abl", "meta.define.abl", "punctuation.terminator.abl"] } // '.'
192
+ ];
193
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
194
+ })
195
+
196
+ describe('', () => {
197
+ let statement = `define output parameter table-handle vTableHandle.`;
198
+ let expectedTokens = [
199
+ { "startIndex": 0, "endIndex": 6, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'define'
200
+ { "startIndex": 6, "endIndex": 7, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
201
+ { "startIndex": 7, "endIndex": 13, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'output'
202
+ { "startIndex": 13, "endIndex": 14, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
203
+ { "startIndex": 14, "endIndex": 23, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'parameter'
204
+ { "startIndex": 23, "endIndex": 24, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
205
+ { "startIndex": 24, "endIndex": 36, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'table-handle'
206
+ { "startIndex": 36, "endIndex": 37, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
207
+ { "startIndex": 37, "endIndex": 49, "scopes": ["source.abl", "meta.define.abl", "variable.other.abl"] }, // 'vTableHandle'
208
+ { "startIndex": 49, "endIndex": 50, "scopes": ["source.abl", "meta.define.abl", "punctuation.terminator.abl"] } // '.'
209
+ ];
210
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
211
+ })
212
+
213
+ describe('', () => {
214
+ let statement = `define output parameter dataset-handle vDatasetHandle.`;
215
+ let expectedTokens = [
216
+ { "startIndex": 0, "endIndex": 6, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'define'
217
+ { "startIndex": 6, "endIndex": 7, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
218
+ { "startIndex": 7, "endIndex": 13, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'output'
219
+ { "startIndex": 13, "endIndex": 14, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
220
+ { "startIndex": 14, "endIndex": 23, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'parameter'
221
+ { "startIndex": 23, "endIndex": 24, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
222
+ { "startIndex": 24, "endIndex": 38, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'dataset-handle'
223
+ { "startIndex": 38, "endIndex": 39, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
224
+ { "startIndex": 39, "endIndex": 53, "scopes": ["source.abl", "meta.define.abl", "variable.other.abl"] }, // 'vDatasetHandle'
225
+ { "startIndex": 53, "endIndex": 54, "scopes": ["source.abl", "meta.define.abl", "punctuation.terminator.abl"] } // '.'
226
+ ];
227
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
228
+ })
@@ -181,4 +181,72 @@ end.`;
181
181
  ]
182
182
  ];
183
183
  shared.itShouldMatchExpectedScopes(statement, expectedTokens);
184
+ })
185
+
186
+ describe('', () => {
187
+ let statement = `do vI = 1 to num-entries(vList):
188
+ end.`;
189
+ let expectedTokens = [
190
+ [
191
+ { "startIndex": 0, "endIndex": 2, "scopes": ["source.abl", "meta.block.abl", "keyword.other.abl"] }, // 'do'
192
+ { "startIndex": 2, "endIndex": 3, "scopes": ["source.abl", "meta.block.abl"] }, // ' '
193
+ { "startIndex": 3, "endIndex": 5, "scopes": ["source.abl", "meta.block.abl", "variable.other.abl"] }, // 'vI'
194
+ { "startIndex": 5, "endIndex": 6, "scopes": ["source.abl", "meta.block.abl"] }, // ' '
195
+ { "startIndex": 6, "endIndex": 7, "scopes": ["source.abl", "meta.block.abl", "keyword.operator.source.abl"] }, // '='
196
+ { "startIndex": 7, "endIndex": 8, "scopes": ["source.abl", "meta.block.abl"] }, // ' '
197
+ { "startIndex": 8, "endIndex": 9, "scopes": ["source.abl", "meta.block.abl", "constant.numeric.source.abl"] }, // '1'
198
+ { "startIndex": 9, "endIndex": 10, "scopes": ["source.abl", "meta.block.abl"] }, // ' '
199
+ { "startIndex": 10, "endIndex": 12, "scopes": ["source.abl", "meta.block.abl", "keyword.other.abl"] }, // 'to'
200
+ { "startIndex": 12, "endIndex": 13, "scopes": ["source.abl", "meta.block.abl"] }, // ' '
201
+ { "startIndex": 13, "endIndex": 24, "scopes": ["source.abl", "meta.block.abl", "meta.function-call.abl", "support.function.abl"] }, // 'num-entries'
202
+ { "startIndex": 24, "endIndex": 25, "scopes": ["source.abl", "meta.block.abl", "meta.function-call.abl", "meta.function.arguments.abl", "meta.brace.round.js"] }, // '('
203
+ { "startIndex": 25, "endIndex": 30, "scopes": ["source.abl", "meta.block.abl", "meta.function-call.abl", "meta.function.arguments.abl", "variable.other.abl"] }, // 'vList'
204
+ { "startIndex": 30, "endIndex": 31, "scopes": ["source.abl", "meta.block.abl", "meta.function-call.abl", "meta.brace.round.js"] }, // ')'
205
+ { "startIndex": 31, "endIndex": 32, "scopes": ["source.abl", "punctuation.terminator.abl"] } // ':'
206
+ ],
207
+ [
208
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'end'
209
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
210
+ ]
211
+ ];
212
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
213
+ })
214
+
215
+ describe('', () => {
216
+ let statement = `do vI = 1 to objRef:MethodCalledNumEntries(vList):
217
+ run ip_thing.
218
+ end.`;
219
+ let expectedTokens = [
220
+ [
221
+ { "startIndex": 0, "endIndex": 2, "scopes": ["source.abl", "meta.block.abl", "keyword.other.abl"] }, // 'do'
222
+ { "startIndex": 2, "endIndex": 3, "scopes": ["source.abl", "meta.block.abl"] }, // ' '
223
+ { "startIndex": 3, "endIndex": 5, "scopes": ["source.abl", "meta.block.abl", "variable.other.abl"] }, // 'vI'
224
+ { "startIndex": 5, "endIndex": 6, "scopes": ["source.abl", "meta.block.abl"] }, // ' '
225
+ { "startIndex": 6, "endIndex": 7, "scopes": ["source.abl", "meta.block.abl", "keyword.operator.source.abl"] }, // '='
226
+ { "startIndex": 7, "endIndex": 8, "scopes": ["source.abl", "meta.block.abl"] }, // ' '
227
+ { "startIndex": 8, "endIndex": 9, "scopes": ["source.abl", "meta.block.abl", "constant.numeric.source.abl"] }, // '1'
228
+ { "startIndex": 9, "endIndex": 10, "scopes": ["source.abl", "meta.block.abl"] }, // ' '
229
+ { "startIndex": 10, "endIndex": 12, "scopes": ["source.abl", "meta.block.abl", "keyword.other.abl"] }, // 'to'
230
+ { "startIndex": 12, "endIndex": 13, "scopes": ["source.abl", "meta.block.abl"] }, // ' '
231
+ { "startIndex": 13, "endIndex": 19, "scopes": ["source.abl", "meta.block.abl", "variable.other.abl"] }, // 'objRef'
232
+ { "startIndex": 19, "endIndex": 20, "scopes": ["source.abl", "punctuation.separator.colon.abl"] }, // ':'
233
+ { "startIndex": 20, "endIndex": 42, "scopes": ["source.abl", "entity.name.function.abl"] }, // 'MethodCalledNumEntries'
234
+ { "startIndex": 42, "endIndex": 43, "scopes": ["source.abl", "meta.function.arguments.abl", "meta.brace.round.js"] }, // '('
235
+ { "startIndex": 43, "endIndex": 48, "scopes": ["source.abl", "meta.function.arguments.abl", "variable.other.abl"] }, // 'vList'
236
+ { "startIndex": 48, "endIndex": 49, "scopes": ["source.abl", "meta.brace.round.js"] }, // ')'
237
+ { "startIndex": 49, "endIndex": 50, "scopes": ["source.abl", "punctuation.terminator.abl"] } // ':'
238
+ ],
239
+ [
240
+ { "startIndex": 0, "endIndex": 2, "scopes": ["source.abl"] }, // ' '
241
+ { "startIndex": 2, "endIndex": 5, "scopes": ["source.abl", "keyword.other.abl"] }, // 'run'
242
+ { "startIndex": 5, "endIndex": 6, "scopes": ["source.abl"] }, // ' '
243
+ { "startIndex": 6, "endIndex": 14, "scopes": ["source.abl", "entity.name.procedure.abl"] }, // 'ip_thing'
244
+ { "startIndex": 14, "endIndex": 15, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
245
+ ],
246
+ [
247
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'end'
248
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
249
+ ]
250
+ ];
251
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
184
252
  })
@@ -24,7 +24,7 @@ describe('', () => {
24
24
  { "startIndex": 11, "endIndex": 12, "scopes": ["source.abl", "meta.function.arguments.abl", "meta.brace.round.js"] }, // '('
25
25
  { "startIndex": 12, "endIndex": 19, "scopes": ["source.abl", "meta.function.arguments.abl", "keyword.other.abl"] }, // 'dataset'
26
26
  { "startIndex": 19, "endIndex": 20, "scopes": ["source.abl", "meta.function.arguments.abl"] }, // ' '
27
- { "startIndex": 20, "endIndex": 26, "scopes": ["source.abl", "meta.function.arguments.abl", "storage.data.table.abl"] }, // 'dsData'
27
+ { "startIndex": 20, "endIndex": 26, "scopes": ["source.abl", "meta.function.arguments.abl", "storage.data.dataset.abl"] }, // 'dsData'
28
28
  { "startIndex": 26, "endIndex": 27, "scopes": ["source.abl", "meta.function.arguments.abl"] }, // ' '
29
29
  { "startIndex": 27, "endIndex": 39, "scopes": ["source.abl", "meta.function.arguments.abl", "keyword.other.abl"] }, // 'by-reference'
30
30
  { "startIndex": 39, "endIndex": 40, "scopes": ["source.abl", "meta.brace.round.js"] }, // ')'
@@ -33,3 +33,84 @@ describe('', () => {
33
33
  shared.itShouldMatchExpectedScopes(statement, expectedTokens);
34
34
  })
35
35
 
36
+ describe('', () => {
37
+ let statement = `run Foo(input (dataset dsCustomer:handle)).`;
38
+ let expectedTokens = [
39
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'run'
40
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
41
+ { "startIndex": 4, "endIndex": 7, "scopes": ["source.abl", "entity.name.procedure.abl"] }, // 'Foo'
42
+ { "startIndex": 7, "endIndex": 8, "scopes": ["source.abl", "meta.function.arguments.abl", "meta.brace.round.js"] }, // '('
43
+ { "startIndex": 8, "endIndex": 13, "scopes": ["source.abl", "meta.function.arguments.abl", "keyword.other.abl"] }, // 'input'
44
+ { "startIndex": 13, "endIndex": 14, "scopes": ["source.abl", "meta.function.arguments.abl"] }, // ' '
45
+ { "startIndex": 14, "endIndex": 15, "scopes": ["source.abl", "meta.function.arguments.abl", "meta.brace.round.js"] }, // '('
46
+ { "startIndex": 15, "endIndex": 22, "scopes": ["source.abl", "meta.function.arguments.abl", "keyword.other.abl"] }, // 'dataset'
47
+ { "startIndex": 22, "endIndex": 23, "scopes": ["source.abl", "meta.function.arguments.abl"] }, // ' '
48
+ { "startIndex": 23, "endIndex": 33, "scopes": ["source.abl", "meta.function.arguments.abl", "storage.data.dataset.abl"] }, // 'dsCustomer'
49
+ { "startIndex": 33, "endIndex": 34, "scopes": ["source.abl", "meta.function.arguments.abl", "punctuation.separator.colon.abl"] }, // ':'
50
+ { "startIndex": 34, "endIndex": 40, "scopes": ["source.abl", "meta.function.arguments.abl", "entity.name.function.abl"] }, // 'handle'
51
+ { "startIndex": 40, "endIndex": 41, "scopes": ["source.abl", "meta.brace.round.js"] }, // ')'
52
+ { "startIndex": 41, "endIndex": 42, "scopes": ["source.abl", "meta.brace.round.js"] }, // ')'
53
+ { "startIndex": 42, "endIndex": 43, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
54
+ ];
55
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
56
+ })
57
+
58
+ describe('', () => {
59
+ let statement = `buffer ttCustomer:buffer-copy(buffer Customer:handle).`;
60
+ let expectedTokens = [
61
+ { "startIndex": 0, "endIndex": 6, "scopes": ["source.abl", "keyword.other.abl"] }, // 'buffer'
62
+ { "startIndex": 6, "endIndex": 7, "scopes": ["source.abl"] }, // ' '
63
+ { "startIndex": 7, "endIndex": 17, "scopes": ["source.abl", "storage.data.table.abl"] }, // 'ttCustomer'
64
+ { "startIndex": 17, "endIndex": 18, "scopes": ["source.abl", "punctuation.separator.colon.abl"] }, // ':'
65
+ { "startIndex": 18, "endIndex": 29, "scopes": ["source.abl", "entity.name.function.abl"] }, // 'buffer-copy'
66
+ { "startIndex": 29, "endIndex": 30, "scopes": ["source.abl", "meta.function.arguments.abl", "meta.brace.round.js"] }, // '('
67
+ { "startIndex": 30, "endIndex": 36, "scopes": ["source.abl", "meta.function.arguments.abl", "keyword.other.abl"] }, // 'buffer'
68
+ { "startIndex": 36, "endIndex": 37, "scopes": ["source.abl", "meta.function.arguments.abl"] }, // ' '
69
+ { "startIndex": 37, "endIndex": 45, "scopes": ["source.abl", "meta.function.arguments.abl", "storage.data.table.abl"] }, // 'Customer'
70
+ { "startIndex": 45, "endIndex": 46, "scopes": ["source.abl", "meta.function.arguments.abl", "punctuation.separator.colon.abl"] }, // ':'
71
+ { "startIndex": 46, "endIndex": 52, "scopes": ["source.abl", "meta.function.arguments.abl", "entity.name.function.abl"] }, // 'handle'
72
+ { "startIndex": 52, "endIndex": 53, "scopes": ["source.abl", "meta.brace.round.js"] }, // ')'
73
+ { "startIndex": 53, "endIndex": 54, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
74
+ ];
75
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
76
+ })
77
+
78
+ describe('', () => {
79
+ let statement = `run Foo(input buffer Customer:handle).`;
80
+ let expectedTokens = [
81
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'run'
82
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
83
+ { "startIndex": 4, "endIndex": 7, "scopes": ["source.abl", "entity.name.procedure.abl"] }, // 'Foo'
84
+ { "startIndex": 7, "endIndex": 8, "scopes": ["source.abl", "meta.function.arguments.abl", "meta.brace.round.js"] }, // '('
85
+ { "startIndex": 8, "endIndex": 13, "scopes": ["source.abl", "meta.function.arguments.abl", "keyword.other.abl"] }, // 'input'
86
+ { "startIndex": 13, "endIndex": 14, "scopes": ["source.abl", "meta.function.arguments.abl"] }, // ' '
87
+ { "startIndex": 14, "endIndex": 20, "scopes": ["source.abl", "meta.function.arguments.abl", "keyword.other.abl"] }, // 'buffer'
88
+ { "startIndex": 20, "endIndex": 21, "scopes": ["source.abl", "meta.function.arguments.abl"] }, // ' '
89
+ { "startIndex": 21, "endIndex": 29, "scopes": ["source.abl", "meta.function.arguments.abl", "storage.data.table.abl"] }, // 'Customer'
90
+ { "startIndex": 29, "endIndex": 30, "scopes": ["source.abl", "meta.function.arguments.abl", "punctuation.separator.colon.abl"] }, // ':'
91
+ { "startIndex": 30, "endIndex": 36, "scopes": ["source.abl", "meta.function.arguments.abl", "entity.name.function.abl"] }, // 'handle'
92
+ { "startIndex": 36, "endIndex": 37, "scopes": ["source.abl", "meta.brace.round.js"] }, // ')'
93
+ { "startIndex": 37, "endIndex": 38, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
94
+ ];
95
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
96
+ })
97
+
98
+ describe('', () => {
99
+ let statement = `run Foo(input temp-table ttCustomer:handle).`;
100
+ let expectedTokens = [
101
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'run'
102
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
103
+ { "startIndex": 4, "endIndex": 7, "scopes": ["source.abl", "entity.name.procedure.abl"] }, // 'Foo'
104
+ { "startIndex": 7, "endIndex": 8, "scopes": ["source.abl", "meta.function.arguments.abl", "meta.brace.round.js"] }, // '('
105
+ { "startIndex": 8, "endIndex": 13, "scopes": ["source.abl", "meta.function.arguments.abl", "keyword.other.abl"] }, // 'input'
106
+ { "startIndex": 13, "endIndex": 14, "scopes": ["source.abl", "meta.function.arguments.abl"] }, // ' '
107
+ { "startIndex": 14, "endIndex": 24, "scopes": ["source.abl", "meta.function.arguments.abl", "keyword.other.abl"] }, // 'temp-table'
108
+ { "startIndex": 24, "endIndex": 25, "scopes": ["source.abl", "meta.function.arguments.abl"] }, // ' '
109
+ { "startIndex": 25, "endIndex": 35, "scopes": ["source.abl", "meta.function.arguments.abl", "storage.data.table.abl"] }, // 'ttCustomer'
110
+ { "startIndex": 35, "endIndex": 36, "scopes": ["source.abl", "meta.function.arguments.abl", "punctuation.separator.colon.abl"] }, // ':'
111
+ { "startIndex": 36, "endIndex": 42, "scopes": ["source.abl", "meta.function.arguments.abl", "entity.name.function.abl"] }, // 'handle'
112
+ { "startIndex": 42, "endIndex": 43, "scopes": ["source.abl", "meta.brace.round.js"] }, // ')'
113
+ { "startIndex": 43, "endIndex": 44, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
114
+ ];
115
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
116
+ })
@@ -134,7 +134,7 @@ end constructor.`;
134
134
  { "startIndex": 64, "endIndex": 65, "scopes": ["source.abl", "meta.define.method.abl"] }, // ' '
135
135
  { "startIndex": 65, "endIndex": 72, "scopes": ["source.abl", "meta.define.method.abl", "keyword.other.abl"] }, // 'dataset'
136
136
  { "startIndex": 72, "endIndex": 73, "scopes": ["source.abl", "meta.define.method.abl"] }, // ' '
137
- { "startIndex": 73, "endIndex": 79, "scopes": ["source.abl", "meta.define.method.abl", "storage.data.table.abl"] }, // 'dsData'
137
+ { "startIndex": 73, "endIndex": 79, "scopes": ["source.abl", "meta.define.method.abl", "storage.data.dataset.abl"] }, // 'dsData'
138
138
  { "startIndex": 79, "endIndex": 80, "scopes": ["source.abl", "meta.define.method.abl", "meta.brace.round.js"] }, // ')'
139
139
  { "startIndex": 80, "endIndex": 81, "scopes": ["source.abl", "punctuation.terminator.abl"] } // ':'
140
140
  ],
@@ -145,7 +145,7 @@ end method.`;
145
145
  { "startIndex": 64, "endIndex": 65, "scopes": ["source.abl", "meta.define.method.abl"] }, // ' '
146
146
  { "startIndex": 65, "endIndex": 72, "scopes": ["source.abl", "meta.define.method.abl", "keyword.other.abl"] }, // 'dataset'
147
147
  { "startIndex": 72, "endIndex": 73, "scopes": ["source.abl", "meta.define.method.abl"] }, // ' '
148
- { "startIndex": 73, "endIndex": 79, "scopes": ["source.abl", "meta.define.method.abl", "storage.data.table.abl"] }, // 'dsData'
148
+ { "startIndex": 73, "endIndex": 79, "scopes": ["source.abl", "meta.define.method.abl", "storage.data.dataset.abl"] }, // 'dsData'
149
149
  { "startIndex": 79, "endIndex": 80, "scopes": ["source.abl", "meta.define.method.abl", "meta.brace.round.js"] }, // ')'
150
150
  { "startIndex": 80, "endIndex": 81, "scopes": ["source.abl", "punctuation.terminator.abl"] } // ':'
151
151
  ],
@@ -0,0 +1,83 @@
1
+ const { assert, expect } = require('chai');
2
+ const shared = require('../shared.js');
3
+
4
+ describe('', () => {
5
+ let statement = `&global-define MY-TABLE-NEW "table"`;
6
+ let expectedTokens = [
7
+ { "startIndex": 0, "endIndex": 14, "scopes": ["source.abl", "meta.preprocessor.define.abl", "keyword.other.abl"] }, // '&global-define'
8
+ { "startIndex": 14, "endIndex": 15, "scopes": ["source.abl", "meta.preprocessor.define.abl"] }, // ' '
9
+ { "startIndex": 15, "endIndex": 27, "scopes": ["source.abl", "meta.preprocessor.define.abl", "entity.name.function.preprocessor.abl"] }, // 'MY-TABLE-NEW'
10
+ { "startIndex": 27, "endIndex": 28, "scopes": ["source.abl", "meta.preprocessor.define.abl"] }, // ' '
11
+ { "startIndex": 28, "endIndex": 29, "scopes": ["source.abl", "meta.preprocessor.define.abl", "string.double.complex.abl", "punctuation.definition.string.begin.abl"] }, // '"'
12
+ { "startIndex": 29, "endIndex": 34, "scopes": ["source.abl", "meta.preprocessor.define.abl", "string.double.complex.abl"] }, // 'table'
13
+ { "startIndex": 34, "endIndex": 35, "scopes": ["source.abl", "meta.preprocessor.define.abl", "string.double.complex.abl", "punctuation.definition.string.end.abl"] } // '"'
14
+ ];
15
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
16
+ })
17
+
18
+ describe('', () => {
19
+ let statement = `&global-define TEST-NEW-2 "b"`;
20
+ let expectedTokens = [
21
+ { "startIndex": 0, "endIndex": 14, "scopes": ["source.abl", "meta.preprocessor.define.abl", "keyword.other.abl"] }, // '&global-define'
22
+ { "startIndex": 14, "endIndex": 15, "scopes": ["source.abl", "meta.preprocessor.define.abl"] }, // ' '
23
+ { "startIndex": 15, "endIndex": 25, "scopes": ["source.abl", "meta.preprocessor.define.abl", "entity.name.function.preprocessor.abl"] }, // 'TEST-NEW-2'
24
+ { "startIndex": 25, "endIndex": 26, "scopes": ["source.abl", "meta.preprocessor.define.abl"] }, // ' '
25
+ { "startIndex": 26, "endIndex": 27, "scopes": ["source.abl", "meta.preprocessor.define.abl", "string.double.complex.abl", "punctuation.definition.string.begin.abl"] }, // '"'
26
+ { "startIndex": 27, "endIndex": 28, "scopes": ["source.abl", "meta.preprocessor.define.abl", "string.double.complex.abl"] }, // 'b'
27
+ { "startIndex": 28, "endIndex": 29, "scopes": ["source.abl", "meta.preprocessor.define.abl", "string.double.complex.abl", "punctuation.definition.string.end.abl"] } // '"'
28
+ ];
29
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
30
+ })
31
+
32
+ describe('', () => {
33
+ let statement = `define variable v as character initial {&MY-TABLE-NEW} no-undo.`;
34
+ let expectedTokens = [
35
+ { "startIndex": 0, "endIndex": 6, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'define'
36
+ { "startIndex": 6, "endIndex": 7, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
37
+ { "startIndex": 7, "endIndex": 15, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'variable'
38
+ { "startIndex": 15, "endIndex": 16, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
39
+ { "startIndex": 16, "endIndex": 17, "scopes": ["source.abl", "meta.define.abl", "variable.other.abl"] }, // 'v'
40
+ { "startIndex": 17, "endIndex": 18, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
41
+ { "startIndex": 18, "endIndex": 20, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'as'
42
+ { "startIndex": 20, "endIndex": 21, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
43
+ { "startIndex": 21, "endIndex": 30, "scopes": ["source.abl", "meta.define.abl", "storage.type.abl"] }, // 'character'
44
+ { "startIndex": 30, "endIndex": 31, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
45
+ { "startIndex": 31, "endIndex": 38, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'initial'
46
+ { "startIndex": 38, "endIndex": 39, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
47
+ { "startIndex": 39, "endIndex": 54, "scopes": ["source.abl", "meta.define.abl", "storage.type.function.abl"] }, // '{&MY-TABLE-NEW}'
48
+ { "startIndex": 54, "endIndex": 55, "scopes": ["source.abl", "meta.define.abl"] }, // ' '
49
+ { "startIndex": 55, "endIndex": 62, "scopes": ["source.abl", "meta.define.abl", "keyword.other.abl"] }, // 'no-undo'
50
+ { "startIndex": 62, "endIndex": 63, "scopes": ["source.abl", "meta.define.abl", "punctuation.terminator.abl"] } // '.'
51
+ ];
52
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
53
+ })
54
+
55
+ describe('', () => {
56
+ let statement = `if {&MY-TABLE-NEW} eq "table" then
57
+ do:
58
+ end.`;
59
+ let expectedTokens = [
60
+ [
61
+ { "startIndex": 0, "endIndex": 2, "scopes": ["source.abl", "keyword.other.abl"] }, // 'if'
62
+ { "startIndex": 2, "endIndex": 3, "scopes": ["source.abl"] }, // ' '
63
+ { "startIndex": 3, "endIndex": 18, "scopes": ["source.abl", "storage.type.function.abl"] }, // '{&MY-TABLE-NEW}'
64
+ { "startIndex": 18, "endIndex": 19, "scopes": ["source.abl"] }, // ' '
65
+ { "startIndex": 19, "endIndex": 21, "scopes": ["source.abl", "keyword.operator.source.abl"] }, // 'eq'
66
+ { "startIndex": 21, "endIndex": 22, "scopes": ["source.abl"] }, // ' '
67
+ { "startIndex": 22, "endIndex": 23, "scopes": ["source.abl", "string.double.complex.abl", "punctuation.definition.string.begin.abl"] }, // '"'
68
+ { "startIndex": 23, "endIndex": 28, "scopes": ["source.abl", "string.double.complex.abl"] }, // 'table'
69
+ { "startIndex": 28, "endIndex": 29, "scopes": ["source.abl", "string.double.complex.abl", "punctuation.definition.string.end.abl"] }, // '"'
70
+ { "startIndex": 29, "endIndex": 30, "scopes": ["source.abl"] }, // ' '
71
+ { "startIndex": 30, "endIndex": 34, "scopes": ["source.abl", "keyword.other.abl"] } // 'then'
72
+ ],
73
+ [
74
+ { "startIndex": 0, "endIndex": 2, "scopes": ["source.abl", "meta.block.abl", "keyword.other.abl"] }, // 'do'
75
+ { "startIndex": 2, "endIndex": 3, "scopes": ["source.abl", "punctuation.terminator.abl"] } // ':'
76
+ ],
77
+ [
78
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'end'
79
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
80
+ ]
81
+ ];
82
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
83
+ })
@@ -829,7 +829,7 @@ describe('', () => {
829
829
  { "startIndex": 56, "endIndex": 57, "scopes": ["source.abl", "meta.define.method.abl"] }, // ' '
830
830
  { "startIndex": 57, "endIndex": 64, "scopes": ["source.abl", "meta.define.method.abl", "keyword.other.abl"] }, // 'dataset'
831
831
  { "startIndex": 64, "endIndex": 65, "scopes": ["source.abl", "meta.define.method.abl"] }, // ' '
832
- { "startIndex": 65, "endIndex": 75, "scopes": ["source.abl", "meta.define.method.abl", "storage.data.table.abl"] }, // 'dsCustomer'
832
+ { "startIndex": 65, "endIndex": 75, "scopes": ["source.abl", "meta.define.method.abl", "storage.data.dataset.abl"] }, // 'dsCustomer'
833
833
  { "startIndex": 75, "endIndex": 76, "scopes": ["source.abl", "meta.define.method.abl", "meta.brace.round.js"] }, // ')'
834
834
  { "startIndex": 76, "endIndex": 77, "scopes": ["source.abl", "punctuation.terminator.abl"] } // ':'
835
835
  ]