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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 10506x 10506x 10506x 10506x 10506x 31328x 31328x 31328x 31328x 31328x 31328x 31328x 31328x 31328x 31328x 31328x 31328x 31328x 31328x 31328x 31328x 10506x 10506x 1x 1x 10506x 10506x 9970x 9970x 10506x 10506x 251x 251x 10506x 10506x 266x 266x 266x 12x 12x 254x 266x 57x 45x 45x 12x 57x 1x 1x 1x 1x 57x 254x 254x 254x 10506x 10506x | 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`, // eslint-disable-next-line max-len extendedInformation: `https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#use-either-returning-or-exporting-or-changing-but-not-a-combination`, tags: [RuleTag.Styleguide, RuleTag.SingleFile], 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; } } |