Skip to main content
Jump to: navigation, search

Xtext/planning 0.8.0

Here we collect what we want to do in the upcoming development (Helios) for Xtext.

Clean ups

Build infrastructure

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.

Development Infrastructure

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

  • encoding,
  • 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 ValueConverter API: the method which turns Objects into strings should have the corresponding part of Node Model available, if such a part exists. This is needed to keep comments within Datatype-Rule-Values and it is helpful to keep the escaping of special characters (e.g. unicode) as it is.
  • 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.

Xtext Grammar

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.

Project structure

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.

General Cleanups

  • 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.

New Features

Introduce DSLs for some of the stable viewpoints of Xtext.

  • should extend one basic expression language (something like [1])
  • Validation/Quickfix
  • EMFatic (incl. behavior)
  • Scoping
  • Indexing

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

Runtime Features

  • 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)

UI Features

  • 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.
  • Wizards
    • Wizard-Framework
    • 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
  • Refactoring
    • rename refactoring
    • delete (model element / model file) refactoring - notifies the user if there are any references to the element / file

Xtext Grammar

  • 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

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.

Back to the top