Files
vscode-eftl-language/.agents/skills/verify-eftl-linter/references/verification-matrix.md
T

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:

  1. exact commands executed;
  2. automated pass/fail totals;
  3. Extension Development Host scenarios checked;
  4. known baseline failures reproduced independently;
  5. unverified runtime semantics or ambiguous documentation.