/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/EditorFeatures/Core/Options/TextBufferOptionProviders.cs
101 строка
6 KB
Tomáš Matoušek
Remove fallbacks (#74041)
09 июл 2024, 23:35
Не верифицирован
09 июл 2024, 23:35
6ceee07
Код
Авторство
О чём код?
// 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 Microsoft.CodeAnalysis.AddImport; using Microsoft.CodeAnalysis.CodeCleanup; using Microsoft.CodeAnalysis.Diagnostics; using Microsoft.CodeAnalysis.DocumentationComments; using Microsoft.CodeAnalysis.Formatting; using Microsoft.CodeAnalysis.Host; using Microsoft.CodeAnalysis.Indentation; using Microsoft.VisualStudio.Text; using Microsoft.VisualStudio.Text.Editor; using Microsoft.VisualStudio.Text.Editor.OptionsExtensionMethods; namespace Microsoft.CodeAnalysis.Options; internal static class TextBufferOptionProviders { public static DocumentationCommentOptions GetDocumentationCommentOptions(this ITextBuffer textBuffer, EditorOptionsService optionsProvider, LanguageServices languageServices) { var editorOptions = optionsProvider.Factory.GetOptions(textBuffer); var lineFormattingOptions = GetLineFormattingOptionsImpl(textBuffer, editorOptions, optionsProvider.IndentationManager, explicitFormat: false); return optionsProvider.GlobalOptions.GetDocumentationCommentOptions(lineFormattingOptions, languageServices.Language); } public static LineFormattingOptions GetLineFormattingOptions(this ITextBuffer textBuffer, EditorOptionsService optionsProvider, bool explicitFormat) => GetLineFormattingOptionsImpl(textBuffer, optionsProvider.Factory.GetOptions(textBuffer), optionsProvider.IndentationManager, explicitFormat); private static LineFormattingOptions GetLineFormattingOptionsImpl(ITextBuffer textBuffer, IEditorOptions editorOptions, IIndentationManagerService indentationManager, bool explicitFormat) { indentationManager.GetIndentation(textBuffer, explicitFormat, out var convertTabsToSpaces, out var tabSize, out var indentSize); return new LineFormattingOptions() { UseTabs = !convertTabsToSpaces, IndentationSize = indentSize, TabSize = tabSize, NewLine = editorOptions.GetNewLineCharacter(), }; } public static SyntaxFormattingOptions GetSyntaxFormattingOptions(this ITextBuffer textBuffer, EditorOptionsService optionsProvider, StructuredAnalyzerConfigOptions fallbackOptions, LanguageServices languageServices, bool explicitFormat) => GetSyntaxFormattingOptionsImpl(textBuffer, optionsProvider.Factory.GetOptions(textBuffer), fallbackOptions, optionsProvider.IndentationManager, languageServices, explicitFormat); private static SyntaxFormattingOptions GetSyntaxFormattingOptionsImpl(ITextBuffer textBuffer, IEditorOptions editorOptions, StructuredAnalyzerConfigOptions fallbackOptions, IIndentationManagerService indentationManager, LanguageServices languageServices, bool explicitFormat) { var configOptions = editorOptions.ToAnalyzerConfigOptions(fallbackOptions); var options = configOptions.GetSyntaxFormattingOptions(languageServices); var lineFormattingOptions = GetLineFormattingOptionsImpl(textBuffer, editorOptions, indentationManager, explicitFormat); return options with { LineFormatting = lineFormattingOptions }; } public static IndentationOptions GetIndentationOptions(this ITextBuffer textBuffer, EditorOptionsService optionsProvider, StructuredAnalyzerConfigOptions fallbackOptions, LanguageServices languageServices, bool explicitFormat) { var editorOptions = optionsProvider.Factory.GetOptions(textBuffer); var formattingOptions = GetSyntaxFormattingOptionsImpl(textBuffer, editorOptions, fallbackOptions, optionsProvider.IndentationManager, languageServices, explicitFormat); return new IndentationOptions(formattingOptions) { AutoFormattingOptions = optionsProvider.GlobalOptions.GetAutoFormattingOptions(languageServices.Language), // TODO: Call editorOptions.GetIndentStyle() instead (see https://github.com/dotnet/roslyn/issues/62204): IndentStyle = optionsProvider.GlobalOptions.GetOption(IndentationOptionsStorage.SmartIndent, languageServices.Language) }; } public static AddImportPlacementOptions GetAddImportPlacementOptions(this ITextBuffer textBuffer, EditorOptionsService optionsProvider, StructuredAnalyzerConfigOptions fallbackOptions, LanguageServices languageServices, bool allowInHiddenRegions) { var editorOptions = optionsProvider.Factory.GetOptions(textBuffer); var configOptions = editorOptions.ToAnalyzerConfigOptions(fallbackOptions); return configOptions.GetAddImportPlacementOptions(languageServices, allowInHiddenRegions); } public static CodeCleanupOptions GetCodeCleanupOptions(this ITextBuffer textBuffer, EditorOptionsService optionsProvider, StructuredAnalyzerConfigOptions fallbackOptions, LanguageServices languageServices, bool explicitFormat, bool allowImportsInHiddenRegions) { var editorOptions = optionsProvider.Factory.GetOptions(textBuffer); var configOptions = editorOptions.ToAnalyzerConfigOptions(fallbackOptions); var options = configOptions.GetCodeCleanupOptions(languageServices, allowImportsInHiddenRegions); var lineFormattingOptions = GetLineFormattingOptionsImpl(textBuffer, editorOptions, optionsProvider.IndentationManager, explicitFormat); return options with { FormattingOptions = options.FormattingOptions with { LineFormatting = lineFormattingOptions } }; } public static IndentingStyle ToEditorIndentStyle(this FormattingOptions2.IndentStyle value) => value switch { FormattingOptions2.IndentStyle.Smart => IndentingStyle.Smart, FormattingOptions2.IndentStyle.Block => IndentingStyle.Block, _ => IndentingStyle.None, }; public static FormattingOptions2.IndentStyle ToIndentStyle(this IndentingStyle value) => value switch { IndentingStyle.Smart => FormattingOptions2.IndentStyle.Smart, IndentingStyle.Block => FormattingOptions2.IndentStyle.Block, _ => FormattingOptions2.IndentStyle.None, }; }