All files / src/abap/2_statements/statements replace.ts

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

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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 471x 1x 1x 1x 1x 1x 1x 1x 1x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 34x 1x 1x
import {IStatement} from "./_statement";
import {seq, alt, opt, per, ver} from "../combi";
import {Target, Source} from "../expressions";
import {IStatementRunnable} from "../statement_runnable";
import {Version} from "../../../version";
 
export class Replace implements IStatement {
 
  public getMatcher(): IStatementRunnable {
    const length = seq("LENGTH", Source);
    const offset = seq("OFFSET", Source);
 
    const section = seq(opt("IN"),
                        "SECTION",
                        per(offset, length),
                        "OF",
                        Source);
 
    const source = seq(opt("OF"),
                       opt(alt("REGEX", "SUBSTRING", ver(Version.v755, "PCRE"))),
                       Source);
 
    const cas = alt("IGNORING CASE", "RESPECTING CASE");
 
    const repl = seq("REPLACEMENT COUNT", Target);
    const replo = seq("REPLACEMENT OFFSET", Target);
    const repll = seq("REPLACEMENT LENGTH", Target);
    const repli = seq("REPLACEMENT LINE", Target);
 
    const occ = alt("ALL OCCURRENCES",
                    "ALL OCCURENCES",
                    "FIRST OCCURENCE",
                    "FIRST OCCURRENCE");
 
    const mode = alt("IN CHARACTER MODE",
                     "IN BYTE MODE");
 
    const wit = seq("WITH", Source);
    const into = seq("INTO", Target);
 
    return seq("REPLACE",
               per(section, seq(opt(occ), source)),
               opt(seq("IN", opt("TABLE"), Target)),
               opt(per(wit, into, cas, mode, repl, replo, repll, repli, length)));
  }
 
}