Wishlist :)

I'm using the latest version of the plugin. It's great, really!

Atm I see some minor problems and I have some wishes, as well The things are ordered by importance. I didn't know if I should submit issues or not for the bugs.
I knwo that it's version 0.2. I'm thankful for the plugin. The things listed below are some things to improve it even more, I think.

-Whenever I reformat the code the commented lines get two more spaces at the beginning
/** Test */ becomes
/**                                         Test */ after a few reformattings (I have the bad habit to do that often

- Ctrl+P, Ctrl+Q and Ctrl+H would be a real productivity boost (in that order)

- It would be great to have Ctrl+Shift+T (Go to test) working for scala classes

- Sometimes I need to rename files.
For example I created a class/object Test (in test.scala). Later on  rename Test in the code (not doing the refactoringI, put more things into that file (e.g. case classes, objects) and the original file name is not fitting any more. There's no easy way to rename the file to something like testutil.scala or tests.scala.

- In the past I just got one suggestion for overloaded methods instead of the different overloaded method signatures.. Don't know if this is still in the current version


Hello, Wallaby,
Thank you for your suggestions. We'll try to fix the bugs in the first place, but Ctrl-P feature seems really high-priority and we'll try to add it soon. The development is basically
divided into two chunks of work: first we have to advance the resolve/completion/error reporting to the full scala spec, second based on the type system and write psi implementations
a bunch of IDE-specific actions will be provided. Scala is not java, that's why its IDE support should not be 100% java-like, and while some features that are indispensible for java
development make little to no sense in scala, I believe there's plenty of possibilities to invent things that are unique to scala. Your ideas are most welcome:)




Ok, let's consider all of this step by step.

1. Oh, what a nasty bug. I've created in issue http://jetbrains.net/jira/browse/SCL-462
2. All in good time. Of course, we remember these features, and now we have almost all necessary stuff to implement them.
3. Ok, but it's not top-priority task.
4. Yes, it would be reasonable to add appropriate shortcut for such kind of rename.

With best regards,


Thanks for the offer to think about new features

I did some brainstorming and came up with this (I didn't check if these features are already available).
(this list became quite long,I hope it's still helpful) These are ideas, not complaints

1. A way to show the implicit conversions for a variable or type would be very helpful. Using a library often means to find the objects which contain the implicit defs to better work with the api. I do Lift coding and this would definitely help a lot.
For example:

class Test {
     def myTest(foo: Bar)

object TestConversions {
     implicit def stringToBar(s:String) : Bar = //...

Placing the cursor on Bar and calling that action should show TestConversions.stringToBar, even if it's not imported. Something similair should be done for method parameter editing. Calling code completion on "myTest(" should show Strings as well (maybe after another call to the completion action, like in Java).

2. A shortcut to jump between  the class and object definitions (forgot the name of that thing For example:
Jump from "class Foo" to "object Foo" and in the other direction as well.

3. Show methods of implicit convertable objects in code completion, maybe only after a second press of the shortcut (like the two-way Java code completion).
e.g. "val t = "foo"; t.<call completion here>" should show the methods of Bar.

4. Refactoring a method parameter of type T to a closure with return type T would be cool, I think. I didn't think about whether this is possible or not, though

5. Full xml support for tags in the code. In Lift there are often xhtml tags in the code, e.g. <div>{SHtml.a(...)}</div>. Support for tag renaming, xhtml attributs and things like style attribute support would be incredibly helpful

6. Refactoring for a class to a trait or a trait to a class.

7. Show the order in which methods in a class with traits are handled. Not sure if this makes sense.

8. Something like a scala console in IntelliJ so it's possible to test some code.

9. Show the inferred type for a val or var. This had been mentioned somewhere else before.

10. Show a little marker in the gutter / left margin if a recursive method is tail-recursive or not. This would help to spot possible bugs / stack overflow errors.

11. Give an option to insert the inferred type and a select list to choose if there's more than one possibility. Sometimes having the type written is helpful for the reading, sometimes the compiler needs it. This is especially helpful for constructs like this:

val values = a :: b :: c :: d :: e :: Nil

This could be made into something like

val values : List[Foo[Bar[_]]] = a :: b :: c :: d :: e :: Nil

If a-e have a typed type (strange wording, I mean something like "val a : Foo[Bar[String]] = ...".
It's difficult to manually find a base type for Lift mapped fields, for example. The inheritance hierarchy is quite complex and I'd have to look into the docs more than one time to find the infered type.

12.Lift support, but this is just dreaming

13. Show in the gutter if a class is immutable or mutable. (Not sure   how much sense this makes)

14. Refactoring / Intellisense (?) to change a var to val if the var is never reassigned.

15. If a val is reassigned provide some intellisense to change it into a var

16. Extended support for actor and messages. For example provide intelligent suggestions for constructs like

actor1 ! <caret is here> . The suggestion should only show the messages which are handled by the actor or the values which would match in the receive part of that actor.Warn if the transfered message is mutable / not thread safe.
I'm not sure if this is technically possible.

17.Support for pattern matching. Intellisense for things which could be bugs in the code.

val e = ""
foo match {
case e => //...

In this code the user probably wanted to match if foo is the value of e, i.e.
case 'e' => //..

Show some error/warning for this.

18. Generate all "case ... => ..." for a match to a sealed class.


- I just noticed that calling "Override methods" shows a # before type names, e.g. #Boolean. Looks weird

- I also noticed that the decompiled code includes "extends java.lang.Object", e.g. in

package net.liftweb.mapper
trait LongKeyedMapper[OwnerType >: scala.Nothing <: net.liftweb.mapper.LongKeyedMapper[OwnerType]] extends java.lang.Object with net.liftweb.mapper.KeyedMapper[scala.Long, OwnerType] with net.liftweb.mapper.BaseLongKeyedMapper{

And I don't know enough Scala yet to know if "OwnerType >: scala.Nothing <: net.liftweb.mapper.LongKeyedMapper" is valid. Looks strange to me, though


Thanks a lot for so big and dense list of features. I've printed it out and picked on a wall near my workplace.
Honestly speaking, implicit parameters/conversions are not implemented yet and we're working on them, but beyong all doubt it's a inexhaustible source of various hints and refactorings.

With best regards,


The scala plugin is working very well for me so far.  The next feature that will help me the most is to have Ctrl-P parameter information for constructors (both scala + java).  Is this in the works?

Thanks very much,
Sam Reid


It was added recently (also as "update" method). It will be in next release.

Best regards,
Alexander Podkhalyuzin.


It's been more than a month since the last deploy of the Scala plugin for IntelliJ, and it looks like the new plugin will have several nice features (see above).  Any idea when you'll deploy another build of the plugin?

Sam Reid


It will be tomorrow.
Sorry for so long delay.

Best regards,
Alexander Podkhalyuzin.


That was yesterday, right? Is there an updated ETA?



Alexander posted a revised ETA at the top of this thread: http://plugins.intellij.net/plugin/?id=1347


Well, he beat the new ETA. The new plug-in is on the server now. I just installed and restarted. So far I see new iconography. Was quick-documentation lookup there before? It is now.

It would be nice if http://www.jetbrains.net/confluence/display/SCA/Scala+Plugin+for+IntelliJ+IDEA were updated.

Randall Schulz


Yep, documentation will be updated.
Quick documentation lookup was before.

Whats new (more info will be added to documentation page):
1) ScalaTest run configuration (with not important exception, which will be fixed in next IDEA EAP).
2) liftweb application run configuration
3) Parameter lookup now work much better (with constructors and update methods).
4) Autoimports now work much better (without fails in most cases)
5) type system work bit better (inferring isInstanceOf, asInstanceOf, some cases with expected type, generic calls etc)
6) Folding by default options.
7) Decompiler improvements (now it's bundled in scala compiler 2.8.0)
8) Highlighting improvements
9) Some work under visibility access (just for autoimports now)

Most of this - little things, but I hope it can simplify work with scala.

Best regards,
Alexander Podkhalyuzin.


Thanks for posting this scala plugin update.  It's working very well.

Sam Reid