1.3.0 • Published 29 days ago

abl-tmlanguage v1.3.0

Weekly downloads
7
License
MIT
Repository
github
Last release
29 days ago

OpenEdge ABL language definition

This is a TextMate grammar for the Progress OpenEdge ABL Language (formerly known as 4GL).

It's used in the OpenEdge ABL for Visual Studio Code extension.

Contributing

The main file is abl.tmLanguage.json so contributors should hand-modify this file.

Tests

Tests are run from the root folder

npm install
npm test

If you noticed a syntax highlight issue in the VSCode extension, please try to create a failing test case first, and then modify the grammar accordingly.

Debugging

Clone the https://github.com/microsoft/vscode-textmate repo locally (represented by /path/to/vscode-textmate).

Debug ABL statement(s) using the command below.

cd path/to/vscode-textmate
node out/tests/inspect.js /path/to/abl-tmlanguage/abl.tmLanguage.json /path/to/abl-tmlanguage/debug-in.txt > /path/to/abl-tmlanguage/debug-out.txt

The /path/to/abl-tmlanguage/debug-out.txt file contains the line-by-line resolution of the code using rules defined in the abl-tmlanguage.json file.

Notes

VSCode extension

You can test this grammar locally with the associated VSCode extension:

git clone git@github.com:chriscamicas/abl-tmlanguage.git
cd abl-tmlanguage
npm link
cd ..
git clone git@github.com:chriscamicas/vscode-abl.git
cd vscode-abl
npm link abl-tmlanguage

You can now run and debug the extension from the vscode-abl directory (with the Launch Extension task). Every modification to the abl-tmlanguage project should be reflected in the vscode-abl directory immediately.

See npm link.

JSON vs plist

This project uses the JSON format over the plist one, mainly because I find it much more readable.

If you prefer the plist format, or the YAML one, there is an extension for VSCode that can convert them: TextMate Languages.

Note: I plan on using the YAML syntax (even more compact and readable) but it needs a build step as VSCode does not handle YAML natively.

Tokenize

This project uses the vscode-textmate package to tokenize and test the grammar.

Keywords

Part of this grammar is generated from a keyword list file. See index.js.

Scopes

The ABL-specific scopes produced by the ABL grammer 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 .

Scope NameUsed for/by
comment.block.source.ablEverything between /* and */
comment.line.double-slash.ablEverything in a // comment, incl slashes
comment.preprocessor.analyze-suspend.abl&analyze-suspend, &analyze-resume
constant.character.escape.abl~ and the next char
constant.language.abltoday, now, true, false, yes, no, ? (unknown value)
constant.language.source.abl99/99/9999 (or similar) when used as a format clause
constant.numeric.source.abl0x00-0xFF, 0-9
entity.name.function.ablMethod call, property call, procedure name, method name, property name, handle attributes, handle methods
entity.name.function.preprocessor.abl&scoped-define, &global-define
entity.name.package.ablPackage names for USING
entity.name.tag.ablAnnotation names
entity.name.type.ablClass/interface/enum names
entity.name.type.generic.ablGeneric type names
entity.other.attribute-name.ablAnnotation attribute names
keyword.operator.source.ablcontains, begins, matches, eq, le, lt, ge, gt, ne, <=, <>, >=, =, +, -, /, <, >, *
keyword.other.ablAny ABL keyword (incl those covered by other scopes)
punctuation.definition.string.begin.ablStart of a quoted string
punctuation.definition.string.end.ablEnd of a quoted string
punctuation.section.abl{ and }
punctuation.separator.comma.abl,
punctuation.separator.period.abl.
punctuation.separator.colon.abl:
punctuation.terminator.abl. and :
storage.data.table.abl(Temp-)Table names, field names, index names
storage.type.ablPrimitive datatypes
storage.type.function.ablABL preprocessors, defined keyword
string.double.complex.ablString in " quotes
string.single.complex.ablString in ' quotes
support.function.ablopsys, proversion, ABL functions (eg BASE64-ENCODE)
support.other.abl:L, :R, :T, :C, :U
support.other.argument.abl&<name\|number> arguments in includes, preprocessor values
variable.language.ablABL system handles (eg session or this-object)
variable.other.ablVariable names
variable.parameter.ablParameter names in method, function, procedure definition

License

MIT

1.3.0

29 days ago

1.2.0

3 months ago

1.1.3

1 year ago

1.1.2

2 years ago

1.1.1

4 years ago

1.1.0

4 years ago