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 72 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 11715x 11715x 11715x 11715x 11715x 34997x 34997x 34997x 34997x 34997x 34997x 34997x 34997x 34997x 34997x 34997x 34997x 34997x 34997x 34997x 34997x 34997x 11715x 11715x 1x 1x 11715x 11715x 11175x 11175x 11715x 11715x 253x 253x 11715x 11715x 275x 275x 275x 12x 12x 263x 275x 71x 58x 58x 13x 71x 1x 1x 1x 1x 71x 263x 263x 263x 11715x 11715x | /* eslint-disable max-len */
import {Issue} from "../issue";
import {ABAPRule} from "./_abap_rule";
import * as Statements from "../abap/2_statements/statements";
import * as Expressions from "../abap/2_statements/expressions";
import {BasicRuleConfig} from "./_basic_rule_config";
import {IRuleMetadata, RuleTag} from "./_irule";
import {ABAPFile} from "../abap/abap_file";
export class MixReturningConf extends BasicRuleConfig {
}
export class MixReturning extends ABAPRule {
private conf = new MixReturningConf();
public getMetadata(): IRuleMetadata {
return {
key: "mix_returning",
title: "Mix of returning and exporting",
shortDescription: `Checks that methods don't have a mixture of returning and exporting/changing parameters`,
extendedInformation: `https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#use-either-returning-or-exporting-or-changing-but-not-a-combination
This syntax is not allowed on versions earlier than 740sp02, https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abennews-740-abap_objects.html#!ABAP_MODIFICATION_1@1@`,
tags: [RuleTag.Styleguide, RuleTag.SingleFile, RuleTag.Syntax],
badExample: `CLASS lcl DEFINITION.
PUBLIC SECTION.
METHODS
foobar
EXPORTING foo TYPE i
RETURNING VALUE(rv_string) TYPE string.
ENDCLASS.`,
};
}
private getMessage(): string {
return "Don't mix RETURNING and EXPORTING/CHANGING parameters in a single method.";
}
public getConfig() {
return this.conf;
}
public setConfig(conf: MixReturningConf) {
this.conf = conf;
}
public runParsed(file: ABAPFile): Issue[] {
const ret: Issue[] = [];
const stru = file.getStructure();
if (stru === undefined) {
return [];
}
for (const def of stru.findAllStatements(Statements.MethodDef)) {
if (!def.findFirstExpression(Expressions.MethodDefReturning)) {
continue;
}
if (def.findFirstExpression(Expressions.MethodDefExporting)
|| def.findFirstExpression(Expressions.MethodDefChanging)) {
const token = def.getFirstToken();
const issue = Issue.atToken(file, token, this.getMessage(), this.getMetadata().key, this.conf.severity);
ret.push(issue);
}
}
return ret;
}
}
|