/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Workspaces/MSBuild/Test/FileSet.cs
81 строка
3 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. #nullable disable using System; using System.Collections; using System.Collections.Generic; using System.Collections.Immutable; using Roslyn.Utilities; namespace Microsoft.CodeAnalysis.UnitTests; public class FileSet : IEnumerable<(string fileName, object content)> { private readonly IImmutableDictionary<string, object> _fileMap; private FileSet(IImmutableDictionary<string, object> fileMap) { _fileMap = fileMap ?? ImmutableDictionary<string, object>.Empty; } public FileSet(params (string fileName, object content)[] files) { var builder = ImmutableDictionary.CreateBuilder<string, object>(StringComparer.OrdinalIgnoreCase); foreach (var (fileName, fileContent) in files) { builder.Add(fileName, fileContent); } _fileMap = builder.ToImmutable(); } public IEnumerator<(string fileName, object content)> GetEnumerator() { foreach (var (fileName, content) in _fileMap) yield return (fileName, content); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } public FileSet WithFile(string fileName, object content) { var newFileMap = _fileMap.SetItem(fileName, content); return new FileSet(newFileMap); } public FileSet ReplaceFileElement(string fileName, string elementName, string elementValue) { if (_fileMap.TryGetValue(fileName, out var content)) { if (content is string textContent) { var elementStartTag = "<" + elementName; var elementEndTag = "</" + elementName; var startTagStart = textContent.IndexOf(elementStartTag, StringComparison.Ordinal); if (startTagStart >= -1) { var startTagEnd = textContent.IndexOf('>', startTagStart + 1); if (startTagEnd >= startTagStart) { var endTagStart = textContent.IndexOf(elementEndTag, startTagEnd + 1, StringComparison.Ordinal); if (endTagStart >= startTagEnd) { var newContent = textContent[..(startTagEnd + 1)] + elementValue + textContent[endTagStart..]; return this.WithFile(fileName, newContent); } } } } } return this; } }