From: Nikolai Weibull Date: 2003-10-11T02:25:17+09:00 Subject: Re: Project suggestion: Ruby code indenter * Gavin Sinclair [Oct, 10 2003 18:20]: > I was meaning to mention this anyway, but now I can't resist. I think > a great project for someone to work on - someone who really really > wants to work on a project but isn't sure what :) - is a Ruby code > indenter. > > Input: > Ruby code > > Output: > Properly indented Ruby code, perhaps accounting for user preferences > > Motivation: > Ruby is a hard language to programatically indent, for reasons that > will become obvious if this thread goes anywhere. Attempts to > provide support for this in Vim and Emacs are progressing, but are > hampered by languages which are not really suited to the task > (please prove me wrong). I'd love to prove you wrong. I have, however, as you, discovered that it is a bitch to indent Ruby programatically. It's syntax is simply too general. There is such overloading of so many tokens that it's hard to get every case right, while maintaining compatibility with other cases. For every case you fix, you'll have to check that it doesn't affect any of the other ones. Anyway, it would be an interesting project. If I'm any judge, Perl 6 would make this very much easier to do. However, it should be generally possible in any language. I'd assume Ruby would fit the task quite well actually. The hard part is, of course, keeping track of all the cases. However, it is quite well specified what may exists where, and in many ways it is also easier to manage than a language such as C. Also, the coding standards of Ruby are quite well defined as well, and almost everyone seems to stick to them rather passionately, so this makes things easier. I can't promise that I'll take a look this personally, since I'll be rather busy with other things in a near future. I will, however, try to improve the Vim indenter to the best of my ability. By the way, if you read this and you use Vim, please check out the Vim/Ruby project at http://rubyforge.org/projects/vim-ruby/ and try out all the latest features. Much work has been done since the 6.2 release, and it needs a good test-run. > > If a general-purpose program were provided, it would offer a > solution to any editor and for standalone use, as well as inspiring > greater agility in the existing editor plugins. It would not render > such plugins obsolete, rather provide a backup for the tasks they do > not easily do (indent entire file, accounting for prefs, comments, > here-docs, etc.). like indent(1) you mean? I rarely run indent, but if I was ever to alter other people's code, I'd probably run it through indent(1) before running it through Vim's. > > Comments: > A Ruby implementation could take advantage of irb code, just like > RDoc does. Understanding Ruby code, as opposed to reading a text > stream, makes indentation much easier. > > There's no way I have time to work on this; just throwing it out > there in case it catches someone's fancy. > > >> Because [Emacs is] general, people have written lots of stuff, some > >> of which is quite silly (tetris, web browser, etc.), > > ...on the rare occasions I play Tetris, it's as a Vim plugin :) > Search www.vim.org if you're interested. I like the one that comes with Zsh better :-D, niklai -- ::: name: Nikolai Weibull :: aliases: pcp / lone-star / aka ::: ::: born: Chicago, IL USA :: loc atm: Gothenburg, Sweden ::: ::: page: www.pcppopper.org :: fun atm: gf,lps,ruby,lisp,war3 ::: main(){printf(&linux["\021%six\012\0"],(linux)["have"]+"fun"-97);}