All files / src/bdef/expressions bdef_header.ts

100% Statements 27/27
100% Branches 1/1
100% Functions 1/1
100% Lines 27/27

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 281x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x  
import {BDEFAlias, BDEFName} from ".";
import {altPrio, Expression, optPrio, plusPrio, regex, seq, starPrio} from "../../abap/2_statements/combi";
import {IStatementRunnable} from "../../abap/2_statements/statement_runnable";
 
/** header statements following the implementation type, eg. "strict ( 2 );" or "with draft;" */
export class BDEFHeader extends Expression {
  public getRunnable(): IStatementRunnable {
    const extensibleItem = seq("WITH", plusPrio(regex(/^\w+$/)), ";");
    const extensible = seq("EXTENSIBLE", optPrio(seq("{", starPrio(extensibleItem), "}")), optPrio(";"));
 
    return altPrio(
      seq("STRICT", optPrio(seq("(", regex(/^\d+$/), ")")), ";"),
      seq("WITH DRAFT", ";"),
      seq("USE DRAFT", optPrio("AS DEPENDENT"), ";"),
      seq(altPrio("WITH", "USE"), "COLLABORATIVE DRAFT", ";"),
      seq("WITH PRIVILEGED MODE", optPrio(seq("DISABLING", BDEFName)), ";"),
      seq("WITH MANAGED INSTANCE FILTER", ";"),
      seq("WITH HIERARCHY", ";"),
      seq("WITH CROSS ASSOCIATIONS", ";"),
      seq("USE SIDE EFFECTS", ";"),
      seq("USE RECOMMENDATIONS", ";"),
      seq("FOREIGN ENTITY", BDEFName, optPrio(BDEFAlias), ";"),
      seq("SCALAR ENTITY", BDEFName, "FIELD", BDEFName, ";"),
      seq("AUXILIARY CLASS", BDEFName, ";"),
      extensible);
  }
}