Partilhar via


Conceitos de extensibilidade do editor

Este artigo descreve o modelo de objeto de extensibilidade que representa o editor do Visual Studio e o documento de texto que é aberto para edição. Para obter uma introdução ao trabalho com a funcionalidade de extensão do editor, consulte Utilizar a extensibilidade do editor do Visual Studio.

O modelo de objeto de extensibilidade do Editor do Visual Studio é composto de algumas partes integrais. Este artigo aborda ITextViewSnapshot , ITextDocumentSnapshote outras representações abstratas de todo o documento, bem como Position e Span, que representam a localização e as extensões de texto, respectivamente.

ITextViewSnapshot

ITextViewSnapshot contém o URI e as informações de versão necessárias para adquirir um ITextDocumentSnapshot bem como algumas propriedades da exibição de texto, como seleções.

  • Este objeto é imutável e nunca mudará depois de ser criado.
  • Você pode usar ITextViewSnapshot.GetTextDocumentAsync() para obter o conteúdo do documento. Chamar esse método é caro e só deve ser feito se você precisar do conteúdo do documento.
  • ITextViewSnapshot não pode ser alterado diretamente. Todas as alterações são solicitadas através de mutação. Consulte Fazer alterações em um documento de texto a partir de uma extensão.

ITextDocumentSnapshot

ITextDocumentSnapshot contém o conteúdo do documento de texto de um ponto no tempo ou versão.

Se você estiver familiarizado com extensões herdadas do Visual Studio, ITextDocumentSnapshot é quase o mesmo que ITextSnapshot e oferece suporte à maioria dos mesmos métodos para acessar o texto.

Melhores práticas:

  • Você pode usar Position e Span para representar substrings no documento sem gastar recursos copiando ou alocando strings. A maioria das APIs opera em termos desses primitivos.
  • Você pode usar a sintaxe do indexador, textDocument[0], para ler caractere por caractere no documento sem copiá-lo para uma cadeia de caracteres.
  • Se tiver de criar uma sequência de caracteres para usar como chave de dicionário, utilize a sobrecarga que aceita um Span, para evitar criar uma sequência de caracteres grande e descartável de toda a linha ou documento.
  • Evite presumir que as linhas ou documentos serão curtos. Muitos idiomas minificam em linhas grandes ou consomem arquivos muito extensos.
    • ITextDocumentSnapshot faz referência a grandes estruturas de dados que podem consumir memória se uma versão antiga o suficiente for armazenada. A prática recomendada é atualizar periodicamente as posições e intervalos que estão a ser armazenados a longo prazo para a versão mais recente do documento através do seu método TranslateTo(), para que a versão antiga ITextDocumentSnapshot possa ser removida.

Posição

Representa uma posição dentro do documento de texto. Ao contrário de posições int, o tipo Position está ciente do ITextDocumentSnapshot de veio e suporta GetChar() para obter diretamente o caractere nesse ponto.

Se você estiver familiarizado com extensões herdadas do Visual Studio, Position é quase o mesmo que SnapshotPoint e oferece suporte à maioria dos mesmos métodos.

Extensão

Representa uma substring contígua de caracteres dentro de um ITextDocumentSnapshot. Ao contrário de uma cadeia de caracteres criada com string.Substring() ou ITextDocumentSnapshot.CopyToString(), a criação de um Span não requer alocações ou memória adicional. Mais tarde, poderá chamar Span.GetText() para convertê-lo numa cadeia de caracteres posteriormente.

Se você estiver familiarizado com extensões herdadas do Visual Studio, Position é quase o mesmo que SnapshotSpan e oferece suporte à maioria dos mesmos métodos.

Revise o código de exemplo para uma extensão simples baseada em editor:

  • ExemploDeSelecionadorDeDocumento