/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/EditorFeatures/Text/Extensions.cs
105 строк
6 KB
Cyrus Najmabadi
Use file scoped namespaces. (#77854)
27 мар 2025, 09:55
Не верифицирован
27 мар 2025, 09:55
98d41b8
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System; using System.Collections.Generic; using System.Text; using Microsoft.VisualStudio.Text; namespace Microsoft.CodeAnalysis.Text; public static partial class Extensions { public static SourceTextContainer AsTextContainer(this ITextBuffer buffer) => TextBufferContainer.From(buffer); public static ITextBuffer GetTextBuffer(this SourceTextContainer textContainer) => TryGetTextBuffer(textContainer) ?? throw new ArgumentException(TextEditorResources.textContainer_is_not_a_SourceTextContainer_that_was_created_from_an_ITextBuffer, nameof(textContainer)); public static ITextBuffer? TryGetTextBuffer(this SourceTextContainer? textContainer) => (textContainer as TextBufferContainer)?.TryFindEditorTextBuffer(); /// <summary> /// Returns the <see cref="ITextSnapshot"/> behind this <see cref="SourceText"/>, or null if it wasn't created from one. /// /// Note that multiple <see cref="ITextSnapshot"/>s may map to the same <see cref="SourceText"/> instance if it's /// <see cref="ITextVersion.ReiteratedVersionNumber" /> doesn't change. /// </summary> /// <returns>The underlying ITextSnapshot.</returns> public static ITextSnapshot? FindCorrespondingEditorTextSnapshot(this SourceText? text) => (text as SnapshotSourceText)?.TryFindEditorSnapshot(); internal static ITextImage? TryFindCorrespondingEditorTextImage(this SourceText? text) => (text as SnapshotSourceText)?.TextImage; internal static TextLine AsTextLine(this ITextSnapshotLine line) => line.Snapshot.AsText().Lines[line.LineNumber]; public static SourceText AsText(this ITextSnapshot textSnapshot) { textSnapshot.TextBuffer.Properties.TryGetProperty<ITextBufferCloneService>(typeof(ITextBufferCloneService), out var textBufferCloneServiceOpt); return SnapshotSourceText.From(textBufferCloneServiceOpt, textSnapshot); } internal static SourceText AsRoslynText(this ITextSnapshot textSnapshot, ITextBufferCloneService textBufferCloneServiceOpt, Encoding? encoding, SourceHashAlgorithm checksumAlgorithm) => new SnapshotSourceText.ClosedSnapshotSourceText(textBufferCloneServiceOpt, ((ITextSnapshot2)textSnapshot).TextImage, encoding, checksumAlgorithm); /// <summary> /// Gets the workspace corresponding to the text buffer. /// </summary> public static Workspace? GetWorkspace(this ITextBuffer buffer) { var container = buffer.AsTextContainer(); if (Workspace.TryGetWorkspace(container, out var workspace)) { return workspace; } return null; } /// <summary> /// Gets the <see cref="Document"/>s from the corresponding <see cref="Workspace.CurrentSolution"/> that are associated with the <see cref="ITextSnapshot"/>'s buffer, /// updated to contain the same text as the snapshot if necessary. There may be multiple <see cref="Document"/>s associated with the buffer /// if the file is linked into multiple projects or is part of a Shared Project. /// </summary> public static IEnumerable<Document> GetRelatedDocumentsWithChanges(this ITextSnapshot text) => text.AsText().GetRelatedDocumentsWithChanges(); /// <summary> /// Gets the <see cref="Document"/> from the corresponding <see cref="Workspace.CurrentSolution"/> that is associated with the <see cref="ITextSnapshot"/>'s buffer /// in its current project context, updated to contain the same text as the snapshot if necessary. There may be multiple <see cref="Document"/>s /// associated with the buffer if it is linked into multiple projects or is part of a Shared Project. In this case, the <see cref="Workspace"/> /// is responsible for keeping track of which of these <see cref="Document"/>s is in the current project context. /// </summary> public static Document? GetOpenDocumentInCurrentContextWithChanges(this ITextSnapshot text) => text.AsText().GetOpenDocumentInCurrentContextWithChanges(); internal static TextDocument? GetOpenTextDocumentInCurrentContextWithChanges(this ITextSnapshot text) => text.AsText().GetOpenTextDocumentInCurrentContextWithChanges(); /// <summary> /// Gets the <see cref="Document"/>s from the corresponding <see cref="Workspace.CurrentSolution"/> that are associated with the <see cref="ITextBuffer"/>. /// There may be multiple <see cref="Document"/>s associated with the buffer if it is linked into multiple projects or is part of a Shared Project. /// </summary> public static IEnumerable<Document> GetRelatedDocuments(this ITextBuffer buffer) => buffer.AsTextContainer().GetRelatedDocuments(); internal static bool CanApplyChangeDocumentToWorkspace(this ITextBuffer buffer) => Workspace.TryGetWorkspace(buffer.AsTextContainer(), out var workspace) && workspace.CanApplyChange(ApplyChangesKind.ChangeDocument); /// <summary> /// Get the encoding used to load this <see cref="ITextBuffer"/> if possible. /// <para> /// Note that this will return <see cref="Encoding.UTF8"/> if the <see cref="ITextBuffer"/> /// didn't come from an <see cref="ITextDocument"/>, or if the <see cref="ITextDocument"/> /// is already closed. /// </para> /// </summary> internal static Encoding GetEncodingOrUTF8(this ITextBuffer textBuffer) => textBuffer.Properties.TryGetProperty(typeof(ITextDocument), out ITextDocument textDocument) ? textDocument.Encoding : Encoding.UTF8; }