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.
- Este objeto é imutável e nunca mudará depois de ser criado.
-
ITextDocumentSnapshot
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.
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 antigaITextDocumentSnapshot
possa ser removida.
-
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
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.
Conteúdo relacionado
Revise o código de exemplo para uma extensão simples baseada em editor: