> On 26 Jan 2017, at 00:46, Jonathan Hull via swift-evolution > <swift-evolution@swift.org> wrote: > > One of the biggest issues that I saw while teaching Swift to newbies (most > had not programmed before) is confusion based on the early warnings/errors > that swift/xcode gives you as they type. What would happen is that they > would type a variable, and it would say… “You haven’t used this variable” and > so they would just click the fixit because they trust the compiler more than > they trust themselves. This would lead to a point where they were very > confused because some of the code was code they had thought through, and some > of it was changed by random fixits in ways they didn’t understand… and so it > would lead to more errors/fixits until they had errors which couldn’t be > fixed. > > By the end of the semester they had learned to ignore the warnings until they > were finished, but it took a couple of months to get there, and was a big > deterrent to new users… (Also, learning to ignore warnings ignorer to use a > system seems like an anti-pattern) > > I have a good friend who is an expert perl programmer who tried Swift and > eventually gave up because he couldn’t figure out which errors to ignore (and > which might just disappear a minute later) and which he needed to pay > attention to. He was overwhelmed by the sheer number, and they didn’t seem > trustworthy to him (“Swift is full of lies!” he would say of the warnings… > which is a mantra I find myself parroting when I get those > appearing/disappearing errors). > > > To fix this, I propose adding a way to annotate warnings/errors to say how > immediate they need to be: > • Immediate - This error should always be shown > • DifferentLine - This error should only be shown once the cursor is on a > different line > • DifferentScope - This error should only be shown once the cursor is in a > different scope from this line > • DifferentFunction - This error should only be shown once the cursor is in a > different function > > So the “You haven’t used this variable” warning would be marked > .differentScope, meaning that it would only show up once you had clicked away > from the scope. The reason for this is that while you are in the same scope, > it is fairly likely that you are still going to use the variable… so the > warning is premature. Once I have left the scope, it makes sense to warn me. > > Similarly, the “You need a return value” error would be marked > .differentFunction because you are likely to add one while typing the > function. But a type mismatch with the return value would either be > .immediate or .differentLine because you have made an error that isn’t likely > to be fixed with more typing on other lines. > > I think this will cut way down on the number of warnings/errors that need to > be ignored, which should increase trust in the system overall. > > To be clear, I am only proposing adding the annotation to Swift (probably > with a default of .differentLine). The compiler would not repress the > warning/error itself… just vend it with a way to retrieve the annotation. > IDE makers like Apple/Xcode would then be free to use that extra information > in their UI if desired. > > Thanks, > Jon > _______________________________________________ > swift-evolution mailing list > swift-evolution@swift.org > https://lists.swift.org/mailman/listinfo/swift-evolution
Having warnings and errors vanish and then reappear as you click in/out of function seems far more confusing to me. Is there any other language/IDE that does things that way? - Karl _______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution