icerpc / slicec

The Slice compiler library
Apache License 2.0
13 stars 5 forks source link

Poor errors for Slice1 enum #680

Closed bernardnormier closed 9 months ago

bernardnormier commented 9 months ago

If you attempt to define an enum with an underlying type or associated field in Slice1, you should get an error like "underlying type not valid for Slice1 enum" and "associated field not available in Slice1 mode".

But you get instead the same perplexing error:

error E029: enum 'TestEnum1' cannot be defined in Slice1 mode
InsertCreativityHere commented 9 months ago

This is a limitation of the builder, not slicec. slicec will always tell you exactly what the problem is, either:

error E029: enum 'TestEnum1' cannot be defined in Slice1 mode
enums defined in Slice1 mode cannot have underlying types

or

error E029: enum 'TestEnum1' cannot be defined in Slice1 mode
enumerators declared in Slice1 mode cannot have associated fields

But, the builder doesn't display the full diagnostic. Try running slicec directly from the command line for the file in question to see the full diagnostic it emits.

pepone commented 9 months ago

The MSBuild builder also shows the additional notes:

C:\Users\jose\source\repos\MySliceClient\slice\Greeter.slice(6,1,6,9): error E029: enum 'Foo' cannot be defined in Slice1 mode [C:\Users\jose\source\repos\MySliceClient\MySliceClient.csproj]
C:\Users\jose\source\repos\MySliceClient\slice\Greeter.slice(6,1,6,9): message : enums defined in Slice1 mode cannot have underlying types [C:\Users\jose\source\repos\MySliceClient\MySliceClient.csproj]

Additional messages are logged separately; see here.

We considered concatenating the notes to the main error message. However, we decided against it because notes can have different locations, which would be lost. This is relevant in cases of redefinitions.