Koncepty rozšiřitelnosti editoru
Tento článek popisuje objektový model rozšiřitelnosti, který představuje editor sady Visual Studio a textový dokument, který je otevřen pro úpravy. Úvod do práce s funkcemi rozšíření editoru najdete v tématu Použití rozšiřitelnosti editoru sady Visual Studio.
Objektový model rozšiřitelnosti editoru sady Visual Studio se skládá z několika integrálních částí. Tento článek se zabývá ITextViewSnapshot, ITextDocumentSnapshota dalšími abstraktními reprezentacemi celého dokumentu, stejně jako Position
a Span
, které představují umístění a rozsahy textu v tom pořadí.
ITextViewSnapshot
ITextViewSnapshot obsahuje identifikátor URI a informace o verzi potřebné k získání ITextDocumentSnapshot a také některých vlastností textového zobrazení, jako jsou výběry.
- Tento objekt je neměnný a po vytvoření se nikdy nezmění.
- K získání obsahu z dokumentu můžete použít
ITextViewSnapshot.GetTextDocumentAsync()
. Volání této metody je nákladné a mělo by se provést pouze v případě, že potřebujete obsah dokumentu. -
ITextViewSnapshot
nelze změnit přímo. Všechny změny jsou požadovány prostřednictvím mutace. Viz Provedení změn v textovém dokumentu z rozšíření.
ITextDocumentSnapshot
ITextDocumentSnapshot obsahuje obsah textového dokumentu z konkrétního okamžiku nebo konkrétní verze.
- Tento objekt je neměnný a po vytvoření se nikdy nezmění.
-
ITextDocumentSnapshot
nelze změnit přímo. Všechny změny jsou požadovány prostřednictvím mutace. Podívej se na Udělej změny v textovém dokumentu pomocí rozšíření.
Pokud znáte starší rozšíření sady Visual Studio, ITextDocumentSnapshot je téměř stejný jako ITextSnapshot a podporuje většinu stejných metod pro přístup k textu.
Osvědčené postupy:
- Umístění a rozpětí můžete použít k reprezentaci podřetězců v dokumentu, aniž byste museli prostředky kopírovat nebo přidělovat řetězce. Většina rozhraní API funguje z hlediska těchto primitiv.
- Syntaxi indexeru,
textDocument[0]
, můžete použít ke čtení znaku znakem v dokumentu bez zkopírování do řetězce. - Pokud musíte vytvořit řetězec například pro použití jako klíč ve slovníku, použijte variantu, která bere
Span
, abyste se vyhnuli vytváření velkého nepotřebného řetězce z celého řádku nebo dokumentu. - Nepředpokládejte, že řádky nebo dokumenty budou krátké. Mnoho jazyků se zkomprimuje do dlouhých řádků nebo zpracovává velmi velké soubory.
-
-
ITextDocumentSnapshot odkazuje na velké datové struktury, které mohou spotřebovávat paměť, pokud je uložena dostatečně stará verze. Osvědčeným postupem je pravidelně aktualizovat pozice a rozsahy, které ukládáte, na nejnovější verzi dokumentu pomocí metody
TranslateTo()
, aby stará verzeITextDocumentSnapshot
mohla být uvolněna z paměti.
-
ITextDocumentSnapshot odkazuje na velké datové struktury, které mohou spotřebovávat paměť, pokud je uložena dostatečně stará verze. Osvědčeným postupem je pravidelně aktualizovat pozice a rozsahy, které ukládáte, na nejnovější verzi dokumentu pomocí metody
Postavení
Představuje pozici v textovém dokumentu. Na rozdíl od int
pozic je typ Pozice informován o ITextDocumentSnapshot pochází a podporuje GetChar()
získat přímo znak v tomto okamžiku.
Pokud znáte starší rozšíření sady Visual Studio, pozice je téměř stejná jako SnapshotPoint a podporuje většinu stejných metod.
Rozpětí
Představuje souvislý podřetězec znaků v ITextDocumentSnapshot. Na rozdíl od řetězce vytvořeného pomocí string.Substring()
nebo ITextDocumentSnapshot.CopyToString()
nevyžaduje vytvoření objektu Span žádné přidělení ani dodatečnou paměť. Později můžete volat Span.GetText()
, abyste jej převedli do řetězce v odloženém režimu.
Pokud znáte starší rozšíření sady Visual Studio, Position
je téměř stejná jako SnapshotSpan a podporuje většinu stejných metod.
Související obsah
Projděte si ukázkový kód pro jednoduché rozšíření založené na editoru: