2.8 KiB
2.8 KiB
EFTL verification matrix
Core matrix
| Area | Positive cases | Negative and recovery cases |
|---|---|---|
| Roots | one and multiple EFTL fragments with surrounding user text | close without open, missing close, nested roots if forbidden by confirmed grammar |
| Blocks | correctly nested VAR, IF, WHILE, functions, expressions, comments | crossing closes, incomplete close, unexpected close, unfinished or unknown [ construct; assert termination |
| Attributes | documented required and optional attributes in varied order | missing required, duplicate, unknown, unquoted, invalid enum/boolean/number |
| IF | condition + then, repeated else-if, optional final else | missing condition/then, else before then, duplicate else, branch after else |
| WHILE | condition + do, confirmed threshold boundaries | missing child, reversed order, invalid threshold, incomplete body |
| FOR | iterable variable and scoped loop variable | missing attributes, unknown iterable when statically knowable, reference after scope |
| Expressions | assignment, evaluation, output, supported literals/operators | unterminated block, malformed operator, missing semicolon where required |
| Functions | bodyless and block variants, precedence rules | mutually exclusive inputs, wrong body shape, invalid literal regex |
| TAG payload | minimal and full positional forms | missing mandatory position, invalid literal enum, preserved empty positions |
| Variables | declaration, reference, shadowing policy, iterable index | invalid type, duplicate declaration policy, undefined reference, invalid index type |
For every tag keyword, test the exact boundary after its name so a longer unknown name such as [VARIABLE] is not classified as [VAR ...].
Only assert rules confirmed by the PDFs or runtime grammar. Keep ambiguous rules as pending cases rather than opinionated errors.
Range matrix
Exercise each diagnostic at:
- first character and end of file;
- after ASCII and non-ASCII text;
- on a later line with LF and CRLF;
- inside a multiline token or comment;
- after an incremental edit that changes preceding line lengths.
LSP positions are zero-based UTF-16 line/character pairs. Prefer storing source offsets internally and converting with the current TextDocument at publication time.
Editor matrix
When syntax changes, inspect:
- language activation and file association;
- TextMate scope on open name, close name, attributes, strings, and delimiters;
- bracket matching and auto-closing;
- folding start/end markers;
- snippet insertion and tab stops;
- go-to-definition selection range;
- consistency of examples and README syntax.
Release evidence
Record:
- exact commands executed;
- automated pass/fail totals;
- Extension Development Host scenarios checked;
- known baseline failures reproduced independently;
- unverified runtime semantics or ambiguous documentation.