Dela via


Begrepp för utökningsbarhet för redigerare

Den här artikeln beskriver objektmodellen för utökningsbarhet som representerar Visual Studio-redigeraren och textdokumentet som öppnas för redigering. En introduktion till hur du arbetar med funktionen för redigeringstillägg finns i Använda utökningsbarhet för Visual Studio-redigeraren.

Utökningsobjektmodellen för Visual Studio-redigeraren består av några delar. Den här artikeln beskriver ITextViewSnapshot, ITextDocumentSnapshotoch andra abstrakta representationer av hela dokumentet, samt Position och Span, som representerar plats respektive textintervall.

ITextViewSnapshot

ITextViewSnapshot innehåller den URI- och versionsinformation som krävs för att hämta en ITextDocumentSnapshot- samt vissa egenskaper för textvyn, till exempel val.

  • Det här objektet är oföränderligt och ändras aldrig när det har skapats.
  • Du kan använda ITextViewSnapshot.GetTextDocumentAsync() för att hämta innehållet från dokumentet. Att anropa den här metoden är dyrt och bör bara göras om du behöver dokumentinnehållet.
  • ITextViewSnapshot kan inte ändras direkt. Alla ändringar begärs via mutation. Se även Gör ändringar i ett textdokument från ett tillägg.

ITextDocumentSnapshot

ITextDocumentSnapshot innehåller innehållet i textdokumentet från en tidpunkt eller version.

Om du är bekant med äldre Visual Studio-tillägg är ITextDocumentSnapshot nästan samma som ITextSnapshot och stöder de flesta av samma metoder för att komma åt texten.

Metodtips:

  • Du kan använda Position och Span för att representera delsträngar i dokumentet utan att lägga till resurser som kopierar eller allokerar strängar. De flesta API:er fungerar när det gäller dessa primitiver.
  • Du kan använda indexerarens syntax, textDocument[0], för att läsa tecken efter tecken i dokumentet utan att kopiera den till en sträng.
  • Om du måste skapa en sträng, till exempel för användning som en ordlistenyckel, använder du överlagringen som tar en Spanför att undvika att skapa en stor utkastssträng från hela raden eller dokumentet.
  • Undvik att anta att rader eller dokument blir korta. Många språk minimeras till stora rader eller använder mycket stora filer
    • ITextDocumentSnapshot refererar till stora datastrukturer som kan förbruka minne om en tillräckligt gammal version lagras. Bästa praxis är att regelbundet uppdatera positioner och intervall som du lagrar på lång sikt till den senaste dokumentversionen via deras TranslateTo()-metod så att den gamla ITextDocumentSnapshot versionen kan vara skräpinsamling.

Position

Representerar en position i textdokumentet. Till skillnad från int-positioner är positionstypen medveten om ITextDocumentSnapshot som den kom från och stöder GetChar() för att direkt få tecknet på den punkten.

Om du är bekant med äldre Visual Studio-tillägg är Position nästan detsamma som SnapshotPoint- och stöder de flesta av samma metoder.

Spännvidd

Representerar en sammanhängande delsträng med tecken i en ITextDocumentSnapshot. Till skillnad från en sträng som skapats med string.Substring() eller ITextDocumentSnapshot.CopyToString()kräver det inte några allokeringar eller extra minne för att skapa ett spann. Du kan senare anropa Span.GetText() för att förverkliga den i en sträng på ett uppskjutet sätt.

Om du är bekant med äldre Visual Studio-tillägg är Position nästan samma som SnapshotSpan och stöder de flesta av samma metoder.

Granska exempelkoden för ett enkelt redigeringsbaserat tillägg: