Here we collect what we want to do in the upcoming development (Helios) for Xtext.
- 1 Clean ups
- 2 New Features
We need to improve our build infrastructure as well as the general workspace setup. Some requirements:
- use a dedicated target platform
- be able to do a local build
It would be quite nice to have a sort of deferred commit: The data is send to the integration server, it compiles everything and executes the test and refuses the commit if something fails. Otherwise the patch is finally committed to the version control system.
We should come up with a minimal set of style guidelines and conventions to minimize the necessary effort to merge changes and understand code. Ideally, we should try to stick to Eclipse defaults as much as possible, as this minimized configuration efforts. We should use project specific settings wherever applicable to minimize the risk of the I-forgot-to-import-some-settings-scenario. This includes
- code style,
- save participants,
- compiler warnings,
- organize imports and
- pde settings.
- Review the Scoping API. We should provide a sort of IScopeExtension with methods like #getElement(String):IScopedElement and #getElement(EObject):IScopedElement. This allows more sophisticated implementations of the API.
- Review the Highlighting API: Merge the *Configuration-Interfaces.
- Review the implementation of the Classpath URI. Try to find a solution, that allows this kind of URI even in other ResourceSet implementations. Maybe consider deprecating the classpath scheme and replace it with a functionally equal implementation based on the index.
The linking of the grammar should be reviewed and updated to reflect the latest changes in the API and to be a better example on how to use the different available APIs. Furthermore there are still some possible links, that are currently plain strings.
Move as much as possible from org.eclipse.xtext into org.eclipse.xtext.xtext (similar to org.eclipse.xtext.xtext.ui). Merge org.eclipse.xtext.ui.core and org.eclipse.xtext.ui.common into org.eclipse.xtext.ui as the difference between both plugins is somewhat indistinct.
- delete no longer used projects from repository
- delete dead resources from workspace (e.g. check files and the like)
- remove Xtend-based scoping and code completion API
Third party libs
Update the used libraries:
- Guice2: Multibinding support
- Google Collections 1.0: We currently use v 0.8 alpha. The API has changed significantly and we should update to 1.0.
- ANTLR 3.1.x: A bunch of fixes and new features has been incorporated into ANTLR 3.1. Especially the support for grammar imports seems to be interesting.
Introduce DSLs for some of the stable viewpoints of Xtext.
- should extend one basic expression language (something like )
- EMFatic (incl. behavior)
Migrate to upcoming EMF Index changes
- Query Builder
- API / SPI separation
- automatic revalidation if referenced resources have changed
- refactoring of validation so that
- in the reconciler no markers (just annotations are set)
- on save markers are set using a builder
- on save of referenced resources markers are set using a corresponding index hook
- Formatting API that allows to define rules depending on the current state of your model.
- Allow tracing / impact analysis to implement partial linking, validation etc.
- Introduce an official API that allows to define default values of the semantic model. (maybe through above's EMFatic DSL)
- AutoEdit: This would greatly improve the user experience and help to minimize the on-type-changes in the semantic model. Without autoedit, the model becomes totally corrupt when the user tries to write a STRING literal, because everything behind the opening quotes will be consumend as a STRING. In almost any case this is not the intention of the user. Autoedit would insert a matching closing quote after to opening quote and the model will remain much more stable. Btw: Autoedit is not the right term here. JDT implemented this with a VerifyKeyListener (see org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.BracketInserter).
- Quick fixes, QuickAssist-API
- Advanced Navigation / Hyperlinking API: Find References, allow to define references by convention, etc.
- Highlighting: Allow to merge different highlighting styles that have been applied to the very same region of the model file.
- a general API that allows to define arbitrary views for model elements (comparable to viewpoints in the Outline)
- View points in the Outline
- Hook for tooltips: users might want to display additional information when the mouse hovers over a reference, e.g. they might want to see the rafeerenced element's documentation. We should provide a hook for feeding this information.
- Enhance "New Xtext Project" wizard: let user choose among various examples (see PDE New Project wizard to see this in action)
- Add "New DSL Project" wizard to generated DSL, supply hooks for customization
- rename refactoring
- delete (model element / model file) refactoring - notifies the user if there are any references to the element / file
- Terminal fragments: Reusable elements in terminal rules, that are not globally visible (see ANTLR Fragments)
- Aspects in production rules: Reuse different aspects of the grammar across various parser rules. One may think of infered EObjects that implement different interfaces such as Named, Documentable or FooContainer or BarReference. (You may call it a fragment).
- Allow a notation to call the super-definition of a overridden parser rule.
- Allow to define the default of an EEnum (even with an empty literal representation).
- Try to generate named opposite references for eContainer.
- add support for semantic predicates
- add support for syntactic predicates
- allow mixin of multiple grammars
Xtext Grammar Editor
- Tabbed Editor that visualizes the generated EPackages on other tabs. Maybe we should use other views for this aspect.
- Syntax diagram view (see http://weblogs.java.net/blog/cayhorstmann/archive/2006/07/railroad_diagra.html, http://en.wikipedia.org/wiki/Syntax_diagram and http://www.antlr.org/works/screenshots/ambiguouspath.jpg)
- Provide more validation
- Provide more semantic highlighting
- Polymorphic Dispatcher
- Provide tool support for polymorphic dispatching. The Annotation Processing Tools (APT) allow an integration into the JDT and into Suns Java compiler.
Debug-support for to Java compiled languages
If one had the trace from the Java Code back to the model, it might be possible to hook JDT's debugger in order to shoe the model instead of the java code during debugging. Also it would be nice if we could come up with suitable abstractions over what is shown in the variables view then.