Track expanded support for more multi-location diagnostic messages · Issue #22789 · microsoft/TypeScript (original) (raw)
We now support related information for diagnostic messages. This issue now tracks, in aggregate, which diagnostics we have extra information for. The following errors are candidates:
MVP
_____ used before its declaration.
Property '{0}' is used before being assigned.
Cannot redeclare block-scoped variable '{0}'.
Type '{0}' is not assignable to type '{1}'.
Type '{0}' is not assignable to type '{1}'. Two different types with this name exist, but they are unrelated.
Expected {0} arguments, ___________
Others
Cannot find name '{0}'. Did you mean ______
Duplicate declaration '{0}'.
_____ has or is using private name '{1}'
Subsequent property declarations must have the same type. Property '{0}' must be of type '{1}', but here has type '{2}'.
'{0}' are specified twice. The attribute named '{0}' will be overwritten.
'get' and 'set' accessor must have the same type.
Accessors must both be abstract or non-abstract.
Overload signatures must all be ______
Overload signature is not compatible with function implementation.
Individual declarations in merged declaration '{0}' must be all exported or all local.
Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'.
- Subtyping
Class '{0}' incorrectly extends base class '{1}'.
Class static side '{0}' incorrectly extends base class static side '{1}'.
Class '{0}' incorrectly implements interface '{1}'.
Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor.
Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member property.
Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function.
Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function.
Interface '{0}' incorrectly extends interface '{1}'.
Non-abstract class '{0}' does not implement inherited abstract member '{1}' from class '{2}'.
Non-abstract class expression does not implement inherited abstract member '{0}' from class '{1}'.
All declarations of '{0}' must have identical type parameters.
In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element.
- Namespace merging
A namespace declaration cannot be in a different file from a class or function with which it is merged.
A namespace declaration cannot be located prior to a class or function with which it is merged.
Module '{0}' is hidden by a local declaration with the same name.
- should probably be changed to "namespace"
Types have separate declarations of a private property '{0}'.
Property '{0}' is protected but type '{1}' is not a class derived from '{2}'.
Property '{0}' is protected in type '{1}' but public in type '{2}'.
An AMD module cannot have multiple name assignments.
Cannot initialize outer scoped variable '{0}' in the same scope as block scoped declaration '{1}'
Export declaration conflicts with exported declaration of '{0}'.
Cannot redeclare identifier '{0}' in catch clause.
Module '{0}' uses 'export =' and cannot be used with 'export *'.
Base constructors must all have the same return type.
Overload signatures must all be abstract or non-abstract.
A module cannot have multiple default exports.
Type '{0}' has no properties in common with type '{1}'.
Base class expressions cannot reference class type parameters.
A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.
'{0}' refers to a UMD global, but the current file is a module. Consider adding an import instead.
All declarations of '{0}' must have identical modifiers.
Bonus?A computed property name cannot reference a type parameter from its containing type.
Type argument candidate '{1}' is not a valid type argument because it is not a supertype of candidate '{0}'.
Original Post:
Often a diagnostic message can have additional location information. it is specially helpful in IDE's where clicking on the location can take you there. For instance
- duplicate declaration errors, can have the other locations where the name was re-declared
- type
x
not assignable to typey
, a reference to where the target symbol's type is defined - implicit any errors, have a reference to the declaration of the container type
- parameter type/number mismatch, have a reference tot he function declaration
VSCode is adding support for exposing a list of related diagnostics in microsoft/vscode#1927.
We can also expose this in
--pretty
.