PR# 19295 Incorrect report of code analysis rule CA020 violation
Problem Report Summary
Submitter: prestoat2000
Category: EiffelStudio
Priority: Low
Date: 2016/11/18
Class: Bug
Severity: Non-critical
Number: 19295
Release: 16.11.99804
Confidential: No
Status: Closed
Responsible: alexk_es
Environment: linux
Synopsis: Incorrect report of code analysis rule CA020 violation
Description
The Eiffel Inspector reports a CA020 violation (variable not read after assignment). It is true that
the variable is not read after assignment, but the called function has a side effect so removing the
assignment would break the code.
Here is the assignment:
cel := make_one_cell("\", 1, 1, false)
And the function is:
make_one_cell(txt: STRING; row, col: INTEGER; hdr: BOOLEAN):
HTML_TABLE_CELL
-- row and col are MY_TABLE indices
-- txt is the text
do create Result.make(txt);
if hdr then Result.set_as_header end;
my_table.put(Result, row, col)
end;
Note the call to my_table.put (side effect).
This is probably not a good way to write the code, but the inspector should not report a violation if the called
function has side effects.
To Reproduce
Problem Report Interactions
Added test#code_analysis032. Fixed in rev#102377 of EiffelStudio 18.11 intermediate release by reporting violation only when source expression is attached and an assignment target := source can be replaced with source.do_nothing
Yes, I think suggesting a call to `do_nothing' in the attached case would be fine.
Thank you for your report. Would it be reasonable to suggest replacing an assignment with a call to `do_nothing` if the return type is attached? (Unfortunately there is no good replacement yet for the case when the return type is detachable.)