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

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

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 441x 1x 1x 1x 1x 1x 1x 1x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 3x 1x 1x
import {IStatement} from "./_statement";
import {seq, alt, opt, per, altPrio} from "../combi";
import {Target, Source, FindType} from "../expressions";
import {IStatementRunnable} from "../statement_runnable";
 
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",
                        Target);
 
    const source = seq(opt("OF"), FindType, Source);
 
    const cas = altPrio("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 = altPrio("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)));
  }
 
}