Zum Inhalt

Function-List-Plugin

Eine filterbare Gliederung der Symbole des aktuellen Dokuments — Funktionen, Klassen, Methoden, Überschriften und mehr — in einem andockbaren Seitenpanel. Aktivieren Sie ein Symbol, um die Einfügemarke des Editors direkt dorthin springen zu lassen.

Wo zu finden

Ansicht ▸ Funktionsliste öffnet das Dock (es startet ausgeblendet). Die Liste aktualisiert sich beim Tippen und folgt dem aktiven Tab.

Die Liste verwenden

  • Zu einem Symbol springen — doppelklicken Sie auf einen Eintrag oder wählen Sie ihn aus und drücken Sie Enter. Der Editor scrollt zum Symbol, klappt es auf, falls es in einer eingeklappten Faltung liegt, und setzt die Einfügemarke dorthin.
  • Filtern — tippen Sie in das Feld oben, um die Liste nach Namen einzugrenzen (ohne Beachtung der Groß-/Kleinschreibung). Im Baummodus bleibt ein Elternelement sichtbar, wenn eines seiner Kinder passt.
  • Der Einfügemarke folgen — während Sie sich im Dokument bewegen, wird das Symbol, das die Einfügemarke umschließt, in der Liste hervorgehoben.

Ansichtsoptionen

Die Schaltfläche (neben dem Filterfeld) öffnet das Ansichtsmenü:

Option Wirkung
Als Baum anzeigen Mitglieder unter ihrem Container verschachteln (Methoden unter einer Klasse, eine Klasse unter ihrem Namespace). Deaktivieren für eine flache Liste.
Nach Position sortieren Dokumentreihenfolge (Standard).
Nach Name sortieren Alphabetisch (ohne Beachtung der Groß-/Kleinschreibung).
Nach Art sortieren Nach Symbolart gruppieren (Klassen, Funktionen, …), dann nach Name.

Ihre Auswahl wird über Sitzungen hinweg gemerkt.

Woher die Gliederung stammt

Das Dock bezieht Symbole aus einer von zwei Quellen, angezeigt in der Fußzeile unten im Panel:

  • Quelle: Sprachserver — wenn ein Language Server für die Sprache der Datei konfiguriert ist, verwendet das Dock dessen Symbole. Das ist die genaue, vollständige Gliederung (Membervariablen, präzise Verschachtelung Klasse → Methode, jede vom Server gemeldete Symbolart).
  • Quelle: Muster — andernfalls fällt das Dock auf die unten beschriebenen eingebauten Musterregeln zurück.

Sie konfigurieren dies nicht selbst: Die musterbasierte Gliederung erscheint sofort, und sobald ein Language Server antwortet, wird er automatisch verwendet. Eine Sprache mit Server, aber ohne mitgelieferte Muster, erhält trotzdem eine Gliederung (vom Server).

Unterstützte Sprachen

Die Musterregeln erzeugen eine Gliederung ohne Language Server (und sind der Rückfall, wenn keiner verfügbar ist):

Sprache Erkannte Symbole
C / C++ Namespaces, Klassen, Structs, Enums, #defines, Funktionen
Python Klassen, Funktionen/Methoden (def, async def)
JavaScript / TypeScript Klassen, Funktionen, Arrow-Function-Konstanten, Klassenmethoden
Markdown Überschriften (#######)

Die Liste richtet sich nach der Sprache, die der Editor auf die Datei angewendet hat (ihrer Syntaxhervorhebung). Dateien anderer Typen zeigen „Keine Symbolübersicht für diesen Dateityp“.

Muster sind Näherungen

Die musterbasierte Gliederung (Quelle: Muster) ist eine bestmögliche Annäherung, kein vollständiger Parser: Beispielsweise kann eine freie Funktion nach einem Klassenkörper als unter dieser Klasse verschachtelt angezeigt werden. Für eine präzise Gliederung konfigurieren Sie einen Language Server für die Sprache — das Dock zeigt dann dessen Symbole (Quelle: Sprachserver).

Eigene Regelsätze

Die Regelsätze sind einfache JSON-Dateien, sodass Sie sie anpassen oder Sprachen hinzufügen können, ohne neu zu bauen. Der mitgelieferte Satz liegt neben der Anwendung in einem Ordner function-list/ (eine *.json pro Regelsatz); diese Dateien werden bei Updates überschrieben, behandeln Sie sie also als schreibgeschützte Beispiele.

Zum Anpassen legen Sie Ihre eigene *.json im Unterordner rulesets/ des Datenverzeichnisses des Function-List-Plugins ab. Eine Benutzerdatei, deren languageIds eine Sprache enthält, übersteuert den mitgelieferten Regelsatz für diese Sprache.

Eine Regelsatzdatei sieht so aus:

{
    "languageIds": ["cpp", "c"],
    "caseSensitive": true,
    "rules": [
        { "pattern": "^\\s*class\\s+([A-Za-z_]\\w*)", "kind": "class" },
        { "pattern": "^\\s*(?:async\\s+)?def\\s+([A-Za-z_]\\w*)", "kind": "function" }
    ]
}
Feld Bedeutung
languageIds Eine oder mehrere Editor-Sprach-IDs, für die der Regelsatz gilt (z. B. cpp, python). Eine Datei kann mehrere bedienen.
caseSensitive Ob die Muster unter Beachtung der Groß-/Kleinschreibung greifen (Standard true).
rules Geordnete Liste der Regeln; die erste auf eine Zeile passende Regel gewinnt, ein Symbol pro Zeile.
rules[].pattern Ein regulärer ECMAScript-Ausdruck, der gegen eine einzelne Zeile geprüft wird.
rules[].nameGroup Die Erfassungsgruppe mit dem Symbolnamen (Standard 1).
rules[].kind Die Symbolart — ein Name (class, struct, enum, namespace, function, method, constant, string, …) oder eine LSP-SymbolKind-Nummer. Steuert Gruppierung/Sortierung.
rules[].containerGroup Optionale Erfassungsgruppe als Container-Angabe des Symbols (0 = keine).