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.
Difference between revisions of "PDT/Dev2Dev/Semantic"
(→UI) |
|||
(7 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | == Semantic Highlighting == | + | == Semantic Highlighting == |
− | === Overview === | + | === Overview === |
− | + | ||
− | The latest version of the patch is available at [https://bugs.eclipse.org/ | + | Following the improvements done by the Web tools project ([https://bugs.eclipse.org/232752 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: | ||
+ | |||
+ | [[Image:Pdt semantic editor.png]] | ||
+ | |||
+ | The latest version of the patch is available at [https://bugs.eclipse.org/271430 271430]. | ||
=== API === | === API === | ||
Line 19: | Line 24: | ||
</source> | </source> | ||
− | The given class must extend ''org.eclipse.php.internal.ui.editor.highlighter''. <source lang="java"> | + | The given class must extend ''org.eclipse.php.internal.ui.editor.highlighter.AbstractSemanticHighlighting''. <source lang="java"> |
public class ParameterVariableHighlighting extends AbstractSemanticHighlighting { | public class ParameterVariableHighlighting extends AbstractSemanticHighlighting { | ||
Line 44: | Line 49: | ||
</source> | </source> | ||
− | === UI === | + | The AbstractSemanticApply is simple visitor of PHP AST model. Once a node to be colored is matched, it can be added to the semantic coloring using the ''highlight'' method. <source lang="java"> |
+ | protected class InterfaceApply extends AbstractSemanticApply { | ||
+ | |||
+ | @Override | ||
+ | public boolean visit(ClassDeclaration classDecl) { | ||
+ | for (Identifier type: classDecl.interfaces()) { | ||
+ | highlight(type); | ||
+ | } | ||
+ | return true; | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public boolean visit(InterfaceDeclaration interfaceDecl) { | ||
+ | highlight(interfaceDecl.getName()); | ||
+ | for (Identifier type: classDecl.interfaces()) { | ||
+ | highlight(type); | ||
+ | } | ||
+ | return true; | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | <br> The following table describes the semantic rules that have been implemented so far and their default style. | ||
+ | |||
+ | <br> | ||
+ | |||
+ | {| cellspacing="1" cellpadding="1" border="1" style="width: 622px; height: 338px;" | ||
+ | |- | ||
+ | | '''Rule<br>''' | ||
+ | | '''Default Style<br>''' | ||
+ | | '''Enabled by default'''<br> | ||
+ | |- | ||
+ | | Constants<br> | ||
+ | | Bold<br> | ||
+ | | True<br> | ||
+ | |- | ||
+ | | Field<br> | ||
+ | | <br> | ||
+ | | False<br> | ||
+ | |- | ||
+ | | Function<br> | ||
+ | | <br> | ||
+ | | False<br> | ||
+ | |- | ||
+ | | Internal Function<br> | ||
+ | | Blue<br> | ||
+ | | True<br> | ||
+ | |- | ||
+ | | Global Variable<br> | ||
+ | | Blue<br> | ||
+ | | True<br> | ||
+ | |- | ||
+ | | Local variable<br> | ||
+ | | <br> | ||
+ | | False<br> | ||
+ | |- | ||
+ | | Method<br> | ||
+ | | <br> | ||
+ | | False<br> | ||
+ | |- | ||
+ | | Static Field<br> | ||
+ | | Italic<br> | ||
+ | | True<br> | ||
+ | |- | ||
+ | | Static Method<br> | ||
+ | | <br> | ||
+ | | False<br> | ||
+ | |- | ||
+ | | Classes<br> | ||
+ | | Blue<br> | ||
+ | | True<br> | ||
+ | |- | ||
+ | | Internal Classes<br> | ||
+ | | Blue<br> | ||
+ | | True<br> | ||
+ | |- | ||
+ | | Internal Interfaces<br> | ||
+ | | Blue<br> | ||
+ | | True<br> | ||
+ | |- | ||
+ | | Interfaces<br> | ||
+ | | <br> | ||
+ | | False<br> | ||
+ | |- | ||
+ | | Parameter Variables<br> | ||
+ | | Underline<br> | ||
+ | | True<br> | ||
+ | |- | ||
+ | | Super Globales<br> | ||
+ | | Light blue<br> | ||
+ | | True<br> | ||
+ | |} | ||
+ | |||
+ | <br> | ||
+ | |||
+ | === UI === | ||
+ | |||
+ | The rules are automatically added to the Syntax Coloring preference page: | ||
− | + | [[Image:Pdt semantic preferences.png]] | |
− | + | === Performances === | |
− | |||
Work in progress... | Work in progress... |
Latest revision as of 05:50, 26 August 2009
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:
The latest version of the patch is available at 271430.
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>
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"; } }
@HighlightingPriority(Priority.HIGH) public class InternalClassHighlighting extends AbstractSemanticHighlighting {
protected class InterfaceApply extends AbstractSemanticApply { @Override public boolean visit(ClassDeclaration classDecl) { for (Identifier type: classDecl.interfaces()) { highlight(type); } return true; } @Override public boolean visit(InterfaceDeclaration interfaceDecl) { highlight(interfaceDecl.getName()); for (Identifier type: classDecl.interfaces()) { highlight(type); } return true; } }
The following table describes the semantic rules that have been implemented so far and their default style.
Rule |
Default Style |
Enabled by default |
Constants |
Bold |
True |
Field |
|
False |
Function |
|
False |
Internal Function |
Blue |
True |
Global Variable |
Blue |
True |
Local variable |
|
False |
Method |
|
False |
Static Field |
Italic |
True |
Static Method |
|
False |
Classes |
Blue |
True |
Internal Classes |
Blue |
True |
Internal Interfaces |
Blue |
True |
Interfaces |
|
False |
Parameter Variables |
Underline |
True |
Super Globales |
Light blue |
True |
UI
The rules are automatically added to the Syntax Coloring preference page:
Performances
Work in progress...