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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 11122x 11122x 11122x 11122x 33164x 33164x 33164x 33164x 33164x 33164x 33164x 33164x 33164x 33164x 33164x 33164x 33164x 11122x 11122x 1x 1x 11122x 11122x 10557x 10557x 11122x 11122x 269x 269x 11122x 11122x 266x 266x 11122x 11122x 335x 335x 335x 285x 285x 50x 50x 335x 3x 3x 47x 335x 18x 18x 1x 1x 1x 18x 47x 47x 47x 11122x | import {Issue} from "../issue"; import {BasicRuleConfig} from "./_basic_rule_config"; import {IRule, RuleTag} from "./_irule"; import {IObject} from "../objects/_iobject"; import {Class} from "../objects"; import {Visibility} from "../abap/4_file_information/visibility"; import {IRegistry} from "../_iregistry"; export class ConstructorVisibilityPublicConf extends BasicRuleConfig { } export class ConstructorVisibilityPublic implements IRule { private conf = new ConstructorVisibilityPublicConf(); public getMetadata() { return { key: "constructor_visibility_public", title: "Check constructor visibility is public", shortDescription: `Constructor must be placed in the public section, even if the class is not CREATE PUBLIC.`, extendedInformation: ` This only applies to global classes. https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#if-your-global-class-is-create-private-leave-the-constructor-public https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-US/abeninstance_constructor_guidl.htm`, tags: [RuleTag.Styleguide, RuleTag.SingleFile], }; } private getMessage(): string { return "Constructor visibility should be public"; } public getConfig() { return this.conf; } public initialize(_reg: IRegistry) { return this; } public setConfig(conf: ConstructorVisibilityPublicConf) { this.conf = conf; } public run(obj: IObject): Issue[] { const issues: Issue[] = []; if (!(obj instanceof Class)) { return []; } const def = obj.getClassDefinition(); if (def === undefined) { return []; } for (const method of def.methods) { if (method.name.toUpperCase() === "CONSTRUCTOR" && method.visibility !== Visibility.Public) { const issue = Issue.atIdentifier(method.identifier, this.getMessage(), this.getMetadata().key, this.conf.severity); issues.push(issue); } } return issues; } } |