Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

PDT/Dev2Dev/Semantic

< PDT
Revision as of 18:45, 25 August 2009 by Wcandillon.gmail.com (Talk | contribs) (Overview)

Semantic Highlighting

Overview

Following the improvements done by the Web tools project (232752) on semantic highlighting, the PHP Source Editor can now set semantic rules for better coloring techniques that will improve its performance and functionality. For example, currently, all variables are highlighted in the same color. Although members / static / constants variables should be colored in separate colors just like the Java editor does.

The following screenshot demonstrate the power of the semantic coloring:

Pdt semantic editor.png

The latest version of the patch is available at [1].

API

The PHP semantic highlighting API is used to define semantic rules for PHP coloring. It's also useful for plugin developpers who would like to extends PHP highlighting with specific semantic rules.

The first step is to use the org.eclipse.wst.sse.ui.semanticHighlighting extension point with the org.eclipse.php.core.phpsource target. By using the PHP source target, PHP UI plugin is automatically registering this contributor as a semantic highlighter.
<extension point="org.eclipse.wst.sse.ui.semanticHighlighting">
  <highlighting
    class="org.eclipse.php.internal.ui.editor.highlighting.ParameterVariableHighlighting"
    target="org.eclipse.php.core.phpsource">
  </highlighting>
</extension>
The given class must extend org.eclipse.php.internal.ui.editor.highlighter.
public class ParameterVariableHighlighting extends AbstractSemanticHighlighting {
 
  @Override
  public AbstractSemanticApply getSemanticApply() {
    return new ParameterVariableApply();
  }
 
  @Override
  public void initDefaultPreferences() {
    getStyle().setUnderlineByDefault(true)
              .setDefaultTextColor(new RGB(102, 0, 0));
  }
 
  public String getDisplayName() {
    return "Local variables";
  }
}
Since some rules might be conflicting between each other, you can define the priority rules. For instance, the InternalClassHighlighting rule has to override the ClassHighlighting rule. You can use the @HighlightingPriority annotation to define the application order of the semantic rules.
@HighlightingPriority(Priority.HIGH)
public class InternalClassHighlighting extends AbstractSemanticHighlighting {

UI

The rules are automatically added to the Syntax Coloring preference page:

Pdt semantic preferences.png

Performances

Work in progress...

Back to the top