Open mkustermann opened 10 years ago
Added this to the Later milestone. Removed Priority-Unassigned label. Added Priority-Medium, Analyzer-Hint labels.
Removed this from the Later milestone. Added Oldschool-Milestone-Later label.
Removed Oldschool-Milestone-Later label.
Since the analyzer is going by the spec, and the request is for additional, false-positive-prone analysis, I think this would be a good one for the linter.
The following code does not emit a dartanalyzer error/warning/hint
import 'dart:async';
typedef void VoidReturnType(String msg);
bar(VoidReturnType function, String msg) { function(msg); }
main() { Future fun(String m) { print(m); // The future returned here could come from other parts of the program. return new Future.error('unexpected error'); }
bar(fun, 'hello world'); }
Reading the dart specification, this seems correct behavior:
A function type (T1, ..., Tk, ...) → T is a subtype of the function type (S1, ..., Sk+j, ...) → S, if all of the following conditions are met: Either S is void, or T ⇔ S.
But it can cause easily programming errors, where
I think this is a case where type systems usually helps users, but not in the case of the dart type system. It would be very beneficial for our users to get at least a hint in this specific case.
More broadly speaking, it would be beneficial to get hints if a user doesn't act upon a future object it gets from somewhere (neither handles it's value nor it's errors).