Pular para conteúdo

Plugin Lista de funções

Uma estrutura filtrável dos símbolos do documento atual — funções, classes, métodos, títulos e mais — em um painel lateral acoplável. Ative um símbolo para levar o cursor do editor direto até ele.

Onde encontrá-lo

Exibir ▸ Lista de funções abre o painel (ele começa oculto). A lista se atualiza enquanto você digita e acompanha a aba ativa.

Usando a lista

  • Saltar para um símbolo — dê um duplo clique em uma entrada, ou selecione-a e pressione Enter. O editor rola até o símbolo, desdobrando-o se ele estiver dentro de uma dobra recolhida, e posiciona o cursor ali.
  • Filtrar — digite na caixa do topo para reduzir a lista por nome (sem diferenciar maiúsculas). No modo árvore, um pai continua visível quando qualquer filho dele corresponde.
  • Acompanhar o cursor — conforme você se move pelo documento, o símbolo que contém o cursor é destacado na lista.

Opções de exibição

O botão ⋮ (ao lado da caixa de filtro) abre o menu de exibição:

Opção Efeito
Mostrar como árvore Aninha os membros sob o contêiner deles (métodos sob uma classe, uma classe sob o espaço de nomes). Desligue para uma lista plana.
Ordenar por posição Ordem do documento (padrão).
Ordenar por nome Alfabética (sem diferenciar maiúsculas).
Ordenar por tipo Agrupa por tipo de símbolo (classes, funções, …), depois por nome.

Suas escolhas são lembradas entre sessões.

De onde vem a estrutura

O painel obtém os símbolos de uma de duas fontes, indicada no rodapé do painel:

  • Origem: servidor de linguagem — quando um servidor de linguagem está configurado para a linguagem do arquivo, o painel usa os símbolos dele. Esta é a estrutura precisa e completa (variáveis membro, aninhamento exato de classe → método, todos os tipos de símbolo que o servidor reporta).
  • Origem: padrões — caso contrário, o painel recorre às regras de padrões integradas descritas abaixo.

Isso não se configura: a estrutura baseada em padrões aparece na hora e, se um servidor de linguagem responder, ela é usada automaticamente. Uma linguagem que tem servidor mas não tem padrões incluídos ainda assim ganha uma estrutura (do servidor).

Linguagens suportadas

As regras de padrões produzem uma estrutura sem nenhum servidor de linguagem (e são o recurso quando não há um disponível):

Linguagem Símbolos reconhecidos
C / C++ espaços de nomes, classes, structs, enums, #defines, funções
Python classes, funções/métodos (def, async def)
JavaScript / TypeScript classes, funções, constantes de função seta, métodos de classe
Markdown títulos (# … ######)

A lista reflete a linguagem que o editor aplicou ao arquivo (a coloração de sintaxe dele). Arquivos de outros tipos exibem "Não há estrutura de símbolos para este tipo de arquivo."

Os padrões são aproximados

A estrutura baseada em padrões (Fonte: padrões) é uma aproximação, não um analisador completo: por exemplo, uma função livre escrita depois do corpo de uma classe pode aparecer aninhada sob aquela classe. Para uma estrutura precisa, configure um servidor de linguagem para a linguagem — o painel então mostra os símbolos dele (Fonte: servidor de linguagem).

Conjuntos de regras personalizados

Os conjuntos de regras são simples arquivos JSON, então você pode ajustá-los ou acrescentar linguagens sem recompilar. O conjunto incluído é instalado ao lado do aplicativo em uma pasta function-list/ (um *.json por conjunto de regras); esses arquivos são sobrescritos ao atualizar, então trate-os como exemplos somente leitura.

Para personalizar, coloque seus próprios *.json na subpasta rulesets/ do diretório de dados do plugin Lista de funções. Um arquivo de usuário cujo languageIds inclui uma linguagem substitui o conjunto de regras incluído para aquela linguagem.

Um arquivo de conjunto de regras é assim:

{
    "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" }
    ]
}
Campo Significado
languageIds Um ou mais identificadores de linguagem do editor aos quais o conjunto se aplica (p. ex. cpp, python). Um arquivo pode servir a vários.
caseSensitive Se os padrões diferenciam maiúsculas de minúsculas (true por padrão).
rules Lista ordenada de regras; vence a primeira regra que corresponde a uma linha, um símbolo por linha.
rules[].pattern Uma expressão regular ECMAScript comparada com uma única linha.
rules[].nameGroup O grupo de captura que contém o nome do símbolo (1 por padrão).
rules[].kind O tipo do símbolo — um nome (class, struct, enum, namespace, function, method, constant, string, …) ou um número SymbolKind do LSP. Controla o agrupamento e a ordenação.
rules[].containerGroup Grupo de captura opcional usado como detalhe do contêiner do símbolo (0 = nenhum).