« Return to Thread: [scala] Scala plugin BETA

[scala] Scala plugin BETA

by sean.mcdirmid :: Rate this Message:

Reply to Author | View in Thread

Hi,

As some of you might know, I've been working on a new Scala plugin  
for the past year and a half with the intention of replacing the  
current plugin, which I hacked together in the course of a couple of  
months. Our goals with the new plugin are pretty ambitious and have  
required exploring lots of new technology (incremental parsing, type  
checking) as well as obtaining a better understanding of Eclipse. I'm  
happy to announce that it is kind of done and I'd like to start BETA  
testing in the community. The update site for the new plugin BETA is  
at http://lamp.epfl.ch/~mcdirmid/scala.update (http://lamp.epfl.ch/ 
~mcdirmid/scala.update/site.jar if you prefer an archive install).  
Notable features:

* Truly incremental syntax/type checking and semantic highlighting  
(no more ctrl-shift-z!), works fast even in very large files.

* Code completion (content assist) that works reliably and responsively

* Almost 100% semantic highlighting coverage (better for search and  
refactoring later...)

* Better integration with Java. Java-doc comments from Java source  
now show in hover help (if the Java-doc attachment is set) and can  
hyperlink to Java definitions (if the Java source attachment is set).

* The incremental builder now knows about changes to classfiles in  
other Scala and Java projects, and will rebuild accordingly  
(hopefully, still needs more testing). The Scala editor also knows  
about classfile changes.

* Can now set breakpoints in Scala-derived classfiles. When the  
debugger triggers a break point in a Scala-derived classfile, the  
debugger opens the breakpoint in a Scala editor and not a Java editor  
as before. Also, when Scala-derived classfiles are opened up through  
the Project Explorer (but unfortunately, not the Package Explorer),  
they will open up in a Scala editor rather than a Java editor as before.

* Position/highlighting information is saved so Scala-derived  
classfiles can be opened very quickly (assuming the Scala source  
attachment is set).

* Folding and Scala-centric auto indenting!

* Better editor preferences dialogue.

* For keyboard junkies, goto declaration has been implemented (using  
the JDT configured key binding, by default F3).

Because the technology used in the plugin is very new and untested, I  
initially expect that there will be ALOT of bugs. I'm continuously  
afraid whenever I'm editing in the new plugin that any keystroke will  
cause a crash :) I really need the community's help if the plugin is  
going to become stable. Please keep your error log view open while  
using the plugin, as this could fill up pretty quickly and you'll  
only be notified of the first crash. We'll use trac to manage bug  
reports, but check the open bug reports to avoid wasting time on  
duplicate reports. Also, I've checked in the source if you want to  
hack on it or add features. In particular, Documentation would be  
greatly appreciated. I haven't documented the code yet, and we don't  
have a DOM, so if you want to implement a feature that requires  
compiler information, please talk to me.

On a personal note, I'm leaving EPFL (and the western hemisphere) at  
the end of October, and we don't know who will take this over yet.  
I'm still going to try and fix bugs and keep releases going, but for  
this to work we really need to open it up and attract community  
contributions. Suggestions on how to do this would be greatly  
appreciated.

Please read the following release notes if you want to use the new  
plugin (also included in the plugin documentation):

* The plugin is currently based on (and comes with) the unfinished  
2.6.1 Scala release. No feature for 2.6.1 has yet been set in stone  
and 2.6.1 probably contains some new bugs not in 2.6.0.

* The plugin currently relies heavily on "IDE" files. Please clean-
rebuild your existing projects in the new plugin before opening up  
files in the editor.

* Existing .project files must be updated in the following way:  
ch.epfl.lamp.sdt.core.scalabuilder becomes scala.plugin.scalabuilder  
and ch.epfl.lamp.sdt.core.scalanature becomes  
scala.plugin.scalanature. Thankfully, .classpath files don't need to  
be migrated.

* Existing application and Scala breakpoint profiles cannot be  
migrated. Please remove them from your workspace before installing  
the new plugin.

* Its probably not a good idea to have both the old and new plugin  
installed on the same Eclipse installation. Please uninstall or  
disable the old plugin before installing the new one, or use a  
different configuration profile.

* The IDE file is used to ensure that the file is opened quickly, but  
parsing and type checking will not occur until the first edit  
("breaking the ice"). This means that there will be a lag on the  
first edit of a large file (due to parsing, which occurs in the UI  
thread) and then later when type checking completes (as the type  
checking results are integrated into the UI). While type checking is  
occurring, no type-dependent services will work (e.g., hover help,  
code completion). Type checking for most edits is incremental and so  
completes fast enough that this is not an issue. The biggest type  
checking times occur when (a) modifying a top-level import in a large  
file or (b) when you start editing a large file. As an example,  
Typers.scala, which is around 3300 lines of DENSE Scala code, takes  
around 8 seconds to type check initially in the editor. This will  
balloon to 20 or so seconds if you edit a top-level import. Import  
statements are currently a big problem given the way they are  
represented in the compiler, we still don't have a fix in mind for this.

* You are free to change the parse tree while type checking occurs in  
the background, it shouldn't crash the compiler :) All changed parse  
nodes are scheduled for type checking in the background.

* Parsing and type checking will not occur if braces (including  
comments and double quotes) in the file are unbalanced. For this  
reason, brace completion (as implemented in the IDE) is essential to  
keep things lively and is definitely not a save-on-typing  
convenience. If you type over any closing brace, a new closing brace  
won't be inserted. Braces can go unbalanced (e.g., if you block paste  
in some code with unbalanced braces), but many IDE features will not  
work during this time.  There are a few more features that aid in  
keeping braces balanced: deleting an opening brace will delete its  
matched closing brace; typing a closing brace will move out or in an  
existing closing brace in certain contexts; and you can select a  
block of text and type ",`,(,{,[,/ to enclose the block in double  
quotes, back quotes, parentheses, curly braces, brackets, or a multi-
line comment, respectively.

* There is currently no XML support. Support is planned, but not  
right now.

*  The content outliner, interpreter, and test pad views are not yet  
implemented for the new plugin.

* There is still no support for refactoring or search.

* The Project Explorer replaces the Package Explorer as the preferred  
navigation view of Scala projects (the Package Explorer will still  
work). However, I've noticed some conflicts with the JDT "Java  
Element" content view, you'll probably have to disable it (click the  
down white triangle in the project explorer view, select the  
"Customize View" menu, select the "Content" tab, uncheck "Java  
Elements").

* For some strange reason, no default highlighting colors are  
configured when the plugin is first installed. Go to Preferences/
Scala/Scala Editor Preferences, hit "Restore Defaults", "Ok" then  
colors will be enabled. I know the default color scheme is atrocious,  
but you can also customize Scala highlighting colors.

* Scala classpath entries do not make use of Java-doc attachments  
(all scala-doc entries are extracted from source attachments) while  
Java requires these attachments even if source is available. Make  
sure your Java-doc/source code attachments are configured correctly  
for your JRE_CONTAINER. Source attachments are included for the  
embedded Scala library.

 « Return to Thread: [scala] Scala plugin BETA