/
zcl_aoc_check_41.clas.abap
156 lines (111 loc) · 3.71 KB
/
zcl_aoc_check_41.clas.abap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
CLASS zcl_aoc_check_41 DEFINITION
PUBLIC
INHERITING FROM zcl_aoc_super
CREATE PUBLIC .
PUBLIC SECTION.
METHODS constructor .
METHODS check
REDEFINITION .
METHODS get_attributes
REDEFINITION .
METHODS if_ci_test~query_attributes
REDEFINITION .
METHODS put_attributes
REDEFINITION .
PROTECTED SECTION.
PRIVATE SECTION.
DATA mv_ignore TYPE flag.
ENDCLASS.
CLASS ZCL_AOC_CHECK_41 IMPLEMENTATION.
METHOD check.
* abapOpenChecks
* https://github.com/larshp/abapOpenChecks
* MIT License
DATA: lv_include TYPE sobj_name,
lv_comment TYPE abap_bool,
lv_len TYPE i,
lv_prev TYPE i.
FIELD-SYMBOLS: <ls_statement> LIKE LINE OF io_scan->statements,
<ls_token> LIKE LINE OF io_scan->tokens,
<ls_scomment> LIKE LINE OF io_scan->statements,
<ls_tcomment> LIKE LINE OF io_scan->tokens.
LOOP AT io_scan->statements ASSIGNING <ls_statement>
WHERE type <> io_scan->gc_statement-empty
AND type <> io_scan->gc_statement-comment
AND type <> io_scan->gc_statement-comment_in_stmnt
AND type <> io_scan->gc_statement-macro_definition
AND type <> io_scan->gc_statement-pragma
AND colonrow = 0.
CLEAR lv_prev.
LOOP AT io_scan->tokens ASSIGNING <ls_token> FROM <ls_statement>-from TO <ls_statement>-to.
lv_len = strlen( <ls_token>-str ) - 1.
IF <ls_token>-str(1) = '(' AND <ls_token>-str+lv_len(1) = ')'.
* special case see unit test 05, SAP is fun
EXIT.
ENDIF.
IF lv_prev IS INITIAL
OR lv_prev = <ls_token>-row
OR lv_prev = <ls_token>-row - 1.
lv_prev = <ls_token>-row.
CONTINUE.
ENDIF.
IF <ls_token>-str = 'GLOBAL'.
* global friends in classes are auto generated with newlines
EXIT.
ENDIF.
lv_comment = abap_false.
LOOP AT io_scan->statements ASSIGNING <ls_scomment>
WHERE type = io_scan->gc_statement-comment_in_stmnt
AND level = <ls_statement>-level.
LOOP AT io_scan->tokens ASSIGNING <ls_tcomment>
FROM <ls_statement>-from TO <ls_statement>-to.
IF <ls_tcomment>-row = lv_prev.
lv_comment = abap_true.
ENDIF.
ENDLOOP.
ENDLOOP.
IF mv_ignore = abap_false OR lv_comment = abap_false.
lv_include = io_scan->get_include( <ls_statement>-level ).
inform( p_sub_obj_name = lv_include
p_line = <ls_token>-row
p_kind = mv_errty
p_test = myname
p_code = '001' ).
EXIT.
ENDIF.
lv_prev = <ls_token>-row.
ENDLOOP.
ENDLOOP.
ENDMETHOD.
METHOD constructor.
super->constructor( ).
version = '001'.
position = '041'.
has_attributes = abap_true.
attributes_ok = abap_true.
mv_ignore = abap_false.
enable_rfc( ).
insert_scimessage(
iv_code = '001'
iv_text = 'Empty line in statement'(m01) ).
ENDMETHOD.
METHOD get_attributes.
EXPORT
mv_errty = mv_errty
mv_ignore = mv_ignore
TO DATA BUFFER p_attributes.
ENDMETHOD.
METHOD if_ci_test~query_attributes.
zzaoc_top.
zzaoc_fill_att mv_errty 'Error Type' ''. "#EC NOTEXT
zzaoc_fill_att mv_ignore 'Ignore comments' ''. "#EC NOTEXT
zzaoc_popup.
ENDMETHOD.
METHOD put_attributes.
IMPORT
mv_errty = mv_errty
mv_ignore = mv_ignore
FROM DATA BUFFER p_attributes. "#EC CI_USE_WANTED
ASSERT sy-subrc = 0.
ENDMETHOD.
ENDCLASS.