Arbeit mit Code-Snippets in Eclipse

Demonstrationsumgebung: Eclipse for RCP and RAP Developers, Version: Neon.3 Release (4.6.3)

Eclipse unterstützt die Arbeit mit Code-Snippets. Das Tutorial demonstriert, wie diese erstellt, verwendet, importiert und exportiert werden können.

Unter einem Snippet versteht man ein mehr oder weniger kleines Stück Quelltext, das selbst erstellt und zur einfachen Wiederverwertung gespeichert werden kann. Eclipse unterstützt das Speichern und Einfügen solcher Snippets in den Quelltext des Editorfensters. Das Speichern von Snippets kann hierbei auf drei unterschiedliche Weisen erfolgen.

Die Snippets-View

Die Snippets der Snippets-View werden für jeden Workspace separat in einem Plugin gespeichert.

Die Snippets-View kann durch Aufruf von Window → Show View → Other... → General → Snippets angezeigt werden.

Aufruf der Snippets-View
Menu-Aufruf der Snippets-View

Snippets werden in Kategorien zusammengefasst, die nach Wunsch benannt werden können. Das Anlegen von Unterkategorien ist jedoch leider nicht möglich.

Ansicht der Snippets-View

Durch Rechtsklick in die View kann ein Kontextmenu aufgerufen werden, das diverse Einstellungen bietet und das Kopieren, Ausschneiden und Einfügen eines Snippets ermöglicht. Soll ein gespeichertes Snippet verwendet werden, kann das Einfügen mit Hilfe des Menupunkts Insert... (1) oder durch Doppelklick auf den Snippet-Titel erfolgen. Hierbei wird das markierte Snippet an der Cursor-Position des aktiven Editors platziert. Paste as Snippet... bewirkt das Gegenteil: Der Menupunkt erzeugt ein neues Snippet des im Haupteditor markierten Bereichs.

Kontextmenu der Snippets-View

Unter Settings... (3) können das Verhalten und das Layout der View angepasst werden.

Der Dialog Settings... der Snippets-View

Customize... (2) erlaubt das Einfügen, Überarbeiten und Exportieren von Snippet-Einträgen, sowie deren Sortierung. Die Steuerung erfolgt hier über das Menu links oben:

  • Unter dem Button New verbirgt sich die Möglichkeit ein neues Snippet oder eine neue Kategorie anzulegen. Leider lassen sich Kategorien jedoch nicht schachteln.
  • Delete löscht Kategorien oder Snippeteinträge.
  • Mit Move Down und Move Up lassen sich Kategorien und Snippets sortieren.
  • Import ermöglicht den Import von im passenden XML-Format vorliegenden Snippets.
  • Export erlaubt den Export einzelner Kategorien, die hierzu selektiert werden müssen. Die Gesamtheit aller Snippets kann leider jedoch nicht auf einmal exportiert werden. Dies lässt sich nur durch Kopieren der originalen Speicherdatei realisieren (s.u.).
Der Dialog Customize... der Snippets-View

Portieren von Snippets

Da der Inhalt der Snippets-View an einen Workspace gebunden ist, muss er nach Erstellen eines neuen Workspace dorthin portiert werden, falls man die Snippets dort verwenden möchte. Das Eclipse GUI besitzt hierzu keine Möglichkeit. Die Snippets befinden sich in der Datei user.xml, die jedoch kopiert oder in einen neuen Workspace verschoben werden kann. Sie ist unter folgendem Pfad abgelegt:

WORKSPACE/.metadata/.plugins/org.eclipse.wst.common.snippets/user.xml

Zum Portieren wird die Datei einfach an den gleichen Ort des neuen Workspace kopiert und Eclipse im Anschluss neu gestartet.

Code Templates

Code Templates sind in Eclipse vordefinierte Code-Abschnitte, die, je nach Einstellung, während des Schreibens von Code in einem kleinen, Tooltip-artigen Fenster automatisch zur Auswahl erscheinen oder durch die Tastenkombination Ctrl + Space aufgerufen werden können. Durch Anklicken werden sie an der aktuellen Cursor-Position eingefügt. Um die Auswahl der Templates einzuschränken reicht es, die ersten Zeichen des gesuchten Templates zu tippen.

Die Templates können in den Eclipse-Einstellungen unter Java → Editor → Templates eingesehen und konfiguriert werden.
Das Beispiel verweist auf ein selbst erstelltes Template für die Erzeugung und Anfangskonfiguration eines JFrame mit dem Namen JFr.

Ein neues Template erstellt man unter New..., ein bestehendes editiert man mit Edit.... In beiden Fällen öffnet sich das gleiche Fenster mit den Template-Eigenschaften. Die folgenden Einträge können hier vorgenommen werden:

  • Name bezeichnet das Zeichenkürzel, mit dem das Template aufgerufen werden kann.
  • Unter Context wird der Gültigkeitsbereich eingetragen, unter dem das Kürzel zur Verfügung stehen soll. So kann das Template JFr wegen seines Java-Kontextes zwar in Java-Code-Zusammenhängen, nicht jedoch z.B. beim Editieren einer PHP-Datei verwendet werden. Dies ist unabhängig vom verwendeten Editor.
  • Wird Automatically insert aktiviert, so wird das Template automatisch an der Cursor-Position eingefügt, wenn er der einzige an dieser Stelle verfügbare Vorschlag ist.
  • Description bezeichnet eine Beschreibung, die beim Code-Vorschlag mit angezeigt wird.
  • Unter Pattern wird das eigentliche Template eingetragen. Dies ist reiner Java-Code, der jedoch durch Java Editor Template Variables ergänzt werden kann.
  • Unter Insert Variable... können diese Variablen ausgewählt werden. Sie dienen zum Eintrag dynamischer Daten, wie z.B. Zeit- und Datumsangaben, dem Dateinamen, dem Autorennamen oder der Cursor-Position nach Einfügen des Snippets. Im Beispiel wird z.B. durch die Zeile ${:import(javax.swing.JFrame)} bewirkt, dass zusätzlich zum eigentlichen Code eine Import-Anweisung für JFrame am Anfang der Datei hinzugefügt wird.

Im Quelltext kann durch Eingeben des Namens und der anschließenden Tastenkombination Ctrl + Space das Sippet aufgerufen werden. Stehen mehrere Auswahlen zur Verfügung, so kann die gewünschte mit den Pfeiltasten oder der Maus selektiert und mit Enter eingefügt werden.

Code Recommenders Snipmatch

Das Plugin Eclipse Code Recommenders ist seit Mars bei den gängigen Eclipse-Varianten vorinstalliert und dient dazu, während der Arbeit im Editor auf intelligente Weise passende Code-Vorschläge unterschiedlichster Art zu ermitteln und diese je nach Arbeitskontext zur Verfügung zu stellen.
Als Basis hierzu dient u.a. auch ein Git-basiertes Snippet-Repository, von dem Snippets abgerufen, aber auch selbst der Community zur Verfügung gestellt werden können.

Abfragen eines Snippets

Um einen Vorschlag abzufragen, öffnet man durch Ctrl + Alt + Space ein kleines grünliches Fenster, in das einige Zeichen des gewünschten Snippets eingegeben werden. Mit Hilfe der Pfeiltasten und Enter kann ein Vorschlag ausgewählt und an der aktuellen Cursorposition eingefügt werden. Die Eingabe muss für die Suche nicht den genauen Namen des Snippets darstellen, sondern kann ein Teilstück, ein Tag, Schlüsselwort oder ein Begriff aus der Beschreibung sein. Mehrere Begriffe können darüber hinaus mit AND oder OR verknüpft werden.

Hinzufügen eines Snippets

Möchte man ein eigenes Snippet hinzufügen, so ist dies durch Create Snippet... im Kontext-Menu möglich.

Es öffnet sich der Snippet-Editor, bei dem die notwendigen Angaben zum Snippet gemacht werden können. Das Fenster enthält zwei Registerkarten, eine für die Metadaten (1) und eine für den Quellcode des Snippets (2).

Die Metadaten umfassen die folgenden Angaben, von denen Name und Location obligatorisch sind:

  • Der Name des Snippets wie er im Vorschlag erscheinen soll.
  • Description ist eine Beschreibung, die durch ein '-' vom Namen getrennt, in der Vorschlagsliste eine kurze Angabe über die Funktion des Snippets macht.
  • Location bezeichnet den Gültigkeitsort eines Snippets. Für alle Angaben innerhalb von Java Code Blöcken kann hier java statement verwendet werden.
  • Die Einträge unter Filename Restrictions bewirken eine Einschränkung von Snippets, die mit dem Gültigkeitsort File gekennzeichnet sind auf die hier angegebenen Namen oder Extensionen. Besitzen mit File gekennzeichnete Snippets hier keinen Eintrag, so sind sie für alle Dateitypen gültig.
  • Unter Extra Search Terms kann eine Liste von Suchbegriffen angeführt werden, die außer dem Namen und der Beschreibung in die Suche mit einbezogen werden sollen.
  • Tags dienen zur logischen Gruppierung von Snippets.
  • Dependencies beschränken die Verwendung von Snippets auf Anwendungen, bei denen die angegebenen Abhängigkeiten im Classpath erfüllt sind.
  • UUID ist eine nicht editierbare ID des Snippets.

In die Registerkarte Raw Source (2) wird der Snippet-Quelltext eingetragen. Hier können bei Java-Snippets neben reinem Java Code auch Java Editor Template Variables angegeben werden, um dynamische Inhalte zu erzeugen.