All files / src/rules omit_receiving.ts

94.36% Statements 67/71
86.66% Branches 13/15
100% Functions 5/5
94.36% Lines 67/71

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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 721x 1x 1x 1x 1x 1x 1x 1x 1x 1x 11403x 11403x 11403x 11403x 34060x 34060x 34060x 34060x 34060x 34060x 34060x 34060x 34060x 34060x 34060x 34060x 34060x 34060x 34060x 34060x 34060x 34060x 34060x 34060x 34060x 34060x 34060x 11403x 11403x 10877x 10877x 11403x 11403x 247x 247x 11403x 11403x 269x 269x 269x 7x 7x 6x 6x 1x 1x 7x     1x 7x     1x 1x 1x 269x 269x 269x 11403x 11403x  
import {Issue} from "../issue";
import {BasicRuleConfig} from "./_basic_rule_config";
import {IRuleMetadata, RuleTag} from "./_irule";
import * as Expressions from "../abap/2_statements/expressions";
import {ABAPRule} from "./_abap_rule";
import {ABAPFile} from "../abap/abap_file";
 
export class OmitReceivingConf extends BasicRuleConfig {
}
 
export class OmitReceiving extends ABAPRule {
  private conf = new OmitReceivingConf();
 
  public getMetadata(): IRuleMetadata {
    return {
      key: "omit_receiving",
      title: "Omit RECEIVING",
      shortDescription: `Omit RECEIVING`,
      extendedInformation: `https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#omit-receiving`,
      tags: [RuleTag.Styleguide, RuleTag.SingleFile],
      badExample: `
      upload_pack(
        EXPORTING
          io_client       = lo_client
          iv_url          = iv_url
          iv_deepen_level = iv_deepen_level
          it_hashes       = lt_hashes
        RECEIVING
          rt_objects      = et_objects ).`,
      goodExample: `
      et_objects = upload_pack(
        io_client       = lo_client
        iv_url          = iv_url
        iv_deepen_level = iv_deepen_level
        it_hashes       = lt_hashes ).`,
    };
  }
 
  public getConfig() {
    return this.conf;
  }
 
  public setConfig(conf: OmitReceivingConf) {
    this.conf = conf;
  }
 
  public runParsed(file: ABAPFile) {
    const issues: Issue[] = [];
 
    for (const e of file.getStructure()?.findAllExpressions(Expressions.MethodCallParam) || []) {
      const p = e.findDirectExpression(Expressions.MethodParameters);
      if (p === undefined) {
        continue;
      }
 
      const r = p.findDirectTokenByText("RECEIVING");
      if (r === undefined) {
        continue;
      }
      const ex = p.findDirectTokenByText("EXCEPTIONS");
      if (ex !== undefined) {
        continue;
      }
 
      issues.push(Issue.atToken(file, r, "Omit RECEIVING", this.getMetadata().key, this.getConfig().severity));
    }
 
    return issues;
  }
 
}