All files / src/rules type_form_parameters.ts

100% Statements 59/59
100% Branches 12/12
100% Functions 6/6
100% Lines 59/59

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 601x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 7653x 7653x 7653x 7653x 7653x 22817x 22817x 22817x 22817x 22817x 22817x 22817x 22817x 22817x 7653x 7653x 3x 3x 7653x 7653x 7346x 7346x 7653x 7653x 139x 139x 7653x 7653x 155x 155x 155x 155x 44x 44x 111x 155x 5x 3x 3x 3x 3x 5x 111x 111x 111x 7653x 7653x  
import {Issue} from "../issue";
import {Class} from "../objects";
import {BasicRuleConfig} from "./_basic_rule_config";
import {ABAPRule} from "./_abap_rule";
import * as Expressions from "../abap/2_statements/expressions";
import {ABAPObject} from "../objects/_abap_object";
import {IRuleMetadata, RuleTag} from "./_irule";
import {ABAPFile} from "../abap/abap_file";
 
export class TypeFormParametersConf extends BasicRuleConfig {
}
 
export class TypeFormParameters extends ABAPRule {
 
  private conf = new TypeFormParametersConf();
 
  public getMetadata(): IRuleMetadata {
    return {
      key: "type_form_parameters",
      title: "Type FORM parameters",
      shortDescription: `Checks for untyped FORM parameters`,
      tags: [RuleTag.SingleFile],
      badExample: `FORM foo USING bar.`,
      goodExample: `FORM foo USING bar TYPE string.`,
    };
  }
 
  private getDescription(parameterName: string): string {
    return "Add TYPE for FORM parameter \"" + parameterName + "\"";
  }
 
  public getConfig() {
    return this.conf;
  }
 
  public setConfig(conf: TypeFormParametersConf) {
    this.conf = conf;
  }
 
  public runParsed(file: ABAPFile, obj: ABAPObject) {
    const ret: Issue[] = [];
 
    const stru = file.getStructure();
    if (obj instanceof Class || stru === undefined) {
      return ret;
    }
 
    for (const formparam of stru.findAllExpressions(Expressions.FormParam)) {
      if (formparam.findFirstExpression(Expressions.FormParamType) === undefined) {
        const token = formparam.getFirstToken();
        const issue = Issue.atToken(file, token, this.getDescription(token.getStr()), this.getMetadata().key, this.conf.severity);
        ret.push(issue);
      }
    }
 
    return ret;
  }
 
}