Skip to content

oxabl_scope: v0.2.0

Choose a tag to compare

@evanbrobertson evanbrobertson released this 16 Oct 12:50
ca5da31

0.2.0 (2026-10-16)

� BREAKING CHANGES

  • parser: StreamOperation::From and StreamOperation::To now carry a StreamTarget instead of an Expression; the new StreamTarget::FileName holds the bare file name.
  • scope: oxabl_semantic::AnalysisContext has a new public field, elided_includes, so a struct literal of it no longer compiles. Build it with AnalysisContext::new and with_elided_includes.
  • lexer: oxabl_lexer::Kind gains File, Total, Count, Average, Maximum, Minimum, SubTotal, SubCount, SubAverage, SubMaximum and SubMinimum; these words no longer lex as Kind::Identifier.

Features

  • effects: strict ABL M4: call graph, database effects, callee summaries, DB001 and explain (f68126d)
  • lexer: lex FILE and the aggregate words as keywords (8d3cde1)
  • nulls: strict ABL M5: oxabl_nulls, NL001, NL002 and NL003 (906d636)
  • scope: add oxabl_scope, the compiler's buffer scopes, transaction blocks and locks per unit (cebe727)
  • scope: check the scope engine against COMPILE ... LISTING output (19f0ae2)
  • scope: expose database updates and analyse over a prebuilt flow graph (773f731)
  • scope: expose the resolved buffer references, with whether each names a field (d725929)
  • scope: record the table of each record read (3339571)
  • scope: strict-analysis M3: oxabl_scope, the LISTING harness, LK001-LK003 and TX001-TX005 (d4779c9)

Bug Fixes

  • issue sweep 2 (downstream edges, parser members) (430fc3b)
  • parser: read an unquoted OUTPUT/INPUT file name as a name (130d384)
  • parser: unquoted stream file names and MESSAGE UPDATE fields (06c823c)
  • scope: count the screen form of ASSIGN and read written in execution order (bf95fb7)
  • scope: label an opaque or passing reference in another routine by what it is (ef972fc)
  • scope: let an include that did not arrive between statements hide a write or a release (5afe7fd)
  • scope: mark a reference in an unknown statement form as opaque for temp-tables too (d911d47)
  • scope: pair a listing path that starts with .. with the resolved path (eb9cdcb)
  • scope: pair LISTING blocks by the end of the file path (8965d2d)
  • scope: read + as an operator in the screen form of ASSIGN (8e04b5d)
  • scope: read a file name as no record reference (0d36d78)
  • scope: read a lock that unexpanded text may hide as Unknown (ca9caae)

Performance Improvements

  • flow: read block headers from the parser's tokens (a1a0f78)
  • lint: build the CFGs once for the scope and handle analyses (b72e92a)
  • scope: fold a reference's words only when it is kept (45538a6)
  • scope: index field names for the exact searches of a bare field (a2f25e4)

Dependencies

  • The following workspace dependencies were updated
    • dependencies
      • oxabl_ast bumped from 2.0.0 to 3.0.0
      • oxabl_flow bumped from 0.2.0 to 0.3.0
      • oxabl_lexer bumped from 1.0.2 to 2.0.0
      • oxabl_schema bumped from 0.3.1 to 0.4.0
    • dev-dependencies
      • oxabl_parser bumped from 2.0.0 to 3.0.0
      • oxabl_schema bumped from 0.3.1 to 0.4.0