[External] : Re: Error examples page

Ethan McCue ethan at mccue.dev
Thu Nov 10 22:21:42 UTC 2022


I think for the JLS justification in particular - that is something which
fits within the "info" part of our model but also isn't
particularly interesting for the target audience of "people who trigger
compiler errors."

 A motivating example I sent to Vicente (almost 9 months ago! God I'm
unproductive) was the contrast between the information conveyed in this
message

    import java.util.List;

    enum Ex {
        A,
        B
    }

    public class MyClass {
        public static void main(String args[]) {
            var ex = B;
        }
    }



    /MyClass.java:10: error: cannot find symbol
            var ex = B;
                     ^
      symbol:   variable B
      location: class MyClass

As compared to that emitted by rustc

    enum Ex {
        A,
        B
    }

    pub fn main() {
        let ex = A;
    }

    error[E0425]: cannot find value `A` in this scope
     --> src/main.rs:7:14
      |
    7 |     let ex = A;
      |              ^ not found in this scope
      |
    help: consider importing this unit variant
      |
    1 | use crate::Ex::A;
      |

    For more information about this error, try `rustc --explain E0425`.

Which could look like (ignoring the finer details of the ascii art)

    error[E0123]: cannot find symbol `A` in this scope
     --> src/Main.java:9:18
      |
    9 |     var ex = B;
      |              ^ not found in this scope
      |
    help: consider importing this enum variant
      |
    1 | import static Ex.B;
      |

    For more information about this error, try `javac --explain E0123`.

Where it is not enough to just "make a better message." There are
structural deficiencies which preclude giving this sort of feedback.

The *desire* to give a hint on how to fix something or extra context on why
something is an error is what I think the true monster hiding under the bed
of JDK-6397027 was. Language kinda has to be irregular in order to contain
multiple of these semantic elements - y'know?

(sorry if this isn't the most complete justification)

---

My strategy for making progress has been to recruit the help of some
students for whom working out a prototype is their senior design project.
It's slow going, but we're all learning.

On Thu, Nov 10, 2022, 4:40 PM Ethan McCue <ethan at mccue.dev> wrote:

> Pithy instant response: it's not too big for mainstream rustc
>
>
> On Thu, Nov 10, 2022, 4:31 PM Jonathan Gibbons <
> jonathan.gibbons at oracle.com> wrote:
>
>>
>> Our current brain scratcher is how to represent suggestions on how to fix
>> code that actually "makes the correction for them"
>>
>> So like
>>
>>     int assert;
>>
>> How to model some code that can be later formatted as a suggestion to
>> rename the "assert" variable to "assert_"
>>
>>
>>
>> While it sounds fun, it also sounds "too big" for mainstream javac.
>> That suggests there could be a plugin mechanism to add more info to
>> diagnostics.  Maybe.
>>
>> -- Jon
>>
>>
>>
>> On 11/10/22 11:42 AM, Ethan McCue wrote:
>>
>> Thanks - we have been tracking the PR. It will be helpful for us to track
>> our progress.
>>
>> ---
>>
>> To springboard into something different but related:
>>
>> We have been working on modeling how to add kinds of information to
>> JCDiagnostics that are semantically different from a message as produced by
>> DiagnosticInfo.
>>
>> In the current hypothesis there are two new categories of information we
>> are calling "help" and "info".
>>
>> "help" contains some suggestions on how to rectify a given sort of error.
>> In the simplest form this is a codification of the "try using
>> --enable-preview" type messages which exist somewhat ad-hoc throughout the
>> codebase.
>>
>> Our current brain scratcher is how to represent suggestions on how to fix
>> code that actually "makes the correction for them"
>>
>> So like
>>
>>     int assert;
>>
>> How to model some code that can be later formatted as a suggestion to
>> rename the "assert" variable to "assert_"
>>
>>
>>
>>
>>
>> On Thu, Nov 10, 2022, 2:25 PM Jonathan Gibbons <
>> jonathan.gibbons at oracle.com> wrote:
>>
>>> As a followup, the code to generate diags-examples.html needed some TLC,
>>> and was fixed in JDK-8296137
>>> <https://bugs.openjdk.org/browse/JDK-8296137>.
>>>
>>> The command to generate the report is effectively this:
>>>
>>> JAVA_HOME=$JDK $ANT \
>>>     -Dlangtools.jdk.home=$JDK \
>>>     -f make/langtools/diags-examples.xml
>>>
>>> where:
>>>
>>>    - the current directory is the root of the OpenJDK repo
>>>    - ANT refers to a recent executable for Ant,
>>>    - JDK refers to a build of JDK in the same repo containing the
>>>    examples directory
>>>
>>> The report will be written to build/langtools/diags-examples/
>>> -- Jon
>>>
>>> On 10/3/22 1:22 PM, Jonathan Gibbons wrote:
>>>
>>> It's generated by the code in open/test/langtools/tools/javac/diags/.
>>>
>>> There are various classes there, like RunExamples.java,
>>> CheckExamples.java etc. You are probably looking for RunExamples.java;
>>> there are comments in the code on how to use it.
>>>
>>> -- Jon
>>> On 10/3/22 7:31 AM, Ethan McCue wrote:
>>>
>>> Hey all,
>>>
>>> My group stumbled upon this page with a bunch of error examples in a
>>> nice presentable format.
>>>
>>> https://cr.openjdk.java.net/~jjg/diags-examples.html
>>>
>>> My suspicion is that this was generated by something in the codebase -
>>> if so does anyone know the command of the top of their head?
>>>
>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/compiler-dev/attachments/20221110/43e495d0/attachment-0001.htm>


More information about the compiler-dev mailing list