Skip to content

Function List plugin

A filterable outline of the current document's symbols — functions, classes, methods, headings and more — in a dockable side panel. Activate a symbol to jump the editor caret straight to it.

Where to find it

View ▸ Function List opens the dock (it starts hidden). The list refreshes as you type and follows the active tab.

Using the list

  • Jump to a symbol — double-click an entry, or select it and press Enter. The editor scrolls to the symbol, unfolding it if it sits inside a collapsed fold, and places the caret there.
  • Filter — type in the box at the top to narrow the list by name (case-insensitive). In tree mode, a parent stays visible when any of its children match.
  • Follow the caret — as you move around the document, the symbol that encloses the caret is highlighted in the list.

View options

The button (next to the filter box) opens the view menu:

Option Effect
Show as Tree Nest members under their container (methods under a class, a class under its namespace). Turn it off for a flat list.
Sort by Position Document order (default).
Sort by Name Alphabetical (case-insensitive).
Sort by Kind Group by symbol kind (classes, functions, …), then by name.

Your choices are remembered across sessions.

Where the outline comes from

The dock draws symbols from one of two sources, shown in the footer at the bottom of the panel:

  • Source: language server — when a language server is configured for the file's language, the dock uses its symbols. This is the accurate, complete outline (member variables, precise class → method nesting, every symbol kind the server reports).
  • Source: patterns — otherwise, the dock falls back to the built-in pattern rules described below.

You don't configure this: the pattern-based outline appears instantly, and if a language server answers it is used automatically. A language that has a server but no bundled patterns still gets an outline (from the server).

Supported languages

The pattern rules produce an outline without any language server (and are the fallback when one is not available):

Language Symbols recognised
C / C++ namespaces, classes, structs, enums, #defines, functions
Python classes, functions/methods (def, async def)
JavaScript / TypeScript classes, functions, arrow-function constants, class methods
Markdown headings (#######)

The list reflects the language the editor has applied to the file (its syntax colouring). Files of other types show "No symbol outline for this file type."

Patterns are approximate

The pattern-based outline (Source: patterns) is a best effort, not a full parser: for example, a free function written after a class body may be shown nested under that class. For a precise outline, configure a language server for the language — the dock then shows its symbols (Source: language server).

Custom rulesets

The rulesets are plain JSON files, so you can tweak them or add languages without rebuilding. The bundled set ships next to the application in a function-list/ folder (one *.json per ruleset); those files are overwritten on update, so treat them as read-only examples.

To customise, drop your own *.json into the rulesets/ subfolder of the Function List plugin's data directory. A user file whose languageIds includes a language overrides the bundled ruleset for that language.

A ruleset file looks like:

{
    "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" }
    ]
}
Field Meaning
languageIds One or more editor language ids the ruleset applies to (e.g. cpp, python). One file can serve several.
caseSensitive Whether the patterns match case-sensitively (default true).
rules Ordered list of rules; the first rule that matches a line wins, one symbol per line.
rules[].pattern An ECMAScript regular expression matched against a single line.
rules[].nameGroup The capture group holding the symbol name (default 1).
rules[].kind The symbol kind — a name (class, struct, enum, namespace, function, method, constant, string, …) or an LSP SymbolKind number. Controls grouping/sorting.
rules[].containerGroup Optional capture group used as the symbol's container detail (0 = none).