[Monodevelop-devel] Brainstorming for 2.4 code quality
Christian Hergert
chris at dronelabs.com
Thu Sep 3 16:58:20 EDT 2009
I kept a few notes while implementing portions of the PyBinding. These
are in their raw form but I figured I'd attach them for the sake of
having the information somewhere.
Some things also may have been fixed since I wrote these. Please do not
take any offense to any of the wording if my comments are on code you've
written, all in all it was a quite pleasant experience :-)
-- Christian
Reusable REPL
=============
We need a reusable REPL that languages can extend. Perhaps the guts
from the "csharp>" REPL can be extracted and re-used. Bonus points if
it can render using a modified Mono.TextEditor for highlighting.
Language Bindings
=================
I'm not convinced that the language binding class is even needed. All
it seems to do is aggregate different pieces together. It also doesn't
provide a compeling way for multiple language bindings to implement the
same feature. This may become an issue for an IronPython versus CPython
addin.
Workspace
=========
Michael mentioned that having the "Gimp" style interface would be nice
on OS X. I agree. I also think it would be nice on Linux. I much
prefer the layout as long as the toolbars are "sticky" to the top of my
screen.
Docking Panels
==============
This are *very* buggy in their current state. We need a bug love day
focused on these since they are so critical to daily use.
Refactoring
===========
XXX: Add information
Editor Extensions
=================
Custom extensions for indentation control don't seem to have a well
defined model for implementation. This may simply be a documentation
problem.
Code Completion
===============
ProjectDom is highly .NET centric. PyBinding conforms to this for in
file parsing since it gives us persistence "for free". But this is not
suitable for indexing the system packages. I would like this to be
easily re-usable for writing other add-ins such as JavaScript, Ruby, or
even SQL.
Currently, it is very tough to map python language concepts to things
like IType, IMember, and such. Even when conforming to that, features
like tooltips are bound to using words like "Namespace" rather than
"Module" or "Package".
I'd really like to be able to re-use the parser database rather than
managing my own with sqlite.
It might be nice to use compression within the database by default. All
the information on the subject I've seen recently shows faster query
times due to reduced I/O. However, I haven't looked to seef if this is
done already.
Mime Type's and Settings
========================
I need a way of specifying the default settings for a mime-type. I'm
sure pretty much all non-c# languages need this.
Appearance
==========
Far too much of the UI window is wasted for non-coding. The
double-click tab feature is nice, but tabs themself are quite large.
I'm quite aware this is caused by common gtk+ widget themes and icons
included in buttons.
However, I think it is a worthwhile effort to see how we can work around
it. A solid default pixmap theme could make things quite attactive.
For example, QtCreator[1] is quite attactive on various platforms.
Documentation
=============
MonoDoc is possibly the worst documentation system I've ever used. I
suggest we abandon it as an external dependency and build something in
process. It should support:
* .NET and non-.NET languages.
* Indexing and Full-text like MonoDoc does.
* Cross-referencing of documentation between languages so GtkWidget in
C documentation can link to gtk.Widget python docs and Gtk.Widget
.NET documentation.
* Generated HTML documentation for viewing and ability to export to
static files.
* Add comments or update documentation. This could be pushed to a
collaborative system that mono/monodevelop could host for comments.
That way, we continue to get the benefit of crowd-sourcing.
Collaboration
=============
We need a bugzilla add-in that can hook with version control system.
When I include a commit message that says "Fixes #123123" I expect it to
send the patch to bugzilla and close the bug.
Build System
============
I find the build system to be a PITA to work with. I personally build
from command line most of the time. I don't understand why we need
configure scripts for various individual projects and such. I certainly
don't mind the change to xbuild; it just needs to work.
We have svn, do we really need ChangeLog's anymore? They waste space
and add one more layer of duplication of content. We should simply
generate a master ChangeLog during "make dist" or similar.
MonoDevelop Shell
=================
In Visual Studio and Eclipse fashion, it's time that the shell itself
become re-usable and re-distributable. It would be nice if I was able
to build a self contained PyBinding application that included only what
it needed from MonoDevelop.
[1] http://qt.nokia.com/products/developer-tools/developer-tools
More information about the Monodevelop-devel-list
mailing list