abl-tmlanguage 1.3.16 → 1.3.18
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/.github/workflows/ci.yml +36 -0
- package/CHANGELOG.md +10 -0
- package/README.md +17 -12
- package/abl.tmLanguage.json +246 -74
- package/package.json +1 -1
- package/spec/annotations/annotation.spec.js +49 -50
- package/spec/blocks/block-labels.spec.js +3 -3
- package/spec/blocks/block-options.spec.js +9 -7
- package/spec/comments/comment-in-block-statement.spec.js +20 -14
- package/spec/comments/comment-in-for-each.spec.js +9 -6
- package/spec/comments/comment-in-function-args.spec.js +4 -5
- package/spec/comments/vscode-abl-issue#127.spec.js +4 -4
- package/spec/create-widgets/create-window.spec.js +11 -8
- package/spec/db-table-and-field/buffer-copy.spec.js +45 -39
- package/spec/db-table-and-field/create-alias.spec.js +3 -3
- package/spec/db-table-and-field/field-in-function.spec.js +6 -6
- package/spec/db-table-and-field/foreach.spec.js +3 -3
- package/spec/db-table-and-field/issue#88.spec.js +2 -2
- package/spec/db-table-and-field/new-record.spec.js +46 -25
- package/spec/define/define-browse.spec.js +54 -54
- package/spec/define/define-button.spec.js +3 -3
- package/spec/define-buffer/create-buffer.spec.js +3 -3
- package/spec/define-buffer/simple-single-line.spec.js +9 -9
- package/spec/define-frame/issue#173.spec.js +56 -50
- package/spec/define-parameter/simple-single-line.spec.js +3 -3
- package/spec/define-property/property-getter.spec.js +4 -4
- package/spec/define-temp-table/define-dataset.spec.js +23 -17
- package/spec/define-temp-table/define-temp-table.spec.js +68 -53
- package/spec/define-variable/extent.spec.js +6 -6
- package/spec/define-variable/initial.spec.js +15 -15
- package/spec/define-variable/issue#6.spec.js +39 -39
- package/spec/define-variable/issue#9.spec.js +3 -3
- package/spec/define-variable/var-statement.spec.js +7 -4
- package/spec/do/do-blocks.spec.js +24 -18
- package/spec/for-each/issue#321.spec.js +2 -2
- package/spec/function-call/can-find.spec.js +10 -11
- package/spec/function-call/misc-abl-functions.spec.js +3 -3
- package/spec/function-call/nested-functions.spec.js +21 -22
- package/spec/function-call/udf-calls.spec.js +22 -23
- package/spec/function-call/vscode-abl-issue#19.spec.js +12 -12
- package/spec/global-scoped-define/global-define.spec.js +54 -7
- package/spec/global-scoped-define/scoped-define-with-procedure-keyword.spec.js +49 -15
- package/spec/global-scoped-define/undefine.spec.js +44 -0
- package/spec/include/abl-tmlanguage-issues#5.spec.js +3 -3
- package/spec/include/include-file-name.spec.js +16 -4
- package/spec/include/unnamed-arguments.spec.js +4 -5
- package/spec/include/vscode-abl-issue#45.spec.js +3 -3
- package/spec/include/vscode-abl-issue#77.spec.js +16 -17
- package/spec/include/vscode-abl-issue#80.spec.js +10 -7
- package/spec/input-output/input-from.spec.js +19 -16
- package/spec/input-output/output-to.spec.js +15 -15
- package/spec/method-attribute-property-call/abl-method-attribute-call.spec.js +16 -17
- package/spec/method-attribute-property-call/connected-method.spec.js +3 -4
- package/spec/method-attribute-property-call/datset-table-attribute-method-call.spec.js +12 -12
- package/spec/method-attribute-property-call/method-call.spec.js +16 -16
- package/spec/method-attribute-property-call/unqualified-method-call.spec.js +3 -4
- package/spec/method-definition/constructor.spec.js +6 -6
- package/spec/method-definition/method.spec.js +12 -12
- package/spec/misc-statements/case-statement.spec.js +9 -9
- package/spec/misc-statements/class-in-var-name.spec.js +8 -9
- package/spec/misc-statements/copy-lob.spec.js +3 -3
- package/spec/misc-statements/do-in-name.spec.js +21 -22
- package/spec/misc-statements/event-subscribe.spec.js +14 -15
- package/spec/misc-statements/export-delimiter.spec.js +6 -6
- package/spec/misc-statements/if-then.spec.js +9 -9
- package/spec/misc-statements/issue#173.spec.js +3 -4
- package/spec/misc-statements/message-statement.spec.js +3 -3
- package/spec/misc-statements/record-buffer-functions.spec.js +3 -3
- package/spec/misc-statements/release.spec.js +3 -4
- package/spec/misc-statements/skip-statement-and-fuction.spec.js +3 -4
- package/spec/numbers/scientific-notation.spec.js +212 -0
- package/spec/operators/operators.spec.js +10 -10
- package/spec/preprocesors/issue166.spec.js +27 -19
- package/spec/preprocesors/preprocessor-functions.spec.js +77 -0
- package/spec/preprocesors/proparse-preprocessor.spec.js +27 -3
- package/spec/procedure-definition/trigger-procedure.spec.js +8 -2
- package/spec/procedure-definition/vscode-abl-issue#22.spec.js +3 -3
- package/spec/procedure-definition/vscode-abl-issue#26.spec.js +4 -4
- package/spec/procedure-definition/vscode-abl-issue#325.spec.js +26 -2
- package/spec/procedure-definition/vscode-abl-issue#62.spec.js +7 -4
- package/spec/run-statement/run-statement.spec.js +25 -13
- package/spec/strings/translation-attribute.spec.js +4 -4
- package/spec/strings/vscode-abl-issue#11.spec.js +24 -24
- package/spec/strings/vscode-abl-issue#28.spec.js +9 -9
- package/spec/type-name/argument.spec.js +11 -12
- package/spec/type-name/cast.spec.js +7 -7
- package/spec/type-name/define-temp-table.spec.js +6 -6
- package/spec/type-name/new.spec.js +3 -3
- package/spec/type-name/parameter-as.spec.js +6 -6
- package/spec/type-name/type-name.spec.js +21 -19
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
name: CI/CD Pipeline
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
pull_request:
|
|
8
|
+
branches:
|
|
9
|
+
- main
|
|
10
|
+
|
|
11
|
+
permissions:
|
|
12
|
+
id-token: write # Required for OIDC
|
|
13
|
+
contents: read
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
build-and-test:
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
|
|
19
|
+
steps:
|
|
20
|
+
- name: Checkout code
|
|
21
|
+
uses: actions/checkout@v6
|
|
22
|
+
|
|
23
|
+
- name: Install Node.js
|
|
24
|
+
uses: actions/setup-node@v6
|
|
25
|
+
with:
|
|
26
|
+
node-version: '24.x'
|
|
27
|
+
registry-url: 'https://registry.npmjs.org'
|
|
28
|
+
|
|
29
|
+
- name: Running tests
|
|
30
|
+
run: |
|
|
31
|
+
npm install
|
|
32
|
+
npm run test
|
|
33
|
+
|
|
34
|
+
- name: Publish to npm
|
|
35
|
+
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
|
|
36
|
+
run: npm publish
|
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -58,25 +58,25 @@ This project uses the [vscode-textmate](https://www.npmjs.com/package/vscode-tex
|
|
|
58
58
|
## Keywords
|
|
59
59
|
Part of this grammar is generated from a keyword list file. See [index.js] for information on how to generate that file, as well as the others required for the generation.
|
|
60
60
|
|
|
61
|
-
When `npm run build` is executed, a file called
|
|
61
|
+
When `npm run build` is executed, a file called grammar.json is created, which contains properties for `keywords` (all the keywords), `abl-functions` and `handle-attributes` (attributes and method calls on ABL handles). The contents of this file should be copied into the `abl.tmLanguage.json` file, replacing the existing contents.
|
|
62
62
|
|
|
63
63
|
|
|
64
64
|
|
|
65
65
|
# Scopes
|
|
66
66
|
|
|
67
|
-
The ABL-specific scopes produced by the ABL
|
|
67
|
+
The ABL-specific scopes produced by the ABL grammar listed in the table below. The scope names are largely based on the naming conventions at https://macromates.com/manual/en/language_grammars#language_rules and https://www.sublimetext.com/docs/scope_naming.html .
|
|
68
68
|
|
|
69
69
|
| Scope Name | Used for/by |
|
|
70
70
|
| ------------- | ------------- |
|
|
71
71
|
|comment.block.source.abl | Everything between `/*` and `*/` |
|
|
72
|
-
|comment.line.double-slash.abl | Everything in a `//` comment, incl slashes |
|
|
72
|
+
|comment.line.double-slash.abl | Everything in a `//` comment, incl. slashes |
|
|
73
73
|
|comment.preprocessor.analyze-suspend.abl | `&analyze-suspend`, `&analyze-resume` |
|
|
74
74
|
|constant.character.escape.abl | `~` and the next char |
|
|
75
75
|
|constant.language.abl | `today`, `now`, `true`, `false`, `yes`, `no`, `?` (unknown value) |
|
|
76
76
|
|constant.language.source.abl | `99/99/9999` (or similar) when used as a format clause |
|
|
77
|
-
|constant.numeric.source.abl | 0x00-0xFF, 0-9 |
|
|
77
|
+
|constant.numeric.source.abl | 0x00-0xFF, 0-9, scientific notation |
|
|
78
78
|
|entity.name.function.abl | Method call, property call, method name, property name, handle attributes, handle methods, event names |
|
|
79
|
-
|entity.name.function.preprocessor.abl |
|
|
79
|
+
|entity.name.function.preprocessor.abl | Preprocessor names, including built-ins like `opsys` and `process-architecture` |
|
|
80
80
|
|entity.name.include.abl | Include file names |
|
|
81
81
|
|entity.name.label.abl | Block label names |
|
|
82
82
|
|entity.name.package.abl | Package names for `using` |
|
|
@@ -85,16 +85,20 @@ The ABL-specific scopes produced by the ABL grammer listed in the table below. T
|
|
|
85
85
|
|entity.name.type.abl | Class/interface/enum names |
|
|
86
86
|
|entity.name.type.generic.abl | Generic type names |
|
|
87
87
|
|entity.other.attribute-name.abl | Annotation attribute names |
|
|
88
|
+
|keyword.control.directive.conditional.abl | `&if` , `&else`, `&elsif` `&end` |
|
|
89
|
+
|keyword.control.directive.define.abl | `&scoped-define`, `&global-define`, `&undefine` |
|
|
88
90
|
|keyword.operator.source.abl | `contains`, `begins`, `matches`, `eq`, `le`, `lt`, `ge`, `gt`, `ne`, `<=`, `<>`, `>=`, `=`, `+`, `-`, `/`, `<`, `>`, `*`, `+=`, `-=`, `/=`, `*=` |
|
|
89
91
|
|keyword.other.abl | Any ABL keyword (incl those covered by other scopes like `support.function.abl` and `entity.name.function.abl`) |
|
|
90
92
|
|punctuation.definition.bracket.square.begin.abl | `[` used for array arguments |
|
|
91
93
|
|punctuation.definition.bracket.square.end.abl | `]` used for array arguments |
|
|
92
94
|
|punctuation.definition.generic.begin.abl | `<` used for generic type arguments |
|
|
93
95
|
|punctuation.definition.generic.end.abl | `>` used for generic type arguments |
|
|
96
|
+
|punctuation.definition.preprocessor.abl | Leading `&` of referenced preprocessor and directives |
|
|
94
97
|
|punctuation.definition.string.begin.abl | Start of a quoted string |
|
|
95
98
|
|punctuation.definition.string.end.abl | End of a quoted string |
|
|
96
99
|
|punctuation.section.abl | `{` and `}` |
|
|
97
100
|
|punctuation.separator.comma.abl | `,` |
|
|
101
|
+
|punctuation.separator.continuation | `~` at the end of a line (preprocessor) |
|
|
98
102
|
|punctuation.separator.period.abl | `.` |
|
|
99
103
|
|punctuation.separator.colon.abl | `:` |
|
|
100
104
|
|punctuation.terminator.abl | `.` and `:` |
|
|
@@ -103,12 +107,12 @@ The ABL-specific scopes produced by the ABL grammer listed in the table below. T
|
|
|
103
107
|
|storage.data.table.abl | (Temp-)Table names, field names, index names |
|
|
104
108
|
|storage.other.opsys-device.abl | Files and other operating system devices |
|
|
105
109
|
|storage.type.abl | Primitive datatypes |
|
|
106
|
-
|storage.type.function.abl |
|
|
107
|
-
|string.double.
|
|
108
|
-
|string.single.
|
|
110
|
+
|storage.type.function.abl | `defined` keyword and preprocessor directives like `&message` |
|
|
111
|
+
|string.quoted.double.abl | String in `"` quotes |
|
|
112
|
+
|string.quoted.single.abl | String in `'` quotes |
|
|
109
113
|
|support.function.abl | `opsys`, `proversion`, ABL functions (eg `base64-encode`) |
|
|
110
114
|
|support.other.abl | Translation attributes `:L`, `:R`, `:T`, `:C`, `:U` |
|
|
111
|
-
|support.other.argument.abl | `&<name\|number>` arguments in includes
|
|
115
|
+
|support.other.argument.abl | `&<name\|number>` arguments in includes |
|
|
112
116
|
|variable.language.abl | ABL system handles (eg `session` or `this-object`) |
|
|
113
117
|
|variable.other.abl | Variable names |
|
|
114
118
|
|variable.parameter.abl | Parameter names in method, function, procedure definition |
|
|
@@ -116,6 +120,7 @@ The ABL-specific scopes produced by the ABL grammer listed in the table below. T
|
|
|
116
120
|
There are also a number of 'meta' scopes that usually cover multiple other scopes.
|
|
117
121
|
| Scope Name | Used for/by |
|
|
118
122
|
| ------------- | ------------- |
|
|
123
|
+
|meta.argument.abl | Unnamed arguments like `{1}` |
|
|
119
124
|
|meta.array.literal.abl | Literal values in an array |
|
|
120
125
|
|meta.block.abl | A block statement like `do`, `repeat` and ` finally |
|
|
121
126
|
|meta.brace.round.js | `(` and `)` |
|
|
@@ -125,7 +130,7 @@ There are also a number of 'meta' scopes that usually cover multiple other scope
|
|
|
125
130
|
|meta.define.enum.abl | An enum definition, from the `enum` keyword to its closing `:` |
|
|
126
131
|
|meta.define.function.abl | A user-defined function definition, from the `function` keyword to its closing `:` |
|
|
127
132
|
|meta.define.interface.abl | An interface definition, from the `interface` keyword to its closing `:` |
|
|
128
|
-
|meta.define.method.abl | A method, constructor or destructor definition, from the `method`keyword to the ending `:` or `.` Includes parameter
|
|
133
|
+
|meta.define.method.abl | A method, constructor or destructor definition, from the `method`keyword to the ending `:` or `.` Includes parameter definitions, if any. |
|
|
129
134
|
|meta.define.parameter.abl | An individual parameter definition |
|
|
130
135
|
|meta.define.stream.abl | A stream definition |
|
|
131
136
|
|meta.define-type.implements.abl | The type names that a type implements and/or inherits |
|
|
@@ -135,9 +140,9 @@ There are also a number of 'meta' scopes that usually cover multiple other scope
|
|
|
135
140
|
|meta.generic.abl | Generic type names |
|
|
136
141
|
|meta.include.abl | Include file references, from `{` to `}` |
|
|
137
142
|
|meta.include.argument.abl | Include argument references like `&arg` and `&arg=` |
|
|
138
|
-
|meta.preprocessor.
|
|
143
|
+
|meta.preprocessor.abl | Preprocessor definitions, functions and usage |
|
|
139
144
|
|meta.procedure.abl | An internal procedure definition, from the `procedure` keyword to its closing `:` or `.` |
|
|
140
|
-
|meta.statements.abl | All ABL
|
|
145
|
+
|meta.statements.abl | All ABL statements |
|
|
141
146
|
|meta.using.abl | A `using` definition |
|
|
142
147
|
|
|
143
148
|
## Checking scopes
|
package/abl.tmLanguage.json
CHANGED
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"procedure-definition": {
|
|
59
59
|
"name": "meta.procedure.abl",
|
|
60
60
|
"comment": "Look ahead to the procedure name, quoted or not. It will be resolved in the patterns. 'Names must begin with a letter.' from https://docs.progress.com/bundle/openedge-abl-manage-applications/page/Name-limits.html",
|
|
61
|
-
"begin": "(?i)\\
|
|
61
|
+
"begin": "(?i)\\s*(proce(?:dure|dur|du|d)?)\\s+(?=[a-zA-Z_])",
|
|
62
62
|
"beginCaptures": {
|
|
63
63
|
"1": {
|
|
64
64
|
"name": "keyword.other.abl"
|
|
@@ -94,6 +94,9 @@
|
|
|
94
94
|
{
|
|
95
95
|
"include": "#argument-reference"
|
|
96
96
|
},
|
|
97
|
+
{
|
|
98
|
+
"include": "#preprocessor-reference"
|
|
99
|
+
},
|
|
97
100
|
{
|
|
98
101
|
"include": "#numeric"
|
|
99
102
|
},
|
|
@@ -479,6 +482,12 @@
|
|
|
479
482
|
{
|
|
480
483
|
"include": "#buffer-copy"
|
|
481
484
|
},
|
|
485
|
+
{
|
|
486
|
+
"include": "#preprocessors"
|
|
487
|
+
},
|
|
488
|
+
{
|
|
489
|
+
"include": "#argument-reference"
|
|
490
|
+
},
|
|
482
491
|
{
|
|
483
492
|
"include": "#trigger-procedure"
|
|
484
493
|
},
|
|
@@ -637,12 +646,6 @@
|
|
|
637
646
|
{
|
|
638
647
|
"include": "#operator"
|
|
639
648
|
},
|
|
640
|
-
{
|
|
641
|
-
"include": "#analyze-suspend-resume"
|
|
642
|
-
},
|
|
643
|
-
{
|
|
644
|
-
"include": "#global-scoped-define"
|
|
645
|
-
},
|
|
646
649
|
{
|
|
647
650
|
"include": "#label-variable"
|
|
648
651
|
},
|
|
@@ -656,7 +659,7 @@
|
|
|
656
659
|
"include": "#format-constant"
|
|
657
660
|
},
|
|
658
661
|
{
|
|
659
|
-
"include": "#
|
|
662
|
+
"include": "#escape-endline"
|
|
660
663
|
},
|
|
661
664
|
{
|
|
662
665
|
"include": "#dll-type"
|
|
@@ -746,16 +749,95 @@
|
|
|
746
749
|
}
|
|
747
750
|
}
|
|
748
751
|
},
|
|
752
|
+
"preprocessor-directives": {
|
|
753
|
+
"patterns": [
|
|
754
|
+
{
|
|
755
|
+
"match": "(?i)((&)(elseif|endif|else|then|if))\\s*",
|
|
756
|
+
"captures": {
|
|
757
|
+
"2": {
|
|
758
|
+
"name": "punctuation.definition.preprocessor.abl"
|
|
759
|
+
},
|
|
760
|
+
"3": {
|
|
761
|
+
"name": "keyword.control.directive.conditional.abl"
|
|
762
|
+
}
|
|
763
|
+
}
|
|
764
|
+
},
|
|
765
|
+
{
|
|
766
|
+
"match": "(?i)((&)(message))\\s*",
|
|
767
|
+
"captures": {
|
|
768
|
+
"2": {
|
|
769
|
+
"name": "punctuation.definition.preprocessor.abl"
|
|
770
|
+
},
|
|
771
|
+
"3": {
|
|
772
|
+
"name": "storage.type.function.abl"
|
|
773
|
+
}
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
]
|
|
777
|
+
},
|
|
778
|
+
"preprocessor-reference": {
|
|
779
|
+
"patterns": [
|
|
780
|
+
{
|
|
781
|
+
"comment": "https://docs.progress.com/bundle/abl-reference/page/Preprocessor-name-reference.html#Preprocessor-name-reference",
|
|
782
|
+
"match": "(?i)\\s*(({)(&)(window-system|line-number|batch-mode|file-name|sequence|opsys|process-architecture)\\s*(}))",
|
|
783
|
+
"captures": {
|
|
784
|
+
"1": {
|
|
785
|
+
"name": "meta.preprocessor.abl"
|
|
786
|
+
},
|
|
787
|
+
"2": {
|
|
788
|
+
"name": "punctuation.section.abl"
|
|
789
|
+
},
|
|
790
|
+
"3": {
|
|
791
|
+
"name": "punctuation.definition.preprocessor.abl"
|
|
792
|
+
},
|
|
793
|
+
"4": {
|
|
794
|
+
"name": "entity.name.function.preprocessor.abl"
|
|
795
|
+
},
|
|
796
|
+
"5": {
|
|
797
|
+
"name": "punctuation.section.abl"
|
|
798
|
+
}
|
|
799
|
+
}
|
|
800
|
+
},
|
|
801
|
+
{
|
|
802
|
+
"match": "\\s*(({)(&)([a-zA-Z0-9_\\-#$%\\s\\(\\)]+)\\s*(}))",
|
|
803
|
+
"captures": {
|
|
804
|
+
"1": {
|
|
805
|
+
"name": "meta.preprocessor.abl"
|
|
806
|
+
},
|
|
807
|
+
"2": {
|
|
808
|
+
"name": "punctuation.section.abl"
|
|
809
|
+
},
|
|
810
|
+
"3": {
|
|
811
|
+
"name": "punctuation.definition.preprocessor.abl"
|
|
812
|
+
},
|
|
813
|
+
"4": {
|
|
814
|
+
"name": "entity.name.function.preprocessor.abl"
|
|
815
|
+
},
|
|
816
|
+
"5": {
|
|
817
|
+
"name": "punctuation.section.abl"
|
|
818
|
+
}
|
|
819
|
+
}
|
|
820
|
+
}
|
|
821
|
+
]
|
|
822
|
+
},
|
|
749
823
|
"preprocessors": {
|
|
750
|
-
"
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
"name": "storage.type.function.abl"
|
|
824
|
+
"patterns": [
|
|
825
|
+
{
|
|
826
|
+
"include": "#analyze-suspend-resume"
|
|
754
827
|
},
|
|
755
|
-
|
|
756
|
-
"
|
|
828
|
+
{
|
|
829
|
+
"include": "#global-scoped-define"
|
|
830
|
+
},
|
|
831
|
+
{
|
|
832
|
+
"include": "#preprocessor-directives"
|
|
833
|
+
},
|
|
834
|
+
{
|
|
835
|
+
"include": "#preprocessor-functions"
|
|
836
|
+
},
|
|
837
|
+
{
|
|
838
|
+
"include": "#preprocessor-reference"
|
|
757
839
|
}
|
|
758
|
-
|
|
840
|
+
]
|
|
759
841
|
},
|
|
760
842
|
"type-names": {
|
|
761
843
|
"patterns": [
|
|
@@ -2852,6 +2934,28 @@
|
|
|
2852
2934
|
{
|
|
2853
2935
|
"include": "#for-record"
|
|
2854
2936
|
},
|
|
2937
|
+
{
|
|
2938
|
+
"match": "(?i)\\b((transact(?:ion|io|i)?)|stop-after)\\b",
|
|
2939
|
+
"name": "keyword.other.abl"
|
|
2940
|
+
},
|
|
2941
|
+
{
|
|
2942
|
+
"include": "#numeric"
|
|
2943
|
+
},
|
|
2944
|
+
{
|
|
2945
|
+
"include": "#type-member-call"
|
|
2946
|
+
},
|
|
2947
|
+
{
|
|
2948
|
+
"include": "#language-functions"
|
|
2949
|
+
},
|
|
2950
|
+
{
|
|
2951
|
+
"include": "#abl-functions"
|
|
2952
|
+
},
|
|
2953
|
+
{
|
|
2954
|
+
"include": "#punctuation-comma"
|
|
2955
|
+
},
|
|
2956
|
+
{
|
|
2957
|
+
"include": "#punctuation-colon"
|
|
2958
|
+
},
|
|
2855
2959
|
{
|
|
2856
2960
|
"include": "#branch-options"
|
|
2857
2961
|
}
|
|
@@ -3085,7 +3189,7 @@
|
|
|
3085
3189
|
"name": "punctuation.definition.string.begin.abl"
|
|
3086
3190
|
}
|
|
3087
3191
|
},
|
|
3088
|
-
"name": "string.single.
|
|
3192
|
+
"name": "string.quoted.single.abl",
|
|
3089
3193
|
"end": "(')",
|
|
3090
3194
|
"endCaptures": {
|
|
3091
3195
|
"1": {
|
|
@@ -3102,6 +3206,14 @@
|
|
|
3102
3206
|
"match": "~.",
|
|
3103
3207
|
"name": "constant.character.escape.abl"
|
|
3104
3208
|
},
|
|
3209
|
+
"escape-endline": {
|
|
3210
|
+
"match": "(~)\\s*$",
|
|
3211
|
+
"captures": {
|
|
3212
|
+
"1": {
|
|
3213
|
+
"name": "punctuation.separator.continuation"
|
|
3214
|
+
}
|
|
3215
|
+
}
|
|
3216
|
+
},
|
|
3105
3217
|
"branch-return-value-double": {
|
|
3106
3218
|
"comment": "RETURN \"return-value\"",
|
|
3107
3219
|
"begin": "(?i)\\s*(return)(\\s+(error))?\\s+(\")",
|
|
@@ -3280,77 +3392,119 @@
|
|
|
3280
3392
|
"name": "comment.preprocessor.analyze-suspend.abl"
|
|
3281
3393
|
},
|
|
3282
3394
|
"global-scoped-define": {
|
|
3283
|
-
"begin": "(?i)((?:&scop(?:ed-define|ed-defin|ed-defi|ed-def|ed-de|ed-d|ed-|ed|e)?)|(?:&glob(?:al-define|al-defin|al-defi|al-def|al-de|al-d|al-|al|a)?))\\s*([\\.a-zA-Z0-9_\\-#$%\\\\/]*)\\s*",
|
|
3284
|
-
"beginCaptures": {
|
|
3285
|
-
"1": {
|
|
3286
|
-
"name": "keyword.other.abl"
|
|
3287
|
-
},
|
|
3288
|
-
"2": {
|
|
3289
|
-
"name": "entity.name.function.preprocessor.abl"
|
|
3290
|
-
}
|
|
3291
|
-
},
|
|
3292
|
-
"end": "(?=//|/\\*)|$",
|
|
3293
|
-
"name": "meta.preprocessor.define.abl",
|
|
3294
3395
|
"patterns": [
|
|
3295
3396
|
{
|
|
3296
|
-
"
|
|
3397
|
+
"begin": "(?i)^\\s*((&)(scop(?:ed-define|ed-defin|ed-defi|ed-def|ed-de|ed-d|ed-|ed|e)?))\\s*",
|
|
3398
|
+
"name": "meta.preprocessor.abl",
|
|
3399
|
+
"beginCaptures": {
|
|
3400
|
+
"2": {
|
|
3401
|
+
"name": "punctuation.definition.preprocessor.abl"
|
|
3402
|
+
},
|
|
3403
|
+
"3": {
|
|
3404
|
+
"name": "keyword.control.directive.define.abl"
|
|
3405
|
+
},
|
|
3406
|
+
"4": {
|
|
3407
|
+
"name": "entity.name.function.preprocessor.abl"
|
|
3408
|
+
}
|
|
3409
|
+
},
|
|
3410
|
+
"end": "([\\.a-zA-Z0-9_\\-#$%\\/]+)\\s*",
|
|
3411
|
+
"endCaptures": {
|
|
3412
|
+
"1": {
|
|
3413
|
+
"name": "entity.name.function.preprocessor.abl"
|
|
3414
|
+
}
|
|
3415
|
+
},
|
|
3416
|
+
"patterns": [
|
|
3417
|
+
{
|
|
3418
|
+
"include": "#escape-endline"
|
|
3419
|
+
}
|
|
3420
|
+
]
|
|
3421
|
+
},
|
|
3422
|
+
{
|
|
3423
|
+
"begin": "(?i)^\\s*((&)(glob(?:al-define|al-defin|al-defi|al-def|al-de|al-d|al-|al|a)?))\\s*",
|
|
3424
|
+
"name": "meta.preprocessor.abl",
|
|
3425
|
+
"beginCaptures": {
|
|
3426
|
+
"2": {
|
|
3427
|
+
"name": "punctuation.definition.preprocessor.abl"
|
|
3428
|
+
},
|
|
3429
|
+
"3": {
|
|
3430
|
+
"name": "keyword.control.directive.define.abl"
|
|
3431
|
+
},
|
|
3432
|
+
"4": {
|
|
3433
|
+
"name": "entity.name.function.preprocessor.abl"
|
|
3434
|
+
}
|
|
3435
|
+
},
|
|
3436
|
+
"end": "([\\.a-zA-Z0-9_\\-#$%\\/]+)\\s*",
|
|
3437
|
+
"endCaptures": {
|
|
3438
|
+
"1": {
|
|
3439
|
+
"name": "entity.name.function.preprocessor.abl"
|
|
3440
|
+
}
|
|
3441
|
+
},
|
|
3442
|
+
"patterns": [
|
|
3443
|
+
{
|
|
3444
|
+
"include": "#escape-endline"
|
|
3445
|
+
}
|
|
3446
|
+
]
|
|
3447
|
+
},
|
|
3448
|
+
{
|
|
3449
|
+
"begin": "(?i)((&)(undef(?:ine|in|i)?))\\s*([\\.a-zA-Z0-9_\\-#$%\\/]*)\\s*",
|
|
3450
|
+
"name": "meta.preprocessor.abl",
|
|
3451
|
+
"beginCaptures": {
|
|
3452
|
+
"2": {
|
|
3453
|
+
"name": "punctuation.definition.preprocessor.abl"
|
|
3454
|
+
},
|
|
3455
|
+
"3": {
|
|
3456
|
+
"name": "keyword.control.directive.define.abl"
|
|
3457
|
+
},
|
|
3458
|
+
"4": {
|
|
3459
|
+
"name": "entity.name.function.preprocessor.abl"
|
|
3460
|
+
}
|
|
3461
|
+
},
|
|
3462
|
+
"end": "([\\.a-zA-Z0-9_\\-#$%\\/]+)\\s*",
|
|
3463
|
+
"endCaptures": {
|
|
3464
|
+
"1": {
|
|
3465
|
+
"name": "entity.name.function.preprocessor.abl"
|
|
3466
|
+
}
|
|
3467
|
+
},
|
|
3468
|
+
"patterns": [
|
|
3469
|
+
{
|
|
3470
|
+
"include": "#escape-char"
|
|
3471
|
+
}
|
|
3472
|
+
]
|
|
3297
3473
|
}
|
|
3298
3474
|
]
|
|
3299
3475
|
},
|
|
3300
|
-
"
|
|
3301
|
-
"begin": "
|
|
3476
|
+
"preprocessor-functions": {
|
|
3477
|
+
"begin": "\\s*([Dd][Ee][Ff][Ii][Nn][Ee][Dd])\\b",
|
|
3302
3478
|
"beginCaptures": {
|
|
3303
3479
|
"1": {
|
|
3304
|
-
"name": "
|
|
3480
|
+
"name": "storage.type.function.abl"
|
|
3305
3481
|
}
|
|
3306
3482
|
},
|
|
3307
3483
|
"patterns": [
|
|
3308
|
-
{
|
|
3309
|
-
"match": "(?i)\\b(and|or)\\b",
|
|
3310
|
-
"captures": {
|
|
3311
|
-
"1": {
|
|
3312
|
-
"name": "keyword.other.abl"
|
|
3313
|
-
}
|
|
3314
|
-
}
|
|
3315
|
-
},
|
|
3316
3484
|
{
|
|
3317
3485
|
"include": "#parens"
|
|
3318
3486
|
},
|
|
3319
|
-
{
|
|
3320
|
-
"include": "#function-arguments"
|
|
3321
|
-
},
|
|
3322
|
-
{
|
|
3323
|
-
"include": "#type-member-call"
|
|
3324
|
-
},
|
|
3325
|
-
{
|
|
3326
|
-
"include": "#db-dot-table-dot-field"
|
|
3327
|
-
},
|
|
3328
3487
|
{
|
|
3329
3488
|
"include": "#comment"
|
|
3330
3489
|
},
|
|
3331
3490
|
{
|
|
3332
|
-
"
|
|
3333
|
-
|
|
3334
|
-
|
|
3335
|
-
|
|
3336
|
-
|
|
3337
|
-
|
|
3338
|
-
"include": "#handle-attributes"
|
|
3339
|
-
},
|
|
3340
|
-
{
|
|
3341
|
-
"include": "#preprocessors"
|
|
3342
|
-
},
|
|
3343
|
-
{
|
|
3344
|
-
"include": "#abl-system-handles"
|
|
3345
|
-
},
|
|
3346
|
-
{
|
|
3347
|
-
"include": "#keywords"
|
|
3491
|
+
"match": "([a-zA-Z0-9_\\-#$%]+)",
|
|
3492
|
+
"captures": {
|
|
3493
|
+
"1": {
|
|
3494
|
+
"name": "entity.name.function.preprocessor.abl"
|
|
3495
|
+
}
|
|
3496
|
+
}
|
|
3348
3497
|
}
|
|
3349
3498
|
],
|
|
3350
|
-
"end": "(
|
|
3499
|
+
"end": "(\\))",
|
|
3500
|
+
"endCaptures": {
|
|
3501
|
+
"1": {
|
|
3502
|
+
"name": "meta.brace.round.js"
|
|
3503
|
+
}
|
|
3504
|
+
}
|
|
3351
3505
|
},
|
|
3352
3506
|
"if-then": {
|
|
3353
|
-
"begin": "
|
|
3507
|
+
"begin": "\\b([Ii][Ff])\\b",
|
|
3354
3508
|
"beginCaptures": {
|
|
3355
3509
|
"1": {
|
|
3356
3510
|
"name": "keyword.other.abl"
|
|
@@ -3361,7 +3515,7 @@
|
|
|
3361
3515
|
"include": "#logical-expression"
|
|
3362
3516
|
}
|
|
3363
3517
|
],
|
|
3364
|
-
"end": "
|
|
3518
|
+
"end": "\\b(?=[Tt][Hh][Ee][Nn])\\b"
|
|
3365
3519
|
},
|
|
3366
3520
|
"logical-expression": {
|
|
3367
3521
|
"patterns": [
|
|
@@ -3711,6 +3865,9 @@
|
|
|
3711
3865
|
{
|
|
3712
3866
|
"include": "#string"
|
|
3713
3867
|
},
|
|
3868
|
+
{
|
|
3869
|
+
"include": "#preprocessor-reference"
|
|
3870
|
+
},
|
|
3714
3871
|
{
|
|
3715
3872
|
"include": "#argument-reference"
|
|
3716
3873
|
},
|
|
@@ -3751,6 +3908,9 @@
|
|
|
3751
3908
|
}
|
|
3752
3909
|
},
|
|
3753
3910
|
"patterns": [
|
|
3911
|
+
{
|
|
3912
|
+
"include": "#preprocessor-reference"
|
|
3913
|
+
},
|
|
3754
3914
|
{
|
|
3755
3915
|
"include": "#argument-reference"
|
|
3756
3916
|
},
|
|
@@ -3788,6 +3948,9 @@
|
|
|
3788
3948
|
}
|
|
3789
3949
|
}
|
|
3790
3950
|
},
|
|
3951
|
+
{
|
|
3952
|
+
"include": "#preprocessor-reference"
|
|
3953
|
+
},
|
|
3791
3954
|
{
|
|
3792
3955
|
"comment": "Argument references can be passed into includes as arguments",
|
|
3793
3956
|
"include": "#argument-reference"
|
|
@@ -3798,11 +3961,20 @@
|
|
|
3798
3961
|
]
|
|
3799
3962
|
},
|
|
3800
3963
|
"argument-reference": {
|
|
3801
|
-
"comment": "https://docs.progress.com/bundle/abl-reference/page/Argument-reference.html",
|
|
3802
|
-
"match": "\\s*((
|
|
3964
|
+
"comment": "ONly unnamed arguments are captured here. Names arguments are treated as preprocessors, since its impossible to tell them apart https://docs.progress.com/bundle/abl-reference/page/Argument-reference.html",
|
|
3965
|
+
"match": "\\s*(({)([0-9]+|\\*\\s*)(}))\\s*",
|
|
3803
3966
|
"captures": {
|
|
3804
3967
|
"1": {
|
|
3968
|
+
"name": "meta.argument.abl"
|
|
3969
|
+
},
|
|
3970
|
+
"2": {
|
|
3971
|
+
"name": "punctuation.section.abl"
|
|
3972
|
+
},
|
|
3973
|
+
"3": {
|
|
3805
3974
|
"name": "support.other.argument.abl"
|
|
3975
|
+
},
|
|
3976
|
+
"4": {
|
|
3977
|
+
"name": "punctuation.section.abl"
|
|
3806
3978
|
}
|
|
3807
3979
|
}
|
|
3808
3980
|
},
|
|
@@ -3862,7 +4034,7 @@
|
|
|
3862
4034
|
"name": "support.other.abl"
|
|
3863
4035
|
}
|
|
3864
4036
|
},
|
|
3865
|
-
"name": "string.single.
|
|
4037
|
+
"name": "string.quoted.single.abl",
|
|
3866
4038
|
"patterns": [
|
|
3867
4039
|
{
|
|
3868
4040
|
"include": "#escape-char"
|
|
@@ -3885,7 +4057,7 @@
|
|
|
3885
4057
|
"name": "support.other.abl"
|
|
3886
4058
|
}
|
|
3887
4059
|
},
|
|
3888
|
-
"name": "string.double.
|
|
4060
|
+
"name": "string.quoted.double.abl",
|
|
3889
4061
|
"patterns": [
|
|
3890
4062
|
{
|
|
3891
4063
|
"include": "#escape-char"
|
|
@@ -3902,7 +4074,7 @@
|
|
|
3902
4074
|
"comment": "https://docs.progress.com/bundle/abl-reference/page/Data-types.html"
|
|
3903
4075
|
},
|
|
3904
4076
|
"primitive-type": {
|
|
3905
|
-
"match": "(?i)(?<=^|\\s)(blob|(
|
|
4077
|
+
"match": "(?i)(?<=^|\\s)(blob|(ch(?:aracter|aracte|aract|arac|ara|ar|a)?)|c|clob|com-handle|(da(?:tetime-tz|tetime|te|t)?)|(de(?:cimal|cima|cim|ci|c)?)|handle|int64|(int(?:eger|ege|eg|e)?)|in|i|(log(?:ical|ica|ic|i)?)|lo|l|(longch(?:ar|a)?)|memptr|raw|recid|rowid|widget-handle)(?![=a-zA-Z0-9_\\-#$%\\-])",
|
|
3906
4078
|
"captures": {
|
|
3907
4079
|
"1": {
|
|
3908
4080
|
"name": "storage.type.abl"
|
|
@@ -3911,7 +4083,7 @@
|
|
|
3911
4083
|
"comment": "https://docs.progress.com/bundle/abl-reference/page/Data-types.html"
|
|
3912
4084
|
},
|
|
3913
4085
|
"numeric": {
|
|
3914
|
-
"match": "(?<![a-zA-Z0-9_\\-#$%-])(0[xX]\\h+)|(
|
|
4086
|
+
"match": "(?<![a-zA-Z0-9_\\-#$%-])(0[xX]\\h+)|([+\\-]?\\.?(0|[1-9][0-9]*)(\\.[0-9]+)?([eE][+\\-]?[0-9]+)?)",
|
|
3915
4087
|
"name": "constant.numeric.source.abl"
|
|
3916
4088
|
},
|
|
3917
4089
|
"abl-system-handles": {
|
|
@@ -5865,4 +6037,4 @@
|
|
|
5865
6037
|
},
|
|
5866
6038
|
"scopeName": "source.abl",
|
|
5867
6039
|
"uuid": "075bb86e-03ea-4fea-bac0-e11b9dc73e03"
|
|
5868
|
-
}
|
|
6040
|
+
}
|