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 11001x 11001x 11001x 11001x 11001x 32804x 32804x 32804x 32804x 32804x 32804x 32804x 32804x 32804x 32804x 32804x 32804x 32804x 32804x 32804x 32804x 11001x 11001x 1x 1x 11001x 11001x 10447x 10447x 11001x 11001x 260x 260x 11001x 11001x 274x 274x 274x 12x 12x 262x 274x 57x 45x 45x 12x 57x 1x 1x 1x 1x 57x 262x 262x 262x 11001x 11001x | 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; } } |