All files / src/cds/expressions cds_annotation_simple.ts

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

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 261x 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 {CDSString} from ".";
import {CDSPrefixedName} from "./cds_prefixed_name";
import {altPrio, Expression, regex, seq, starPrio} from "../../abap/2_statements/combi";
import {IStatementRunnable} from "../../abap/2_statements/statement_runnable";
 
export class CDSAnnotationSimple extends Expression {
  public getRunnable(): IStatementRunnable {
    const ident = regex(/^[\w_]+$/);
    // #(expr) where expr can be: identifier, dotted path, string, or concatenation with +
    const hashArg = altPrio(CDSString, CDSPrefixedName, ident);
    const hashExpr = seq(hashArg, starPrio(seq("+", hashArg)));
 
    const value = altPrio(CDSString,
                          "true",
                          "false",
                          "null",
                          seq("-", regex(/^\d+$/), ".", regex(/^\d+$/)),
                          seq("-", regex(/^\d+$/)),
                          seq(regex(/^\d+$/), ".", regex(/^\d+$/)),
                          regex(/^\d+$/),
                          seq("#", "(", hashExpr, ")"),
                          regex(/^#[\w_]+$/));
 
    return value;
  }
}