abl-tmlanguage 1.3.22 → 1.3.24

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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
1
+ 1.3.24
2
+ ======
3
+
4
+ - ✨ Improve scoping for RUN statements (PR #72, issue vscode-abl/vscode-abl#479)
5
+
6
+ 1.3.23
7
+ ======
8
+
9
+ - ✨ Improve scoping for RUN statements (PR #71, issue vscode-abl/vscode-abl#479)
10
+
1
11
  1.3.22
2
12
  ======
3
13
 
@@ -479,6 +479,9 @@
479
479
  {
480
480
  "include": "#comment"
481
481
  },
482
+ {
483
+ "include": "#run-options"
484
+ },
482
485
  {
483
486
  "include": "#buffer-copy"
484
487
  },
@@ -1615,7 +1618,7 @@
1615
1618
  }
1616
1619
  },
1617
1620
  "property-get-set-block": {
1618
- "begin": "\\s*(?<!:)\\s*([Gg][Ee][Tt]|[Ss][Ee][Tt])\\b(?![#$\\-_%&])",
1621
+ "begin": "\\s*(?<!:)\\s*([Gg][Ee][Tt]|[Ss][Ee][Tt])\\b(?![#$\\-_%&])(?=\\()",
1619
1622
  "beginCaptures": {
1620
1623
  "1": {
1621
1624
  "name": "keyword.other.abl"
@@ -2903,7 +2906,7 @@
2903
2906
  },
2904
2907
  "end-block": {
2905
2908
  "comment": "Certain blocks have the option of END <block name>",
2906
- "match": "(?i)\\s*(end)\\s+(CASE|CATCH|CLASS|CONSTRUCTOR|DESTRUCTOR|ENUM|FINALLY|FUNCTION|GET|INTERFACE|METHOD|PROCEDURE|SET|TRIGGERS)\\s*",
2909
+ "match": "(?i)\\s*(end)\\s+(case|catch|class|constructor|destructor|enum|finally|function|get|interface|method|procedure|set|triggers)\\s*",
2907
2910
  "captures": {
2908
2911
  "1": {
2909
2912
  "name": "keyword.other.abl"
@@ -3685,6 +3688,9 @@
3685
3688
  {
3686
3689
  "include": "#punctuation-comma"
3687
3690
  },
3691
+ {
3692
+ "include": "#argument-reference"
3693
+ },
3688
3694
  {
3689
3695
  "include": "#preprocessors"
3690
3696
  }
@@ -3872,7 +3878,7 @@
3872
3878
  "name": "keyword.other.abl"
3873
3879
  }
3874
3880
  },
3875
- "end": "(?i)(?=\\.|value|set|persistent|single-run|singleton|on|no-error|in|asynchronous|\\()",
3881
+ "end": "(?i)(?=\\.|value|set|persistent|single-run|singleton|on|no-error|in|asynchronous|event-procedure|\\()",
3876
3882
  "patterns": [
3877
3883
  {
3878
3884
  "include": "#string"
@@ -3891,6 +3897,21 @@
3891
3897
  }
3892
3898
  ]
3893
3899
  },
3900
+ "run-options": {
3901
+ "patterns": [
3902
+ {
3903
+ "match": "\\b(([Ss][Ee][Tt])|([Ii][Nn]))\\s+([a-zA-Z_][a-zA-Z0-9_#$\\-%&]*)\\b",
3904
+ "captures": {
3905
+ "1": {
3906
+ "name": "keyword.other.abl"
3907
+ },
3908
+ "4": {
3909
+ "name": "variable.other.abl"
3910
+ }
3911
+ }
3912
+ }
3913
+ ]
3914
+ },
3894
3915
  "procedure-name": {
3895
3916
  "comment": "(External) Program names are files, so need to support unicode.",
3896
3917
  "match": "([\\w\\-\\$\\@\\/\\\\\\.]{1,256})(?=\\b|\\.$)",
@@ -3902,9 +3923,9 @@
3902
3923
  },
3903
3924
  "include-file": {
3904
3925
  "name": "meta.include.abl",
3905
- "comment": "https://docs.progress.com/bundle/abl-reference/page/Include-file-reference.html. Filesystem names can be unicode",
3926
+ "comment": "https://docs.progress.com/bundle/abl-reference/page/Include-file-reference.html. Filesystem names can be unicode",
3906
3927
  "begin": "({)\\s*(?!&)(([\"]?)([\\\\\/\\w$\\-\\.]+)([\"]?))",
3907
- "beginCaptures": {
3928
+ "beginCaptures": {
3908
3929
  "1": {
3909
3930
  "name": "punctuation.section.abl"
3910
3931
  },
@@ -3912,7 +3933,7 @@
3912
3933
  "name": "punctuation.definition.string.begin.abl"
3913
3934
  },
3914
3935
  "4": {
3915
- "name": "entity.name.include.abl"
3936
+ "name": "entity.name.include.abl"
3916
3937
  },
3917
3938
  "5": {
3918
3939
  "name": "punctuation.definition.string.end.abl"
@@ -4481,7 +4502,7 @@
4481
4502
  },
4482
4503
  "keywords-A": {
4483
4504
  "comment": "The keyword must not have a trailing variable character (one of #$-_%&)",
4484
- "match": "(?i)\\b(a(?:bort|bstract|ccumulate?|ccumula?|ccumu?|cross|ctive-form|ctive-window|dd|dvise|ggregate|lert-box|ll|llow-replication|lter|lternate-key|mbiguous?|mbiguo?|mbig|nd|nsi-only|ny|ny-key|ny-printable|nywhere|ppend|ppend-line|pplication|pply|rray-message?|rray-messa?|rray-mes?|rray-m|s|s-cursor|scending?|scendi?|scen?|sc|sk-overwrite|ssembly|ssign|t|ttach|ttachment|ttribute-type|udit-control|udit-policy|uthorization|uto-endkey|uto-go|utomatic|vailable?|vailab?|vail|verage?|vera?|ve|vg))\\b(?![#$\\-_%&])",
4505
+ "match": "(?i)\\b(a(?:bort|bstract|ccumulate?|ccumula?|ccumu?|cross|ctive-form|ctive-window|dd|dvise|ggregate|lert-box|ll|llow-replication|lter|lternate-key|mbiguous?|mbiguo?|mbig|nd|nsi-only|ny|ny-key|ny-printable|nywhere|ppend|ppend-line|pplication|pply|rray-message?|rray-messa?|rray-mes?|rray-m|s|s-cursor|scending?|scendi?|scen?|sc|sk-overwrite|ssembly|ssign|synchronous|t|ttach|ttachment|ttribute-type|udit-control|udit-policy|uthorization|uto-endkey|uto-go|utomatic|vailable?|vailab?|vail|verage?|vera?|ve|vg))\\b(?![#$\\-_%&])",
4485
4506
  "captures": {
4486
4507
  "1": {
4487
4508
  "name": "keyword.other.abl"
@@ -4517,7 +4538,7 @@
4517
4538
  },
4518
4539
  "keywords-E": {
4519
4540
  "comment": "The keyword must not have a trailing variable character (one of #$-_%&)",
4520
- "match": "(?i)\\b(e(?:ach|cho|dge|dge-pixels?|dge-pixe?|dge-pi?|diting|ditor|ditor-backtab|ditor-tab|lse|mpty|mpty-selection|nable|nd|nd-box-selection|nd-error|nd-key|nd-move|nd-resize|nd-row-resize|nd-search|ndkey|nter-menubar|ntry|num|q|rror|rror-status?|rror-stat|scape|vent|vent-handler-context|vents|xcept|xclusive|xclusive-lock?|xclusive-lo?|xclusive-web-user?|xclusive-web-us?|xclusive-web-?|xecute|xists|xit|xpire|xplicit|xport|xtended|xtent|xternal|xtract))\\b(?![#$\\-_%&])",
4541
+ "match": "(?i)\\b(e(?:ach|cho|dge|dge-pixels?|dge-pixe?|dge-pi?|diting|ditor|ditor-backtab|ditor-tab|lse|mpty|mpty-selection|nable|nd|nd-box-selection|nd-error|nd-key|nd-move|nd-resize|nd-row-resize|nd-search|ndkey|nter-menubar|ntry|num|q|rror|rror-status?|rror-stat|scape|vent|vent-handler|vent-handler-context|vent-procedure|vents|xcept|xclusive|xclusive-lock?|xclusive-lo?|xclusive-web-user?|xclusive-web-us?|xclusive-web-?|xecute|xists|xit|xpire|xplicit|xport|xtended|xtent|xternal|xtract))\\b(?![#$\\-_%&])",
4521
4542
  "captures": {
4522
4543
  "1": {
4523
4544
  "name": "keyword.other.abl"
@@ -4616,7 +4637,7 @@
4616
4637
  },
4617
4638
  "keywords-P": {
4618
4639
  "comment": "The keyword must not have a trailing variable character (one of #$-_%&)",
4619
- "match": "(?i)\\b(p(?:ackage-private|ackage-protected|age|age-bottom?|age-bott?|age-down|age-left|age-right|age-right-text|age-up|age-width?|age-wid|aged|arameter?|aramet?|aram|arent-id-field|arent-window-close|artial-key|ascal|aste|ause|erformance?|erforman?|erform?|erfo?|fcolor?|fcol?|fc|ick|ick-area|ick-both|ixels|ortrait|recision|reprocess?|reproce?|reselect?|resele?|rev|rev-frame|rev-word|rinter|rinter-setup|rivate|rivileges|rocedure-call-type|rocedure-complete|rocedure?|rocedu?|roce|rocess|rofile-file|rofiler|rompt|rompt-for?|rompt-f|romsgs|ropath|roperty|rotected|ublic|ublish|ut|ut-bits|ut-bytes??|ut-double|ut-float|ut-int64|ut-key-value?|ut-key-val|ut-long|ut-short|ut-string|ut-unsigned-long|ut-unsigned-short|utbyte))\\b(?![#$\\-_%&])",
4640
+ "match": "(?i)\\b(p(?:ackage-private|ackage-protected|age|age-bottom?|age-bott?|age-down|age-left|age-right|age-right-text|age-up|age-width?|age-wid|aged|arameter?|aramet?|aram|arent-id-field|arent-window-close|artial-key|ascal|aste|ause|erformance?|erforman?|erform?|erfo?|ersistent?|ersiste?|fcolor?|fcol?|fc|ick|ick-area|ick-both|ixels|ortrait|recision|reprocess?|reproce?|reselect?|resele?|rev|rev-frame|rev-word|rinter|rinter-setup|rivate|rivileges|rocedure-call-type|rocedure-complete|rocedure?|rocedu?|roce|rocess|rofile-file|rofiler|rompt|rompt-for?|rompt-f|romsgs|ropath|roperty|rotected|ublic|ublish|ut|ut-bits|ut-bytes??|ut-double|ut-float|ut-int64|ut-key-value?|ut-key-val|ut-long|ut-short|ut-string|ut-unsigned-long|ut-unsigned-short|utbyte))\\b(?![#$\\-_%&])",
4620
4641
  "captures": {
4621
4642
  "1": {
4622
4643
  "name": "keyword.other.abl"
@@ -4643,7 +4664,7 @@
4643
4664
  },
4644
4665
  "keywords-S": {
4645
4666
  "comment": "The keyword must not have a trailing variable character (one of #$-_%&)",
4646
- "match": "(?i)\\b(s(?:ave|ave-as|ax-attributes|ax-complete?|ax-comple|ax-parser-error|ax-reader|ax-running|ax-uninitialized|ax-write-begin|ax-write-complete|ax-write-content|ax-write-element|ax-write-error|ax-write-idle|ax-write-tag|ax-writer|ax-xml|chema|creen|creen-io|croll|croll-bars|croll-horizontal|croll-left|croll-mode|croll-notify|croll-right|croll-vertical|crollable|crollbar-drag|crolled-row-position?|crolled-row-positi?|crolled-row-posi?|crolling|earch-self|earch-target|ection|ecurity-policy|eek|elect|elect-extend|elect-on-join|elect-repositioned-row|elected-items|election|election-extend|election-list|elf|end|ensitive|eparate-connection|eparators|erializable|erialize-hidden|erialize-name|erver|erver-socket|ession|et|et-attr-call-type|et-byte-order|et-cell-focus|et-contents|et-db-logging|et-event-manager-option|et-option|et-pointer-value?|et-pointer-val|et-state|ettings|hare-lock?|hare-lo?|hare-?|hared|hort|how-in-taskbar?|how-in-taskb?|how-stats?|ide-labels?|ide-labe?|ignature|ilent|imple|ingle|ingle-character|ingle-run|ize|ize-chars?|ize-cha?|ize-c|ize-pixels?|ize-pixe?|ize-pi?|kip|kip-group-duplicates|kip-schema-check|lider|mallint|oap-fault|oap-header|oap-header-entryref|ocket|ome|ource|ource-procedure|pace|ql|tart|tart-box-selection|tart-extend-box-selection|tart-mem-check|tart-move|tart-resize|tart-row-resize|tart-search|tarting|tatic|tatus|tatus-area|tatus-area-msg|tdcall|tomp-detection|tomp-frequency|top|top-after|top-display|top-mem-check|tored-procedure?|tored-procedu?|tored-proce?|tream|tream-handle|tream-io|tring-xref|ub-average?|ub-avera?|ub-ave|ub-count|ub-maximum?|ub-maxim?|ub-max|ub-menu|ub-menu-help|ub-minimum?|ub-minim?|ub-min|ub-total|ubscribe|ubstring?|ubstri?|um|ummary|uper|uspend|ystem-dialog|ystem-help))\\b(?![#$\\-_%&])",
4667
+ "match": "(?i)\\b(s(?:ave|ave-as|ax-attributes|ax-complete?|ax-comple|ax-parser-error|ax-reader|ax-running|ax-uninitialized|ax-write-begin|ax-write-complete|ax-write-content|ax-write-element|ax-write-error|ax-write-idle|ax-write-tag|ax-writer|ax-xml|chema|creen|creen-io|croll|croll-bars|croll-horizontal|croll-left|croll-mode|croll-notify|croll-right|croll-vertical|crollable|crollbar-drag|crolled-row-position?|crolled-row-positi?|crolled-row-posi?|crolling|earch-self|earch-target|ection|ecurity-policy|eek|elect|elect-extend|elect-on-join|elect-repositioned-row|elected-items|election|election-extend|election-list|elf|end|ensitive|eparate-connection|eparators|erializable|erialize-hidden|erialize-name|erver|erver-socket|ession|et|et-attr-call-type|et-byte-order|et-cell-focus|et-contents|et-db-logging|et-event-manager-option|et-option|et-pointer-value?|et-pointer-val|et-state|ettings|hare-lock?|hare-lo?|hare-?|hared|hort|how-in-taskbar?|how-in-taskb?|how-stats?|ide-labels?|ide-labe?|ignature|ilent|imple|ingle|ingle-character|ingle-run|ingleton|ize|ize-chars?|ize-cha?|ize-c|ize-pixels?|ize-pixe?|ize-pi?|kip|kip-group-duplicates|kip-schema-check|lider|mallint|oap-fault|oap-header|oap-header-entryref|ocket|ome|ource|ource-procedure|pace|ql|tart|tart-box-selection|tart-extend-box-selection|tart-mem-check|tart-move|tart-resize|tart-row-resize|tart-search|tarting|tatic|tatus|tatus-area|tatus-area-msg|tdcall|tomp-detection|tomp-frequency|top|top-after|top-display|top-mem-check|tored-procedure?|tored-procedu?|tored-proce?|tream|tream-handle|tream-io|tring-xref|ub-average?|ub-avera?|ub-ave|ub-count|ub-maximum?|ub-maxim?|ub-max|ub-menu|ub-menu-help|ub-minimum?|ub-minim?|ub-min|ub-total|ubscribe|ubstring?|ubstri?|um|ummary|uper|uspend|ystem-dialog|ystem-help))\\b(?![#$\\-_%&])",
4647
4668
  "captures": {
4648
4669
  "1": {
4649
4670
  "name": "keyword.other.abl"
package/index.mjs CHANGED
@@ -41,6 +41,7 @@ const re = /(?:\w|-|\()+(?=\s|$)/g
41
41
  // appropriate scopes
42
42
  let alsoStatements = [];
43
43
  alsoStatements.push('ambiguous');
44
+ alsoStatements.push('asynchronous');
44
45
  alsoStatements.push('auto-go');
45
46
  alsoStatements.push('available');
46
47
  alsoStatements.push('bgcolor');
@@ -54,6 +55,8 @@ alsoStatements.push('delete');
54
55
  alsoStatements.push('delimiter');
55
56
  alsoStatements.push('drop-target');
56
57
  alsoStatements.push('edge-pixels');
58
+ alsoStatements.push('event-handler');
59
+ alsoStatements.push('event-procedure');
57
60
  alsoStatements.push('fgcolor');
58
61
  alsoStatements.push('first');
59
62
  alsoStatements.push('flat-button');
@@ -78,6 +81,7 @@ alsoStatements.push('namespace-uri');
78
81
  alsoStatements.push('nested');
79
82
  alsoStatements.push('no-focus');
80
83
  alsoStatements.push('page-bottom');
84
+ alsoStatements.push('persistent');
81
85
  alsoStatements.push('pfcolor');
82
86
  alsoStatements.push('recursive');
83
87
  alsoStatements.push('resize');
@@ -92,6 +96,7 @@ alsoStatements.push('serialize-name');
92
96
  alsoStatements.push('show-in-taskbar');
93
97
  alsoStatements.push('side-labels');
94
98
  alsoStatements.push('single-run');
99
+ alsoStatements.push('singleton');
95
100
  alsoStatements.push('status-area');
96
101
  alsoStatements.push('three-d');
97
102
  alsoStatements.push('title');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "abl-tmlanguage",
3
- "version": "1.3.22",
3
+ "version": "1.3.24",
4
4
  "description": "TextMate grammar for Progress OpenEdge ABL Language",
5
5
  "main": "",
6
6
  "type": "commonjs",
@@ -337,3 +337,635 @@ describe('', () => {
337
337
  ];
338
338
  shared.itShouldMatchExpectedScopes(statement, expectedTokens);
339
339
  })
340
+
341
+ describe('', () => {
342
+ let statement = `RUN VALUE(THIS-OBJECT:ServiceInterfacePath + "/proSIinvokeTaskAsync2.p":U)
343
+ ON hAppServer
344
+ ASYNCHRONOUS
345
+ (INPUT pcTaskName,
346
+ INPUT pcMethodName,
347
+ {1},
348
+ lcDataset1,
349
+ lcDataset2,
350
+ lcDataset3,
351
+ lcDataset4,
352
+ lcDataset5,
353
+ lcParameter,
354
+ lcContext) .`;
355
+
356
+ let expectedTokens = [
357
+ [
358
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'RUN'
359
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
360
+ { "startIndex": 4, "endIndex": 9, "scopes": ["source.abl", "meta.function-call.abl", "support.function.abl"] }, // 'VALUE'
361
+ { "startIndex": 9, "endIndex": 10, "scopes": ["source.abl", "meta.function-call.abl", "meta.function.arguments.abl", "meta.brace.round.js"] }, // '('
362
+ { "startIndex": 10, "endIndex": 21, "scopes": ["source.abl", "meta.function-call.abl", "meta.function.arguments.abl", "variable.language.abl"] }, // 'THIS-OBJECT'
363
+ { "startIndex": 21, "endIndex": 22, "scopes": ["source.abl", "meta.function-call.abl", "meta.function.arguments.abl", "punctuation.separator.colon.abl"] }, // ':'
364
+ { "startIndex": 22, "endIndex": 42, "scopes": ["source.abl", "meta.function-call.abl", "meta.function.arguments.abl", "entity.name.function.abl"] }, // 'ServiceInterfacePath'
365
+ { "startIndex": 42, "endIndex": 43, "scopes": ["source.abl", "meta.function-call.abl", "meta.function.arguments.abl"] }, // ' '
366
+ { "startIndex": 43, "endIndex": 44, "scopes": ["source.abl", "meta.function-call.abl", "meta.function.arguments.abl", "keyword.operator.source.abl"] }, // '+'
367
+ { "startIndex": 44, "endIndex": 45, "scopes": ["source.abl", "meta.function-call.abl", "meta.function.arguments.abl"] }, // ' '
368
+ { "startIndex": 45, "endIndex": 46, "scopes": ["source.abl", "meta.function-call.abl", "meta.function.arguments.abl", "string.quoted.double.abl", "punctuation.definition.string.begin.abl"] }, // '"'
369
+ { "startIndex": 46, "endIndex": 70, "scopes": ["source.abl", "meta.function-call.abl", "meta.function.arguments.abl", "string.quoted.double.abl"] }, // '/proSIinvokeTaskAsync2.p'
370
+ { "startIndex": 70, "endIndex": 71, "scopes": ["source.abl", "meta.function-call.abl", "meta.function.arguments.abl", "string.quoted.double.abl", "punctuation.definition.string.end.abl"] }, // '"'
371
+ { "startIndex": 71, "endIndex": 73, "scopes": ["source.abl", "meta.function-call.abl", "meta.function.arguments.abl", "string.quoted.double.abl", "support.other.abl"] }, // ':U'
372
+ { "startIndex": 73, "endIndex": 74, "scopes": ["source.abl", "meta.function-call.abl", "meta.brace.round.js"] } // ')'
373
+ ],
374
+ [
375
+ { "startIndex": 0, "endIndex": 8, "scopes": ["source.abl"] }, // ' '
376
+ { "startIndex": 8, "endIndex": 10, "scopes": ["source.abl", "keyword.other.abl"] }, // 'ON'
377
+ { "startIndex": 10, "endIndex": 11, "scopes": ["source.abl"] }, // ' '
378
+ { "startIndex": 11, "endIndex": 21, "scopes": ["source.abl", "variable.other.abl"] } // 'hAppServer'
379
+ ],
380
+ [
381
+ { "startIndex": 0, "endIndex": 8, "scopes": ["source.abl"] }, // ' '
382
+ { "startIndex": 8, "endIndex": 20, "scopes": ["source.abl", "keyword.other.abl"] } // 'ASYNCHRONOUS'
383
+ ],
384
+ [
385
+ { "startIndex": 0, "endIndex": 8, "scopes": ["source.abl"] }, // ' '
386
+ { "startIndex": 8, "endIndex": 9, "scopes": ["source.abl", "meta.function.arguments.abl", "meta.brace.round.js"] }, // '('
387
+ { "startIndex": 9, "endIndex": 14, "scopes": ["source.abl", "meta.function.arguments.abl", "keyword.other.abl"] }, // 'INPUT'
388
+ { "startIndex": 14, "endIndex": 15, "scopes": ["source.abl", "meta.function.arguments.abl"] }, // ' '
389
+ { "startIndex": 15, "endIndex": 25, "scopes": ["source.abl", "meta.function.arguments.abl", "variable.other.abl"] }, // 'pcTaskName'
390
+ { "startIndex": 25, "endIndex": 26, "scopes": ["source.abl", "meta.function.arguments.abl", "punctuation.separator.comma.abl"] } // ','
391
+ ],
392
+ [
393
+ { "startIndex": 0, "endIndex": 10, "scopes": ["source.abl", "meta.function.arguments.abl"] }, // ' '
394
+ { "startIndex": 10, "endIndex": 15, "scopes": ["source.abl", "meta.function.arguments.abl", "keyword.other.abl"] }, // 'INPUT'
395
+ { "startIndex": 15, "endIndex": 16, "scopes": ["source.abl", "meta.function.arguments.abl"] }, // ' '
396
+ { "startIndex": 16, "endIndex": 28, "scopes": ["source.abl", "meta.function.arguments.abl", "variable.other.abl"] }, // 'pcMethodName'
397
+ { "startIndex": 28, "endIndex": 29, "scopes": ["source.abl", "meta.function.arguments.abl", "punctuation.separator.comma.abl"] } // ','
398
+ ],
399
+ [
400
+ { "startIndex": 0, "endIndex": 10, "scopes": ["source.abl", "meta.function.arguments.abl"] }, // ' '
401
+ { "startIndex": 10, "endIndex": 11, "scopes": ["source.abl", "meta.function.arguments.abl", "meta.argument.abl", "punctuation.section.abl"] }, // '{'
402
+ { "startIndex": 11, "endIndex": 12, "scopes": ["source.abl", "meta.function.arguments.abl", "meta.argument.abl", "support.other.argument.abl"] }, // '1'
403
+ { "startIndex": 12, "endIndex": 13, "scopes": ["source.abl", "meta.function.arguments.abl", "meta.argument.abl", "punctuation.section.abl"] }, // '}'
404
+ { "startIndex": 13, "endIndex": 14, "scopes": ["source.abl", "meta.function.arguments.abl", "punctuation.separator.comma.abl"] } // ','
405
+ ],
406
+ [
407
+ { "startIndex": 0, "endIndex": 10, "scopes": ["source.abl", "meta.function.arguments.abl"] }, // ' '
408
+ { "startIndex": 10, "endIndex": 20, "scopes": ["source.abl", "meta.function.arguments.abl", "variable.other.abl"] }, // 'lcDataset1'
409
+ { "startIndex": 20, "endIndex": 21, "scopes": ["source.abl", "meta.function.arguments.abl", "punctuation.separator.comma.abl"] } // ','
410
+ ],
411
+ [
412
+ { "startIndex": 0, "endIndex": 10, "scopes": ["source.abl", "meta.function.arguments.abl"] }, // ' '
413
+ { "startIndex": 10, "endIndex": 20, "scopes": ["source.abl", "meta.function.arguments.abl", "variable.other.abl"] }, // 'lcDataset2'
414
+ { "startIndex": 20, "endIndex": 21, "scopes": ["source.abl", "meta.function.arguments.abl", "punctuation.separator.comma.abl"] } // ','
415
+ ],
416
+ [
417
+ { "startIndex": 0, "endIndex": 10, "scopes": ["source.abl", "meta.function.arguments.abl"] }, // ' '
418
+ { "startIndex": 10, "endIndex": 20, "scopes": ["source.abl", "meta.function.arguments.abl", "variable.other.abl"] }, // 'lcDataset3'
419
+ { "startIndex": 20, "endIndex": 21, "scopes": ["source.abl", "meta.function.arguments.abl", "punctuation.separator.comma.abl"] } // ','
420
+ ],
421
+ [
422
+ { "startIndex": 0, "endIndex": 10, "scopes": ["source.abl", "meta.function.arguments.abl"] }, // ' '
423
+ { "startIndex": 10, "endIndex": 20, "scopes": ["source.abl", "meta.function.arguments.abl", "variable.other.abl"] }, // 'lcDataset4'
424
+ { "startIndex": 20, "endIndex": 21, "scopes": ["source.abl", "meta.function.arguments.abl", "punctuation.separator.comma.abl"] } // ','
425
+ ],
426
+ [
427
+ { "startIndex": 0, "endIndex": 10, "scopes": ["source.abl", "meta.function.arguments.abl"] }, // ' '
428
+ { "startIndex": 10, "endIndex": 20, "scopes": ["source.abl", "meta.function.arguments.abl", "variable.other.abl"] }, // 'lcDataset5'
429
+ { "startIndex": 20, "endIndex": 21, "scopes": ["source.abl", "meta.function.arguments.abl", "punctuation.separator.comma.abl"] } // ','
430
+ ],
431
+ [
432
+ { "startIndex": 0, "endIndex": 10, "scopes": ["source.abl", "meta.function.arguments.abl"] }, // ' '
433
+ { "startIndex": 10, "endIndex": 21, "scopes": ["source.abl", "meta.function.arguments.abl", "variable.other.abl"] }, // 'lcParameter'
434
+ { "startIndex": 21, "endIndex": 22, "scopes": ["source.abl", "meta.function.arguments.abl", "punctuation.separator.comma.abl"] } // ','
435
+ ],
436
+ [
437
+ { "startIndex": 0, "endIndex": 10, "scopes": ["source.abl", "meta.function.arguments.abl"] }, // ' '
438
+ { "startIndex": 10, "endIndex": 19, "scopes": ["source.abl", "meta.function.arguments.abl", "variable.other.abl"] }, // 'lcContext'
439
+ { "startIndex": 19, "endIndex": 20, "scopes": ["source.abl", "meta.brace.round.js"] }, // ')'
440
+ { "startIndex": 20, "endIndex": 21, "scopes": ["source.abl"] }, // ' '
441
+ { "startIndex": 21, "endIndex": 22, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
442
+ ]
443
+ ];
444
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
445
+ })
446
+
447
+ describe('', () => {
448
+ let statement = `run Bar in vProcedureHandle(input "hello World").`;
449
+
450
+ let expectedTokens = [
451
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'run'
452
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
453
+ { "startIndex": 4, "endIndex": 7, "scopes": ["source.abl", "entity.name.procedure.abl"] }, // 'Bar'
454
+ { "startIndex": 7, "endIndex": 8, "scopes": ["source.abl"] }, // ' '
455
+ { "startIndex": 8, "endIndex": 10, "scopes": ["source.abl", "keyword.other.abl"] }, // 'in'
456
+ { "startIndex": 10, "endIndex": 11, "scopes": ["source.abl"] }, // ' '
457
+ { "startIndex": 11, "endIndex": 27, "scopes": ["source.abl", "variable.other.abl"] }, // 'vProcedureHandle'
458
+ { "startIndex": 27, "endIndex": 28, "scopes": ["source.abl", "meta.function.arguments.abl", "meta.brace.round.js"] }, // '('
459
+ { "startIndex": 28, "endIndex": 33, "scopes": ["source.abl", "meta.function.arguments.abl", "keyword.other.abl"] }, // 'input'
460
+ { "startIndex": 33, "endIndex": 34, "scopes": ["source.abl", "meta.function.arguments.abl"] }, // ' '
461
+ { "startIndex": 34, "endIndex": 35, "scopes": ["source.abl", "meta.function.arguments.abl", "string.quoted.double.abl", "punctuation.definition.string.begin.abl"] }, // '"'
462
+ { "startIndex": 35, "endIndex": 46, "scopes": ["source.abl", "meta.function.arguments.abl", "string.quoted.double.abl"] }, // 'hello World'
463
+ { "startIndex": 46, "endIndex": 47, "scopes": ["source.abl", "meta.function.arguments.abl", "string.quoted.double.abl", "punctuation.definition.string.end.abl"] }, // '"'
464
+ { "startIndex": 47, "endIndex": 48, "scopes": ["source.abl", "meta.brace.round.js"] }, // ')'
465
+ { "startIndex": 48, "endIndex": 49, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
466
+ ];
467
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
468
+ })
469
+
470
+ describe('', () => {
471
+ let statement = `RUN test.p
472
+ ON hServer
473
+ ASYNCHRONOUS
474
+ EVENT-HANDLER "test"
475
+ EVENT-HANDLER-CONTEXT o .`;
476
+
477
+ let expectedTokens = [
478
+ [
479
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'RUN'
480
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
481
+ { "startIndex": 4, "endIndex": 10, "scopes": ["source.abl", "entity.name.procedure.abl"] } // 'test.p'
482
+ ],
483
+ [
484
+ { "startIndex": 0, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
485
+ { "startIndex": 4, "endIndex": 6, "scopes": ["source.abl", "keyword.other.abl"] }, // 'ON'
486
+ { "startIndex": 6, "endIndex": 7, "scopes": ["source.abl"] }, // ' '
487
+ { "startIndex": 7, "endIndex": 14, "scopes": ["source.abl", "variable.other.abl"] } // 'hServer'
488
+ ],
489
+ [
490
+ { "startIndex": 0, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
491
+ { "startIndex": 4, "endIndex": 16, "scopes": ["source.abl", "keyword.other.abl"] } // 'ASYNCHRONOUS'
492
+ ],
493
+ [
494
+ { "startIndex": 0, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
495
+ { "startIndex": 4, "endIndex": 17, "scopes": ["source.abl", "keyword.other.abl"] }, // 'EVENT-HANDLER'
496
+ { "startIndex": 17, "endIndex": 18, "scopes": ["source.abl"] }, // ' '
497
+ { "startIndex": 18, "endIndex": 19, "scopes": ["source.abl", "string.quoted.double.abl", "punctuation.definition.string.begin.abl"] }, // '"'
498
+ { "startIndex": 19, "endIndex": 23, "scopes": ["source.abl", "string.quoted.double.abl"] }, // 'test'
499
+ { "startIndex": 23, "endIndex": 24, "scopes": ["source.abl", "string.quoted.double.abl", "punctuation.definition.string.end.abl"] } // '"'
500
+ ],
501
+ [
502
+ { "startIndex": 0, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
503
+ { "startIndex": 4, "endIndex": 25, "scopes": ["source.abl", "keyword.other.abl"] }, // 'EVENT-HANDLER-CONTEXT'
504
+ { "startIndex": 25, "endIndex": 26, "scopes": ["source.abl"] }, // ' '
505
+ { "startIndex": 26, "endIndex": 27, "scopes": ["source.abl", "variable.other.abl"] }, // 'o'
506
+ { "startIndex": 27, "endIndex": 28, "scopes": ["source.abl"] }, // ' '
507
+ { "startIndex": 28, "endIndex": 29, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
508
+ ]
509
+ ];
510
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
511
+ })
512
+
513
+ describe('', () => {
514
+ let statement = `RUN test.p
515
+ ON SERVER hServer
516
+ ASYNCHRONOUS
517
+ EVENT-HANDLER "test"
518
+ EVENT-HANDLER-CONTEXT o .`;
519
+
520
+ let expectedTokens = [
521
+ [
522
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'RUN'
523
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
524
+ { "startIndex": 4, "endIndex": 10, "scopes": ["source.abl", "entity.name.procedure.abl"] } // 'test.p'
525
+ ],
526
+ [
527
+ { "startIndex": 0, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
528
+ { "startIndex": 4, "endIndex": 6, "scopes": ["source.abl", "keyword.other.abl"] }, // 'ON'
529
+ { "startIndex": 6, "endIndex": 7, "scopes": ["source.abl"] }, // ' '
530
+ { "startIndex": 7, "endIndex": 13, "scopes": ["source.abl", "keyword.other.abl"] }, // 'SERVER'
531
+ { "startIndex": 13, "endIndex": 14, "scopes": ["source.abl"] }, // ' '
532
+ { "startIndex": 14, "endIndex": 21, "scopes": ["source.abl", "variable.other.abl"] } // 'hServer'
533
+ ],
534
+ [
535
+ { "startIndex": 0, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
536
+ { "startIndex": 4, "endIndex": 16, "scopes": ["source.abl", "keyword.other.abl"] } // 'ASYNCHRONOUS'
537
+ ],
538
+ [
539
+ { "startIndex": 0, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
540
+ { "startIndex": 4, "endIndex": 17, "scopes": ["source.abl", "keyword.other.abl"] }, // 'EVENT-HANDLER'
541
+ { "startIndex": 17, "endIndex": 18, "scopes": ["source.abl"] }, // ' '
542
+ { "startIndex": 18, "endIndex": 19, "scopes": ["source.abl", "string.quoted.double.abl", "punctuation.definition.string.begin.abl"] }, // '"'
543
+ { "startIndex": 19, "endIndex": 23, "scopes": ["source.abl", "string.quoted.double.abl"] }, // 'test'
544
+ { "startIndex": 23, "endIndex": 24, "scopes": ["source.abl", "string.quoted.double.abl", "punctuation.definition.string.end.abl"] } // '"'
545
+ ],
546
+ [
547
+ { "startIndex": 0, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
548
+ { "startIndex": 4, "endIndex": 25, "scopes": ["source.abl", "keyword.other.abl"] }, // 'EVENT-HANDLER-CONTEXT'
549
+ { "startIndex": 25, "endIndex": 26, "scopes": ["source.abl"] }, // ' '
550
+ { "startIndex": 26, "endIndex": 27, "scopes": ["source.abl", "variable.other.abl"] }, // 'o'
551
+ { "startIndex": 27, "endIndex": 28, "scopes": ["source.abl"] }, // ' '
552
+ { "startIndex": 28, "endIndex": 29, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
553
+ ]
554
+ ];
555
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
556
+ })
557
+
558
+ describe('', () => {
559
+ let statement = `RUN test.p
560
+ ON SESSION
561
+ ASYNCHRONOUS
562
+ EVENT-HANDLER "test"
563
+ EVENT-HANDLER-CONTEXT o .`;
564
+
565
+ let expectedTokens = [
566
+ [
567
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'RUN'
568
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
569
+ { "startIndex": 4, "endIndex": 10, "scopes": ["source.abl", "entity.name.procedure.abl"] } // 'test.p'
570
+ ],
571
+ [
572
+ { "startIndex": 0, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
573
+ { "startIndex": 4, "endIndex": 6, "scopes": ["source.abl", "keyword.other.abl"] }, // 'ON'
574
+ { "startIndex": 6, "endIndex": 7, "scopes": ["source.abl"] }, // ' '
575
+ { "startIndex": 7, "endIndex": 14, "scopes": ["source.abl", "variable.language.abl"] } // 'SESSION'
576
+ ],
577
+ [
578
+ { "startIndex": 0, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
579
+ { "startIndex": 4, "endIndex": 16, "scopes": ["source.abl", "keyword.other.abl"] } // 'ASYNCHRONOUS'
580
+ ],
581
+ [
582
+ { "startIndex": 0, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
583
+ { "startIndex": 4, "endIndex": 17, "scopes": ["source.abl", "keyword.other.abl"] }, // 'EVENT-HANDLER'
584
+ { "startIndex": 17, "endIndex": 18, "scopes": ["source.abl"] }, // ' '
585
+ { "startIndex": 18, "endIndex": 19, "scopes": ["source.abl", "string.quoted.double.abl", "punctuation.definition.string.begin.abl"] }, // '"'
586
+ { "startIndex": 19, "endIndex": 23, "scopes": ["source.abl", "string.quoted.double.abl"] }, // 'test'
587
+ { "startIndex": 23, "endIndex": 24, "scopes": ["source.abl", "string.quoted.double.abl", "punctuation.definition.string.end.abl"] } // '"'
588
+ ],
589
+ [
590
+ { "startIndex": 0, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
591
+ { "startIndex": 4, "endIndex": 25, "scopes": ["source.abl", "keyword.other.abl"] }, // 'EVENT-HANDLER-CONTEXT'
592
+ { "startIndex": 25, "endIndex": 26, "scopes": ["source.abl"] }, // ' '
593
+ { "startIndex": 26, "endIndex": 27, "scopes": ["source.abl", "variable.other.abl"] }, // 'o'
594
+ { "startIndex": 27, "endIndex": 28, "scopes": ["source.abl"] }, // ' '
595
+ { "startIndex": 28, "endIndex": 29, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
596
+ ]
597
+ ];
598
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
599
+ })
600
+
601
+ describe('', () => {
602
+ let statement = `RUN test.p
603
+ ON SESSION:HANDLE
604
+ ASYNCHRONOUS
605
+ EVENT-HANDLER "test"
606
+ EVENT-HANDLER-CONTEXT o .`;
607
+
608
+ let expectedTokens = [
609
+ [
610
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'RUN'
611
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
612
+ { "startIndex": 4, "endIndex": 10, "scopes": ["source.abl", "entity.name.procedure.abl"] } // 'test.p'
613
+ ],
614
+ [
615
+ { "startIndex": 0, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
616
+ { "startIndex": 4, "endIndex": 6, "scopes": ["source.abl", "keyword.other.abl"] }, // 'ON'
617
+ { "startIndex": 6, "endIndex": 7, "scopes": ["source.abl"] }, // ' '
618
+ { "startIndex": 7, "endIndex": 14, "scopes": ["source.abl", "variable.language.abl"] }, // 'SESSION'
619
+ { "startIndex": 14, "endIndex": 15, "scopes": ["source.abl", "punctuation.separator.colon.abl"] }, // ':'
620
+ { "startIndex": 15, "endIndex": 21, "scopes": ["source.abl", "entity.name.function.abl"] } // 'HANDLE'
621
+ ],
622
+ [
623
+ { "startIndex": 0, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
624
+ { "startIndex": 4, "endIndex": 16, "scopes": ["source.abl", "keyword.other.abl"] } // 'ASYNCHRONOUS'
625
+ ],
626
+ [
627
+ { "startIndex": 0, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
628
+ { "startIndex": 4, "endIndex": 17, "scopes": ["source.abl", "keyword.other.abl"] }, // 'EVENT-HANDLER'
629
+ { "startIndex": 17, "endIndex": 18, "scopes": ["source.abl"] }, // ' '
630
+ { "startIndex": 18, "endIndex": 19, "scopes": ["source.abl", "string.quoted.double.abl", "punctuation.definition.string.begin.abl"] }, // '"'
631
+ { "startIndex": 19, "endIndex": 23, "scopes": ["source.abl", "string.quoted.double.abl"] }, // 'test'
632
+ { "startIndex": 23, "endIndex": 24, "scopes": ["source.abl", "string.quoted.double.abl", "punctuation.definition.string.end.abl"] } // '"'
633
+ ],
634
+ [
635
+ { "startIndex": 0, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
636
+ { "startIndex": 4, "endIndex": 25, "scopes": ["source.abl", "keyword.other.abl"] }, // 'EVENT-HANDLER-CONTEXT'
637
+ { "startIndex": 25, "endIndex": 26, "scopes": ["source.abl"] }, // ' '
638
+ { "startIndex": 26, "endIndex": 27, "scopes": ["source.abl", "variable.other.abl"] }, // 'o'
639
+ { "startIndex": 27, "endIndex": 28, "scopes": ["source.abl"] }, // ' '
640
+ { "startIndex": 28, "endIndex": 29, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
641
+ ]
642
+ ];
643
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
644
+ })
645
+
646
+ describe('', () => {
647
+ let statement = `run Foo.Bar in vProcedureHandle(input "goodbye").`;
648
+
649
+ let expectedTokens = [
650
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'run'
651
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
652
+ { "startIndex": 4, "endIndex": 11, "scopes": ["source.abl", "entity.name.procedure.abl"] }, // 'Foo.Bar'
653
+ { "startIndex": 11, "endIndex": 12, "scopes": ["source.abl"] }, // ' '
654
+ { "startIndex": 12, "endIndex": 14, "scopes": ["source.abl", "keyword.other.abl"] }, // 'in'
655
+ { "startIndex": 14, "endIndex": 15, "scopes": ["source.abl"] }, // ' '
656
+ { "startIndex": 15, "endIndex": 31, "scopes": ["source.abl", "variable.other.abl"] }, // 'vProcedureHandle'
657
+ { "startIndex": 31, "endIndex": 32, "scopes": ["source.abl", "meta.function.arguments.abl", "meta.brace.round.js"] }, // '('
658
+ { "startIndex": 32, "endIndex": 37, "scopes": ["source.abl", "meta.function.arguments.abl", "keyword.other.abl"] }, // 'input'
659
+ { "startIndex": 37, "endIndex": 38, "scopes": ["source.abl", "meta.function.arguments.abl"] }, // ' '
660
+ { "startIndex": 38, "endIndex": 39, "scopes": ["source.abl", "meta.function.arguments.abl", "string.quoted.double.abl", "punctuation.definition.string.begin.abl"] }, // '"'
661
+ { "startIndex": 39, "endIndex": 46, "scopes": ["source.abl", "meta.function.arguments.abl", "string.quoted.double.abl"] }, // 'goodbye'
662
+ { "startIndex": 46, "endIndex": 47, "scopes": ["source.abl", "meta.function.arguments.abl", "string.quoted.double.abl", "punctuation.definition.string.end.abl"] }, // '"'
663
+ { "startIndex": 47, "endIndex": 48, "scopes": ["source.abl", "meta.brace.round.js"] }, // ')'
664
+ { "startIndex": 48, "endIndex": 49, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
665
+ ];
666
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
667
+ })
668
+
669
+ describe('', () => {
670
+ let statement = `run foo.p persistent set vProcedureHandle.
671
+ run Bar in vProcedureHandle(input "hello World").`;
672
+
673
+ let expectedTokens = [
674
+ [
675
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'run'
676
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
677
+ { "startIndex": 4, "endIndex": 9, "scopes": ["source.abl", "entity.name.procedure.abl"] }, // 'foo.p'
678
+ { "startIndex": 9, "endIndex": 10, "scopes": ["source.abl"] }, // ' '
679
+ { "startIndex": 10, "endIndex": 20, "scopes": ["source.abl", "keyword.other.abl"] }, // 'persistent'
680
+ { "startIndex": 20, "endIndex": 21, "scopes": ["source.abl"] }, // ' '
681
+ { "startIndex": 21, "endIndex": 24, "scopes": ["source.abl", "keyword.other.abl"] }, // 'set'
682
+ { "startIndex": 24, "endIndex": 25, "scopes": ["source.abl"] }, // ' '
683
+ { "startIndex": 25, "endIndex": 41, "scopes": ["source.abl", "variable.other.abl"] }, // 'vProcedureHandle'
684
+ { "startIndex": 41, "endIndex": 42, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
685
+ ],
686
+ [
687
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'run'
688
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
689
+ { "startIndex": 4, "endIndex": 7, "scopes": ["source.abl", "entity.name.procedure.abl"] }, // 'Bar'
690
+ { "startIndex": 7, "endIndex": 8, "scopes": ["source.abl"] }, // ' '
691
+ { "startIndex": 8, "endIndex": 10, "scopes": ["source.abl", "keyword.other.abl"] }, // 'in'
692
+ { "startIndex": 10, "endIndex": 11, "scopes": ["source.abl"] }, // ' '
693
+ { "startIndex": 11, "endIndex": 27, "scopes": ["source.abl", "variable.other.abl"] }, // 'vProcedureHandle'
694
+ { "startIndex": 27, "endIndex": 28, "scopes": ["source.abl", "meta.function.arguments.abl", "meta.brace.round.js"] }, // '('
695
+ { "startIndex": 28, "endIndex": 33, "scopes": ["source.abl", "meta.function.arguments.abl", "keyword.other.abl"] }, // 'input'
696
+ { "startIndex": 33, "endIndex": 34, "scopes": ["source.abl", "meta.function.arguments.abl"] }, // ' '
697
+ { "startIndex": 34, "endIndex": 35, "scopes": ["source.abl", "meta.function.arguments.abl", "string.quoted.double.abl", "punctuation.definition.string.begin.abl"] }, // '"'
698
+ { "startIndex": 35, "endIndex": 46, "scopes": ["source.abl", "meta.function.arguments.abl", "string.quoted.double.abl"] }, // 'hello World'
699
+ { "startIndex": 46, "endIndex": 47, "scopes": ["source.abl", "meta.function.arguments.abl", "string.quoted.double.abl", "punctuation.definition.string.end.abl"] }, // '"'
700
+ { "startIndex": 47, "endIndex": 48, "scopes": ["source.abl", "meta.brace.round.js"] }, // ')'
701
+ { "startIndex": 48, "endIndex": 49, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
702
+ ]
703
+ ];
704
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
705
+ })
706
+
707
+ describe('', () => {
708
+ let statement = `run gfgg.p persistent set h on oT:GetHdl().`;
709
+
710
+ let expectedTokens = [
711
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'run'
712
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
713
+ { "startIndex": 4, "endIndex": 10, "scopes": ["source.abl", "entity.name.procedure.abl"] }, // 'gfgg.p'
714
+ { "startIndex": 10, "endIndex": 12, "scopes": ["source.abl"] }, // ' '
715
+ { "startIndex": 12, "endIndex": 22, "scopes": ["source.abl", "keyword.other.abl"] }, // 'persistent'
716
+ { "startIndex": 22, "endIndex": 23, "scopes": ["source.abl"] }, // ' '
717
+ { "startIndex": 23, "endIndex": 26, "scopes": ["source.abl", "keyword.other.abl"] }, // 'set'
718
+ { "startIndex": 26, "endIndex": 27, "scopes": ["source.abl"] }, // ' '
719
+ { "startIndex": 27, "endIndex": 28, "scopes": ["source.abl", "variable.other.abl"] }, // 'h'
720
+ { "startIndex": 28, "endIndex": 29, "scopes": ["source.abl"] }, // ' '
721
+ { "startIndex": 29, "endIndex": 31, "scopes": ["source.abl", "keyword.other.abl"] }, // 'on'
722
+ { "startIndex": 31, "endIndex": 32, "scopes": ["source.abl"] }, // ' '
723
+ { "startIndex": 32, "endIndex": 34, "scopes": ["source.abl", "variable.other.abl"] }, // 'oT'
724
+ { "startIndex": 34, "endIndex": 35, "scopes": ["source.abl", "punctuation.separator.colon.abl"] }, // ':'
725
+ { "startIndex": 35, "endIndex": 41, "scopes": ["source.abl", "entity.name.function.abl"] }, // 'GetHdl'
726
+ { "startIndex": 41, "endIndex": 42, "scopes": ["source.abl", "meta.function.arguments.abl", "meta.brace.round.js"] }, // '('
727
+ { "startIndex": 42, "endIndex": 43, "scopes": ["source.abl", "meta.brace.round.js"] }, // ')'
728
+ { "startIndex": 43, "endIndex": 44, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
729
+ ];
730
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
731
+ })
732
+
733
+ describe('', () => {
734
+ let statement = `run adfasf.p EVENT-PROCEDURE "event-internal-procedure".
735
+ run adfasf.p EVENT-PROCEDURE 'event-internal-procedure':u.`;
736
+
737
+ let expectedTokens = [
738
+ [
739
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'run'
740
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
741
+ { "startIndex": 4, "endIndex": 12, "scopes": ["source.abl", "entity.name.procedure.abl"] }, // 'adfasf.p'
742
+ { "startIndex": 12, "endIndex": 14, "scopes": ["source.abl"] }, // ' '
743
+ { "startIndex": 14, "endIndex": 29, "scopes": ["source.abl", "keyword.other.abl"] }, // 'EVENT-PROCEDURE'
744
+ { "startIndex": 29, "endIndex": 30, "scopes": ["source.abl"] }, // ' '
745
+ { "startIndex": 30, "endIndex": 31, "scopes": ["source.abl", "string.quoted.double.abl", "punctuation.definition.string.begin.abl"] }, // '"'
746
+ { "startIndex": 31, "endIndex": 55, "scopes": ["source.abl", "string.quoted.double.abl"] }, // 'event-internal-procedure'
747
+ { "startIndex": 55, "endIndex": 56, "scopes": ["source.abl", "string.quoted.double.abl", "punctuation.definition.string.end.abl"] }, // '"'
748
+ { "startIndex": 56, "endIndex": 57, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
749
+ ],
750
+ [
751
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] }, // 'run'
752
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
753
+ { "startIndex": 4, "endIndex": 12, "scopes": ["source.abl", "entity.name.procedure.abl"] }, // 'adfasf.p'
754
+ { "startIndex": 12, "endIndex": 14, "scopes": ["source.abl"] }, // ' '
755
+ { "startIndex": 14, "endIndex": 29, "scopes": ["source.abl", "keyword.other.abl"] }, // 'EVENT-PROCEDURE'
756
+ { "startIndex": 29, "endIndex": 30, "scopes": ["source.abl"] }, // ' '
757
+ { "startIndex": 30, "endIndex": 31, "scopes": ["source.abl", "string.quoted.single.abl", "punctuation.definition.string.begin.abl"] }, // '''
758
+ { "startIndex": 31, "endIndex": 55, "scopes": ["source.abl", "string.quoted.single.abl"] }, // 'event-internal-procedure'
759
+ { "startIndex": 55, "endIndex": 56, "scopes": ["source.abl", "string.quoted.single.abl", "punctuation.definition.string.end.abl"] }, // '''
760
+ { "startIndex": 56, "endIndex": 58, "scopes": ["source.abl", "string.quoted.single.abl", "support.other.abl"] }, // ':u'
761
+ { "startIndex": 58, "endIndex": 59, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
762
+ ]
763
+ ];
764
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
765
+ })
766
+
767
+ describe('', () => {
768
+ let statement = `RUN
769
+ extern-proc-name
770
+ SINGLETON SET proc-handle
771
+ ON SERVER session
772
+ TRANSACTION DISTINCT
773
+ ASYNCHRONOUS
774
+ SET async-request-handle
775
+ EVENT-PROCEDURE event-internal-procedure
776
+ IN procedure-context
777
+ EVENT-HANDLER string(event-handler-name:Method())
778
+ EVENT-HANDLER-CONTEXT objRef
779
+ ( "abc", objRef) .`;
780
+
781
+ let expectedTokens = [
782
+ [
783
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] } // 'RUN'
784
+ ],
785
+ [
786
+ { "startIndex": 0, "endIndex": 5, "scopes": ["source.abl"] }, // ' '
787
+ { "startIndex": 5, "endIndex": 21, "scopes": ["source.abl", "entity.name.procedure.abl"] } // 'extern-proc-name'
788
+ ],
789
+ [
790
+ { "startIndex": 0, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
791
+ { "startIndex": 4, "endIndex": 13, "scopes": ["source.abl", "keyword.other.abl"] }, // 'SINGLETON'
792
+ { "startIndex": 13, "endIndex": 15, "scopes": ["source.abl"] }, // ' '
793
+ { "startIndex": 15, "endIndex": 18, "scopes": ["source.abl", "keyword.other.abl"] }, // 'SET'
794
+ { "startIndex": 18, "endIndex": 19, "scopes": ["source.abl"] }, // ' '
795
+ { "startIndex": 19, "endIndex": 30, "scopes": ["source.abl", "variable.other.abl"] } // 'proc-handle'
796
+ ],
797
+ [
798
+ { "startIndex": 0, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
799
+ { "startIndex": 4, "endIndex": 6, "scopes": ["source.abl", "keyword.other.abl"] }, // 'ON'
800
+ { "startIndex": 6, "endIndex": 8, "scopes": ["source.abl"] }, // ' '
801
+ { "startIndex": 8, "endIndex": 14, "scopes": ["source.abl", "keyword.other.abl"] }, // 'SERVER'
802
+ { "startIndex": 14, "endIndex": 15, "scopes": ["source.abl"] }, // ' '
803
+ { "startIndex": 15, "endIndex": 22, "scopes": ["source.abl", "variable.language.abl"] } // 'session'
804
+ ],
805
+ [
806
+ { "startIndex": 0, "endIndex": 8, "scopes": ["source.abl"] }, // ' '
807
+ { "startIndex": 8, "endIndex": 19, "scopes": ["source.abl", "keyword.other.abl"] }, // 'TRANSACTION'
808
+ { "startIndex": 19, "endIndex": 20, "scopes": ["source.abl"] }, // ' '
809
+ { "startIndex": 20, "endIndex": 28, "scopes": ["source.abl", "keyword.other.abl"] } // 'DISTINCT'
810
+ ],
811
+ [
812
+ { "startIndex": 0, "endIndex": 8, "scopes": ["source.abl"] }, // ' '
813
+ { "startIndex": 8, "endIndex": 20, "scopes": ["source.abl", "keyword.other.abl"] } // 'ASYNCHRONOUS'
814
+ ],
815
+ [
816
+ { "startIndex": 0, "endIndex": 12, "scopes": ["source.abl"] }, // ' '
817
+ { "startIndex": 12, "endIndex": 15, "scopes": ["source.abl", "keyword.other.abl"] }, // 'SET'
818
+ { "startIndex": 15, "endIndex": 16, "scopes": ["source.abl"] }, // ' '
819
+ { "startIndex": 16, "endIndex": 36, "scopes": ["source.abl", "variable.other.abl"] } // 'async-request-handle'
820
+ ],
821
+ [
822
+ { "startIndex": 0, "endIndex": 12, "scopes": ["source.abl"] }, // ' '
823
+ { "startIndex": 12, "endIndex": 27, "scopes": ["source.abl", "keyword.other.abl"] }, // 'EVENT-PROCEDURE'
824
+ { "startIndex": 27, "endIndex": 28, "scopes": ["source.abl"] }, // ' '
825
+ { "startIndex": 28, "endIndex": 52, "scopes": ["source.abl", "variable.other.abl"] } // 'event-internal-procedure'
826
+ ],
827
+ [
828
+ { "startIndex": 0, "endIndex": 16, "scopes": ["source.abl"] }, // ' '
829
+ { "startIndex": 16, "endIndex": 18, "scopes": ["source.abl", "keyword.other.abl"] }, // 'IN'
830
+ { "startIndex": 18, "endIndex": 19, "scopes": ["source.abl"] }, // ' '
831
+ { "startIndex": 19, "endIndex": 36, "scopes": ["source.abl", "variable.other.abl"] } // 'procedure-context'
832
+ ],
833
+ [
834
+ { "startIndex": 0, "endIndex": 12, "scopes": ["source.abl"] }, // ' '
835
+ { "startIndex": 12, "endIndex": 25, "scopes": ["source.abl", "keyword.other.abl"] }, // 'EVENT-HANDLER'
836
+ { "startIndex": 25, "endIndex": 26, "scopes": ["source.abl", "meta.function-call.abl"] }, // ' '
837
+ { "startIndex": 26, "endIndex": 32, "scopes": ["source.abl", "meta.function-call.abl", "support.function.abl"] }, // 'string'
838
+ { "startIndex": 32, "endIndex": 33, "scopes": ["source.abl", "meta.function-call.abl", "meta.function.arguments.abl", "meta.brace.round.js"] }, // '('
839
+ { "startIndex": 33, "endIndex": 51, "scopes": ["source.abl", "meta.function-call.abl", "meta.function.arguments.abl", "variable.other.abl"] }, // 'event-handler-name'
840
+ { "startIndex": 51, "endIndex": 52, "scopes": ["source.abl", "meta.function-call.abl", "meta.function.arguments.abl", "punctuation.separator.colon.abl"] }, // ':'
841
+ { "startIndex": 52, "endIndex": 58, "scopes": ["source.abl", "meta.function-call.abl", "meta.function.arguments.abl", "entity.name.function.abl"] }, // 'Method'
842
+ { "startIndex": 58, "endIndex": 59, "scopes": ["source.abl", "meta.function-call.abl", "meta.function.arguments.abl", "meta.brace.round.js"] }, // '('
843
+ { "startIndex": 59, "endIndex": 60, "scopes": ["source.abl", "meta.function-call.abl", "meta.brace.round.js"] }, // ')'
844
+ { "startIndex": 60, "endIndex": 61, "scopes": ["source.abl", "meta.brace.round.js"] } // ')'
845
+ ],
846
+ [
847
+ { "startIndex": 0, "endIndex": 15, "scopes": ["source.abl"] }, // ' '
848
+ { "startIndex": 15, "endIndex": 36, "scopes": ["source.abl", "keyword.other.abl"] }, // 'EVENT-HANDLER-CONTEXT'
849
+ { "startIndex": 36, "endIndex": 37, "scopes": ["source.abl"] }, // ' '
850
+ { "startIndex": 37, "endIndex": 43, "scopes": ["source.abl", "variable.other.abl"] } // 'objRef'
851
+ ],
852
+ [
853
+ { "startIndex": 0, "endIndex": 1, "scopes": ["source.abl"] }, // ' '
854
+ { "startIndex": 1, "endIndex": 2, "scopes": ["source.abl", "meta.function.arguments.abl", "meta.brace.round.js"] }, // '('
855
+ { "startIndex": 2, "endIndex": 3, "scopes": ["source.abl", "meta.function.arguments.abl"] }, // ' '
856
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl", "meta.function.arguments.abl", "string.quoted.double.abl", "punctuation.definition.string.begin.abl"] }, // '"'
857
+ { "startIndex": 4, "endIndex": 7, "scopes": ["source.abl", "meta.function.arguments.abl", "string.quoted.double.abl"] }, // 'abc'
858
+ { "startIndex": 7, "endIndex": 8, "scopes": ["source.abl", "meta.function.arguments.abl", "string.quoted.double.abl", "punctuation.definition.string.end.abl"] }, // '"'
859
+ { "startIndex": 8, "endIndex": 9, "scopes": ["source.abl", "meta.function.arguments.abl", "punctuation.separator.comma.abl"] }, // ','
860
+ { "startIndex": 9, "endIndex": 10, "scopes": ["source.abl", "meta.function.arguments.abl"] }, // ' '
861
+ { "startIndex": 10, "endIndex": 16, "scopes": ["source.abl", "meta.function.arguments.abl", "variable.other.abl"] }, // 'objRef'
862
+ { "startIndex": 16, "endIndex": 17, "scopes": ["source.abl", "meta.brace.round.js"] }, // ')'
863
+ { "startIndex": 17, "endIndex": 18, "scopes": ["source.abl"] }, // ' '
864
+ { "startIndex": 18, "endIndex": 19, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
865
+ ]
866
+ ];
867
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
868
+ })
869
+
870
+ describe('', () => {
871
+ let statement = `RUN
872
+ extern-proc-name
873
+ SINGLETON SET proc-handle
874
+ ON SERVER session
875
+ TRANSACTION DISTINCT
876
+ ASYNCHRONOUS
877
+ SET async-request-handle
878
+ EVENT-PROCEDURE event-internal-procedure
879
+ IN procedure-context
880
+ EVENT-HANDLER string(event-handler-name:Method())
881
+ EVENT-HANDLER-CONTEXT this-procedure
882
+ ( "abc", objRef) .`;
883
+
884
+ let expectedTokens = [
885
+ [
886
+ { "startIndex": 0, "endIndex": 3, "scopes": ["source.abl", "keyword.other.abl"] } // 'RUN'
887
+ ],
888
+ [
889
+ { "startIndex": 0, "endIndex": 5, "scopes": ["source.abl"] }, // ' '
890
+ { "startIndex": 5, "endIndex": 21, "scopes": ["source.abl", "entity.name.procedure.abl"] } // 'extern-proc-name'
891
+ ],
892
+ [
893
+ { "startIndex": 0, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
894
+ { "startIndex": 4, "endIndex": 13, "scopes": ["source.abl", "keyword.other.abl"] }, // 'SINGLETON'
895
+ { "startIndex": 13, "endIndex": 15, "scopes": ["source.abl"] }, // ' '
896
+ { "startIndex": 15, "endIndex": 18, "scopes": ["source.abl", "keyword.other.abl"] }, // 'SET'
897
+ { "startIndex": 18, "endIndex": 19, "scopes": ["source.abl"] }, // ' '
898
+ { "startIndex": 19, "endIndex": 30, "scopes": ["source.abl", "variable.other.abl"] } // 'proc-handle'
899
+ ],
900
+ [
901
+ { "startIndex": 0, "endIndex": 4, "scopes": ["source.abl"] }, // ' '
902
+ { "startIndex": 4, "endIndex": 6, "scopes": ["source.abl", "keyword.other.abl"] }, // 'ON'
903
+ { "startIndex": 6, "endIndex": 8, "scopes": ["source.abl"] }, // ' '
904
+ { "startIndex": 8, "endIndex": 14, "scopes": ["source.abl", "keyword.other.abl"] }, // 'SERVER'
905
+ { "startIndex": 14, "endIndex": 15, "scopes": ["source.abl"] }, // ' '
906
+ { "startIndex": 15, "endIndex": 22, "scopes": ["source.abl", "variable.language.abl"] } // 'session'
907
+ ],
908
+ [
909
+ { "startIndex": 0, "endIndex": 8, "scopes": ["source.abl"] }, // ' '
910
+ { "startIndex": 8, "endIndex": 19, "scopes": ["source.abl", "keyword.other.abl"] }, // 'TRANSACTION'
911
+ { "startIndex": 19, "endIndex": 20, "scopes": ["source.abl"] }, // ' '
912
+ { "startIndex": 20, "endIndex": 28, "scopes": ["source.abl", "keyword.other.abl"] } // 'DISTINCT'
913
+ ],
914
+ [
915
+ { "startIndex": 0, "endIndex": 8, "scopes": ["source.abl"] }, // ' '
916
+ { "startIndex": 8, "endIndex": 20, "scopes": ["source.abl", "keyword.other.abl"] } // 'ASYNCHRONOUS'
917
+ ],
918
+ [
919
+ { "startIndex": 0, "endIndex": 12, "scopes": ["source.abl"] }, // ' '
920
+ { "startIndex": 12, "endIndex": 15, "scopes": ["source.abl", "keyword.other.abl"] }, // 'SET'
921
+ { "startIndex": 15, "endIndex": 16, "scopes": ["source.abl"] }, // ' '
922
+ { "startIndex": 16, "endIndex": 36, "scopes": ["source.abl", "variable.other.abl"] } // 'async-request-handle'
923
+ ],
924
+ [
925
+ { "startIndex": 0, "endIndex": 12, "scopes": ["source.abl"] }, // ' '
926
+ { "startIndex": 12, "endIndex": 27, "scopes": ["source.abl", "keyword.other.abl"] }, // 'EVENT-PROCEDURE'
927
+ { "startIndex": 27, "endIndex": 28, "scopes": ["source.abl"] }, // ' '
928
+ { "startIndex": 28, "endIndex": 52, "scopes": ["source.abl", "variable.other.abl"] } // 'event-internal-procedure'
929
+ ],
930
+ [
931
+ { "startIndex": 0, "endIndex": 16, "scopes": ["source.abl"] }, // ' '
932
+ { "startIndex": 16, "endIndex": 18, "scopes": ["source.abl", "keyword.other.abl"] }, // 'IN'
933
+ { "startIndex": 18, "endIndex": 19, "scopes": ["source.abl"] }, // ' '
934
+ { "startIndex": 19, "endIndex": 36, "scopes": ["source.abl", "variable.other.abl"] } // 'procedure-context'
935
+ ],
936
+ [
937
+ { "startIndex": 0, "endIndex": 12, "scopes": ["source.abl"] }, // ' '
938
+ { "startIndex": 12, "endIndex": 25, "scopes": ["source.abl", "keyword.other.abl"] }, // 'EVENT-HANDLER'
939
+ { "startIndex": 25, "endIndex": 26, "scopes": ["source.abl", "meta.function-call.abl"] }, // ' '
940
+ { "startIndex": 26, "endIndex": 32, "scopes": ["source.abl", "meta.function-call.abl", "support.function.abl"] }, // 'string'
941
+ { "startIndex": 32, "endIndex": 33, "scopes": ["source.abl", "meta.function-call.abl", "meta.function.arguments.abl", "meta.brace.round.js"] }, // '('
942
+ { "startIndex": 33, "endIndex": 51, "scopes": ["source.abl", "meta.function-call.abl", "meta.function.arguments.abl", "variable.other.abl"] }, // 'event-handler-name'
943
+ { "startIndex": 51, "endIndex": 52, "scopes": ["source.abl", "meta.function-call.abl", "meta.function.arguments.abl", "punctuation.separator.colon.abl"] }, // ':'
944
+ { "startIndex": 52, "endIndex": 58, "scopes": ["source.abl", "meta.function-call.abl", "meta.function.arguments.abl", "entity.name.function.abl"] }, // 'Method'
945
+ { "startIndex": 58, "endIndex": 59, "scopes": ["source.abl", "meta.function-call.abl", "meta.function.arguments.abl", "meta.brace.round.js"] }, // '('
946
+ { "startIndex": 59, "endIndex": 60, "scopes": ["source.abl", "meta.function-call.abl", "meta.brace.round.js"] }, // ')'
947
+ { "startIndex": 60, "endIndex": 61, "scopes": ["source.abl", "meta.brace.round.js"] } // ')'
948
+ ],
949
+ [
950
+ { "startIndex": 0, "endIndex": 15, "scopes": ["source.abl"] }, // ' '
951
+ { "startIndex": 15, "endIndex": 36, "scopes": ["source.abl", "keyword.other.abl"] }, // 'EVENT-HANDLER-CONTEXT'
952
+ { "startIndex": 36, "endIndex": 37, "scopes": ["source.abl"] }, // ' '
953
+ { "startIndex": 37, "endIndex": 51, "scopes": ["source.abl", "variable.language.abl"] } // 'this-procedure'
954
+ ],
955
+ [
956
+ { "startIndex": 0, "endIndex": 1, "scopes": ["source.abl"] }, // ' '
957
+ { "startIndex": 1, "endIndex": 2, "scopes": ["source.abl", "meta.function.arguments.abl", "meta.brace.round.js"] }, // '('
958
+ { "startIndex": 2, "endIndex": 3, "scopes": ["source.abl", "meta.function.arguments.abl"] }, // ' '
959
+ { "startIndex": 3, "endIndex": 4, "scopes": ["source.abl", "meta.function.arguments.abl", "string.quoted.double.abl", "punctuation.definition.string.begin.abl"] }, // '"'
960
+ { "startIndex": 4, "endIndex": 7, "scopes": ["source.abl", "meta.function.arguments.abl", "string.quoted.double.abl"] }, // 'abc'
961
+ { "startIndex": 7, "endIndex": 8, "scopes": ["source.abl", "meta.function.arguments.abl", "string.quoted.double.abl", "punctuation.definition.string.end.abl"] }, // '"'
962
+ { "startIndex": 8, "endIndex": 9, "scopes": ["source.abl", "meta.function.arguments.abl", "punctuation.separator.comma.abl"] }, // ','
963
+ { "startIndex": 9, "endIndex": 10, "scopes": ["source.abl", "meta.function.arguments.abl"] }, // ' '
964
+ { "startIndex": 10, "endIndex": 16, "scopes": ["source.abl", "meta.function.arguments.abl", "variable.other.abl"] }, // 'objRef'
965
+ { "startIndex": 16, "endIndex": 17, "scopes": ["source.abl", "meta.brace.round.js"] }, // ')'
966
+ { "startIndex": 17, "endIndex": 18, "scopes": ["source.abl"] }, // ' '
967
+ { "startIndex": 18, "endIndex": 19, "scopes": ["source.abl", "punctuation.terminator.abl"] } // '.'
968
+ ]
969
+ ];
970
+ shared.itShouldMatchExpectedScopes(statement, expectedTokens);
971
+ })