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

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

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 311x 1x 1x 1x 1x 1x 1x 1x 1x 9x 9x 9x 9x 9x 9x 9x 9x 9x 9x 9x 9x 9x 9x 9x 9x 9x 9x 9x 9x 1x 1x
import {IStatement} from "./_statement";
import {seq, opt, optPrio, alt, plus, altPrio, per, regex as reg, verNotLang} from "../combi";
import {MethodName, Language, SimpleFieldChain} from "../expressions";
import {IStatementRunnable} from "../statement_runnable";
import {LanguageVersion} from "../../../version";
 
export class MethodImplementation implements IStatement {
 
  public getMatcher(): IStatementRunnable {
    const name = reg(/[\w~]+/);
 
    const kernel = seq("KERNEL MODULE",
                       plus(name),
                       optPrio(altPrio("FAIL", "IGNORE")));
 
    const using = seq("USING", plus(SimpleFieldChain));
 
    const options = seq("OPTIONS", per("READ-ONLY", "SUPPRESS SYNTAX ERRORS", "DETERMINISTIC"));
 
    const database = seq("DATABASE", alt("PROCEDURE", "FUNCTION", "GRAPH WORKSPACE"), "FOR HDB",
                         Language,
                         opt(options),
                         opt(using));
 
    // BY DATABASE and BY KERNEL both blocked in KeyUser
    const by = verNotLang(LanguageVersion.KeyUser, seq("BY", alt(kernel, database)));
 
    return seq("METHOD", MethodName, optPrio(by));
  }
 
}