Tor Norbye's Weblog
"Creator" on this page refers to Sun Java Studio Creator.
« Ruby Screenshot of... | Main | Ruby Screenshot of... »

20070711 Wednesday July 11, 2007

Progress

I apologize for not blogging in several weeks. A number of factors have contributed; in addition to coming down with a cold, we've had a short vacation, and perhaps most importantly, I've been working on some things that aren't very glamorous to blog about.

In particular, stabilization. I rewrote the way indentation is computed, so it should be working pretty well now. One of my unit tests takes all the Ruby files in the Ruby lib distribution as well as all the Rails files, formats them and verifies that the results look okay. Various bugs have in the past caused the formatting to skew off to the right or left if the IDE didn't properly interpret the code correctly. But it's now handling nearly all 1500 files correctly. (I say nearly because I've had to exclude a couple of files that trigger a lexing bug. Unfortunately, it's a bug outside my area and the responsible engineer is on vacation - that's July for you - but it should hopefully get addressed soon. There are some other bugs in the same situation. Thank you for your patience if you're one of the daily-build-downloaders... Give us a couple of more weeks).

I've also manually inspected the diffs for some of the largest source files - date.rb, resolv.rb etc. - and not only does the new NetBeans formatting avoid mangling the source file - it produces nearly identical results to the manually formatted sources! In both files only 10-15 lines differed, and these mostly because there's no clear agreed upon convention on how far a "hanging indent" should go.

In any case, please give it a try and let me know how it works. Smart-indent (indenting the caret when you press Return) is also using the new algorithm, so writing code like

   foo =
and pressing return should now do what you expect - it will indent further in on the next line - and if you type a statement there which completes the assignment and press return, indentation is back out to the top level.

Another area I've been tweaking is handling heredocs properly. This was really challenging. Ruby allows you to write "references" to a String (which you will start defining on the next line) and then continue writing your expression. The expression then continues AFTER the string has been completed. Here's a screenshot which shows this in action:

As you can see, the method call I'm writing starts on the first line, and finishes on the last line; there are three literal strings passed to the function, and two of them are defined as heredocs (<<).

This is mostly working now (except for some incremental lexing bugs I'll get to later). I also fixed it such that matching tag highlighting (and navigation) works for heredoc markers.

Meanwhile, I haven't only been bug fixing. More on that in my next blog entry, hopefully within the next day or two....

Oh, and one more quick thing: With the latest builds, in your RHTML files, you can now control click on render :partial's, link_to etc. and it will warp to the corresponding files - RHTML partials, controller files, actions, etc.

Here's clicking on a render partial:

Here's clicking on a controller. (Even though the hyperlink only shows the controller part as the link, the Go To Declaration handler is actually looking at the parse tree and finds the :action definition too such that it can jump to the actual action in that controller.

(2007-07-11 00:14:36.0) Permalink Comments [7]

Comments:

New indentation system works great in most cases but I found one case where is does not acts as I like.

Sample :

@foo = [
  'bar',
  'bar2',
  'bar3'
]

Posted by François Simond on July 11, 2007 at 03:47 AM PDT #

Nice. I like to use IDE formatting quite heavily, so I look forward to trying this.

Do the :partial links work for templates with an 'absolute' reference? I tried using a previous build and something like 'candidate/jobs/job' wasn't being found.

Posted by Si on July 11, 2007 at 03:56 AM PDT #

Oops, sorry I posted my previous comment instead of previewing it. Current Netbeans indent this sample like that :
@foo = [
  'bar',
    'bar2',
    'bar3'
]
About the Task List, there is now a nice "ToDo Tasks" tab in options. Is this feature still inactive ?

Posted by François Simond on July 11, 2007 at 04:01 AM PDT #

Looks like it's not finding any of my partials actually. Perhaps it's related to me using .html.erb partials?

Posted by Si on July 11, 2007 at 04:02 AM PDT #

Having the same trouble with build 2876, so filed issues 109363 and 109364.

Posted by Si on July 11, 2007 at 06:05 AM PDT #

Hi François, thank you for your report - I've fixed this; you can grab the fix in build #2886 (or later). I've updated various unit tests too.

Simon, thanks - I've fixed handling of .html.erb (your first issue) - appears in build #2887. I have some questions on the absolute paths issue but I'll follow up through the bug tracking system.

Posted by Tor Norbye on July 11, 2007 at 09:16 AM PDT #

Thank you Tor, the array indentation is perfect now ! :)

I've found two potential indentation issue.
belongs_to :commentable,
  :polymorphic => true,
  :counter_cache => true
is reformatted to :
belongs_to :commentable,
:polymorphic => true,
:counter_cache => true
and
%w( 
  foo 
  bar
  bar2
  bar3
)
that cannot be reformatted and is not colourized correctly.

Posted by François Simond on July 11, 2007 at 10:51 AM PDT #

Post a Comment:

Comments are closed for this entry.