Project

General

Profile

11741a_feature_list.md

Paula Păstrăguș, 10/21/2026 09:16 AM

Download (4.95 KB)

 
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`.