├── .abapgit.xml ├── .gitignore ├── LICENSE ├── README.md ├── SECURITY.md ├── abaplint.json ├── docs ├── .gitignore ├── 404.md ├── CNAME ├── Gemfile ├── README.md ├── _checks │ ├── 01.md │ ├── 02.md │ ├── 03.md │ ├── 04.md │ ├── 05.md │ ├── 06.md │ ├── 07.md │ ├── 08.md │ ├── 09.md │ ├── 10.md │ ├── 100.md │ ├── 101.md │ ├── 102.md │ ├── 103.md │ ├── 104.md │ ├── 11.md │ ├── 12.md │ ├── 13.md │ ├── 14.md │ ├── 15.md │ ├── 16.md │ ├── 17.md │ ├── 18.md │ ├── 19.md │ ├── 20.md │ ├── 21.md │ ├── 22.md │ ├── 23.md │ ├── 24.md │ ├── 25.md │ ├── 26.md │ ├── 27.md │ ├── 28.md │ ├── 29.md │ ├── 30.md │ ├── 31.md │ ├── 32.md │ ├── 33.md │ ├── 34.md │ ├── 35.md │ ├── 36.md │ ├── 37.md │ ├── 38.md │ ├── 39.md │ ├── 40.md │ ├── 41.md │ ├── 42.md │ ├── 43.md │ ├── 44.md │ ├── 45.md │ ├── 46.md │ ├── 47.md │ ├── 48.md │ ├── 49.md │ ├── 50.md │ ├── 51.md │ ├── 52.md │ ├── 53.md │ ├── 54.md │ ├── 55.md │ ├── 56.md │ ├── 57.md │ ├── 58.md │ ├── 59.md │ ├── 60.md │ ├── 61.md │ ├── 62.md │ ├── 63.md │ ├── 64.md │ ├── 65.md │ ├── 66.md │ ├── 67.md │ ├── 68.md │ ├── 69.md │ ├── 70.md │ ├── 71.md │ ├── 72.md │ ├── 73.md │ ├── 74.md │ ├── 75.md │ ├── 76.md │ ├── 77.md │ ├── 78.md │ ├── 79.md │ ├── 80.md │ ├── 81.md │ ├── 82.md │ ├── 83.md │ ├── 84.md │ ├── 85.md │ ├── 86.md │ ├── 87.md │ ├── 88.md │ ├── 89.md │ ├── 90.md │ ├── 91.md │ ├── 92.md │ ├── 93.md │ ├── 94.md │ ├── 95.md │ ├── 96.md │ ├── 97.md │ ├── 98.md │ └── 99.md ├── _config.yml ├── _includes │ ├── head.html │ └── header.html ├── _layouts │ └── default.html ├── checks.md ├── highlight.css ├── img │ ├── 04_conf.png │ ├── 06_conf.png │ ├── 08_conf.png │ ├── 100_conf.png │ ├── 13_conf.png │ ├── 17_conf.png │ ├── 19_conf.png │ ├── 20_conf.png │ ├── 24_conf.png │ ├── 25_conf.png │ ├── 26_conf.png │ ├── 29_conf.png │ ├── 31_conf.png │ ├── 32_conf.png │ ├── 34_conf.png │ ├── 39_conf.png │ ├── 41_conf.png │ ├── 45_conf.png │ ├── 53_conf.png │ ├── 55_conf.png │ ├── 56_conf.png │ ├── 57_conf.png │ ├── 58_conf.png │ ├── 59_conf.png │ ├── 64_conf.png │ ├── 66_conf.png │ ├── 69_conf_globals.png │ ├── 69_conf_locals.png │ ├── 69_conf_oo.png │ ├── 69_conf_other.png │ ├── 69_conf_prefixes.png │ ├── 69_conf_procedural.png │ ├── 70_conf.png │ ├── 71_conf.png │ ├── 74_conf.png │ ├── 75_conf.png │ ├── 84_conf.png │ ├── 89_conf.png │ ├── 91_conf.png │ ├── 95_conf.png │ ├── 99_conf.png │ ├── default_conf.png │ └── rfc.png ├── index.md ├── installation.md ├── links.md ├── performance.md ├── style.css └── utilities.md └── src ├── checks ├── 42b8957792081ed8a1843b59ad6cdf21.avas.xml ├── 42b8957792081ed8a4aca41adc9bced3.avas.xml ├── 42b8957792081ed8a4acae90deafcdff.avas.xml ├── package.devc.xml ├── zaoc_encapsulation.char.xml ├── zaoc_encapsulation_objects.char.xml ├── zaoc_encapsulation_packages.char.xml ├── zaoc_seoclsname_range.tabl.xml ├── zaoc_seoclsname_range_tt.ttyp.xml ├── zaoc_seocmpname_range.tabl.xml ├── zaoc_seocmpname_range_tt.ttyp.xml ├── zaoc_slin_desc_key_range.tabl.xml ├── zaoc_slin_desc_key_range_tt.ttyp.xml ├── zcl_aoc_category.clas.abap ├── zcl_aoc_category.clas.testclasses.abap ├── zcl_aoc_category.clas.xml ├── zcl_aoc_check_01.clas.abap ├── zcl_aoc_check_01.clas.testclasses.abap ├── zcl_aoc_check_01.clas.xml ├── zcl_aoc_check_02.clas.abap ├── zcl_aoc_check_02.clas.testclasses.abap ├── zcl_aoc_check_02.clas.xml ├── zcl_aoc_check_03.clas.abap ├── zcl_aoc_check_03.clas.testclasses.abap ├── zcl_aoc_check_03.clas.xml ├── zcl_aoc_check_04.clas.abap ├── zcl_aoc_check_04.clas.testclasses.abap ├── zcl_aoc_check_04.clas.xml ├── zcl_aoc_check_05.clas.abap ├── zcl_aoc_check_05.clas.testclasses.abap ├── zcl_aoc_check_05.clas.xml ├── zcl_aoc_check_06.clas.abap ├── zcl_aoc_check_06.clas.testclasses.abap ├── zcl_aoc_check_06.clas.xml ├── zcl_aoc_check_07.clas.abap ├── zcl_aoc_check_07.clas.testclasses.abap ├── zcl_aoc_check_07.clas.xml ├── zcl_aoc_check_08.clas.abap ├── zcl_aoc_check_08.clas.testclasses.abap ├── zcl_aoc_check_08.clas.xml ├── zcl_aoc_check_09.clas.abap ├── zcl_aoc_check_09.clas.testclasses.abap ├── zcl_aoc_check_09.clas.xml ├── zcl_aoc_check_10.clas.abap ├── zcl_aoc_check_10.clas.testclasses.abap ├── zcl_aoc_check_10.clas.xml ├── zcl_aoc_check_100.clas.abap ├── zcl_aoc_check_100.clas.testclasses.abap ├── zcl_aoc_check_100.clas.xml ├── zcl_aoc_check_101.clas.abap ├── zcl_aoc_check_101.clas.testclasses.abap ├── zcl_aoc_check_101.clas.xml ├── zcl_aoc_check_102.clas.abap ├── zcl_aoc_check_102.clas.locals_def.abap ├── zcl_aoc_check_102.clas.testclasses.abap ├── zcl_aoc_check_102.clas.xml ├── zcl_aoc_check_103.clas.abap ├── zcl_aoc_check_103.clas.locals_imp.abap ├── zcl_aoc_check_103.clas.testclasses.abap ├── zcl_aoc_check_103.clas.xml ├── zcl_aoc_check_104.clas.abap ├── zcl_aoc_check_104.clas.locals_def.abap ├── zcl_aoc_check_104.clas.testclasses.abap ├── zcl_aoc_check_104.clas.xml ├── zcl_aoc_check_11.clas.abap ├── zcl_aoc_check_11.clas.testclasses.abap ├── zcl_aoc_check_11.clas.xml ├── zcl_aoc_check_12.clas.abap ├── zcl_aoc_check_12.clas.testclasses.abap ├── zcl_aoc_check_12.clas.xml ├── zcl_aoc_check_13.clas.abap ├── zcl_aoc_check_13.clas.testclasses.abap ├── zcl_aoc_check_13.clas.xml ├── zcl_aoc_check_14.clas.abap ├── zcl_aoc_check_14.clas.testclasses.abap ├── zcl_aoc_check_14.clas.xml ├── zcl_aoc_check_15.clas.abap ├── zcl_aoc_check_15.clas.testclasses.abap ├── zcl_aoc_check_15.clas.xml ├── zcl_aoc_check_16.clas.abap ├── zcl_aoc_check_16.clas.testclasses.abap ├── zcl_aoc_check_16.clas.xml ├── zcl_aoc_check_17.clas.abap ├── zcl_aoc_check_17.clas.testclasses.abap ├── zcl_aoc_check_17.clas.xml ├── zcl_aoc_check_18.clas.abap ├── zcl_aoc_check_18.clas.testclasses.abap ├── zcl_aoc_check_18.clas.xml ├── zcl_aoc_check_19.clas.abap ├── zcl_aoc_check_19.clas.testclasses.abap ├── zcl_aoc_check_19.clas.xml ├── zcl_aoc_check_20.clas.abap ├── zcl_aoc_check_20.clas.testclasses.abap ├── zcl_aoc_check_20.clas.xml ├── zcl_aoc_check_21.clas.abap ├── zcl_aoc_check_21.clas.testclasses.abap ├── zcl_aoc_check_21.clas.xml ├── zcl_aoc_check_22.clas.abap ├── zcl_aoc_check_22.clas.testclasses.abap ├── zcl_aoc_check_22.clas.xml ├── zcl_aoc_check_23.clas.abap ├── zcl_aoc_check_23.clas.testclasses.abap ├── zcl_aoc_check_23.clas.xml ├── zcl_aoc_check_24.clas.abap ├── zcl_aoc_check_24.clas.testclasses.abap ├── zcl_aoc_check_24.clas.xml ├── zcl_aoc_check_24_result.clas.abap ├── zcl_aoc_check_24_result.clas.xml ├── zcl_aoc_check_25.clas.abap ├── zcl_aoc_check_25.clas.testclasses.abap ├── zcl_aoc_check_25.clas.xml ├── zcl_aoc_check_26.clas.abap ├── zcl_aoc_check_26.clas.testclasses.abap ├── zcl_aoc_check_26.clas.xml ├── zcl_aoc_check_27.clas.abap ├── zcl_aoc_check_27.clas.testclasses.abap ├── zcl_aoc_check_27.clas.xml ├── zcl_aoc_check_28.clas.abap ├── zcl_aoc_check_28.clas.testclasses.abap ├── zcl_aoc_check_28.clas.xml ├── zcl_aoc_check_29.clas.abap ├── zcl_aoc_check_29.clas.testclasses.abap ├── zcl_aoc_check_29.clas.xml ├── zcl_aoc_check_30.clas.abap ├── zcl_aoc_check_30.clas.testclasses.abap ├── zcl_aoc_check_30.clas.xml ├── zcl_aoc_check_31.clas.abap ├── zcl_aoc_check_31.clas.locals_def.abap ├── zcl_aoc_check_31.clas.testclasses.abap ├── zcl_aoc_check_31.clas.xml ├── zcl_aoc_check_32.clas.abap ├── zcl_aoc_check_32.clas.testclasses.abap ├── zcl_aoc_check_32.clas.xml ├── zcl_aoc_check_33.clas.abap ├── zcl_aoc_check_33.clas.testclasses.abap ├── zcl_aoc_check_33.clas.xml ├── zcl_aoc_check_34.clas.abap ├── zcl_aoc_check_34.clas.testclasses.abap ├── zcl_aoc_check_34.clas.xml ├── zcl_aoc_check_35.clas.abap ├── zcl_aoc_check_35.clas.testclasses.abap ├── zcl_aoc_check_35.clas.xml ├── zcl_aoc_check_36.clas.abap ├── zcl_aoc_check_36.clas.testclasses.abap ├── zcl_aoc_check_36.clas.xml ├── zcl_aoc_check_37.clas.abap ├── zcl_aoc_check_37.clas.testclasses.abap ├── zcl_aoc_check_37.clas.xml ├── zcl_aoc_check_38.clas.abap ├── zcl_aoc_check_38.clas.testclasses.abap ├── zcl_aoc_check_38.clas.xml ├── zcl_aoc_check_39.clas.abap ├── zcl_aoc_check_39.clas.testclasses.abap ├── zcl_aoc_check_39.clas.xml ├── zcl_aoc_check_40.clas.abap ├── zcl_aoc_check_40.clas.testclasses.abap ├── zcl_aoc_check_40.clas.xml ├── zcl_aoc_check_41.clas.abap ├── zcl_aoc_check_41.clas.testclasses.abap ├── zcl_aoc_check_41.clas.xml ├── zcl_aoc_check_42.clas.abap ├── zcl_aoc_check_42.clas.testclasses.abap ├── zcl_aoc_check_42.clas.xml ├── zcl_aoc_check_43.clas.abap ├── zcl_aoc_check_43.clas.testclasses.abap ├── zcl_aoc_check_43.clas.xml ├── zcl_aoc_check_44.clas.abap ├── zcl_aoc_check_44.clas.testclasses.abap ├── zcl_aoc_check_44.clas.xml ├── zcl_aoc_check_45.clas.abap ├── zcl_aoc_check_45.clas.locals_def.abap ├── zcl_aoc_check_45.clas.locals_imp.abap ├── zcl_aoc_check_45.clas.testclasses.abap ├── zcl_aoc_check_45.clas.xml ├── zcl_aoc_check_46.clas.abap ├── zcl_aoc_check_46.clas.testclasses.abap ├── zcl_aoc_check_46.clas.xml ├── zcl_aoc_check_47.clas.abap ├── zcl_aoc_check_47.clas.testclasses.abap ├── zcl_aoc_check_47.clas.xml ├── zcl_aoc_check_48.clas.abap ├── zcl_aoc_check_48.clas.testclasses.abap ├── zcl_aoc_check_48.clas.xml ├── zcl_aoc_check_49.clas.abap ├── zcl_aoc_check_49.clas.testclasses.abap ├── zcl_aoc_check_49.clas.xml ├── zcl_aoc_check_50.clas.abap ├── zcl_aoc_check_50.clas.testclasses.abap ├── zcl_aoc_check_50.clas.xml ├── zcl_aoc_check_51.clas.abap ├── zcl_aoc_check_51.clas.testclasses.abap ├── zcl_aoc_check_51.clas.xml ├── zcl_aoc_check_52.clas.abap ├── zcl_aoc_check_52.clas.testclasses.abap ├── zcl_aoc_check_52.clas.xml ├── zcl_aoc_check_53.clas.abap ├── zcl_aoc_check_53.clas.testclasses.abap ├── zcl_aoc_check_53.clas.xml ├── zcl_aoc_check_54.clas.abap ├── zcl_aoc_check_54.clas.testclasses.abap ├── zcl_aoc_check_54.clas.xml ├── zcl_aoc_check_55.clas.abap ├── zcl_aoc_check_55.clas.testclasses.abap ├── zcl_aoc_check_55.clas.xml ├── zcl_aoc_check_56.clas.abap ├── zcl_aoc_check_56.clas.testclasses.abap ├── zcl_aoc_check_56.clas.xml ├── zcl_aoc_check_57.clas.abap ├── zcl_aoc_check_57.clas.testclasses.abap ├── zcl_aoc_check_57.clas.xml ├── zcl_aoc_check_58.clas.abap ├── zcl_aoc_check_58.clas.testclasses.abap ├── zcl_aoc_check_58.clas.xml ├── zcl_aoc_check_59.clas.abap ├── zcl_aoc_check_59.clas.testclasses.abap ├── zcl_aoc_check_59.clas.xml ├── zcl_aoc_check_60.clas.abap ├── zcl_aoc_check_60.clas.testclasses.abap ├── zcl_aoc_check_60.clas.xml ├── zcl_aoc_check_61.clas.abap ├── zcl_aoc_check_61.clas.testclasses.abap ├── zcl_aoc_check_61.clas.xml ├── zcl_aoc_check_62.clas.abap ├── zcl_aoc_check_62.clas.testclasses.abap ├── zcl_aoc_check_62.clas.xml ├── zcl_aoc_check_63.clas.abap ├── zcl_aoc_check_63.clas.testclasses.abap ├── zcl_aoc_check_63.clas.xml ├── zcl_aoc_check_64.clas.abap ├── zcl_aoc_check_64.clas.testclasses.abap ├── zcl_aoc_check_64.clas.xml ├── zcl_aoc_check_65.clas.abap ├── zcl_aoc_check_65.clas.testclasses.abap ├── zcl_aoc_check_65.clas.xml ├── zcl_aoc_check_66.clas.abap ├── zcl_aoc_check_66.clas.testclasses.abap ├── zcl_aoc_check_66.clas.xml ├── zcl_aoc_check_67.clas.abap ├── zcl_aoc_check_67.clas.testclasses.abap ├── zcl_aoc_check_67.clas.xml ├── zcl_aoc_check_68.clas.abap ├── zcl_aoc_check_68.clas.testclasses.abap ├── zcl_aoc_check_68.clas.xml ├── zcl_aoc_check_69.clas.abap ├── zcl_aoc_check_69.clas.locals_def.abap ├── zcl_aoc_check_69.clas.locals_imp.abap ├── zcl_aoc_check_69.clas.testclasses.abap ├── zcl_aoc_check_69.clas.xml ├── zcl_aoc_check_70.clas.abap ├── zcl_aoc_check_70.clas.testclasses.abap ├── zcl_aoc_check_70.clas.xml ├── zcl_aoc_check_71.clas.abap ├── zcl_aoc_check_71.clas.testclasses.abap ├── zcl_aoc_check_71.clas.xml ├── zcl_aoc_check_72.clas.abap ├── zcl_aoc_check_72.clas.testclasses.abap ├── zcl_aoc_check_72.clas.xml ├── zcl_aoc_check_73.clas.abap ├── zcl_aoc_check_73.clas.testclasses.abap ├── zcl_aoc_check_73.clas.xml ├── zcl_aoc_check_74.clas.abap ├── zcl_aoc_check_74.clas.testclasses.abap ├── zcl_aoc_check_74.clas.xml ├── zcl_aoc_check_75.clas.abap ├── zcl_aoc_check_75.clas.testclasses.abap ├── zcl_aoc_check_75.clas.xml ├── zcl_aoc_check_76.clas.abap ├── zcl_aoc_check_76.clas.testclasses.abap ├── zcl_aoc_check_76.clas.xml ├── zcl_aoc_check_77.clas.abap ├── zcl_aoc_check_77.clas.testclasses.abap ├── zcl_aoc_check_77.clas.xml ├── zcl_aoc_check_78.clas.abap ├── zcl_aoc_check_78.clas.testclasses.abap ├── zcl_aoc_check_78.clas.xml ├── zcl_aoc_check_79.clas.abap ├── zcl_aoc_check_79.clas.testclasses.abap ├── zcl_aoc_check_79.clas.xml ├── zcl_aoc_check_80.clas.abap ├── zcl_aoc_check_80.clas.testclasses.abap ├── zcl_aoc_check_80.clas.xml ├── zcl_aoc_check_81.clas.abap ├── zcl_aoc_check_81.clas.testclasses.abap ├── zcl_aoc_check_81.clas.xml ├── zcl_aoc_check_82.clas.abap ├── zcl_aoc_check_82.clas.testclasses.abap ├── zcl_aoc_check_82.clas.xml ├── zcl_aoc_check_83.clas.abap ├── zcl_aoc_check_83.clas.testclasses.abap ├── zcl_aoc_check_83.clas.xml ├── zcl_aoc_check_84.clas.abap ├── zcl_aoc_check_84.clas.testclasses.abap ├── zcl_aoc_check_84.clas.xml ├── zcl_aoc_check_85.clas.abap ├── zcl_aoc_check_85.clas.testclasses.abap ├── zcl_aoc_check_85.clas.xml ├── zcl_aoc_check_86.clas.abap ├── zcl_aoc_check_86.clas.testclasses.abap ├── zcl_aoc_check_86.clas.xml ├── zcl_aoc_check_87.clas.abap ├── zcl_aoc_check_87.clas.testclasses.abap ├── zcl_aoc_check_87.clas.xml ├── zcl_aoc_check_88.clas.abap ├── zcl_aoc_check_88.clas.testclasses.abap ├── zcl_aoc_check_88.clas.xml ├── zcl_aoc_check_89.clas.abap ├── zcl_aoc_check_89.clas.testclasses.abap ├── zcl_aoc_check_89.clas.xml ├── zcl_aoc_check_90.clas.abap ├── zcl_aoc_check_90.clas.testclasses.abap ├── zcl_aoc_check_90.clas.xml ├── zcl_aoc_check_91.clas.abap ├── zcl_aoc_check_91.clas.testclasses.abap ├── zcl_aoc_check_91.clas.xml ├── zcl_aoc_check_92.clas.abap ├── zcl_aoc_check_92.clas.testclasses.abap ├── zcl_aoc_check_92.clas.xml ├── zcl_aoc_check_93.clas.abap ├── zcl_aoc_check_93.clas.xml ├── zcl_aoc_check_94.clas.abap ├── zcl_aoc_check_94.clas.testclasses.abap ├── zcl_aoc_check_94.clas.xml ├── zcl_aoc_check_95.clas.abap ├── zcl_aoc_check_95.clas.testclasses.abap ├── zcl_aoc_check_95.clas.xml ├── zcl_aoc_check_96.clas.abap ├── zcl_aoc_check_96.clas.xml ├── zcl_aoc_check_97.clas.abap ├── zcl_aoc_check_97.clas.xml ├── zcl_aoc_check_98.clas.abap ├── zcl_aoc_check_98.clas.testclasses.abap ├── zcl_aoc_check_98.clas.xml ├── zcl_aoc_check_99.clas.abap ├── zcl_aoc_check_99.clas.testclasses.abap ├── zcl_aoc_check_99.clas.xml ├── zcl_aoc_scan.clas.abap ├── zcl_aoc_scan.clas.xml ├── zcl_aoc_super.clas.abap ├── zcl_aoc_super.clas.testclasses.abap ├── zcl_aoc_super.clas.xml ├── zcl_aoc_super_root.clas.abap ├── zcl_aoc_super_root.clas.xml ├── zcl_aoc_unit_test.clas.abap ├── zcl_aoc_unit_test.clas.xml ├── zzaoc.type.abap └── zzaoc.type.xml ├── collectors ├── package.devc.xml ├── zcl_aoc_embedded_packages.clas.abap └── zcl_aoc_embedded_packages.clas.xml ├── dependencies ├── package.devc.xml ├── zcl_aoc_dependencies.clas.abap └── zcl_aoc_dependencies.clas.xml ├── package.devc.xml ├── parsing ├── package.devc.xml ├── zcl_aoc_boolean.clas.abap ├── zcl_aoc_boolean.clas.testclasses.abap ├── zcl_aoc_boolean.clas.xml ├── zcl_aoc_boolean_node.clas.abap ├── zcl_aoc_boolean_node.clas.testclasses.abap ├── zcl_aoc_boolean_node.clas.xml ├── zcl_aoc_boolean_tokens.clas.abap ├── zcl_aoc_boolean_tokens.clas.testclasses.abap ├── zcl_aoc_boolean_tokens.clas.xml ├── zcl_aoc_parser.clas.abap ├── zcl_aoc_parser.clas.macros.abap ├── zcl_aoc_parser.clas.testclasses.abap ├── zcl_aoc_parser.clas.xml ├── zcl_aoc_parser_node.clas.abap ├── zcl_aoc_parser_node.clas.xml ├── zcl_aoc_structure.clas.abap ├── zcl_aoc_structure.clas.locals_imp.abap ├── zcl_aoc_structure.clas.testclasses.abap └── zcl_aoc_structure.clas.xml ├── sidb ├── package.devc.xml ├── zaoc_sidb.tabl.xml ├── zaoc_upload_sidb.prog.abap ├── zaoc_upload_sidb.prog.xml ├── zcl_aoc_upload_sidb.clas.abap └── zcl_aoc_upload_sidb.clas.xml ├── ui ├── package.devc.xml ├── zabapopenchecks.msag.xml ├── zaoc_naming.fugr.lzaoc_namingf01.abap ├── zaoc_naming.fugr.lzaoc_namingf01.xml ├── zaoc_naming.fugr.lzaoc_namingf02.abap ├── zaoc_naming.fugr.lzaoc_namingf02.xml ├── zaoc_naming.fugr.lzaoc_namingtop.abap ├── zaoc_naming.fugr.lzaoc_namingtop.xml ├── zaoc_naming.fugr.saplzaoc_naming.abap ├── zaoc_naming.fugr.saplzaoc_naming.xml ├── zaoc_naming.fugr.xml ├── zaoc_naming.fugr.z_aoc_naming.abap ├── zaoc_naming.tabl.xml ├── zaoc_naming_globals.tabl.xml ├── zaoc_naming_locals.tabl.xml ├── zaoc_naming_oo.tabl.xml ├── zaoc_naming_prefix.tabl.xml ├── zaoc_naming_proc.tabl.xml └── zaoc_naming_settings.tabl.xml └── utils ├── package.devc.xml ├── zaoc_clearance.prog.abap ├── zaoc_clearance.prog.xml ├── zaoc_clones.prog.abap ├── zaoc_clones.prog.xml ├── zaoc_count_classes_with_tests.prog.abap ├── zaoc_count_classes_with_tests.prog.xml ├── zaoc_date_analysis.prog.abap ├── zaoc_date_analysis.prog.xml ├── zaoc_line_length.prog.abap ├── zaoc_line_length.prog.xml ├── zaoc_lines_tree.prog.abap ├── zaoc_lines_tree.prog.screen_2000.abap ├── zaoc_lines_tree.prog.xml ├── zaoc_method_length.prog.abap ├── zaoc_method_length.prog.xml ├── zaoc_open_transport.prog.abap ├── zaoc_open_transport.prog.screen_1001.abap ├── zaoc_open_transport.prog.xml ├── zaoc_orphaned_includes.prog.abap ├── zaoc_orphaned_includes.prog.xml ├── zaoc_performance.prog.abap ├── zaoc_performance.prog.xml ├── zaoc_structure_test.prog.abap ├── zaoc_structure_test.prog.screen_2000.abap ├── zaoc_structure_test.prog.xml ├── zaoc_tadir_changes.prog.abap ├── zaoc_tadir_changes.prog.xml ├── zaoc_tadir_checks.prog.abap ├── zaoc_tadir_checks.prog.xml ├── zaoc_wrapper.fugr.lzaoc_wrappertop.abap ├── zaoc_wrapper.fugr.lzaoc_wrappertop.xml ├── zaoc_wrapper.fugr.saplzaoc_wrapper.abap ├── zaoc_wrapper.fugr.saplzaoc_wrapper.xml ├── zaoc_wrapper.fugr.xml ├── zaoc_wrapper.fugr.zaoc_is_function_module_rfc.abap ├── zaoc_wrapper.fugr.zaoc_obj_doku_get_xstring_rfc.abap ├── zcl_aoc_compiler.clas.abap ├── zcl_aoc_compiler.clas.xml ├── zcl_aoc_sy_variable_analyzer.clas.abap ├── zcl_aoc_sy_variable_analyzer.clas.testclasses.abap ├── zcl_aoc_sy_variable_analyzer.clas.xml ├── zcl_aoc_system.clas.abap ├── zcl_aoc_system.clas.xml ├── zcl_aoc_util_programs.clas.abap ├── zcl_aoc_util_programs.clas.xml ├── zcl_aoc_util_reg_atc_namespace.clas.abap ├── zcl_aoc_util_reg_atc_namespace.clas.xml ├── zcx_aoc_object_not_found.clas.abap ├── zcx_aoc_object_not_found.clas.xml ├── zcx_aoc_rfc_error.clas.abap ├── zcx_aoc_rfc_error.clas.xml ├── zif_aoc_system.intf.abap └── zif_aoc_system.intf.xml /.abapgit.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | E 6 | /src/ 7 | PREFIX 8 | 9 | /.travis.yml 10 | /LICENSE 11 | /README.md 12 | /package.json 13 | /abaplint.json 14 | /.gitignore 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | deps -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Lars Hvam Petersen 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | abapOpenChecks 2 | ============== 3 | 4 | Open source checks for SAP Code Inspector / ABAP Test Cockpit (SCI/ATC) 5 | 6 | * For running Continuous Integration outside the ABAP platform see https://abaplint.org 7 | * For Steampunk installations see https://github.com/abapOpenChecks/abapOpenChecks-Steampunk 8 | 9 | **Installation** 10 | - install via [abapGit](https://abapgit.org) *(make sure you are using the latest version)* using the online or offline option 11 | - activate checks in SCI (depending on release) 12 | - Goto -> Management of -> Tests 13 | - Code Inspector -> Management of -> Tests 14 | - Code Inspector -> Management of -> Checks 15 | - configure check variant 16 | - run inspection 17 | 18 | **Updating** 19 | - Recommend backing up variants before updating abapOpenChecks, use [upDOWNci](https://github.com/larshp/upDOWNci) 20 | - Pull latest changes via abapGit 21 | 22 | **Design goals** 23 | - try and see if it works out 24 | - performance not high priority 25 | - unit testable without creating new objects in customer system 26 | - only english supported 27 | 28 | Version requirement: v740sp02 or higher 29 | 30 | ## [Documentation](https://docs.abapopenchecks.org) 31 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Reporting Security Issues 2 | 3 | To report a security issue, please use the GitHub Security Advisory ["Report a Vulnerability"](https://github.com/larshp/abapOpenChecks/security/advisories/new) tab. 4 | -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | .jekyll-metadata 2 | _site 3 | Gemfile.lock 4 | -------------------------------------------------------------------------------- /docs/404.md: -------------------------------------------------------------------------------- 1 | 404, foobar -------------------------------------------------------------------------------- /docs/CNAME: -------------------------------------------------------------------------------- 1 | docs.abapopenchecks.org -------------------------------------------------------------------------------- /docs/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | gem 'github-pages', group: :jekyll_plugins 3 | gem 'jekyll-octicons' -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | Generated documentation, read at http://docs.abapopenchecks.org 2 | -------------------------------------------------------------------------------- /docs/_checks/01.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: IF in IF 3 | cNumber: CHECK_01 4 | rfc: true 5 | index: 1 6 | --- 7 | 8 | ```abap 9 | IF condition1. 10 | IF condition2. 11 | ... 12 | ENDIF. 13 | ENDIF. 14 | ``` 15 | Can be reduced to 16 | ```abap 17 | IF ( condition1 ) AND ( condition2 ). 18 | ... 19 | ENDIF. 20 | ``` 21 | 22 | or 23 | ```abap 24 | ELSE. 25 | IF condition. 26 | ... 27 | ENDIF. 28 | ENDIF. 29 | ``` 30 | Can be reduced to 31 | ```abap 32 | ELSEIF condition. 33 | ... 34 | ENDIF. 35 | ``` 36 | 37 | [https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#keep-the-nesting-depth-low](https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#keep-the-nesting-depth-low) 38 | 39 | ### Configuration 40 | ![Configuration](/img/default_conf.png) 41 | -------------------------------------------------------------------------------- /docs/_checks/02.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: EXIT or CHECK outside of loop 3 | cNumber: CHECK_02 4 | rfc: true 5 | index: 2 6 | --- 7 | 8 | ### EXIT 9 | Only use EXIT inside loops, use RETURN to end current processing block 10 | 11 | See [https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-US/abenleave_processing_blocks.htm](https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-US/abenleave_processing_blocks.htm) 12 | 13 | Note: this check is also part of SAP standard in "Extended Program Check" -> "Programming Guidelines". 14 | 15 | ### CHECK 16 | See [https://help.sap.com/doc/abapdocu_750_index_htm/7.50/en-US/abapcheck_processing_blocks.htm](https://help.sap.com/doc/abapdocu_750_index_htm/7.50/en-US/abapcheck_processing_blocks.htm) 17 | 18 | [https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#check-vs-return](https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#check-vs-return) 19 | 20 | Note: this check is also part of SAP standard in "Extended Program Check" -> "Programming Guidelines". 21 | 22 | ### Configuration 23 | ![Configuration](/img/default_conf.png) 24 | -------------------------------------------------------------------------------- /docs/_checks/03.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Wrong use of TRY-CATCH 3 | cNumber: CHECK_03 4 | rfc: true 5 | index: 3 6 | --- 7 | 8 | ### TRY without CATCH 9 | 10 | Remove TRY block, or implement CATCH case 11 | 12 | Example: 13 | 14 | ```abap 15 | TRY. 16 | lo_obj->method( ). 17 | ENDTRY. 18 | ``` 19 | 20 | can be reduced to 21 | 22 | ```abap 23 | lo_obj->method( ). 24 | ``` 25 | 26 | ### Nesting with same exception 27 | 28 | constructs like 29 | 30 | ```abap 31 | CATCH zcx_error. 32 | ENDTRY. 33 | CATCH zcx_error. 34 | ENDTRY. 35 | CATCH zcx_error. 36 | ENDTRY. 37 | ``` 38 | 39 | can typically be reduced to 40 | 41 | ```abap 42 | CATCH zcx_error. 43 | ENDTRY. 44 | ``` 45 | 46 | ### Configuration 47 | ![Configuration](/img/default_conf.png) -------------------------------------------------------------------------------- /docs/_checks/04.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Line length 3 | cNumber: CHECK_04 4 | rfc: true 5 | index: 4 6 | --- 7 | 8 | The number of lines shown in a short dump or the debugger is limited. Traditionally code length is kept to around 80 characters. 9 | In short dumps only 72(?) characters are shown, and when using the 2 column code comparison tool only a limited number of characters is shown. 10 | 11 | Keeping this in mind, the offical SAP styleguide recommends a maximum line length of 120 characters. 12 | 13 | [https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-US/abenline_width_guidl.htm](https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-US/abenline_width_guidl.htm) 14 | 15 | [http://stackoverflow.com/questions/903754/do-you-still-limit-line-length-in-code](http://stackoverflow.com/questions/903754/do-you-still-limit-line-length-in-code) 16 | 17 | [https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#stick-to-a-reasonable-line-length](https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#stick-to-a-reasonable-line-length) 18 | 19 | ### Configuration 20 | ![Configuration](/img/04_conf.png) 21 | -------------------------------------------------------------------------------- /docs/_checks/05.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 7 bit ASCII 3 | cNumber: CHECK_05 4 | rfc: true 5 | index: 5 6 | --- 7 | 8 | Error if source code contains non 7 bit ASCII characters. I.e. an error is shown if the code contains non traditional English characters or special language-specific characters. 9 | 10 | [https://help.sap.com/doc/abapdocu_750_index_htm/7.50/en-US/abencharacter_set_guidl.htm](https://help.sap.com/doc/abapdocu_750_index_htm/7.50/en-US/abencharacter_set_guidl.htm) 11 | 12 | ### Configuration 13 | ![Configuration](/img/default_conf.png) -------------------------------------------------------------------------------- /docs/_checks/07.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Functional writing style for CALL METHOD 3 | cNumber: CHECK_07 4 | rfc: true 5 | index: 7 6 | --- 7 | 8 | See [https://help.sap.com/http.svc/rc/abapdocu_740_index_htm/7.40/en-US/abenmethod_call_guidl.htm](https://help.sap.com/http.svc/rc/abapdocu_740_index_htm/7.40/en-US/abenmethod_call_guidl.htm) 9 | 10 | Example: 11 | 12 | ```abap 13 | CALL METHOD lo_obj->method( ). 14 | ``` 15 | 16 | Can be reduced to 17 | 18 | ```abap 19 | lo_obj->method( ). 20 | ``` 21 | 22 | [https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#prefer-functional-to-procedural-calls](https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#prefer-functional-to-procedural-calls) 23 | 24 | ### Use functional writing style instead of RECEIVING 25 | 26 | ```abap 27 | zcl_foo=>bar( 28 | RECEIVING 29 | rv_moo = lv_boo ). 30 | ``` 31 | 32 | can be reduced to 33 | 34 | ```abap 35 | lv_boo = zcl_foo=>bar( ). 36 | ``` 37 | 38 | [https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#omit-receiving](https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#omit-receiving) 39 | 40 | ### Configuration 41 | ![Configuration](/img/default_conf.png) 42 | -------------------------------------------------------------------------------- /docs/_checks/09.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Tab instead of spaces 3 | cNumber: CHECK_09 4 | rfc: true 5 | index: 9 6 | --- 7 | 8 | Copying signatures into code sometimes leads to having a tab in the code. 9 | 10 | The abap editor automatically translates tabs to spaces when entered, but when pasted it can add tabs. 11 | 12 | Replace the tab with spaces. 13 | 14 | ### Configuration 15 | ![Configuration](/img/default_conf.png) -------------------------------------------------------------------------------- /docs/_checks/10.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Use icon_ constants 3 | cNumber: CHECK_10 4 | rfc: true 5 | index: 10 6 | --- 7 | 8 | Example: 9 | 10 | ```abap 11 | lv_icon = '@00@'. 12 | ``` 13 | 14 | replace with constant 15 | 16 | ```abap 17 | lv_icon = icon_dummy. 18 | ``` 19 | 20 | Constants can be found via standard report RSTXICON 21 | 22 | ### Configuration 23 | ![Configuration](/img/default_conf.png) -------------------------------------------------------------------------------- /docs/_checks/101.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Prefer IS NOT to NOT IS 3 | cNumber: CHECK_101 4 | rfc: true 5 | index: 101 6 | --- 7 | 8 | 9 | ```ABAP 10 | IF variable IS NOT INITIAL. 11 | IF variable NP 'TODO*'. 12 | IF variable <> 42. 13 | ``` 14 | 15 | Negation is logically equivalent 16 | but requires a "mental turnaround" 17 | that makes it harder to understand. 18 | 19 | ```ABAP 20 | " anti-pattern 21 | IF NOT variable IS INITIAL. 22 | IF NOT variable CP 'TODO*'. 23 | IF NOT variable = 42. 24 | ``` 25 | 26 | See [https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#prefer-is-not-to-not-is](https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#prefer-is-not-to-not-is) 27 | 28 | ### Configuration 29 | todo 30 | -------------------------------------------------------------------------------- /docs/_checks/102.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Use of SY-SYSID 3 | cNumber: CHECK_102 4 | rfc: true 5 | index: 102 6 | --- 7 | 8 | Coupling your logic to the ID of the SAP system (`SY-SYSID`) is generally a bad idea. Use this check to find all uses of the system ID. -------------------------------------------------------------------------------- /docs/_checks/103.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: SELECT on table with replacement object 3 | cNumber: CHECK_103 4 | rfc: true 5 | index: 103 6 | --- 7 | 8 | In S/4HANA many old DB tables have now replacement objects/proxy objects which in many case decrease the performance of old SELECT statements when the DB table is used in the OpenSQL. 9 | 10 | In many cases usage of dictionary views based on that tables is much faster. But we have to make sure that the selected field is still stored in the DB level. (Check OSS Note: [0002000002](https://me.sap.com/notes/0002000002)) 11 | 12 | ### Example 13 | MARC table has now replacement object and select on it can be really slow. If we replace it with V_MARC_MD it will be much faster to select basic plant level information. 14 | 15 | 16 | ```abap 17 | 18 | DATA: materials TYPE HASHED TABLE OF MARC WITH UNIQUE KEY MATNR. 19 | SELECT * FROM MARC 20 | WHERE WERKS = '0001' 21 | INTO CORRESPONDING FIELDS OF TABLE materials. 22 | ``` 23 | 24 | can be replaced by 25 | 26 | ```abap 27 | DATA: materials TYPE HASHED TABLE OF MARC WITH UNIQUE KEY MATNR. 28 | SELECT * FROM V_MARC_MD 29 | WHERE WERKS = '0001' 30 | INTO CORRESPONDING FIELDS OF TABLE materials. 31 | ``` 32 | -------------------------------------------------------------------------------- /docs/_checks/104.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Local existence of function modules called via RFC 3 | cNumber: CHECK_104 4 | rfc: true 5 | index: 104 6 | --- 7 | 8 | When a function module is called remotely via RFC, then the function module doesn't necessarily have to exist locally. It can be beneficial to create the function modules nonetheless, especially to perform checks on the parameter types. 9 | 10 | You can use this check to find function modules that are called via RFC but that don't exist locally or are not RFC-enabled. 11 | 12 | If you want to use this check via RFC, then abapOpenChecks must be cloned to the target system. -------------------------------------------------------------------------------- /docs/_checks/11.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Max one statement per line 3 | cNumber: CHECK_11 4 | rfc: true 5 | index: 11 6 | --- 7 | 8 | See [https://help.sap.com/http.svc/rc/abapdocu_750_index_htm/7.50/en-US/abenstatement_guidl.htm](https://help.sap.com/http.svc/rc/abapdocu_750_index_htm/7.50/en-US/abenstatement_guidl.htm) 9 | 10 | And breakpoints can only be set per line, so if there are multiple statements per line it makes it difficult to set breakpoints at one of the statements. 11 | 12 | [https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#no-more-than-one-statement-per-line](https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#no-more-than-one-statement-per-line) 13 | 14 | ### Configuration 15 | ![Configuration](/img/default_conf.png) 16 | -------------------------------------------------------------------------------- /docs/_checks/12.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Specify SORT order 3 | cNumber: CHECK_12 4 | rfc: true 5 | index: 12 6 | --- 7 | 8 | No implicit sorting, the developer should choose the sorting required. 9 | Add DESCENDING or ASCENDING after each field. 10 | 11 | ### Configuration 12 | ![Configuration](/img/default_conf.png) -------------------------------------------------------------------------------- /docs/_checks/13.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Sequential blank lines 3 | cNumber: CHECK_13 4 | rfc: true 5 | index: 13 6 | --- 7 | 8 | Source code contains sequential blank lines, remove some of the blank lines to allow for more code to show on the screen. 9 | 10 | [https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#add-a-single-blank-line-to-separate-things-but-not-more](https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#add-a-single-blank-line-to-separate-things-but-not-more) 11 | 12 | ### Configuration 13 | ![Configuration](/img/13_conf.png) 14 | -------------------------------------------------------------------------------- /docs/_checks/14.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Commented code 3 | cNumber: CHECK_14 4 | rfc: true 5 | index: 14 6 | --- 7 | 8 | Check for commented code, does not work with new expression operators(NEW, DATA, REF etc.) 9 | 10 | NOTE: This check is slow 11 | 12 | [https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#delete-code-instead-of-commenting-it](https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#delete-code-instead-of-commenting-it) 13 | 14 | ### Configuration 15 | ![Configuration](/img/default_conf.png) 16 | -------------------------------------------------------------------------------- /docs/_checks/15.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Kernel CALL 3 | cNumber: CHECK_15 4 | rfc: true 5 | index: 15 6 | --- 7 | 8 | For getting system call stack use function module SYSTEM_CALLSTACK. 9 | As an alternative, the methods GET_CALL_STACK and FORMAT_CALL_STACK_WITH_STRUCT of class CL_ABAP_GET_CALL_STACK can also be used. 10 | 11 | Execute system command on application server use function module SXPG_COMMAND_EXECUTE and transaction SM69 12 | 13 | ### Configuration 14 | ![Configuration](/img/default_conf.png) 15 | -------------------------------------------------------------------------------- /docs/_checks/16.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Line contains only "." or ")." 3 | cNumber: CHECK_16 4 | rfc: true 5 | index: 16 6 | --- 7 | 8 | change 9 | 10 | ```abap 11 | CALL FUNCTION 'ZASDF' 12 | EXPORTING 13 | A_WERKS = p_werks 14 | . 15 | ``` 16 | 17 | to 18 | 19 | ```abap 20 | CALL FUNCTION 'ZASDF' 21 | EXPORTING 22 | A_WERKS = p_werks. 23 | ``` 24 | 25 | Or 26 | 27 | ```abap 28 | lo_object->method( p_werks 29 | ). 30 | ``` 31 | 32 | to 33 | 34 | ```abap 35 | lo_object->method( p_werks ). 36 | ``` 37 | 38 | Note: does not work very well with pragmas 39 | 40 | [https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#close-brackets-at-line-end](https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#close-brackets-at-line-end) 41 | 42 | ### Configuration 43 | ![Configuration](/img/default_conf.png) 44 | -------------------------------------------------------------------------------- /docs/_checks/17.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Definitions in top of routine 3 | cNumber: CHECK_17 4 | rfc: true 5 | index: 17 6 | --- 7 | 8 | Check that DATA and other definitions are in top of routine(FORM/METHOD). Traditionally variables are declared at top of modularization block. 9 | 10 | See [https://help.sap.com/doc/abapdocu_750_index_htm/7.50/en-US/abenlocal_declar_guidl.htm](https://help.sap.com/doc/abapdocu_750_index_htm/7.50/en-US/abenlocal_declar_guidl.htm) 11 | 12 | Example: 13 | ```abap 14 | FORM foo. 15 | gv_moo = 2. 16 | DATA: lv_bar TYPE i. 17 | .... 18 | ENDFORM. 19 | ``` 20 | should be changed to 21 | 22 | ```abap 23 | FORM foo. 24 | DATA: lv_bar TYPE i. 25 | gv_moo = 2. 26 | .... 27 | ENDFORM. 28 | ``` 29 | 30 | Note: this check allows for customizing the order of TYPE, DEFINE, CONSTANT, STATIC and FIELD-SYMBOL declarations 31 | 32 | ### Configuration 33 | ![Configuration](/img/17_conf.png) 34 | -------------------------------------------------------------------------------- /docs/_checks/18.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Empty branch 3 | cNumber: CHECK_18 4 | rfc: true 5 | index: 18 6 | --- 7 | 8 | Empty IF or WHEN branch. 9 | 10 | [https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#no-empty-if-branches](https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#no-empty-if-branches) 11 | 12 | ### Configuration 13 | ![Configuration](/img/default_conf.png) 14 | -------------------------------------------------------------------------------- /docs/_checks/19.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Use LINE OF 3 | cNumber: CHECK_19 4 | rfc: true 5 | index: 19 6 | --- 7 | 8 | When eg. looping at a table and the destination variable is not defined as LINE OF the table check check will show an error. 9 | 10 | 11 | Example: 12 | ```abap 13 | DATA: lt_table TYPE TABLE OF usr02, 14 | 15 | FIELD-SYMBOLS: TYPE usr02. 16 | 17 | 18 | LOOP AT lt_table ASSIGNING . 19 | ... 20 | ENDLOOP. 21 | ``` 22 | 23 | should be changed to 24 | 25 | ```abap 26 | DATA: lt_table TYPE TABLE OF usr02, 27 | 28 | FIELD-SYMBOLS: LIKE LINE OF lt_table. 29 | 30 | 31 | LOOP AT lt_table ASSIGNING . 32 | ... 33 | ENDLOOP. 34 | ``` 35 | 36 | as this allows to easily change the definition of lt_table without changing the definition of the work area. 37 | 38 | ### Configuration 39 | ![Configuration](/img/19_conf.png) -------------------------------------------------------------------------------- /docs/_checks/20.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Bad indentation 3 | cNumber: CHECK_20 4 | rfc: true 5 | index: 20 6 | --- 7 | 8 | See [https://help.sap.com/doc/abapdocu_753_index_htm/7.53/en-US/abenarrange_guidl.htm](https://help.sap.com/doc/abapdocu_753_index_htm/7.53/en-US/abenarrange_guidl.htm) 9 | 10 | ### Configuration 11 | ![Configuration](/img/20_conf.png) 12 | -------------------------------------------------------------------------------- /docs/_checks/21.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Unused FORM parameter 3 | cNumber: CHECK_21 4 | rfc: true 5 | index: 21 6 | --- 7 | 8 | The FORM contains an unused form parameter, remove the parameter to simplify the code. 9 | 10 | ### Configuration 11 | ![Configuration](/img/default_conf.png) -------------------------------------------------------------------------------- /docs/_checks/22.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Conditions contain identical code 3 | cNumber: CHECK_22 4 | rfc: true 5 | index: 22 6 | --- 7 | 8 | Example: 9 | ```abap 10 | IF lv_foo = lv_bar. 11 | lv_moo = abap_true. 12 | WRITE: / lv_moo. 13 | ELSE. 14 | lv_moo = abap_true. 15 | ENDIF. 16 | ``` 17 | can be reduced to 18 | ```abap 19 | lv_moo = abap_true. 20 | IF lv_foo = lv_bar. 21 | WRITE: / lv_moo. 22 | ENDIF. 23 | ``` 24 | 25 | ### Configuration 26 | ![Configuration](/img/default_conf.png) -------------------------------------------------------------------------------- /docs/_checks/23.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Chained Statements 3 | cNumber: CHECK_23 4 | rfc: true 5 | index: 23 6 | --- 7 | 8 | Use chained statements mainly for declarations 9 | 10 | [https://help.sap.com/http.svc/rc/abapdocu_751_index_htm/7.51/en-US/abenchained_statements_guidl.htm](https://help.sap.com/http.svc/rc/abapdocu_751_index_htm/7.51/en-US/abenchained_statements_guidl.htm) 11 | 12 | ### Configuration 13 | ![Configuration](/img/default_conf.png) 14 | -------------------------------------------------------------------------------- /docs/_checks/24.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Identical code blocks 3 | cNumber: CHECK_24 4 | rfc: true 5 | index: 24 6 | --- 7 | 8 | This check will search through all code of the current object to look for identical code blocks. 9 | 10 | Double click the error to see the identical code blocks. 11 | 12 | Consider doing [extract method](http://refactoring.com/catalog/extractMethod.html). 13 | 14 | ### Configuration 15 | ![Configuration](/img/24_conf.png) -------------------------------------------------------------------------------- /docs/_checks/25.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Selection screen data not referenced statically 3 | cNumber: CHECK_25 4 | rfc: true 5 | index: 25 6 | --- 7 | 8 | Selection screen contains a field that is not referenced statically in the program. Remove the field. 9 | 10 | Radio buttons can be ignored, as one of the options are typically implemented with ELSE or WHEN OTHERS 11 | 12 | NOTE: This check returns an error if the field is only referenced dynamically. 13 | 14 | ### Configuration 15 | ![Configuration](/img/25_conf.png) 16 | -------------------------------------------------------------------------------- /docs/_checks/26.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: No direct changes to standard tables 3 | cNumber: CHECK_26 4 | rfc: true 5 | index: 26 6 | --- 7 | 8 | This check will report an error if the code contains MODIFY/DELETE/INSERT/UPDATE of standard database tables. 9 | 10 | Use [BAPI](http://help.sap.com/saphelp_erp60_sp/helpdata/en/7e/5e115e4a1611d1894c0000e829fbbd/content.htm) or other standard functionality to modify contents of standard tables. 11 | 12 | ### Configuration 13 | ![Configuration](/img/26_conf.png) 14 | 15 | To allow direct changes to a specific standard table, add the name of the table in the multiple selection popup for field "Tables" 16 | under "Exclude single values". 17 | -------------------------------------------------------------------------------- /docs/_checks/27.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Last statement is RETURN 3 | cNumber: CHECK_27 4 | rfc: true 5 | index: 27 6 | --- 7 | 8 | Remove the RETURN statement, and the program will work the same. 9 | 10 | ```abap 11 | ... 12 | IF p_subrut[] IS INITIAL. 13 | WRITE: / 'foobar'. 14 | RETURN. 15 | ENDIF. 16 | ENDFORM. 17 | ``` 18 | Can be reduced to 19 | ```abap 20 | ... 21 | IF p_subrut[] IS INITIAL. 22 | WRITE: / 'foobar'. 23 | ENDIF. 24 | ENDFORM. 25 | ``` 26 | 27 | #### Last statement is CLEAR or FREE 28 | ```abap 29 | ... 30 | DATA(bar) = `ABCD`. 31 | ... 32 | CLEAR bar. 33 | ENDFORM. 34 | ``` 35 | Can be reduced to 36 | ```abap 37 | ... 38 | DATA(bar) = `ABCD`. 39 | ... 40 | ENDFORM. 41 | ``` 42 | #### Last statement is CHECK or EXIT 43 | ```abap 44 | ... 45 | DATA(foo) = `foo`. 46 | DATA(bar) = `bar`. 47 | CHECK foo = bar. 48 | ENDFORM. 49 | ``` 50 | Can be reduced to 51 | ```abap 52 | ... 53 | DATA(foo) = `foo`. 54 | DATA(bar) = `bar`. 55 | ENDFORM. 56 | ``` 57 | ### Configuration 58 | ![Configuration](/img/default_conf.png) 59 | -------------------------------------------------------------------------------- /docs/_checks/28.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Space before "." or "," 3 | cNumber: CHECK_28 4 | rfc: true 5 | index: 28 6 | --- 7 | 8 | Remove unnecessary spaces 9 | 10 | ```abap 11 | lv_foo = lv_bar . 12 | ``` 13 | 14 | change to 15 | 16 | ```abap 17 | lv_foo = lv_bar. 18 | ``` 19 | 20 | [https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#condense-your-code](https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#condense-your-code) 21 | 22 | ### Configuration 23 | ![Configuration](/img/default_conf.png) 24 | -------------------------------------------------------------------------------- /docs/_checks/29.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Naming, Local test classes 3 | cNumber: CHECK_29 4 | rfc: true 5 | index: 29 6 | --- 7 | 8 | Change settings to your requirements, default = LTCL_* 9 | 10 | ### Configuration 11 | ![Configuration](/img/29_conf.png) -------------------------------------------------------------------------------- /docs/_checks/30.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: EXPORTING can be omitted 3 | cNumber: CHECK_30 4 | rfc: true 5 | index: 30 6 | --- 7 | 8 | When calling methods with functional writing style and supplying only exporting parameters, the keyword EXPORTING can be omitted 9 | 10 | 11 | ```abap 12 | lx_error->to_fpm_error( 13 | EXPORTING 14 | iv_ref_name = lv_field_name 15 | iv_ref_index = lv_row ). 16 | ``` 17 | Can be reduced to 18 | ```abap 19 | lx_error->to_fpm_error( 20 | iv_ref_name = lv_field_name 21 | iv_ref_index = lv_row ). 22 | ``` 23 | 24 | [https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#omit-the-optional-keyword-exporting](https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#omit-the-optional-keyword-exporting) 25 | 26 | ### Configuration 27 | ![Configuration](/img/default_conf.png) 28 | -------------------------------------------------------------------------------- /docs/_checks/32.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Database Access 3 | cNumber: CHECK_32 4 | rfc: true 5 | index: 32 6 | --- 7 | 8 | This check will help separate database accesses into separate packages. If a database access is found outside of the allowed package range an error is reported. 9 | 10 | Package must be configured in order to show findings. 11 | 12 | ### Configuration 13 | ![Configuration](/img/32_conf.png) -------------------------------------------------------------------------------- /docs/_checks/33.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Append structure field names 3 | cNumber: CHECK_33 4 | rfc: true 5 | index: 33 6 | --- 7 | 8 | When adding an append structure to SAP standard tables/structures, the field names should be named ZZ or YY something. 9 | 10 | See [http://help.sap.com/saphelp_nw73/helpdata/en/cf/21eb61446011d189700000e8322d00/frameset.htm](http://help.sap.com/saphelp_nw73/helpdata/en/cf/21eb61446011d189700000e8322d00/frameset.htm) 11 | 12 | If adding a field as described in a SAP note in non customer namespace, do not use append structures, add it to the SAP object. As the append structure will cause problems when upgrading the system. 13 | 14 | ### Configuration 15 | ![Configuration](/img/default_conf.png) 16 | -------------------------------------------------------------------------------- /docs/_checks/34.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Large WHEN construct 3 | cNumber: CHECK_34 4 | rfc: true 5 | index: 34 6 | --- 7 | 8 | Large number of lines within WHEN construct, refactor code 9 | 10 | ```abap 11 | CASE lv_foo. 12 | WHEN 'BAAR' 13 | ... 14 | code 15 | ... 16 | ENDCASE. 17 | ``` 18 | 19 | can be transformed to the following, it will become easier to get an overview of the CASE 20 | 21 | ```abap 22 | CASE lv_foo. 23 | WHEN 'BAAR' 24 | PERFORM foobar. 25 | ENDCASE. 26 | 27 | FORM foobar. 28 | ... 29 | code 30 | ... 31 | ENDFORM. 32 | ``` 33 | 34 | ### Configuration 35 | ![Configuration](/img/34_conf.png) -------------------------------------------------------------------------------- /docs/_checks/35.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Message not in use 3 | cNumber: CHECK_35 4 | rfc: false 5 | index: 35 6 | --- 7 | 8 | This check will look at the where-used list for all messages to see if they are statically refereed to, if not the check issues an error. 9 | 10 | If run via object set in code inspector, make sure the object set contains MSAG objects. 11 | 12 | ### Configuration 13 | ![Configuration](/img/default_conf.png) -------------------------------------------------------------------------------- /docs/_checks/36.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Exception text not in use 3 | cNumber: CHECK_36 4 | rfc: false 5 | index: 36 6 | --- 7 | 8 | This check will look at the where-used list for all message based exception class texts to see if they are statically refereed to, if not the check issues an error. 9 | 10 | ### Configuration 11 | ![Configuration](/img/default_conf.png) -------------------------------------------------------------------------------- /docs/_checks/37.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Define message texts in SE91 3 | cNumber: CHECK_37 4 | rfc: true 5 | index: 37 6 | --- 7 | 8 | Do not code message texts as part of programs/classes, instead define the message in transaction SE91. 9 | 10 | [http://www.saphub.com/abap-tutorial/messages-in-abap/](http://www.saphub.com/abap-tutorial/messages-in-abap/) 11 | 12 | [http://scn.sap.com/community/abap/blog/2015/08/14/naviagation-to-a-source-code-from-the-message-long-text](http://scn.sap.com/community/abap/blog/2015/08/14/naviagation-to-a-source-code-from-the-message-long-text) 13 | 14 | ## Message based exceptions, method get_text( ) 15 | 16 | If using the get_text( ) method along with message, 17 | 18 | ```abap 19 | MESSAGE lo_cx->get_text( ) TYPE 'S'. 20 | ``` 21 | 22 | the message will not show up properly, use the exception directly instead 23 | 24 | ```abap 25 | MESSAGE lo_cx TYPE 'S'. 26 | ``` 27 | 28 | ### Configuration 29 | ![Configuration](/img/default_conf.png) -------------------------------------------------------------------------------- /docs/_checks/38.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Avoid use of SELECT-ENDSELECT 3 | cNumber: CHECK_38 4 | rfc: true 5 | index: 38 6 | --- 7 | 8 | ```abap 9 | SELECT * FROM db1 INTO struc1. 10 | ... 11 | ENDSELECT. 12 | ``` 13 | Should be changed to 14 | ```abap 15 | SELECT * FROM db1 INTO TABLE itab1. 16 | ``` 17 | 18 | Exception: SELECT UP TO n ROWS 19 | ```abap 20 | SELECT * FROM db1 UP TO 1 ROWS INTO struc1 21 | WHERE key2 = value2. 22 | ENDSELECT. 23 | ``` 24 | 25 | Make sure to check the relevant development guidelines, SELECT SINGLE is in some cases easier to read and understand than UP TO 1 ROWS + ENDSELECT 26 | 27 | See [http://wiki.scn.sap.com/wiki/display/Community/ABAP+Performance+tips](http://wiki.scn.sap.com/wiki/display/Community/ABAP+Performance+tips) 28 | 29 | ### Configuration 30 | ![Configuration](/img/default_conf.png) 31 | -------------------------------------------------------------------------------- /docs/_checks/39.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Smartforms global definitions naming conventions 3 | cNumber: CHECK_39 4 | rfc: false 5 | index: 39 6 | --- 7 | 8 | Helps check global variable and field symbol naming 9 | 10 | Note: if run via object set make sure object type SSFO is included 11 | 12 | ### Configuration 13 | ![Configuration](/img/39_conf.png) -------------------------------------------------------------------------------- /docs/_checks/40.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Check SY-SUBRC 3 | cNumber: CHECK_40 4 | rfc: true 5 | index: 40 6 | --- 7 | 8 | Provides additional default checks for checking SY-SUBRC, it checks for the following statements 9 | 10 | - READ TABLE 11 | - IMPORT 12 | - ASSIGN COMPONENT 13 | 14 | ### Configuration 15 | ![Configuration](/img/default_conf.png) -------------------------------------------------------------------------------- /docs/_checks/41.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Empty line in statement 3 | cNumber: CHECK_41 4 | rfc: true 5 | index: 41 6 | --- 7 | 8 | Checks for empty lines and comment lines inside of statements. 9 | 10 | Examples: 11 | 12 | ```abap 13 | READ TABLE lt_table 14 | 15 | INDEX 1 INTO ls_table. 16 | ``` 17 | 18 | ```abap 19 | READ TABLE lt_table 20 | " read index 1 21 | INDEX 1 INTO ls_table. 22 | ``` 23 | 24 | 25 | ### Configuration 26 | ![Configuration](/img/41_conf.png) -------------------------------------------------------------------------------- /docs/_checks/42.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Identical WHEN code 3 | cNumber: CHECK_42 4 | rfc: true 5 | index: 42 6 | --- 7 | 8 | Checks for identical WHEN-Blocks. 9 | 10 | Example: 11 | 12 | ```abap 13 | CASE lv_foo. 14 | WHEN 1. 15 | WRITE lv_bar. 16 | WHEN 2. 17 | WRITE lv_bar. " <- identical to WHEN 1 18 | ENDCASE. 19 | ``` 20 | 21 | ### Configuration 22 | ![Configuration](/img/default_conf.png) -------------------------------------------------------------------------------- /docs/_checks/43.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Parameter name can be omitted 3 | cNumber: CHECK_43 4 | rfc: false 5 | index: 43 6 | --- 7 | 8 | Only works for functional style method calls, probably does not work very well for nested and chained method calls. 9 | 10 | Example: 11 | 12 | ```abap 13 | lo_column = lo_columns->get_column( columnname = 'FOOBAR' ). 14 | ``` 15 | 16 | can be changed to 17 | 18 | ```abap 19 | lo_column = lo_columns->get_column( 'FOOBAR' ). 20 | ``` 21 | 22 | [https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#omit-the-parameter-name-in-single-parameter-calls](https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#omit-the-parameter-name-in-single-parameter-calls) 23 | 24 | ### Configuration 25 | ![Configuration](/img/default_conf.png) 26 | -------------------------------------------------------------------------------- /docs/_checks/44.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: EXPORTING can be changed to RETURNING 3 | cNumber: CHECK_44 4 | rfc: false 5 | index: 44 6 | --- 7 | 8 | Does not work for local classes/interfaces 9 | 10 | [https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#prefer-returning-to-exporting](https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#prefer-returning-to-exporting) 11 | 12 | ### Configuration 13 | ![Configuration](/img/default_conf.png) 14 | -------------------------------------------------------------------------------- /docs/_checks/46.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Shadowed variable 3 | cNumber: CHECK_46 4 | rfc: false 5 | index: 46 6 | --- 7 | 8 | Returns error for shadowed variables or field-symbols. Note: does not work if a data declaration is shadowing a variable defined with TABLES. 9 | 10 | Example: 11 | 12 | ```abap 13 | REPORT zshadow. 14 | 15 | DATA: foo TYPE c. 16 | 17 | FIELD-SYMBOLS: TYPE c. 18 | 19 | START-OF-SELECTION. 20 | PERFORM foo. 21 | 22 | FORM foo. 23 | 24 | DATA: foo TYPE i. " shadowing 25 | FIELD-SYMBOLS: TYPE c. " shadowing 26 | 27 | WRITE: / 'sdf'. 28 | 29 | ENDFORM. 30 | 31 | CLASS foo DEFINITION. 32 | 33 | PUBLIC SECTION. 34 | DATA: foo TYPE c. 35 | METHODS: asdf. 36 | 37 | ENDCLASS. 38 | 39 | CLASS foo IMPLEMENTATION. 40 | 41 | METHOD asdf. 42 | 43 | DATA: foo TYPE c. " shadowing 44 | 45 | ENDMETHOD. 46 | 47 | ENDCLASS. 48 | ``` 49 | 50 | ### Configuration 51 | ![Configuration](/img/default_conf.png) -------------------------------------------------------------------------------- /docs/_checks/47.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: RFC call error handling 3 | cNumber: CHECK_47 4 | rfc: true 5 | index: 47 6 | --- 7 | 8 | Add EXCEPTIONS including MESSAGE, this will make it easier to debug in the future in case the call fails. 9 | 10 | ```abap 11 | EXCEPTIONS 12 | system_failure = 1 MESSAGE lv_msg 13 | communication_failure = 2 MESSAGE lv_msg 14 | resource_failure = 3. 15 | ``` 16 | 17 | [https://help.sap.com/doc/abapdocu_750_index_htm/7.50/en-US/abenrfc_exception.htm](https://help.sap.com/doc/abapdocu_750_index_htm/7.50/en-US/abenrfc_exception.htm) 18 | 19 | ### Configuration 20 | ![Configuration](/img/default_conf.png) 21 | -------------------------------------------------------------------------------- /docs/_checks/48.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Internal tables 3 | cNumber: CHECK_48 4 | rfc: true 5 | index: 48 6 | --- 7 | 8 | ### DEFAULT KEY, add table key or EMPTY KEY 9 | 10 | see [https://scn.sap.com/community/abap/blog/2013/06/27/abap-news-for-release-740--internal-tables-with-empty-key](https://scn.sap.com/community/abap/blog/2013/06/27/abap-news-for-release-740--internal-tables-with-empty-key) 11 | 12 | ### Access table body is obsolete, no headers 13 | 14 | Internal tables with header lines are obsolete, so accessing table body via `[]` is not needed 15 | 16 | ### Configuration 17 | ![Configuration](/img/default_conf.png) 18 | -------------------------------------------------------------------------------- /docs/_checks/49.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Double space 3 | cNumber: CHECK_49 4 | rfc: true 5 | index: 49 6 | --- 7 | 8 | Change 9 | 10 | ```abap 11 | IF foo = bar. 12 | ``` 13 | 14 | to 15 | 16 | ```abap 17 | IF foo = bar. 18 | ``` 19 | 20 | or similar 21 | 22 | [https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#condense-your-code](https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#condense-your-code) 23 | 24 | ### Configuration 25 | ![Configuration](/img/default_conf.png) 26 | -------------------------------------------------------------------------------- /docs/_checks/50.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ASSERT and unit test ASSERT 3 | cNumber: CHECK_50 4 | rfc: false 5 | index: 50 6 | --- 7 | 8 | Use CL_ABAP_UNIT_ASSERT for asserts in unit tests. 9 | 10 | Do not use CL_ABAP_UNIT_ASSERT outside of unit tests. 11 | 12 | Note: check only works for classes 13 | 14 | #### CL_AUNIT_ASSERT is obsolete 15 | see [https://help.sap.com/saphelp_nw74/helpdata/en/4e/c2efe26e391014adc9fffe4e204223/content.htm](https://help.sap.com/saphelp_nw74/helpdata/en/4e/c2efe26e391014adc9fffe4e204223/content.htm) 16 | 17 | ### Configuration 18 | ![Configuration](/img/default_conf.png) -------------------------------------------------------------------------------- /docs/_checks/51.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Open SQL - Escape host variables 3 | cNumber: CHECK_51 4 | rfc: true 5 | index: 51 6 | --- 7 | 8 | from 740sp05 9 | 10 | see [https://help.sap.com/http.svc/rc/abapdocu_750_index_htm/7.50/en-US/abenopen_sql_hostvar_obsolete.htm](https://help.sap.com/http.svc/rc/abapdocu_750_index_htm/7.50/en-US/abenopen_sql_hostvar_obsolete.htm) 11 | 12 | NB: When adding escape host variable to an Open SQL statement, you may notice false-positive message of standard check **Robust Programming** > **Unsecure use of FOR ALL ENTRIES**. Please refer to OSS note #[2050568 - ATC/CI: "FOR ALL ENTRIES" analysis and host variables](https://launchpad.support.sap.com/#/notes/2050568). 13 | 14 | ### Configuration 15 | ![Configuration](/img/default_conf.png) 16 | -------------------------------------------------------------------------------- /docs/_checks/52.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Pragma placement 3 | cNumber: CHECK_52 4 | rfc: true 5 | index: 52 6 | --- 7 | 8 | Place pragmas at end of line before , or . 9 | 10 | See: 11 | [https://help.sap.com/doc/abapdocu_750_index_htm/7.50/en-US/abenpragma.htm#@@ITOC@@ABENPRAGMA_2](https://help.sap.com/doc/abapdocu_750_index_htm/7.50/en-US/abenpragma.htm#@@ITOC@@ABENPRAGMA_2) 12 | 13 | Note that this check is more strict than the SAP recommendation 14 | 15 | ### Configuration 16 | ![Configuration](/img/default_conf.png) -------------------------------------------------------------------------------- /docs/_checks/54.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: CALL TRANSACTION authority check 3 | cNumber: CHECK_54 4 | rfc: true 5 | index: 54 6 | --- 7 | Use the authority addition calling a transaction 8 | 9 | See [https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-US/abapcall_transaction_authority.htm](https://help.sap.com/doc/abapdocu_751_index_htm/7.51/en-US/abapcall_transaction_authority.htm) 10 | 11 | ### Configuration 12 | ![Configuration](/img/default_conf.png) 13 | -------------------------------------------------------------------------------- /docs/_checks/55.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Statements can be chained 3 | cNumber: CHECK_55 4 | rfc: true 5 | index: 55 6 | --- 7 | 8 | Activating this check goes against the Clean ABAP recommendation 9 | [Do not chain up-front declarations](https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#do-not-chain-up-front-declarations). 10 | 11 | ```abap 12 | DATA: foo type c. 13 | DATA: bar type c. 14 | ``` 15 | 16 | -> 17 | 18 | ```abap 19 | DATA: foo type c, 20 | bar type c. 21 | ``` 22 | 23 | ### Configuration 24 | ![Configuration](/img/55_conf.png) 25 | -------------------------------------------------------------------------------- /docs/_checks/56.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Method parameters 3 | cNumber: CHECK_56 4 | rfc: false 5 | index: 56 6 | --- 7 | 8 | Unused method parameter, not supplied from anywhere. Remove parameter. 9 | 10 | Only works for methods in global classes with at least 2 optional parameters and 1 mandatory parameter. 11 | 12 | ### Configuration 13 | ![Configuration](/img/56_conf.png) -------------------------------------------------------------------------------- /docs/_checks/57.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: MESSAGE or list processing in global classes 3 | cNumber: CHECK_57 4 | rfc: true 5 | index: 57 6 | --- 7 | 8 | ## MESSAGE in global classes 9 | 10 | Use message based class exceptions for error handling 11 | 12 | ## WRITE in global classes 13 | 14 | Refactor solution so classes are not responsible for GUI output 15 | 16 | ### Configuration 17 | ![Configuration](/img/57_conf.png) 18 | -------------------------------------------------------------------------------- /docs/_checks/58.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Method or constant not referenced statically 3 | cNumber: CHECK_58 4 | rfc: false 5 | index: 58 6 | --- 7 | 8 | Find obsolete code 9 | 10 | Only works for global INTF and CLAS objects 11 | 12 | If "Skip CCAU" has been checked, it is not enough for the method to be called from 13 | a local test class to pass the check. "CCAU" is the suffix of a local test class. 14 | 15 | ### Configuration 16 | ![Configuration](/img/58_conf.png) 17 | -------------------------------------------------------------------------------- /docs/_checks/59.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Logical expression structure 3 | cNumber: CHECK_59 4 | rfc: true 5 | index: 59 6 | --- 7 | 8 | ```abap 9 | * Bad, too many parentheses 10 | IF ( ( foo = bar ) AND ( moo = boo ) ). 11 | IF ( foo = bar AND moo = boo ). 12 | IF ( foo = bar ) AND ( moo = boo ). 13 | IF foo = bar AND ( moo = boo ). 14 | * Good 15 | IF foo = bar AND moo = boo. 16 | 17 | 18 | * Bad, too few parentheses 19 | IF foo = bar AND moo = boo OR laa = baa. 20 | * Good 21 | IF ( foo = bar AND moo = boo ) OR laa = baa. 22 | IF foo = bar AND ( moo = boo OR laa = baa ). 23 | ``` 24 | 25 | Check does not work if variables are named as keywords, eg. AND IF OR 26 | 27 | ### Configuration 28 | ![Configuration](/img/59_conf.png) 29 | -------------------------------------------------------------------------------- /docs/_checks/60.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Concatenation of string templates 3 | cNumber: CHECK_60 4 | rfc: true 5 | index: 60 6 | --- 7 | 8 | See SAP styleguides for Clean ABAP: [Use \| to assemble text](https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#use--to-assemble-text) 9 | 10 | Examples: 11 | 12 | `| WHERE| && | { lv_filter } |` can be replaced with `| WHERE { lv_filter } |` 13 | 14 | `lv_foo && |moo { lv_bar }|` can be replaced with `|{ lv_foo }moo { lv_bar }|` 15 | 16 | ### Configuration 17 | ![Configuration](/img/default_conf.png) 18 | -------------------------------------------------------------------------------- /docs/_checks/61.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Fake package encapsulation 3 | cNumber: CHECK_61 4 | rfc: false 5 | index: 61 6 | --- 7 | 8 | work in progress 9 | 10 | ### Configuration 11 | todo 12 | -------------------------------------------------------------------------------- /docs/_checks/63.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ABAP Doc - Check parameter consistency 3 | cNumber: CHECK_63 4 | rfc: false 5 | index: 63 6 | --- 7 | 8 | ABAP Doc - Check parameter consistency, works on version 750 and up 9 | 10 | Note that this is part of the standard syntax check from version 752 11 | 12 | ### Configuration 13 | ![Configuration](/img/default_conf.png) -------------------------------------------------------------------------------- /docs/_checks/64.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Unit test not covering class 3 | cNumber: CHECK_64 4 | rfc: false 5 | index: 64 6 | --- 7 | 8 | If copying a class along with unit tests, and not adjusting the unit tests, the unit tests still test the old class. 9 | 10 | This check will run the coverage analyzer to make sure the unit test covers the class. 11 | 12 | Note: This check does not work very well in parallel, as coverage analysis requires global lock 13 | 14 | ### Configuration 15 | ![Configuration](/img/64_conf.png) -------------------------------------------------------------------------------- /docs/_checks/65.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Smartforms syntax check 3 | cNumber: CHECK_65 4 | rfc: false 5 | index: 65 6 | --- 7 | 8 | Smartforms syntax check 9 | 10 | ### Configuration 11 | ![Configuration](/img/default_conf.png) -------------------------------------------------------------------------------- /docs/_checks/66.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: RAISE EXCEPTION TYPE message checks 3 | cNumber: CHECK_66 4 | rfc: false 5 | index: 66 6 | --- 7 | 8 | ### Statement can be simiplified, MESSAGE tn(id) 9 | 10 | following can be simplified 11 | 12 | ```ABAP 13 | RAISE EXCEPTION TYPE zcx_foobar 14 | MESSAGE ID 'ZFOOBAR' 15 | TYPE 'E' 16 | NUMBER '012'. 17 | ``` 18 | 19 | to 20 | 21 | ```ABAP 22 | RAISE EXCEPTION TYPE zcx_foobar MESSAGE e012(zfoobar). 23 | ``` 24 | 25 | ### Message does not exist 26 | 27 | The message specified in the RAISE statement does not exist in SE91 28 | 29 | ### Configuration 30 | ![Configuration](/img/66_conf.png) 31 | 32 | -------------------------------------------------------------------------------- /docs/_checks/67.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: CDS syntax check 3 | cNumber: CHECK_67 4 | rfc: false 5 | index: 67 6 | --- 7 | 8 | ### CDS syntax check 9 | 10 | Reports errors in CDS(DDLS) 11 | 12 | Changing data types in DDIC can cause syntax errors in DDLS 13 | 14 | Make sure to use object collector which includes DDLS 15 | 16 | ### Configuration 17 | ![Configuration](/img/default_conf.png) 18 | 19 | -------------------------------------------------------------------------------- /docs/_checks/68.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: IDoc syntax check 3 | cNumber: CHECK_68 4 | rfc: false 5 | index: 68 6 | --- 7 | 8 | ### IDoc syntax check 9 | 10 | Reports errors IDocs 11 | 12 | Eg. deleting data element used in idoc causes error 13 | 14 | Make sure to use object collector which includes IDOC and IEXT 15 | 16 | ### Configuration 17 | ![Configuration](/img/default_conf.png) 18 | 19 | -------------------------------------------------------------------------------- /docs/_checks/69.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Prefix Naming Conventions 3 | cNumber: CHECK_69 4 | rfc: false 5 | index: 69 6 | --- 7 | 8 | ### Prefix Naming Conventions 9 | 10 | See [https://blogs.sap.com/2018/05/11/all-your-abap-prefixes-are-belong-to-us/](https://blogs.sap.com/2018/05/11/all-your-abap-prefixes-are-belong-to-us/) 11 | 12 | Does not work for WDYN objects. 13 | 14 | It is possible to allow multiple values. 15 | The values must be separated by "|" within round brackets. 16 | 17 | Example: 18 | R and O valid for data references. 19 | 20 | The following values should then be valid: 21 | ```abap 22 | lo_object 23 | lr_object 24 | ``` 25 | 26 | Configuration: 27 | Data reference: **(R|O)** 28 | 29 | ### Configuration 30 | ![Configuration - Prefixes](/img/69_conf_prefixes.png) 31 | 32 | ![Configuration - Globals](/img/69_conf_globals.png) 33 | 34 | ![Configuration - Locals](/img/69_conf_locals.png) 35 | 36 | ![Configuration - Procedural](/img/69_conf_procedural.png) 37 | 38 | ![Configuration - Object Oriented](/img/69_conf_oo.png) 39 | 40 | ![Configuration - Other Settings](/img/69_conf_other.png) 41 | -------------------------------------------------------------------------------- /docs/_checks/70.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Find comment markers 3 | cNumber: CHECK_70 4 | rfc: true 5 | index: 70 6 | --- 7 | 8 | ### Find comment markers 9 | 10 | Finds markers like "todo" or "fixme" in comments. 11 | 12 | [https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#use-fixme-todo-and-xxx-and-add-your-id](https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#use-fixme-todo-and-xxx-and-add-your-id) 13 | 14 | ### Configuration 15 | ![Configuration](/img/70_conf.png) 16 | 17 | These regex are case insensitive. 18 | -------------------------------------------------------------------------------- /docs/_checks/71.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: MESSAGE using system variables SY-MSGTY, SY-MSGNO, etc 3 | cNumber: CHECK_71 4 | rfc: true 5 | index: 71 6 | --- 7 | 8 | ### MESSAGE using system variables SY-MSGTY, SY-MSGNO, etc 9 | This is a check for using default eclipse exception handling like: 10 | 11 | message id sy-msgid type sy-msgty number sy-msgno 12 | with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 13 | 14 | Sometimes when you use this way of exception handling then you may receive ST22 dump as not always standard FM of SAP or Z-FM of customers throws a message together with the exception. 15 | 16 | ### Configuration 17 | ![Configuration](/img/71_conf.png) 18 | 19 | -------------------------------------------------------------------------------- /docs/_checks/72.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: TABL Enhancement category missing 3 | cNumber: CHECK_72 4 | rfc: true 5 | index: 72 6 | --- 7 | 8 | ### TABL: Enhancement category missing 9 | Reports error if the enhancement category for DDIC tables are not defined 10 | 11 | ### Configuration 12 | ![Configuration](/img/default_conf.png) 13 | -------------------------------------------------------------------------------- /docs/_checks/73.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: TRAN Check for inconsistencies 3 | cNumber: CHECK_73 4 | rfc: false 5 | index: 73 6 | --- 7 | 8 | ### TRAN Check for inconsistencies 9 | Checks for inconsistencies in transaction codes, eg if the report does not exist. 10 | 11 | ### Configuration 12 | ![Configuration](/img/default_conf.png) 13 | -------------------------------------------------------------------------------- /docs/_checks/74.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Deep nesting 3 | cNumber: CHECK_74 4 | rfc: todo 5 | index: 74 6 | --- 7 | 8 | ### Deep nesting 9 | Checks for deeply nested statements. One finding reported per include, with the deepest finding 10 | 11 | ### Configuration 12 | ![Configuration](/img/74_conf.png) 13 | 14 | -------------------------------------------------------------------------------- /docs/_checks/75.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Master language 3 | cNumber: CHECK_75 4 | rfc: false 5 | index: 75 6 | --- 7 | 8 | ### Master language 9 | 10 | Checks if objects are in specified master language. 11 | 12 | ### Configuration 13 | ![Configuration](/img/75_conf.png) -------------------------------------------------------------------------------- /docs/_checks/76.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: INNER JOIN on text table 3 | cNumber: CHECK_76 4 | rfc: false 5 | index: 76 6 | --- 7 | 8 | ### INNER JOIN on text table 9 | Checks for INNER JOINs on text tables. If a text table is joined with a data table, it could happen that the data record is not retrieved just because it's not yet translated. This could lead to further unwanted behaviour. 10 | -------------------------------------------------------------------------------- /docs/_checks/77.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Class instantiation level 3 | cNumber: CHECK_77 4 | rfc: false 5 | index: 77 6 | --- 7 | 8 | ### Class instantiation level 9 | todo 10 | -------------------------------------------------------------------------------- /docs/_checks/78.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: EC CI_SUBRC can be removed 3 | cNumber: CHECK_78 4 | rfc: true 5 | index: 78 6 | --- 7 | 8 | ### EC CI_SUBRC can be removed 9 | 10 | If the SUBRC is checked, the pseudo comment 'EC CI_SUBRC' can be removed. 11 | 12 | Example: 13 | 14 | ```abap 15 | SELECT * FROM TADIR. "#EC CI_SUBRC <- can be removed, since SUBRC is checked afterwards 16 | IF sy-subrc = 0. 17 | .. 18 | ENDIF. 19 | ``` 20 | 21 | ## Configuration 22 | ![Configuration](/img/default_conf.png) 23 | -------------------------------------------------------------------------------- /docs/_checks/79.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: CLEAR as first use of variable 3 | cNumber: CHECK_79 4 | rfc: false 5 | index: 79 6 | --- 7 | 8 | ### CLEAR as first use of variable 9 | 10 | Checks if a variable is cleared in it's first usage after it has been defined. 11 | 12 | Note: Only works for local variables in global classes. 13 | 14 | Example: 15 | 16 | ```abap 17 | .. 18 | METHOD foobar. 19 | 20 | DATA lv_index TYPE i. 21 | CLEAR lv_index. 22 | .. 23 | 24 | ENDMETHOD. 25 | .. 26 | ``` 27 | 28 | ## Configuration 29 | ![Configuration](/img/default_conf.png) 30 | -------------------------------------------------------------------------------- /docs/_checks/80.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Space before colon 3 | cNumber: CHECK_80 4 | rfc: true 5 | index: 80 6 | --- 7 | 8 | ### Spaces before colon 9 | 10 | Checks for spaces before colons. 11 | 12 | See also 13 | [https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#condense-your-code](https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#condense-your-code) for reference. 14 | 15 | ## Configuration 16 | ![Configuration](/img/default_conf.png) -------------------------------------------------------------------------------- /docs/_checks/81.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Missing space 3 | cNumber: CHECK_81 4 | rfc: true 5 | index: 81 6 | --- 7 | 8 | ### Missing space before or after ' 9 | Add missing whitespace 10 | -------------------------------------------------------------------------------- /docs/_checks/82.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Pseudo comment placement 3 | cNumber: CHECK_82 4 | rfc: true 5 | index: 82 6 | --- 7 | 8 | ### Pseudo comment placement 9 | Place the pseudo comment after the statement 10 | -------------------------------------------------------------------------------- /docs/_checks/83.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Unreferenced DDIC object 3 | cNumber: CHECK_83 4 | rfc: false 5 | index: 83 6 | --- 7 | 8 | ### Unreferenced DDIC object 9 | Works for DOMA + DTEL + TABL 10 | -------------------------------------------------------------------------------- /docs/_checks/84.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: No public attributes 3 | cNumber: CHECK_84 4 | rfc: false 5 | index: 84 6 | --- 7 | 8 | ### No public attributes 9 | No public attributes 10 | 11 | Only works for global INTF and CLAS objects. 12 | 13 | 14 | ### Configuration 15 | ![Configuration](/img/84_conf.png) -------------------------------------------------------------------------------- /docs/_checks/85.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Activate fixed point arithmetic 3 | cNumber: CHECK_85 4 | rfc: false 5 | index: 85 6 | --- 7 | 8 | ### Activate fixed point arithmetic 9 | Activate fixed point arithmetic 10 | -------------------------------------------------------------------------------- /docs/_checks/86.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: S/4 Simplification (Obsolete Objects) 3 | cNumber: CHECK_86 4 | rfc: false 5 | index: 86 6 | --- 7 | 8 | ### S/4 Simplification (Obsolete Objects) 9 | Upload the zip database via report ZAOC_UPLOAD_SIDB 10 | 11 | Note that this only performs a partial check, recommend using the SAP standard functionallity to get the full correct picture. 12 | 13 | [CustomCodeMigration_OP1809.pdf](https://help.sap.com/doc/9dcbc5e47ba54a5cbb509afaa49dd5a1/201809.000/en-US/CustomCodeMigration_OP1809.pdf) 14 | -------------------------------------------------------------------------------- /docs/_checks/87.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Dynpro consistency 3 | cNumber: CHECK_87 4 | rfc: false 5 | index: 87 6 | --- 7 | 8 | ### Dynpro consistency 9 | Checks for overlaps and other errors/warnings in dynpros 10 | -------------------------------------------------------------------------------- /docs/_checks/88.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Remove method and attribute descriptions 3 | cNumber: CHECK_88 4 | rfc: false 5 | index: 88 6 | --- 7 | 8 | ### Remove method and attribute descriptions 9 | todo 10 | -------------------------------------------------------------------------------- /docs/_checks/89.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Check documentation (number of lines) 3 | cNumber: CHECK_89 4 | rfc: true 5 | index: 89 6 | --- 7 | 8 | This check counts the lines of Report/Class documentation. It ignores the chapter headers (format "U1" and "U2") and possible empty first lines in each chapter which are automatically created if a template is used. 9 | 10 | ### Configuration 11 | ![Configuration](/img/89_conf.png) 12 | -------------------------------------------------------------------------------- /docs/_checks/91.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Number of statements per proc. block 3 | cNumber: CHECK_91 4 | rfc: true 5 | index: 91 6 | --- 7 | 8 | According to "[Clean Code](https://de.wikipedia.org/wiki/Clean_Code)" / "[Clean ABAP](https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md)" processing units should be as small as possible. 9 | 10 | This check counts the number of statements per processing block. 11 | 12 | ### Configuration 13 | ![Configuration](/img/91_conf.png) 14 | -------------------------------------------------------------------------------- /docs/_checks/92.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Existing unit test for Classes 3 | cNumber: CHECK_92 4 | rfc: false 5 | index: 92 6 | --- 7 | 8 | checks if a unit test is implemented 9 | 10 | works currently only for ABAP-Classes 11 | -------------------------------------------------------------------------------- /docs/_checks/93.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Only Static Methods in one Class 3 | cNumber: CHECK_93 4 | rfc: false 5 | index: 93 6 | --- 7 | 8 | As mentioned in the SAP Styleguide, methods should be instance methods by default. I've seen a lot of pure static classes. 9 | To prevent this I'd like to have a check which has a look if a class only contains static methods. 10 | Also SAP says that there is [only one accepted exception for this](https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#prefer-objects-to-static-classes). 11 | 12 | ### Configuration 13 | ![Configuration](/img/default_conf.png) 14 | -------------------------------------------------------------------------------- /docs/_checks/94.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Check String literals with LIKE, CP, NP 3 | cNumber: CHECK_94 4 | rfc: true 5 | index: 94 6 | --- 7 | 8 | ### LIKE with wrong wildcard 9 | 10 | ```abap 11 | SELECT ... WHERE xyz LIKE 'PATTERN*'. 12 | ``` 13 | instead of 14 | ```abap 15 | SELECT ... WHERE xyz LIKE 'PATTERN%'. 16 | ``` 17 | 18 | ### NP or CP with wrong wildcard 19 | 20 | ```abap 21 | IF xyz CP 'PATTERN%'. 22 | ``` 23 | instead of 24 | ```abap 25 | IF xyz CP 'PATTERN*'. 26 | ``` 27 | 28 | ### Configuration 29 | ![Configuration](/img/default_conf.png) 30 | -------------------------------------------------------------------------------- /docs/_checks/95.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Object / Class member access 3 | cNumber: CHECK_95 4 | rfc: true 5 | index: 95 6 | --- 7 | 8 | As mentioned in the SAP Styleguide, the "me->" self reference [should be omitted](https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#omit-the-self-reference-me-when-calling-an-instance-method) 9 | The reason being that "me->" ist set implicitly by the system and is also valid for static member access or method calling. 10 | 11 | ### Configuration 12 | ![Configuration](/img/95_conf.png) 13 | -------------------------------------------------------------------------------- /docs/_checks/96.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Check if "Editor Lock" is set 3 | cNumber: CHECK_96 4 | rfc: false 5 | index: 96 6 | --- 7 | 8 | Raise error if Program/Function Group has attribute "Editor Lock" set. 9 | 10 | ### Configuration 11 | ![Configuration](/img/default_conf.png) 12 | -------------------------------------------------------------------------------- /docs/_checks/97.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Check selection screen texts refers to dictionary 3 | cNumber: CHECK_97 4 | rfc: false 5 | index: 97 6 | --- 7 | 8 | Raise error if selection screen texts doesn't refer to dictionary. 9 | 10 | ### Configuration 11 | ![Configuration](/img/default_conf.png) 12 | -------------------------------------------------------------------------------- /docs/_checks/98.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Empty Catches can be combined 3 | cNumber: CHECK_98 4 | rfc: true 5 | index: 98 6 | --- 7 | 8 | Raise error if there are 2 or more empty catches in one try-catch. 9 | Those can be combined to one catch. 10 | 11 | ### Configuration 12 | ![Configuration](/img/default_conf.png) 13 | -------------------------------------------------------------------------------- /docs/_checks/99.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Minimum number of WHENs in a CASE 3 | cNumber: CHECK_99 4 | rfc: true 5 | index: 99 6 | --- 7 | 8 | A `CASE` statement should have a minimum number of `WHEN` branches. If there is only one branch, it would be better to 9 | use an `IF` statement. 10 | 11 | ```abap 12 | FORM foo. 13 | DATA lv_bar TYPE i. 14 | CASE lv_bar. 15 | WHEN 1. 16 | WRITE: / 'hello world'. 17 | ENDCASE. 18 | ENDFORM. 19 | ``` 20 | 21 | can be replaced by 22 | 23 | ```abap 24 | FORM foo. 25 | DATA lv_bar TYPE i. 26 | IF lv_bar = 1. 27 | WRITE: / 'hello world'. 28 | ENDIF. 29 | ENDFORM. 30 | ``` 31 | 32 | Empty `WHEN` branches don't count. 33 | 34 | When setting the minimum number, please consider the recommendations in SAP's styleguide for Clean ABAP: 35 | [Prefer CASE to ELSE IF for multiple alternative conditions](https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#prefer-case-to-else-if-for-multiple-alternative-conditions) 36 | 37 | ### Configuration 38 | 39 | The minium number of `WHEN` branches is by default 2, but can be configured: 40 | 41 | ![Configuration](/img/99_conf.png) 42 | -------------------------------------------------------------------------------- /docs/_config.yml: -------------------------------------------------------------------------------- 1 | title: abapOpenChecks 2 | highlighter: rouge 3 | permalink: pretty 4 | collections: 5 | checks: 6 | output: true 7 | plugins: 8 | - jekyll-octicons 9 | defaults: 10 | - 11 | scope: 12 | path: "" # an empty string here means all files in the project 13 | values: 14 | layout: "default" -------------------------------------------------------------------------------- /docs/_includes/head.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {% if page.title %}{{ site.title }} - {{ page.title }}{% else %}{{ site.title }}{% endif %} 6 | 7 | 8 | -------------------------------------------------------------------------------- /docs/_layouts/default.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {% include head.html %} 4 | 5 |
6 | {% include header.html %} 7 |
8 |

{% if page.cNumber %}{{ page.cNumber }} - {{ page.title }}{% else %}{{ page.title }}{% endif %}

9 | {% octicon pencil %} Improve this page 10 | {% if page.rfc %}
RFC enabled{% endif %} 11 | {% if page.cNumber %}
{% octicon code %} CODE{% endif %} 12 | {{ content }} 13 |
14 |
15 | 16 | 17 | -------------------------------------------------------------------------------- /docs/checks.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Checks 3 | --- 4 | 5 | {% assign aChecks = site.checks | sort: "index" %} 6 | {% for check in aChecks %} 7 | 8 | {{ check.cNumber }} - {{ check.title }} 9 | 10 | {% if check.rfc %}{% endif %} 11 | {% endfor %} -------------------------------------------------------------------------------- /docs/img/04_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/04_conf.png -------------------------------------------------------------------------------- /docs/img/06_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/06_conf.png -------------------------------------------------------------------------------- /docs/img/08_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/08_conf.png -------------------------------------------------------------------------------- /docs/img/100_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/100_conf.png -------------------------------------------------------------------------------- /docs/img/13_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/13_conf.png -------------------------------------------------------------------------------- /docs/img/17_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/17_conf.png -------------------------------------------------------------------------------- /docs/img/19_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/19_conf.png -------------------------------------------------------------------------------- /docs/img/20_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/20_conf.png -------------------------------------------------------------------------------- /docs/img/24_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/24_conf.png -------------------------------------------------------------------------------- /docs/img/25_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/25_conf.png -------------------------------------------------------------------------------- /docs/img/26_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/26_conf.png -------------------------------------------------------------------------------- /docs/img/29_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/29_conf.png -------------------------------------------------------------------------------- /docs/img/31_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/31_conf.png -------------------------------------------------------------------------------- /docs/img/32_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/32_conf.png -------------------------------------------------------------------------------- /docs/img/34_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/34_conf.png -------------------------------------------------------------------------------- /docs/img/39_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/39_conf.png -------------------------------------------------------------------------------- /docs/img/41_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/41_conf.png -------------------------------------------------------------------------------- /docs/img/45_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/45_conf.png -------------------------------------------------------------------------------- /docs/img/53_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/53_conf.png -------------------------------------------------------------------------------- /docs/img/55_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/55_conf.png -------------------------------------------------------------------------------- /docs/img/56_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/56_conf.png -------------------------------------------------------------------------------- /docs/img/57_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/57_conf.png -------------------------------------------------------------------------------- /docs/img/58_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/58_conf.png -------------------------------------------------------------------------------- /docs/img/59_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/59_conf.png -------------------------------------------------------------------------------- /docs/img/64_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/64_conf.png -------------------------------------------------------------------------------- /docs/img/66_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/66_conf.png -------------------------------------------------------------------------------- /docs/img/69_conf_globals.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/69_conf_globals.png -------------------------------------------------------------------------------- /docs/img/69_conf_locals.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/69_conf_locals.png -------------------------------------------------------------------------------- /docs/img/69_conf_oo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/69_conf_oo.png -------------------------------------------------------------------------------- /docs/img/69_conf_other.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/69_conf_other.png -------------------------------------------------------------------------------- /docs/img/69_conf_prefixes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/69_conf_prefixes.png -------------------------------------------------------------------------------- /docs/img/69_conf_procedural.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/69_conf_procedural.png -------------------------------------------------------------------------------- /docs/img/70_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/70_conf.png -------------------------------------------------------------------------------- /docs/img/71_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/71_conf.png -------------------------------------------------------------------------------- /docs/img/74_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/74_conf.png -------------------------------------------------------------------------------- /docs/img/75_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/75_conf.png -------------------------------------------------------------------------------- /docs/img/84_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/84_conf.png -------------------------------------------------------------------------------- /docs/img/89_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/89_conf.png -------------------------------------------------------------------------------- /docs/img/91_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/91_conf.png -------------------------------------------------------------------------------- /docs/img/95_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/95_conf.png -------------------------------------------------------------------------------- /docs/img/99_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/99_conf.png -------------------------------------------------------------------------------- /docs/img/default_conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/default_conf.png -------------------------------------------------------------------------------- /docs/img/rfc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/larshp/abapOpenChecks/40621cc5245e72f8862291f9fd0f3b89d9b60dd1/docs/img/rfc.png -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Welcome 3 | --- 4 | 5 | abapOpenChecks is a collection of checks for [SAP Code Inspector / ABAP Test Cockpit (SCI/ATC)](http://wiki.scn.sap.com/wiki/display/ABAP/Code+Inspector). The checks can be customized to match your scenario and requirements, some checks might not be applicable for your applications. 6 | 7 | Do note that some checks might give wrong results or be [very slow](/performance), submit an [issue](https://github.com/larshp/abapOpenChecks/issues) if you find an error, pull requests are also welcome. 8 | 9 | ## [Installation](/installation) 10 | 11 | ## [Checks](/checks) 12 | 13 | ## [Utilities](/utilities) -------------------------------------------------------------------------------- /docs/installation.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Installation 3 | --- 4 | 5 | Install using [abapGit](http://abapgit.org), or copy the source code manually into your system. Installing via abapGit requires an empty package to be created eg. $AOC 6 | 7 | ## SCI setup 8 | - Activate checks in transaction SCI (depending on release) 9 | - Goto -> Management of -> Tests 10 | - Code Inspector -> Management of -> Tests 11 | - Code Inspector -> Management of -> Checks 12 | - Configure check variant 13 | 14 | ## Updating 15 | Backup variants using [upDOWNci](https://github.com/larshp/upDOWNci). 16 | 17 | Run abapGit, click "pull". Note that the option will only show up if new code has been added to the repository. 18 | 19 | Or click "import zip" if using the offline project feature in abapGit. 20 | 21 | ## Uninstall 22 | Run abapGit, click "uninstall". 23 | -------------------------------------------------------------------------------- /docs/links.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Links 3 | --- 4 | 5 | [Static analysis—what’s it good for?](http://techblog.realestate.com.au/static-analysis-whats-it-good-for/) - Michael Rowe 6 | 7 | [Development Guidelines for Greenfield Implementation in sync with SAP Custom Code Management](https://archive.sap.com/documents/docs/DOC-56285) 8 | 9 | [How to get contracted developers to read, accept and adhere to development guidelines?](https://answers.sap.com/questions/425130/how-to-get-contracted-developers-to-read-accept-an.html) - Bärbel Winkler 10 | 11 | [Seven Ineffective Coding Habits of Many Programmers](https://www.youtube.com/watch?v=ZsHMHukIlJY) - Kevlin Henney 12 | 13 | [Remote Code Analysis in ATC – How to write an ATC check](https://blogs.sap.com/2018/09/06/remote-code-analysis-in-atc-how-to-write-an-atc-check/) - Olga Dolinskaja 14 | 15 | Report RS_CI_COMPARE 16 | -------------------------------------------------------------------------------- /docs/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: Arial,Helvetica,sans-serif; 3 | background: #F8F8F8; 4 | margin: auto; 5 | } 6 | 7 | .content { 8 | width: 100%; 9 | max-width: 650px; 10 | } 11 | 12 | .wrap { 13 | max-width: 960px; 14 | margin-left: auto; 15 | margin-right: auto; 16 | padding-left: 20px; 17 | padding-right: 20px; 18 | } 19 | 20 | a, a:visited { 21 | color: #4078c0; 22 | text-decoration: none; 23 | } 24 | 25 | a:hover, a:active { 26 | cursor: pointer; 27 | text-decoration: underline; 28 | } -------------------------------------------------------------------------------- /docs/utilities.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Utilities 3 | --- 4 | 5 | ZAOC_CLONES - Find cloned methods 6 | 7 | ZAOC_PERFORMANCE - Performance Test 8 | 9 | ZAOC_OPEN_TRANSPORT - Errors in open transports, with alerts per user, via customizable email 10 | 11 | ZAOC_DATE_ANALYSIS - Date Analysis 12 | 13 | ZAOC_CLEARANCE - 14 | 15 | ZAOC_LINE_LENGTH - 16 | 17 | ZAOC_LINES_TREE - 18 | 19 | ZAOC_TADIR_CHECKS - 20 | 21 | ZAOC_COUNT_CLASSES_WITH_TESTS - 22 | 23 | ZAOC_ORPHANED_INCLUDES - 24 | 25 | ZAOC_STRUCTURE_TEST - -------------------------------------------------------------------------------- /src/checks/42b8957792081ed8a1843b59ad6cdf21.avas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 |
7 | 42B8957792081ED8A1843B59AD6CDF21 8 | CHARACTERISTIC_GROUP 9 | 10 | CHAR 11 | ZAOC_ENCAPSULATION 12 | 13 |
14 | 15 | 16 | DEVELOPMENT_COORDINATION 17 | @QC@ 18 | 19 | 20 |
21 |
22 |
23 |
24 | -------------------------------------------------------------------------------- /src/checks/42b8957792081ed8a4aca41adc9bced3.avas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 |
7 | 42B8957792081ED8A4ACA41ADC9BCED3 8 | CHARACTERISTIC_GROUP 9 | 10 | CHAR 11 | ZAOC_ENCAPSULATION_OBJECTS 12 | 13 |
14 | 15 | 16 | DEVELOPMENT_COORDINATION 17 | @QC@ 18 | 19 | 20 |
21 |
22 |
23 |
24 | -------------------------------------------------------------------------------- /src/checks/42b8957792081ed8a4acae90deafcdff.avas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 |
7 | 42B8957792081ED8A4ACAE90DEAFCDFF 8 | CHARACTERISTIC_GROUP 9 | 10 | CHAR 11 | ZAOC_ENCAPSULATION_PACKAGES 12 | 13 |
14 | 15 | 16 | DEVELOPMENT_COORDINATION 17 | @QC@ 18 | 19 | 20 |
21 |
22 |
23 |
24 | -------------------------------------------------------------------------------- /src/checks/package.devc.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | Checks 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/checks/zaoc_encapsulation_objects.char.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | ZAOC_ENCAPSULATION_OBJECTS 8 | A 9 | A 10 | DEVC 11 | X 12 | C 13 | L 14 | X 15 | X 16 | 17 | 18 | 19 | ZAOC_ENCAPSULATION_OBJECTS 20 | A 21 | E 22 | abapOpenChecks - Allow objects 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /src/checks/zaoc_encapsulation_packages.char.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | ZAOC_ENCAPSULATION_PACKAGES 8 | A 9 | V 10 | DEVC 11 | X 12 | TDEVC 13 | DEVCLASS 14 | L 15 | X 16 | X 17 | 18 | 19 | 20 | ZAOC_ENCAPSULATION_PACKAGES 21 | A 22 | E 23 | abapOpenChecks - Allow packages 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /src/checks/zaoc_seoclsname_range_tt.ttyp.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZAOC_SEOCLSNAME_RANGE_TT 7 | E 8 | ZAOC_SEOCLSNAME_RANGE 9 | S 10 | STRU 11 | T 12 | D 13 | N 14 | SEOCLSNAME Range 15 | R 16 | SEOCLSNAME 17 | CHAR 18 | 000030 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/checks/zaoc_seocmpname_range_tt.ttyp.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZAOC_SEOCMPNAME_RANGE_TT 7 | E 8 | ZAOC_SEOCMPNAME_RANGE 9 | S 10 | STRU 11 | T 12 | D 13 | N 14 | SEOCMPNAME Range 15 | R 16 | SEOCMPNAME 17 | CHAR 18 | 000030 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/checks/zaoc_slin_desc_key_range_tt.ttyp.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZAOC_SLIN_DESC_KEY_RANGE_TT 7 | E 8 | ZAOC_SLIN_DESC_KEY_RANGE 9 | S 10 | STRU 11 | T 12 | D 13 | N 14 | SLIN_DESC_KEY Range Table Type 15 | R 16 | SLIN_DESC_KEY 17 | CHAR 18 | 000004 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_category.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | 2 | CLASS ltcl_test DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | 9 | METHODS: test FOR TESTING. 10 | 11 | ENDCLASS. "ltcl_Test 12 | 13 | CLASS ltcl_test IMPLEMENTATION. 14 | 15 | METHOD test. 16 | 17 | DATA: lo_category TYPE REF TO zcl_aoc_category. 18 | 19 | * just test that it does not dump 20 | 21 | CREATE OBJECT lo_category. 22 | 23 | ENDMETHOD. 24 | 25 | ENDCLASS. 26 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_category.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CATEGORY 7 | E 8 | abapOpenChecks 9 | 1 10 | X 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | * 18 | See https://github.com/larshp/abapOpenChecks 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_01.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_01 7 | E 8 | 001 - IF in IF 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | IF in IF, can easily be reduced 21 | 132 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_04.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_04 7 | E 8 | 004 - Line length 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Reduce line length 21 | 132 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_05.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_05 7 | E 8 | 005 - 7 bit ASCII 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Contains non 7 bit ASCII 21 | 132 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_09.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_09 7 | E 8 | 009 - Tab instead of spaces 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Tab instead of spaces 21 | 132 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_10.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_10 7 | E 8 | 010 - Use icon_ constants 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Use icon_ constants 21 | 132 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_101.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_101 7 | E 8 | 101 - Prefer IS NOT to NOT IS 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Prefer IS NOT to NOT IS 21 | 48 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_102.clas.locals_def.abap: -------------------------------------------------------------------------------- 1 | CONSTANTS: 2 | BEGIN OF gc_code, 3 | usage_uncategorized TYPE sci_errc VALUE '001', 4 | in_condition TYPE sci_errc VALUE '002', 5 | first_letter_used TYPE sci_errc VALUE '003', 6 | as_default_value TYPE sci_errc VALUE '004', 7 | in_concatenate TYPE sci_errc VALUE '005', 8 | overridden TYPE sci_errc VALUE '006', 9 | assigned_to_variable TYPE sci_errc VALUE '007', 10 | in_database_select TYPE sci_errc VALUE '008', 11 | in_write TYPE sci_errc VALUE '009', 12 | in_message TYPE sci_errc VALUE '010', 13 | within_macro TYPE sci_errc VALUE '011', 14 | in_function_module_call TYPE sci_errc VALUE '012', 15 | END OF gc_code. 16 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_104.clas.locals_def.abap: -------------------------------------------------------------------------------- 1 | CONSTANTS: 2 | BEGIN OF gc_code, 3 | function_module_does_not_exist TYPE sci_errc VALUE '001', 4 | rfc_not_enabled TYPE sci_errc VALUE '002', 5 | rfc_error TYPE sci_errc VALUE '003', 6 | END OF gc_code. 7 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_104.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_104 7 | E 8 | 104 - Local existence of function modules called via RFC 9 | 1 10 | X 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | I 18 | 001 19 | Function module &1 does not exist locally 20 | 76 21 | 22 | 23 | I 24 | 002 25 | Function module &1 is not RFC-enabled 26 | 68 27 | 28 | 29 | I 30 | 003 31 | Error when calling RFC function 32 | 62 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_11.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_11 7 | E 8 | 011 - Max one statement per line 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Max one statement per line 21 | 132 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_12.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_12 7 | E 8 | 012 - Specify SORT order 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Specify SORT order 21 | 28 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_13.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_13 7 | E 8 | 013 - Sequential blank lines 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Sequential blank lines 21 | 44 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_14.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_14 7 | E 8 | 014 - Commented code 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Commented code 21 | 24 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_15.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_15 7 | E 8 | 015 - Kernel CALL 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Kernel CALL 21 | 132 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_18.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_18 7 | E 8 | 018 - Empty branch 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Empty branch 21 | 132 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_19.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_19 7 | E 8 | 019 - Use LINE OF 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Use LINE OF 21 | 21 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_21.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_21 7 | E 8 | 021 - Unused FORM parameter 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Unused FORM parameter &1 21 | 132 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_24_result.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_24_RESULT 7 | E 8 | Identical code blocks - Results 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_28.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_28 7 | E 8 | 028 - Space before . or , 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Space before . or , 21 | 29 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_29.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_29 7 | E 8 | 029 - Naming, Local test classes 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Naming, Local test classes 21 | 52 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_30.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_30 7 | E 8 | 030 - EXPORTING can be omitted 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | EXPORTING can be omitted 21 | 48 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_31.clas.locals_def.abap: -------------------------------------------------------------------------------- 1 | *"* use this source file for any type of declarations (class 2 | *"* definitions, interfaces or type declarations) you need for 3 | *"* components in the private section 4 | 5 | TYPES: BEGIN OF ty_mapping_slin_sci_code, 6 | slin_code TYPE slin_desc_key, 7 | sci_code TYPE sci_errc, 8 | END OF ty_mapping_slin_sci_code, 9 | tty_mapping_slin_sci_code TYPE SORTED TABLE OF ty_mapping_slin_sci_code WITH UNIQUE KEY slin_code. 10 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_31.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_31 7 | E 8 | 031 - Extended Program Check, Filterable 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | &1 21 | 12 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_32.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_32 7 | E 8 | 032 - Database access 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Database access 21 | 25 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_33.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | CLASS ltcl_test DEFINITION FOR TESTING 2 | DURATION SHORT 3 | RISK LEVEL HARMLESS 4 | FINAL. 5 | 6 | PRIVATE SECTION. 7 | * ================ 8 | 9 | DATA: mo_check TYPE REF TO zcl_aoc_check_33. 10 | 11 | METHODS: 12 | setup, 13 | export_import FOR TESTING. 14 | 15 | ENDCLASS. "lcl_Test 16 | 17 | CLASS ltcl_test IMPLEMENTATION. 18 | * ============================== 19 | 20 | METHOD setup. 21 | CREATE OBJECT mo_check. 22 | ENDMETHOD. "setup 23 | 24 | METHOD export_import. 25 | zcl_aoc_unit_test=>export_import( mo_check ). 26 | ENDMETHOD. 27 | 28 | ENDCLASS. 29 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_34.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_34 7 | E 8 | 034 - Large WHEN construct 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Large WHEN construct 21 | 40 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_35.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_35 7 | E 8 | 035 - Message not in use 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Message not in use, &1 21 | 44 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_36.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | 2 | CLASS ltcl_test DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | * ================ 9 | 10 | DATA: mo_check TYPE REF TO zcl_aoc_check_36. 11 | 12 | METHODS: 13 | setup, 14 | export_import FOR TESTING. 15 | 16 | ENDCLASS. "lcl_Test 17 | 18 | CLASS ltcl_test IMPLEMENTATION. 19 | * ============================== 20 | 21 | METHOD setup. 22 | CREATE OBJECT mo_check. 23 | ENDMETHOD. "setup 24 | 25 | METHOD export_import. 26 | zcl_aoc_unit_test=>export_import( mo_check ). 27 | ENDMETHOD. 28 | 29 | ENDCLASS. 30 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_39.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | 2 | CLASS ltcl_test DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | * ================ 9 | 10 | DATA: mo_check TYPE REF TO zcl_aoc_check_39. 11 | 12 | METHODS: 13 | setup, 14 | export_import FOR TESTING. 15 | 16 | ENDCLASS. "lcl_Test 17 | 18 | CLASS ltcl_test IMPLEMENTATION. 19 | * ============================== 20 | 21 | METHOD setup. 22 | CREATE OBJECT mo_check. 23 | ENDMETHOD. "setup 24 | 25 | METHOD export_import. 26 | zcl_aoc_unit_test=>export_import( mo_check ). 27 | ENDMETHOD. 28 | 29 | ENDCLASS. 30 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_40.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_40 7 | E 8 | 040 - Check SY-SUBRC 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Check SY-SUBRC 21 | 24 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_41.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_41 7 | E 8 | 041 - Empty line in statement 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Empty line in statement 21 | 46 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_42.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_42 7 | E 8 | 042 - Identical WHEN code 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Identical WHEN code 21 | 29 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_43.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | CLASS ltcl_test DEFINITION FOR TESTING 2 | DURATION SHORT 3 | RISK LEVEL HARMLESS 4 | FINAL. 5 | 6 | PRIVATE SECTION. 7 | * ================ 8 | 9 | DATA: mo_check TYPE REF TO zcl_aoc_check_43. 10 | 11 | METHODS: 12 | setup, 13 | export_import FOR TESTING. 14 | 15 | ENDCLASS. "lcl_Test 16 | 17 | CLASS ltcl_test IMPLEMENTATION. 18 | * ============================== 19 | 20 | METHOD setup. 21 | CREATE OBJECT mo_check. 22 | ENDMETHOD. "setup 23 | 24 | METHOD export_import. 25 | zcl_aoc_unit_test=>export_import( mo_check ). 26 | ENDMETHOD. 27 | 28 | ENDCLASS. 29 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_44.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | CLASS ltcl_test DEFINITION FOR TESTING 2 | DURATION SHORT 3 | RISK LEVEL HARMLESS 4 | FINAL. 5 | 6 | PRIVATE SECTION. 7 | * ================ 8 | 9 | DATA: mo_check TYPE REF TO zcl_aoc_check_44. 10 | 11 | METHODS: 12 | setup, 13 | export_import FOR TESTING. 14 | 15 | ENDCLASS. "lcl_Test 16 | 17 | CLASS ltcl_test IMPLEMENTATION. 18 | * ============================== 19 | 20 | METHOD setup. 21 | CREATE OBJECT mo_check. 22 | ENDMETHOD. "setup 23 | 24 | METHOD export_import. 25 | zcl_aoc_unit_test=>export_import( mo_check ). 26 | ENDMETHOD. 27 | 28 | ENDCLASS. 29 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_45.clas.locals_def.abap: -------------------------------------------------------------------------------- 1 | CLASS lcl_supported DEFINITION FINAL. 2 | 3 | PUBLIC SECTION. 4 | CLASS-METHODS is_740sp02_supported 5 | RETURNING 6 | VALUE(rv_supported) TYPE abap_bool. 7 | 8 | CLASS-METHODS is_740sp08_supported 9 | RETURNING 10 | VALUE(rv_supported) TYPE abap_bool. 11 | 12 | PRIVATE SECTION. 13 | CLASS-DATA gv_740sp02 TYPE abap_bool VALUE abap_undefined. 14 | CLASS-DATA gv_740sp08 TYPE abap_bool VALUE abap_undefined. 15 | 16 | ENDCLASS. 17 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_46.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | 2 | CLASS ltcl_test DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | * ================ 9 | 10 | DATA: mo_check TYPE REF TO zcl_aoc_check_46. 11 | 12 | METHODS: 13 | setup, 14 | export_import FOR TESTING. 15 | 16 | ENDCLASS. "lcl_Test 17 | 18 | CLASS ltcl_test IMPLEMENTATION. 19 | * ============================== 20 | 21 | METHOD setup. 22 | CREATE OBJECT mo_check. 23 | ENDMETHOD. "setup 24 | 25 | METHOD export_import. 26 | zcl_aoc_unit_test=>export_import( mo_check ). 27 | ENDMETHOD. 28 | 29 | ENDCLASS. 30 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_47.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_47 7 | E 8 | 047 - RFC call error handling 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Add RFC call error handling 21 | 54 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_55.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_55 7 | E 8 | 055 - Statements can be chained 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Statements can be chained 21 | 50 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_56.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | *----------------------------------------------------------------------* 2 | * CLASS lcl_Test DEFINITION 3 | *----------------------------------------------------------------------* 4 | * 5 | *----------------------------------------------------------------------* 6 | CLASS ltcl_test DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS FINAL. 7 | 8 | PRIVATE SECTION. 9 | * ================ 10 | 11 | METHODS: 12 | test001_01 FOR TESTING. 13 | 14 | ENDCLASS. "lcl_Test 15 | 16 | *----------------------------------------------------------------------* 17 | * CLASS lcl_Test IMPLEMENTATION 18 | *----------------------------------------------------------------------* 19 | * 20 | *----------------------------------------------------------------------* 21 | CLASS ltcl_test IMPLEMENTATION. 22 | * ============================== 23 | 24 | METHOD test001_01. 25 | * =========== 26 | 27 | * not possible to test 28 | RETURN. 29 | 30 | ENDMETHOD. "test1 31 | 32 | ENDCLASS. "lcl_Test 33 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_58.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | *----------------------------------------------------------------------* 2 | * CLASS lcl_Test DEFINITION 3 | *----------------------------------------------------------------------* 4 | * 5 | *----------------------------------------------------------------------* 6 | CLASS ltcl_test DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS FINAL. 7 | 8 | PRIVATE SECTION. 9 | * ================ 10 | 11 | METHODS: 12 | test001_01 FOR TESTING. 13 | 14 | ENDCLASS. "lcl_Test 15 | 16 | *----------------------------------------------------------------------* 17 | * CLASS lcl_Test IMPLEMENTATION 18 | *----------------------------------------------------------------------* 19 | * 20 | *----------------------------------------------------------------------* 21 | CLASS ltcl_test IMPLEMENTATION. 22 | * ============================== 23 | 24 | METHOD test001_01. 25 | * =========== 26 | 27 | * not possible to test 28 | RETURN. 29 | 30 | ENDMETHOD. "test1 31 | 32 | ENDCLASS. "lcl_Test 33 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_61.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | 2 | CLASS ltcl_test DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | 9 | DATA: mo_check TYPE REF TO zcl_aoc_check_61. 10 | 11 | METHODS: 12 | setup, 13 | export_import FOR TESTING. 14 | 15 | ENDCLASS. 16 | 17 | CLASS ltcl_test IMPLEMENTATION. 18 | 19 | METHOD setup. 20 | CREATE OBJECT mo_check. 21 | ENDMETHOD. 22 | 23 | METHOD export_import. 24 | zcl_aoc_unit_test=>export_import( mo_check ). 25 | ENDMETHOD. 26 | 27 | ENDCLASS. 28 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_63.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | 2 | CLASS ltcl_test DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | * ================ 9 | 10 | DATA: mo_check TYPE REF TO zcl_aoc_check_63. 11 | 12 | METHODS: 13 | setup, 14 | export_import FOR TESTING. 15 | 16 | ENDCLASS. "lcl_Test 17 | 18 | CLASS ltcl_test IMPLEMENTATION. 19 | * ============================== 20 | 21 | METHOD setup. 22 | CREATE OBJECT mo_check. 23 | ENDMETHOD. "setup 24 | 25 | METHOD export_import. 26 | zcl_aoc_unit_test=>export_import( mo_check ). 27 | ENDMETHOD. 28 | 29 | ENDCLASS. 30 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_63.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_63 7 | E 8 | 063 - ABAP Doc - Check parameter consistency 9 | 1 10 | X 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | I 18 | M01 19 | ABAP Doc: &1 20 | 12 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_64.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | 2 | CLASS ltcl_test DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | * ================ 9 | 10 | DATA: mo_check TYPE REF TO zcl_aoc_check_64. 11 | 12 | METHODS: 13 | setup, 14 | export_import FOR TESTING. 15 | 16 | ENDCLASS. "lcl_Test 17 | 18 | CLASS ltcl_test IMPLEMENTATION. 19 | * ============================== 20 | 21 | METHOD setup. 22 | CREATE OBJECT mo_check. 23 | ENDMETHOD. "setup 24 | 25 | METHOD export_import. 26 | zcl_aoc_unit_test=>export_import( mo_check ). 27 | ENDMETHOD. 28 | 29 | ENDCLASS. 30 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_64.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_64 7 | E 8 | 064 - Unit test not covering class 9 | 1 10 | X 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | I 18 | M01 19 | Unit test not covering class 20 | 56 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_65.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | 2 | CLASS ltcl_test DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | * ================ 9 | 10 | DATA: mo_check TYPE REF TO zcl_aoc_check_65. 11 | 12 | METHODS: 13 | setup, 14 | export_import FOR TESTING. 15 | 16 | ENDCLASS. "lcl_Test 17 | 18 | CLASS ltcl_test IMPLEMENTATION. 19 | * ============================== 20 | 21 | METHOD setup. 22 | CREATE OBJECT mo_check. 23 | ENDMETHOD. "setup 24 | 25 | METHOD export_import. 26 | zcl_aoc_unit_test=>export_import( mo_check ). 27 | ENDMETHOD. 28 | 29 | ENDCLASS. 30 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_65.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_65 7 | E 8 | 065 - Smartforms syntax check 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | &1 21 | 12 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_67.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | 2 | CLASS ltcl_test DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | * ================ 9 | 10 | DATA: mo_check TYPE REF TO zcl_aoc_check_67. 11 | 12 | METHODS: 13 | setup, 14 | export_import FOR TESTING. 15 | 16 | ENDCLASS. "lcl_Test 17 | 18 | CLASS ltcl_test IMPLEMENTATION. 19 | * ============================== 20 | 21 | METHOD setup. 22 | CREATE OBJECT mo_check. 23 | ENDMETHOD. "setup 24 | 25 | METHOD export_import. 26 | zcl_aoc_unit_test=>export_import( mo_check ). 27 | ENDMETHOD. 28 | 29 | ENDCLASS. 30 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_67.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_67 7 | E 8 | 067 - CDS syntax check 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | &1 21 | 12 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_68.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | 2 | CLASS ltcl_test DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | * ================ 9 | 10 | DATA: mo_check TYPE REF TO zcl_aoc_check_68. 11 | 12 | METHODS: 13 | setup, 14 | export_import FOR TESTING. 15 | 16 | ENDCLASS. "lcl_Test 17 | 18 | CLASS ltcl_test IMPLEMENTATION. 19 | * ============================== 20 | 21 | METHOD setup. 22 | CREATE OBJECT mo_check. 23 | ENDMETHOD. "setup 24 | 25 | METHOD export_import. 26 | zcl_aoc_unit_test=>export_import( mo_check ). 27 | ENDMETHOD. 28 | 29 | ENDCLASS. 30 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_68.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_68 7 | E 8 | 068 - IDoc syntax check 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | &1 21 | 12 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_69.clas.locals_def.abap: -------------------------------------------------------------------------------- 1 | CLASS lcl_stack DEFINITION FINAL. 2 | 3 | PUBLIC SECTION. 4 | METHODS: 5 | push 6 | IMPORTING iv_string TYPE string, 7 | set 8 | IMPORTING iv_string TYPE string, 9 | concatenate 10 | IMPORTING iv_string TYPE string OPTIONAL 11 | RETURNING VALUE(rv_string) TYPE string, 12 | clear, 13 | pop. 14 | 15 | PRIVATE SECTION. 16 | DATA: mt_data TYPE string_table. 17 | 18 | ENDCLASS. 19 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_69.clas.locals_imp.abap: -------------------------------------------------------------------------------- 1 | CLASS lcl_stack IMPLEMENTATION. 2 | 3 | METHOD push. 4 | APPEND iv_string TO mt_data. 5 | ENDMETHOD. 6 | 7 | METHOD concatenate. 8 | rv_string = concat_lines_of( mt_data ) && iv_string. 9 | ENDMETHOD. 10 | 11 | METHOD set. 12 | clear( ). 13 | push( iv_string ). 14 | ENDMETHOD. 15 | 16 | METHOD clear. 17 | CLEAR mt_data. 18 | ENDMETHOD. 19 | 20 | METHOD pop. 21 | IF lines( mt_data ) > 0. 22 | DELETE mt_data INDEX lines( mt_data ). 23 | ENDIF. 24 | ENDMETHOD. 25 | 26 | ENDCLASS. 27 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_72.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | 2 | CLASS ltcl_test DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | * ================ 9 | 10 | DATA: mo_check TYPE REF TO zcl_aoc_check_72. 11 | 12 | METHODS: 13 | setup, 14 | export_import FOR TESTING. 15 | 16 | ENDCLASS. "lcl_Test 17 | 18 | CLASS ltcl_test IMPLEMENTATION. 19 | * ============================== 20 | 21 | METHOD setup. 22 | CREATE OBJECT mo_check. 23 | ENDMETHOD. "setup 24 | 25 | METHOD export_import. 26 | zcl_aoc_unit_test=>export_import( mo_check ). 27 | ENDMETHOD. 28 | 29 | ENDCLASS. 30 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_73.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | 2 | CLASS ltcl_test DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | * ================ 9 | 10 | DATA: mo_check TYPE REF TO zcl_aoc_check_73. 11 | 12 | METHODS: 13 | setup, 14 | export_import FOR TESTING. 15 | 16 | ENDCLASS. 17 | 18 | CLASS ltcl_test IMPLEMENTATION. 19 | * ============================== 20 | 21 | METHOD setup. 22 | CREATE OBJECT mo_check. 23 | ENDMETHOD. 24 | 25 | METHOD export_import. 26 | zcl_aoc_unit_test=>export_import( mo_check ). 27 | ENDMETHOD. 28 | 29 | ENDCLASS. 30 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_73.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_73 7 | E 8 | 073 - TRAN: Check for inconsistencies 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Inconsistent 21 | 22 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_74.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_74 7 | E 8 | 074 - Deep nesting 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Deep nesting, depth = &1 21 | 48 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_75.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | 2 | CLASS ltcl_test DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | * ================ 9 | 10 | DATA: mo_check TYPE REF TO zcl_aoc_check_75. 11 | 12 | METHODS: 13 | setup, 14 | export_import FOR TESTING. 15 | 16 | ENDCLASS. "lcl_Test 17 | 18 | CLASS ltcl_test IMPLEMENTATION. 19 | * ============================== 20 | 21 | METHOD setup. 22 | CREATE OBJECT mo_check. 23 | ENDMETHOD. "setup 24 | 25 | METHOD export_import. 26 | zcl_aoc_unit_test=>export_import( mo_check ). 27 | ENDMETHOD. 28 | 29 | ENDCLASS. 30 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_75.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_75 7 | E 8 | 075 - Master language 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Wrong master language: &1 21 | 50 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_76.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_76 7 | E 8 | 076 - INNER JOIN on text table 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | INNER JOIN on text table 21 | 48 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_77.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | 2 | CLASS ltcl_test DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | * ================ 9 | 10 | DATA: mo_check TYPE REF TO zcl_aoc_check_77. 11 | 12 | METHODS: 13 | setup, 14 | export_import FOR TESTING. 15 | 16 | ENDCLASS. "lcl_Test 17 | 18 | CLASS ltcl_test IMPLEMENTATION. 19 | * ============================== 20 | 21 | METHOD setup. 22 | CREATE OBJECT mo_check. 23 | ENDMETHOD. "setup 24 | 25 | METHOD export_import. 26 | zcl_aoc_unit_test=>export_import( mo_check ). 27 | ENDMETHOD. 28 | 29 | ENDCLASS. 30 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_77.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_77 7 | E 8 | 077 - Class instantiation level 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Wrong instantiation level 21 | 50 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_80.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_80 7 | E 8 | 080 - Space before colon 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Space before colon 21 | 28 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_82.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_82 7 | E 8 | 082 - Pseudo comment placement 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Pseudo comment placement 21 | 48 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_83.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | 2 | CLASS ltcl_test DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | * ================ 9 | 10 | DATA: mo_check TYPE REF TO zcl_aoc_check_83. 11 | 12 | METHODS: 13 | setup, 14 | export_import FOR TESTING. 15 | 16 | ENDCLASS. 17 | 18 | CLASS ltcl_test IMPLEMENTATION. 19 | * ============================== 20 | 21 | METHOD setup. 22 | CREATE OBJECT mo_check. 23 | ENDMETHOD. 24 | 25 | METHOD export_import. 26 | zcl_aoc_unit_test=>export_import( mo_check ). 27 | ENDMETHOD. 28 | 29 | ENDCLASS. 30 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_83.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_83 7 | E 8 | 083 - Unreferenced DDIC object 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Unreferenced DDIC object 21 | 48 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_84.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | 2 | CLASS ltcl_test DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | * ================ 9 | 10 | DATA: mo_check TYPE REF TO zcl_aoc_check_84. 11 | 12 | METHODS: 13 | setup, 14 | export_import FOR TESTING. 15 | 16 | ENDCLASS. 17 | 18 | CLASS ltcl_test IMPLEMENTATION. 19 | * ============================== 20 | 21 | METHOD setup. 22 | CREATE OBJECT mo_check. 23 | ENDMETHOD. 24 | 25 | METHOD export_import. 26 | zcl_aoc_unit_test=>export_import( mo_check ). 27 | ENDMETHOD. 28 | 29 | ENDCLASS. 30 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_84.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_84 7 | E 8 | 084 - No public attributes 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | No public attributes, &1 21 | 48 22 | 23 | 24 | 25 | 26 | * 27 | abapOpenChecks 28 | 29 | 30 | * 31 | https://github.com/larshp/abapOpenChecks 32 | 33 | 34 | * 35 | MIT License 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_85.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | CLASS ltcl_test DEFINITION FOR TESTING 2 | DURATION SHORT 3 | RISK LEVEL HARMLESS 4 | FINAL. 5 | 6 | PRIVATE SECTION. 7 | DATA: 8 | mo_check TYPE REF TO zcl_aoc_check_85. 9 | 10 | METHODS: 11 | setup, 12 | export_import FOR TESTING. 13 | 14 | ENDCLASS. 15 | 16 | CLASS ltcl_test IMPLEMENTATION. 17 | 18 | METHOD setup. 19 | CREATE OBJECT mo_check. 20 | zcl_aoc_unit_test=>set_check( mo_check ). 21 | ENDMETHOD. 22 | 23 | METHOD export_import. 24 | zcl_aoc_unit_test=>export_import( mo_check ). 25 | ENDMETHOD. 26 | 27 | ENDCLASS. 28 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_86.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | 2 | CLASS ltcl_test DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | * ================ 9 | 10 | DATA: mo_check TYPE REF TO zcl_aoc_check_86. 11 | 12 | METHODS: 13 | setup, 14 | export_import FOR TESTING. 15 | 16 | ENDCLASS. 17 | 18 | CLASS ltcl_test IMPLEMENTATION. 19 | * ============================== 20 | 21 | METHOD setup. 22 | CREATE OBJECT mo_check. 23 | ENDMETHOD. 24 | 25 | METHOD export_import. 26 | zcl_aoc_unit_test=>export_import( mo_check ). 27 | ENDMETHOD. 28 | 29 | ENDCLASS. 30 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_87.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | 2 | CLASS ltcl_test DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | * ================ 9 | 10 | DATA: mo_check TYPE REF TO zcl_aoc_check_87. 11 | 12 | METHODS: 13 | setup, 14 | export_import FOR TESTING. 15 | 16 | ENDCLASS. 17 | 18 | CLASS ltcl_test IMPLEMENTATION. 19 | * ============================== 20 | 21 | METHOD setup. 22 | CREATE OBJECT mo_check. 23 | ENDMETHOD. 24 | 25 | METHOD export_import. 26 | zcl_aoc_unit_test=>export_import( mo_check ). 27 | ENDMETHOD. 28 | 29 | ENDCLASS. 30 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_88.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | 2 | CLASS ltcl_test DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | * ================ 9 | 10 | DATA: mo_check TYPE REF TO zcl_aoc_check_88. 11 | 12 | METHODS: 13 | setup, 14 | export_import FOR TESTING. 15 | 16 | ENDCLASS. 17 | 18 | CLASS ltcl_test IMPLEMENTATION. 19 | * ============================== 20 | 21 | METHOD setup. 22 | CREATE OBJECT mo_check. 23 | ENDMETHOD. 24 | 25 | METHOD export_import. 26 | zcl_aoc_unit_test=>export_import( mo_check ). 27 | ENDMETHOD. 28 | 29 | ENDCLASS. 30 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_89.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_89 7 | E 8 | 089 - Check documentation 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Minimum lines of documentation not reached: &1 21 | 86 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_90.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | 2 | CLASS ltcl_test DEFINITION FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS 5 | FINAL. 6 | 7 | PRIVATE SECTION. 8 | * ================ 9 | 10 | DATA: mo_check TYPE REF TO zcl_aoc_check_90. 11 | 12 | METHODS: 13 | setup, 14 | export_import FOR TESTING. 15 | 16 | ENDCLASS. 17 | 18 | CLASS ltcl_test IMPLEMENTATION. 19 | * ============================== 20 | 21 | METHOD setup. 22 | CREATE OBJECT mo_check. 23 | ENDMETHOD. 24 | 25 | METHOD export_import. 26 | zcl_aoc_unit_test=>export_import( mo_check ). 27 | ENDMETHOD. 28 | 29 | ENDCLASS. 30 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_90.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_90 7 | E 8 | 090 - Constructor visibility must be public 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | * 19 | abapOpenChecks 20 | 21 | 22 | * 23 | https://github.com/larshp/abapOpenChecks 24 | 25 | 26 | * 27 | MIT License 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_91.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_91 7 | E 8 | 091 - Code metric: number of statements per proc. block 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | X 15 | 16 | 17 | 18 | I 19 | M01 20 | Maximum statements per processing block exceeded: &1 21 | 86 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_92.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | *"* use this source file for your ABAP unit test classes 2 | CLASS ltcl_test DEFINITION 3 | FOR TESTING 4 | RISK LEVEL HARMLESS 5 | DURATION SHORT. 6 | 7 | PRIVATE SECTION. 8 | 9 | DATA mo_check TYPE REF TO zcl_aoc_check_92. 10 | DATA mv_text TYPE string. 11 | 12 | METHODS: setup, 13 | message_handler FOR EVENT message OF zcl_aoc_check_92 IMPORTING p_param_1, 14 | export_import FOR TESTING. 15 | 16 | ENDCLASS. 17 | 18 | CLASS ltcl_test IMPLEMENTATION. 19 | 20 | METHOD setup. 21 | CREATE OBJECT mo_check. 22 | SET HANDLER message_handler FOR mo_check. 23 | zcl_aoc_unit_test=>set_check( mo_check ). 24 | ENDMETHOD. 25 | 26 | METHOD export_import. 27 | zcl_aoc_unit_test=>export_import( mo_check ). 28 | ENDMETHOD. 29 | 30 | METHOD message_handler. 31 | mv_text = p_param_1. 32 | ENDMETHOD. 33 | 34 | ENDCLASS. 35 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_92.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_92 7 | E 8 | 092 - Check for Testclasses 9 | 1 10 | X 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | I 18 | M01 19 | No unit tests 20 | 23 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_93.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_93 7 | E 8 | 093 - Only Static Methods in Class 9 | 1 10 | X 11 | X 12 | X 13 | P 14 | 15 | 16 | 17 | I 18 | M01 19 | Class &1 has only statics methods 20 | 66 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_94.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_94 7 | E 8 | 094 - Check String literals with LIKE, CP, NP 9 | 1 10 | X 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | I 18 | M01 19 | Use of LIKE with wrong wildcard 20 | 62 21 | 22 | 23 | I 24 | M02 25 | Use of CP/NP with wrong wildcard 26 | 64 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_96.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_96 7 | E 8 | 096 - Check Editor Lock is set 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | I 17 | M01 18 | 'Editor Lock' is set. 19 | 42 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_97.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_97 7 | E 8 | 097 - Check Selection Screen Texts 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | I 17 | M01 18 | Text of Field &1 doesn't refer to the dictionary. 19 | 98 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_98.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_98 7 | E 8 | 098 - Combine empty catches 9 | 1 10 | X 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | I 18 | M01 19 | Empty catches should be combined 20 | 98 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_check_99.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_CHECK_99 7 | E 8 | 099 - Minimum number of WHENs in a CASE 9 | 1 10 | X 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | I 18 | M01 19 | Minimum number of WHENs in a CASE clause not reached. Use IF instead. 20 | 98 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_scan.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_SCAN 7 | E 8 | Scan object 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_super.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_SUPER 7 | E 8 | Abstract Super Class 9 | 1 10 | X 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | * 18 | abapOpenChecks 19 | 20 | 21 | * 22 | https://github.com/larshp/abapOpenChecks 23 | 24 | 25 | * 26 | MIT License 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_super_root.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_SUPER_ROOT 7 | E 8 | Abstract Super Class 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | * 17 | abapOpenChecks 18 | 19 | 20 | * 21 | https://github.com/larshp/abapOpenChecks 22 | 23 | 24 | * 25 | MIT License 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /src/checks/zcl_aoc_unit_test.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_UNIT_TEST 7 | E 8 | Unit test 9 | 05 10 | 1 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | I 18 | 001 19 | Error while parsing 20 | 19 21 | 22 | 23 | 24 | 25 | * 26 | abapOpenChecks 27 | 28 | 29 | * 30 | https://github.com/larshp/abapOpenChecks 31 | 32 | 33 | * 34 | MIT License 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /src/checks/zzaoc.type.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | abapOpenChecks 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/collectors/package.devc.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | Collectors 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/collectors/zcl_aoc_embedded_packages.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_EMBEDDED_PACKAGES 7 | E 8 | Embedded packages 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | I 17 | 000 18 | AOC - Objects from Embedded Packages 19 | 72 20 | 21 | 22 | I 23 | 001 24 | Packages 25 | 18 26 | 27 | 28 | I 29 | 002 30 | Local objects only 31 | 28 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /src/dependencies/package.devc.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | Object dependencies 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/dependencies/zcl_aoc_dependencies.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_DEPENDENCIES 7 | E 8 | Object Dependencies 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/package.devc.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | abapOpenChecks 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/parsing/package.devc.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | Parsing 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/parsing/zcl_aoc_boolean.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_BOOLEAN 7 | E 8 | Boolean expression parser 9 | 1 10 | X 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/parsing/zcl_aoc_boolean_node.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_BOOLEAN_NODE 7 | E 8 | Node 9 | 1 10 | X 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/parsing/zcl_aoc_boolean_tokens.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_BOOLEAN_TOKENS 7 | E 8 | Tokens 9 | 1 10 | X 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/parsing/zcl_aoc_parser.clas.macros.abap: -------------------------------------------------------------------------------- 1 | *"* use this source file for any macro definitions you need 2 | *"* in the implementation part of the class 3 | 4 | DEFINE _code. 5 | APPEND &1 TO mt_code. 6 | END-OF-DEFINITION. 7 | 8 | DEFINE _test. 9 | ms_result = zcl_aoc_parser=>run( it_code = mt_code 10 | iv_debug = mv_debug ). 11 | cl_abap_unit_assert=>assert_equals( exp = &1 12 | act = ms_result-match ). 13 | IF ms_result-match = abap_true. 14 | cl_abap_unit_assert=>assert_not_initial( ms_result-tokens ). 15 | ELSE. 16 | cl_abap_unit_assert=>assert_initial( ms_result-tokens ). 17 | ENDIF. 18 | END-OF-DEFINITION. 19 | -------------------------------------------------------------------------------- /src/parsing/zcl_aoc_parser.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_PARSER 7 | E 8 | General purpose parser 9 | 1 10 | X 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | * 18 | abapOpenChecks 19 | 20 | 21 | * 22 | https://github.com/larshp/abapOpenChecks 23 | 24 | 25 | * 26 | MIT License 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /src/parsing/zcl_aoc_parser_node.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_PARSER_NODE 7 | E 8 | Parser, node 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/parsing/zcl_aoc_structure.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_STRUCTURE 7 | E 8 | Structured ABAP 9 | 1 10 | X 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/sidb/package.devc.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | Simplification Database 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/sidb/zaoc_upload_sidb.prog.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZAOC_UPLOAD_SIDB 7 | 1 8 | E 9 | X 10 | X 11 | 12 | 13 | 14 | R 15 | abapOpenChecks - Upload Simplification Database 16 | 47 17 | 18 | 19 | S 20 | P_FILE 21 | Filename 22 | 16 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /src/sidb/zcl_aoc_upload_sidb.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_UPLOAD_SIDB 7 | E 8 | abapOpenChecks - Upload Simplification Database 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/ui/package.devc.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | User Interface 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/ui/zabapopenchecks.msag.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZABAPOPENCHECKS 7 | E 8 | abapOpenChecks 9 | 10 | 11 | 12 | E 13 | ZABAPOPENCHECKS 14 | 000 15 | Not found 16 | 17 | 18 | E 19 | ZABAPOPENCHECKS 20 | 001 21 | Done 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/ui/zaoc_naming.fugr.lzaoc_namingf01.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | LZAOC_NAMINGF01 7 | I 8 | S 9 | E 10 | X 11 | 12 | 13 | 14 | R 15 | Include LZAOC_NAMINGF01 16 | 23 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/ui/zaoc_naming.fugr.lzaoc_namingf02.abap: -------------------------------------------------------------------------------- 1 | *----------------------------------------------------------------------* 2 | ***INCLUDE LZAOC_NAMINGF02. 3 | *----------------------------------------------------------------------* 4 | 5 | AT SELECTION-SCREEN. 6 | lcl_screen2000=>handle_command( ). 7 | 8 | AT SELECTION-SCREEN OUTPUT. 9 | lcl_screen2000=>at_output( ). 10 | 11 | AT SELECTION-SCREEN ON EXIT-COMMAND. 12 | lcl_screen2000=>handle_command( ). 13 | 14 | LOAD-OF-PROGRAM. 15 | button_1 = 'Prefixes'(002). 16 | button_2 = 'Globals'(003). 17 | button_3 = 'Locals'(004). 18 | button_4 = 'Procedural'(005). 19 | button_5 = 'Object Oriented'(006). 20 | button_6 = 'Other Settings'(007). 21 | -------------------------------------------------------------------------------- /src/ui/zaoc_naming.fugr.lzaoc_namingf02.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | LZAOC_NAMINGF02 7 | I 8 | S 9 | E 10 | X 11 | 12 | 13 | 14 | R 15 | Include LZAOC_NAMINGF02 16 | 23 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/ui/zaoc_naming.fugr.lzaoc_namingtop.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | LZAOC_NAMINGTOP 7 | S 8 | D$ 9 | I 10 | S 11 | X 12 | D$S 13 | X 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/ui/zaoc_naming.fugr.saplzaoc_naming.abap: -------------------------------------------------------------------------------- 1 | ******************************************************************* 2 | * System-defined Include-files. * 3 | ******************************************************************* 4 | INCLUDE lzaoc_namingtop. " Global Declarations 5 | INCLUDE lzaoc_naminguxx. " Function Modules 6 | 7 | ******************************************************************* 8 | * User-defined Include-files (if necessary). * 9 | ******************************************************************* 10 | * INCLUDE LZAOC_NAMINGF... " Subroutines 11 | * INCLUDE LZAOC_NAMINGO... " PBO-Modules 12 | * INCLUDE LZAOC_NAMINGI... " PAI-Modules 13 | * INCLUDE LZAOC_NAMINGE... " Events 14 | * INCLUDE LZAOC_NAMINGP... " Local class implement. 15 | * INCLUDE LZAOC_NAMINGT99. " ABAP Unit tests 16 | 17 | INCLUDE lzaoc_namingf01. 18 | INCLUDE lzaoc_namingf02. 19 | -------------------------------------------------------------------------------- /src/ui/zaoc_naming.fugr.z_aoc_naming.abap: -------------------------------------------------------------------------------- 1 | FUNCTION z_aoc_naming. 2 | *"---------------------------------------------------------------------- 3 | *"*"Local Interface: 4 | *" IMPORTING 5 | *" VALUE(IV_READ_ONLY) TYPE ABAP_BOOL OPTIONAL 6 | *" CHANGING 7 | *" REFERENCE(CS_DATA) TYPE ZAOC_NAMING 8 | *"---------------------------------------------------------------------- 9 | 10 | lcl_screen2000=>initialize( 11 | iv_read_only = iv_read_only 12 | is_data = cs_data ). 13 | 14 | CALL SELECTION-SCREEN 2000 STARTING AT 1 1. 15 | 16 | IF lcl_screen2000=>gv_cancel = abap_false 17 | AND iv_read_only = abap_false. 18 | cs_data = lcl_screen2000=>get_data( ). 19 | ENDIF. 20 | 21 | ENDFUNCTION. 22 | -------------------------------------------------------------------------------- /src/utils/package.devc.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | Utils 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/utils/zaoc_count_classes_with_tests.prog.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZAOC_COUNT_CLASSES_WITH_TESTS 7 | 1 8 | E 9 | X 10 | X 11 | 12 | 13 | 14 | R 15 | abapOpenChecks - Count classes with tests 16 | 41 17 | 18 | 19 | S 20 | S_DEVC 21 | . 22 | 9 23 | D 24 | 25 | 26 | S 27 | S_OBJN 28 | . 29 | 9 30 | D 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /src/utils/zaoc_lines_tree.prog.screen_2000.abap: -------------------------------------------------------------------------------- 1 | PROCESS BEFORE OUTPUT. 2 | MODULE init_2000. 3 | MODULE status_2000. 4 | 5 | PROCESS AFTER INPUT. 6 | MODULE user_command_2000. 7 | -------------------------------------------------------------------------------- /src/utils/zaoc_open_transport.prog.screen_1001.abap: -------------------------------------------------------------------------------- 1 | PROCESS BEFORE OUTPUT. 2 | MODULE status_1001. 3 | 4 | PROCESS AFTER INPUT. 5 | MODULE user_command_1001. 6 | -------------------------------------------------------------------------------- /src/utils/zaoc_orphaned_includes.prog.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZAOC_ORPHANED_INCLUDES 7 | 1 8 | E 9 | X 10 | X 11 | 12 | 13 | 14 | R 15 | abapOpenChecks - Orphaned includes 16 | 34 17 | 18 | 19 | S 20 | S_DEVC 21 | . 22 | 9 23 | D 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /src/utils/zaoc_structure_test.prog.screen_2000.abap: -------------------------------------------------------------------------------- 1 | PROCESS BEFORE OUTPUT. 2 | MODULE status_2000. 3 | 4 | PROCESS AFTER INPUT. 5 | MODULE user_command_2000. 6 | -------------------------------------------------------------------------------- /src/utils/zaoc_tadir_changes.prog.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZAOC_TADIR_CHANGES 7 | 1 8 | E 9 | X 10 | X 11 | 12 | 13 | 14 | R 15 | abapOpenChecks - Show who/when TADIR-DEVCLASS was changed 16 | 57 17 | 18 | 19 | S 20 | P_DAYS 21 | Days back 22 | 17 23 | 24 | 25 | S 26 | P_NAM 27 | . 28 | 9 29 | D 30 | 31 | 32 | S 33 | P_OBJ 34 | . 35 | 9 36 | D 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /src/utils/zaoc_tadir_checks.prog.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZAOC_TADIR_CHECKS 7 | 1 8 | E 9 | X 10 | X 11 | 12 | 13 | 14 | R 15 | abapOpenChecks - TADIR checks 16 | 29 17 | 18 | 19 | S 20 | P_DEL 21 | Deletion flag 22 | 21 23 | 24 | 25 | S 26 | P_PACK 27 | Package exists 28 | 22 29 | 30 | 31 | S 32 | S_DEVC 33 | . 34 | 9 35 | D 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /src/utils/zaoc_wrapper.fugr.lzaoc_wrappertop.abap: -------------------------------------------------------------------------------- 1 | FUNCTION-POOL zaoc_wrapper. "MESSAGE-ID .. 2 | 3 | * INCLUDE LZAOC_WRAPPERD... " Local class definition 4 | -------------------------------------------------------------------------------- /src/utils/zaoc_wrapper.fugr.lzaoc_wrappertop.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | LZAOC_WRAPPERTOP 7 | S 8 | D$ 9 | I 10 | S 11 | X 12 | D$S 13 | X 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/utils/zaoc_wrapper.fugr.saplzaoc_wrapper.abap: -------------------------------------------------------------------------------- 1 | ******************************************************************* 2 | * System-defined Include-files. * 3 | ******************************************************************* 4 | INCLUDE lzaoc_wrappertop. " Global Data 5 | INCLUDE lzaoc_wrapperuxx. " Function Modules 6 | 7 | ******************************************************************* 8 | * User-defined Include-files (if necessary). * 9 | ******************************************************************* 10 | * INCLUDE LZAOC_WRAPPERF... " Subroutines 11 | * INCLUDE LZAOC_WRAPPERO... " PBO-Modules 12 | * INCLUDE LZAOC_WRAPPERI... " PAI-Modules 13 | * INCLUDE LZAOC_WRAPPERE... " Events 14 | * INCLUDE LZAOC_WRAPPERP... " Local class implement. 15 | * INCLUDE LZAOC_WRAPPERT99. " ABAP Unit tests 16 | -------------------------------------------------------------------------------- /src/utils/zaoc_wrapper.fugr.saplzaoc_wrapper.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | SAPLZAOC_WRAPPER 7 | S 8 | D$ 9 | F 10 | S 11 | E 12 | X 13 | D$S 14 | X 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/utils/zaoc_wrapper.fugr.zaoc_is_function_module_rfc.abap: -------------------------------------------------------------------------------- 1 | FUNCTION zaoc_is_function_module_rfc. 2 | *"---------------------------------------------------------------------- 3 | *"*"Local Interface: 4 | *" IMPORTING 5 | *" VALUE(IV_FUNCTION_MODULE_NAME) TYPE FUNCNAME 6 | *" EXPORTING 7 | *" VALUE(EV_IS_RFC_ENABLED) TYPE XFLAG 8 | *" EXCEPTIONS 9 | *" NOT_FOUND 10 | *"---------------------------------------------------------------------- 11 | DATA lv_fmode TYPE tfdir-fmode. 12 | 13 | SELECT SINGLE fmode 14 | FROM tfdir 15 | INTO lv_fmode 16 | WHERE funcname = iv_function_module_name. 17 | 18 | IF sy-subrc <> 0. 19 | RAISE not_found. 20 | ENDIF. 21 | 22 | IF lv_fmode = 'R'. 23 | ev_is_rfc_enabled = abap_true. 24 | ENDIF. 25 | ENDFUNCTION. 26 | -------------------------------------------------------------------------------- /src/utils/zaoc_wrapper.fugr.zaoc_obj_doku_get_xstring_rfc.abap: -------------------------------------------------------------------------------- 1 | FUNCTION zaoc_obj_doku_get_xstring_rfc. 2 | *"---------------------------------------------------------------------- 3 | *"*"Local Interface: 4 | *" IMPORTING 5 | *" VALUE(LANG) TYPE SPRAS 6 | *" VALUE(OBJTYPE) TYPE LXEOBJTYPE 7 | *" VALUE(OBJNAME) TYPE LXEOBJNAME 8 | *" VALUE(SH_EMPTY) TYPE CHAR1 DEFAULT '' 9 | *" EXPORTING 10 | *" VALUE(HEADER) TYPE THEAD 11 | *" VALUE(CONTENT) TYPE XSTRING 12 | *" VALUE(PSTATUS) TYPE LXESTATPRC 13 | *" VALUE(K_SINK) TYPE LXEUNITLIN 14 | *"---------------------------------------------------------------------- 15 | 16 | CALL FUNCTION 'LXE_OBJ_DOKU_GET_XSTRING' 17 | EXPORTING 18 | lang = lang 19 | objtype = objtype 20 | objname = objname 21 | sh_empty = sh_empty 22 | IMPORTING 23 | header = header 24 | content = content 25 | pstatus = pstatus 26 | k_sink = k_sink. 27 | 28 | ENDFUNCTION. 29 | -------------------------------------------------------------------------------- /src/utils/zcl_aoc_compiler.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_COMPILER 7 | E 8 | SAP Standard ABAP Compiler 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/utils/zcl_aoc_sy_variable_analyzer.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_SY_VARIABLE_ANALYZER 7 | E 8 | Analyzer for system variables (SY structure) 9 | 1 10 | X 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/utils/zcl_aoc_system.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_SYSTEM 7 | E 8 | System 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/utils/zcl_aoc_util_programs.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_UTIL_PROGRAMS 7 | E 8 | Includes 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/utils/zcl_aoc_util_reg_atc_namespace.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCL_AOC_UTIL_REG_ATC_NAMESPACE 7 | E 8 | Utils - Registered ATC Namespaces 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/utils/zcx_aoc_object_not_found.clas.abap: -------------------------------------------------------------------------------- 1 | "!

Raised when object was not found

2 | CLASS zcx_aoc_object_not_found DEFINITION 3 | PUBLIC 4 | INHERITING FROM cx_static_check 5 | FINAL 6 | CREATE PUBLIC. 7 | 8 | PUBLIC SECTION. 9 | INTERFACES if_t100_message. 10 | INTERFACES if_t100_dyn_msg. 11 | 12 | METHODS constructor 13 | IMPORTING 14 | textid LIKE if_t100_message=>t100key OPTIONAL 15 | !previous LIKE previous OPTIONAL. 16 | 17 | PROTECTED SECTION. 18 | 19 | PRIVATE SECTION. 20 | ENDCLASS. 21 | 22 | 23 | CLASS zcx_aoc_object_not_found IMPLEMENTATION. 24 | METHOD constructor ##ADT_SUPPRESS_GENERATION. 25 | super->constructor( previous = previous ). 26 | CLEAR me->textid. 27 | IF textid IS INITIAL. 28 | if_t100_message~t100key = if_t100_message=>default_textid. 29 | ELSE. 30 | if_t100_message~t100key = textid. 31 | ENDIF. 32 | ENDMETHOD. 33 | ENDCLASS. 34 | -------------------------------------------------------------------------------- /src/utils/zcx_aoc_object_not_found.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCX_AOC_OBJECT_NOT_FOUND 7 | E 8 | Raised when object was not found 9 | 40 10 | 1 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/utils/zcx_aoc_rfc_error.clas.abap: -------------------------------------------------------------------------------- 1 | "!

Raised when RFC error occurs

2 | CLASS zcx_aoc_rfc_error DEFINITION 3 | PUBLIC 4 | INHERITING FROM cx_static_check 5 | FINAL 6 | CREATE PUBLIC. 7 | 8 | PUBLIC SECTION. 9 | INTERFACES if_t100_message. 10 | INTERFACES if_t100_dyn_msg. 11 | 12 | METHODS constructor 13 | IMPORTING 14 | textid LIKE if_t100_message=>t100key OPTIONAL 15 | !previous LIKE previous OPTIONAL. 16 | 17 | PROTECTED SECTION. 18 | 19 | PRIVATE SECTION. 20 | ENDCLASS. 21 | 22 | 23 | CLASS zcx_aoc_rfc_error IMPLEMENTATION. 24 | METHOD constructor ##ADT_SUPPRESS_GENERATION. 25 | super->constructor( previous = previous ). 26 | CLEAR me->textid. 27 | IF textid IS INITIAL. 28 | if_t100_message~t100key = if_t100_message=>default_textid. 29 | ELSE. 30 | if_t100_message~t100key = textid. 31 | ENDIF. 32 | ENDMETHOD. 33 | ENDCLASS. 34 | -------------------------------------------------------------------------------- /src/utils/zcx_aoc_rfc_error.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZCX_AOC_RFC_ERROR 7 | E 8 | Raised when RFC error occurs 9 | 40 10 | 1 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/utils/zif_aoc_system.intf.abap: -------------------------------------------------------------------------------- 1 | INTERFACE zif_aoc_system 2 | PUBLIC. 3 | METHODS is_function_module_rfc_enabled 4 | IMPORTING 5 | iv_function_module_name TYPE funcname 6 | RETURNING 7 | VALUE(rv_result) TYPE abap_bool 8 | RAISING 9 | zcx_aoc_object_not_found 10 | zcx_aoc_rfc_error. 11 | ENDINTERFACE. 12 | -------------------------------------------------------------------------------- /src/utils/zif_aoc_system.intf.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZIF_AOC_SYSTEM 7 | E 8 | System 9 | 2 10 | 1 11 | X 12 | 13 | 14 | 15 | 16 | --------------------------------------------------------------------------------