|
1
|
# FWD 4GL language server and VS Code extension: feature list
|
|
2
|
|
|
3
|
The language server runs the FWD conversion front end over the editor's unsaved text. The VS Code extension starts it.
|
|
4
|
|
|
5
|
## Editor and highlighting
|
|
6
|
|
|
7
|
- Opens `.p`, `.cls`, `.i` and `.w` files as Progress 4GL.
|
|
8
|
- Syntax colouring generated from FWD's own lexer keyword table, including every legal keyword abbreviation.
|
|
9
|
- Own colour scheme for includes, preprocessor names, constants, tables and fields, in light and dark themes.
|
|
10
|
- Colouring of `TODO`, `FIXME` and `XXX` in comments, with marks in the scroll bar.
|
|
11
|
- Block folding: procedures, functions, methods, `DO`/`FOR`/`REPEAT` blocks, property `GET`/`SET` and comments.
|
|
12
|
- Comment toggling, bracket matching, auto-closing of brackets and quotes.
|
|
13
|
- 32 snippets: procedures, functions, classes, definitions, data access, blocks, `RUN`, messages, preprocessor directives and a program header.
|
|
14
|
|
|
15
|
## Diagnostics (as you type)
|
|
16
|
|
|
17
|
- Checks the open file on every edit, unsaved text included, after a short pause.
|
|
18
|
- Lexer, parser and preprocessor errors at their position.
|
|
19
|
- An error inside an include is reported in the include and on each `{include}` reference in the program.
|
|
20
|
- Include not found on the PROPATH, listing the directories searched.
|
|
21
|
- `RUN` target program not found on the PROPATH.
|
|
22
|
- Variable defined but never used (faded).
|
|
23
|
- Database read with no lock mode (default `SHARE-LOCK`), can be turned off.
|
|
24
|
- Abbreviated field name.
|
|
25
|
- Open programs that use an include are re-checked when the include is saved or edited (always, ask or never).
|
|
26
|
|
|
27
|
## Navigation
|
|
28
|
|
|
29
|
- Go to Definition on an `{include}` reference, a `RUN` target, a `{&NAME}` reference and a declared name (variable, parameter, procedure, function, method, buffer, temp-table, field). A name declared in an include opens the include.
|
|
30
|
- Find References and Document Highlight in the same file, scope-aware.
|
|
31
|
- Rename Symbol for a name declared in the file, scope-aware, with refusal and a reason where the rename would be unsafe.
|
|
32
|
- Renaming or moving an include rewrites every `{include}` reference in the project (always, ask or never).
|
|
33
|
|
|
34
|
## Hover
|
|
35
|
|
|
36
|
- `{&NAME}`: the values the preprocessor resolved and where each comes from.
|
|
37
|
- Tables and fields: database, type and schema properties (format, label, help, validation and so on).
|
|
38
|
- Buffers, temp-tables and work-tables: what they are for or like, and their fields.
|
|
39
|
- Variables, parameters and properties: name, mode and type.
|
|
40
|
|
|
41
|
## Completion and signature help
|
|
42
|
|
|
43
|
- Include paths after `{`, directory by directory along the PROPATH.
|
|
44
|
- Preprocessor names after `{&`, with their values.
|
|
45
|
- Program paths after `RUN`.
|
|
46
|
- Fields after `record.`, records after a record keyword, and record names as you type.
|
|
47
|
- Attributes and methods after `:`, from the parser's own member table, optionally with FWD-only members.
|
|
48
|
- Signature help for procedures and functions declared in the file.
|
|
49
|
|
|
50
|
## Outline
|
|
51
|
|
|
52
|
- Outline, breadcrumbs and Go to Symbol, grouped: procedures, functions, variables, parameters, temp-tables, buffers, queries, streams, datasets, widgets, triggers and classes.
|
|
53
|
- Variables and parameters nested under their procedure or function, fields under their temp-table.
|
|
54
|
- AppBuilder "Definitions Block" and "Main Block" entries, and an "Include files" group.
|
|
55
|
- An include's own declarations are left out of the program's outline.
|
|
56
|
|
|
57
|
## Code actions
|
|
58
|
|
|
59
|
- Quick fixes Add `NO-LOCK` and Add `EXCLUSIVE-LOCK` on a read with no lock mode.
|
|
60
|
- Expand an abbreviated keyword or field name, one at a time or all in the file (source action "Expand abbreviations").
|
|
61
|
- Correct case: keywords in upper case, names and file names left as written (source action).
|
|
62
|
|
|
63
|
## Preprocessed (cache) view
|
|
64
|
|
|
65
|
- Show Preprocessed Source: the program's `.cache` file in a read-only view, marked up to date or stale.
|
|
66
|
- The cache and `.pphints` files are written on save (setting) and on Regenerate, only from text that matches the disk.
|
|
67
|
- Include regions tinted by nesting depth, labelled with the include name, and foldable (Fold to Source).
|
|
68
|
- Show Source returns to the program.
|
|
69
|
|
|
70
|
## DB Structure view
|
|
71
|
|
|
72
|
- Databases, tables, system tables and sequences, with each table's columns, indexes and triggers and their properties.
|
|
73
|
- Clicking a trigger opens its procedure.
|
|
74
|
- Table and field names coloured in the code.
|
|
75
|
|
|
76
|
## Tasks view
|
|
77
|
|
|
78
|
- `TODO`, `FIXME` and `XXX` comments of the whole project or the current file, grouped by priority and file.
|
|
79
|
- Configurable tags and priorities, owner in brackets.
|
|
80
|
- Complete Task removes the comment.
|
|
81
|
|
|
82
|
## Status bar
|
|
83
|
|
|
84
|
- Check state of the current file: warming up, checking, clean, or the counts of errors, warnings and notes. Clicking opens the Problems panel.
|
|
85
|
|
|
86
|
## Server
|
|
87
|
|
|
88
|
- Started by the extension, which finds the project (`cfg/p2j.cfg.xml`) and the FWD build itself, or uses the configured classpath.
|
|
89
|
- Long work runs off the message thread. The front end warms up in the background.
|
|
90
|
- A check writes nothing into the project.
|
|
91
|
- 15 settings, 10 commands, and the custom requests `fwd4gl/preprocessed`, `fwd4gl/regenerate`, `fwd4gl/tasks` and `fwd4gl/schema`.
|