dart-lang / sdk

The Dart SDK, including the VM, JS and Wasm compilers, analysis, core libraries, and more.
https://dart.dev
BSD 3-Clause "New" or "Revised" License
10.3k stars 1.59k forks source link

Enhancement for dartanalyzer: Emit hints for special case of function type compatibility checking #57146

Open mkustermann opened 10 years ago

mkustermann commented 10 years ago

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).

bwilkerson commented 10 years ago

Added this to the Later milestone. Removed Priority-Unassigned label. Added Priority-Medium, Analyzer-Hint labels.

kasperl commented 10 years ago

Removed this from the Later milestone. Added Oldschool-Milestone-Later label.

kasperl commented 10 years ago

Removed Oldschool-Milestone-Later label.

srawlins commented 4 years ago

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.