eclipse-archived / ceylon.formatter

A formatter for the Ceylon programming language, written in Ceylon.
Apache License 2.0
14 stars 11 forks source link

Can't format valid code #125

Closed bjansen closed 8 years ago

bjansen commented 8 years ago

The formatter throws an exception on the following (valid) code:

void run(String? a) {
    if (!exists a) {
        return;
    }

    Integer offset;
}
ceylon.language.Exception "Unexpected token 'Integer' ([@28,74:80='Integer',<125>,6:4]), expected 'a' instead"
    at ceylon.formatter.FormattingWriter$13.$call$(FormattingWriter.ceylon:645)
    at ceylon.formatter.FormattingWriter$13.$call$(FormattingWriter.ceylon:621)
    at ceylon.formatter.FormattingWriter.fastForward$priv$(FormattingWriter.ceylon:1136)
    at ceylon.formatter.FormattingWriter.writeToken$canonical$(FormattingWriter.ceylon:621)
    at ceylon.formatter.FormattingWriter.writeToken(FormattingWriter.ceylon:509)
    at ceylon.formatter.FormattingVisitor.visitIdentifier(FormattingVisitor.ceylon:918)
    at com.redhat.ceylon.compiler.typechecker.tree.VisitorAdaptor.visit(VisitorAdaptor.java:595)
    at com.redhat.ceylon.compiler.typechecker.tree.Tree$Identifier.visit(Tree.java:7836)
    at ceylon.formatter.FormattingVisitor.visitVariable(FormattingVisitor.ceylon:2224)
    at com.redhat.ceylon.compiler.typechecker.tree.VisitorAdaptor.visit(VisitorAdaptor.java:325)
    at com.redhat.ceylon.compiler.typechecker.tree.Tree$Variable.visit(Tree.java:4446)
    at ceylon.formatter.FormattingVisitor.visitBody(FormattingVisitor.ceylon:363)
    at com.redhat.ceylon.compiler.typechecker.tree.VisitorAdaptor.visitBlock(VisitorAdaptor.java:126)
    at com.redhat.ceylon.compiler.typechecker.tree.VisitorAdaptor.visit(VisitorAdaptor.java:127)
    at com.redhat.ceylon.compiler.typechecker.tree.Tree$Block.visit(Tree.java:1809)
    at ceylon.formatter.FormattingVisitor.visitMethodDefinition(FormattingVisitor.ceylon:1292)
    at com.redhat.ceylon.compiler.typechecker.tree.VisitorAdaptor.visit(VisitorAdaptor.java:99)
    at com.redhat.ceylon.compiler.typechecker.tree.Tree$MethodDefinition.visit(Tree.java:1404)
    at ceylon.formatter.FormattingVisitor.visitCompilationUnit(FormattingVisitor.ceylon:497)
    at com.redhat.ceylon.compiler.typechecker.tree.VisitorAdaptor.visit(VisitorAdaptor.java:13)
    at com.redhat.ceylon.compiler.typechecker.tree.Tree$CompilationUnit.visit(Tree.java:22)
    at ceylon.formatter.format_.format(format.ceylon:72)
    at com.redhat.ceylon.eclipse.code.editor.FormatAction.format(FormatAction.java:202)
    at com.redhat.ceylon.eclipse.code.editor.FormatAction.run(FormatAction.java:86)
...
    Suppressed: ceylon.language.Exception "Unexpected token 'Integer' ([@28,74:80='Integer',<125>,6:4]), expected '' instead"
        at ceylon.formatter.FormattingWriter$13.$call$(FormattingWriter.ceylon:645)
        at ceylon.formatter.FormattingWriter$13.$call$(FormattingWriter.ceylon:621)
        at ceylon.formatter.FormattingWriter.fastForward$priv$(FormattingWriter.ceylon:1136)
        at ceylon.formatter.FormattingWriter.writeToken$canonical$(FormattingWriter.ceylon:621)
        at ceylon.formatter.FormattingWriter.writeToken(FormattingWriter.ceylon:509)
        at ceylon.formatter.FormattingWriter.destroy(FormattingWriter.ceylon:1209)
        at ceylon.formatter.FormattingVisitor.destroy(FormattingVisitor.ceylon:2286)
        at ceylon.formatter.format_.format(format.ceylon:71)
        ... 69 more
gavinking commented 8 years ago

This is the same as https://github.com/ceylon/ceylon-ide-eclipse/issues/1536, isn't it?

bjansen commented 8 years ago

IDK, https://github.com/ceylon/ceylon-ide-eclipse/issues/1536 is on invalid code, whereas this one happens on valid code. Let @lucaswerkmeister decide whether or not it's a duplicate ;)

gavinking commented 8 years ago

IDK, ceylon/ceylon-ide-eclipse#1536 is on invalid code,

Well, not necessarily, I never said that...

bjansen commented 8 years ago

OK.

What's also bothering me is that it can't even format a text selection that is totally unrelated to the part that fails.

gavinking commented 8 years ago

Yeah, I mean, I don't say stuff like "incredibly flakey" for nothing... :-)

lucaswerkmeister commented 8 years ago

I can’t reproduce this here. @bjansen are you using the latest version of the formatter? (Though I don’t recall fixing a similar bug recently…)

lucaswerkmeister commented 8 years ago

Fixed. It only happened in the IDE, and I first tried to reproduce it in the CLI. See commit for more details.