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.07k stars 1.56k forks source link

Consider improving error message for top-level expressions #15535

Open peter-ahe-google opened 10 years ago

peter-ahe-google commented 10 years ago

See the discussion in https://groups.google.com/a/dartlang.org/d/msg/misc/gs6DzCA-mHk/-Gy3TCY5JNYJ.

The user is new to Dart and used to top-level expressions in JavaScript. Tried running this program:

library altapp;

import 'package:logging/logging.dart';

Logger.root.level = Level.ALL;

The problem was lack of main method. The error is:

js.dart:5:1: Error: Can't have modifier 'StringToken(Logger)' here. Try replacing modifier 'StringToken(Logger)' with 'var', 'final', or a type. Logger.root.level = Level.ALL; ^^^^^^ js.dart:5:12: Error: Can't have modifier 'SymbolToken(.)' here. Try replacing modifier 'SymbolToken(.)' with 'var', 'final', or a type. Logger.root.level = Level.ALL;            ^ js.dart:1:1: Error: Could not find 'main'. library altapp;

Error: Compilation failed.

Perhaps dart2js can do better.

srawlins commented 5 years ago

FWIW, dart2js/cfe now reports eight errors for this code:

class Logger {
  static L1 root = L1();
}

class L1 {
  int level;
}

Logger.root.level = 3;

error: The name 'Logger' is already defined. error: Functions must have an explicit list of parameters. error: A function body must be provided. error: Expected a method, getter, setter or operator declaration. error: Functions must have an explicit list of parameters. error: Expected a method, getter, setter or operator declaration. error: A function body must be provided. error: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.