diff --git a/.github/workflows/build-frontends.yml b/.github/workflows/build-frontends.yml index 55f6413eb..82f3173ea 100644 --- a/.github/workflows/build-frontends.yml +++ b/.github/workflows/build-frontends.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: fetch-depth: 0 persist-credentials: false diff --git a/.github/workflows/build-ilspy.yml b/.github/workflows/build-ilspy.yml index 8ce3864f3..8e6ab3d3c 100644 --- a/.github/workflows/build-ilspy.yml +++ b/.github/workflows/build-ilspy.yml @@ -26,7 +26,7 @@ jobs: - run: mkdir -p $env:StagingDirectory - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: submodules: true fetch-depth: 0 @@ -45,7 +45,7 @@ jobs: - name: Install dotnet-format env: - DOTNET_FORMAT_VERSION: 10.0.100-preview.6.25358.103 + DOTNET_FORMAT_VERSION: 10.0.100-preview.7.25380.108 DOTNET_FORMAT_SOURCE: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet10-transport/nuget/v3/index.json run: dotnet tool install -g dotnet-format --version "${{env.DOTNET_FORMAT_VERSION}}" --add-source "${{env.DOTNET_FORMAT_SOURCE}}" diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index d40870c16..2e46a6c91 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -25,7 +25,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: fetch-depth: 0 persist-credentials: false diff --git a/.github/workflows/generate-bom.yml b/.github/workflows/generate-bom.yml index 9d31c0f72..398c815ea 100644 --- a/.github/workflows/generate-bom.yml +++ b/.github/workflows/generate-bom.yml @@ -14,7 +14,7 @@ jobs: steps: - name: Checkout run: git config --global core.autocrlf true - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: submodules: true persist-credentials: false diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 1381cada1..1d7b66276 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -24,7 +24,7 @@ jobs: steps: - name: "Checkout code" - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: persist-credentials: false diff --git a/BuildTools/pre-commit b/BuildTools/pre-commit index dcaa14e0d..7bf9aca1f 100644 --- a/BuildTools/pre-commit +++ b/BuildTools/pre-commit @@ -5,7 +5,7 @@ set -eu -DOTNET_FORMAT_VERSION=10.0.100-preview.6.25358.103 +DOTNET_FORMAT_VERSION=10.0.100-preview.7.25380.108 DOTNET_FORMAT_SOURCE="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet10-transport/nuget/v3/index.json" DOTNET_PATH="$LOCALAPPDATA/ICSharpCode/ILSpy/dotnet-format-$DOTNET_FORMAT_VERSION" if [ ! -d "$DOTNET_PATH" ]; then diff --git a/Directory.Packages.props b/Directory.Packages.props index c609b85fd..bc4276c35 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -9,7 +9,7 @@ - + @@ -19,32 +19,33 @@ - - - - + + + + - - - + + + - + + - - + + - - + + - - + + - + diff --git a/ICSharpCode.BamlDecompiler/packages.lock.json b/ICSharpCode.BamlDecompiler/packages.lock.json index 4c922d638..fca5e3de1 100644 --- a/ICSharpCode.BamlDecompiler/packages.lock.json +++ b/ICSharpCode.BamlDecompiler/packages.lock.json @@ -4,9 +4,9 @@ "net10.0": { "Microsoft.Sbom.Targets": { "type": "Direct", - "requested": "[4.0.3, )", - "resolved": "4.0.3", - "contentHash": "xwHbbj9gLj1HZzLVEM2UpQM7ZY7FkiEs/nRkt6G1H7mR/14aNhjsskRoI7K7CezHJA4cASsGxTvqorbUXTI1TQ==" + "requested": "[4.1.0, )", + "resolved": "4.1.0", + "contentHash": "GidfeSVHFtNwZSbD2wmwWiUiGkVdND8QR1z21WpFa+/47Mi3YiDkAzsWF02wXrMx2Xd8j3QSfKOUY1JtnF+7uw==" }, "TomsToolbox.Composition.Analyzer": { "type": "Direct", @@ -23,13 +23,13 @@ }, "System.Collections.Immutable": { "type": "CentralTransitive", - "requested": "[10.0.0-preview.6.25358.103, )", + "requested": "[10.0.0-preview.7.25380.108, )", "resolved": "9.0.0", "contentHash": "QhkXUl2gNrQtvPmtBTQHb0YsUrDiDQ2QS09YbtTTiSjGcf7NBqtYbrG/BE06zcBPCKEwQGzIv13IVdXNOSub2w==" }, "System.Reflection.Metadata": { "type": "CentralTransitive", - "requested": "[10.0.0-preview.6.25358.103, )", + "requested": "[10.0.0-preview.7.25380.108, )", "resolved": "9.0.0", "contentHash": "ANiqLu3DxW9kol/hMmTWbt3414t9ftdIuiIU7j80okq2YzAueo120M442xk1kDJWtmZTqWQn7wHDvMRipVOEOQ==" } diff --git a/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj b/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj index 0282f9d00..941e2d87c 100644 --- a/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj +++ b/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj @@ -74,7 +74,7 @@ - + @@ -146,6 +146,7 @@ + @@ -251,6 +252,7 @@ + diff --git a/ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs b/ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs index d67877e72..f34b96b5b 100644 --- a/ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs +++ b/ICSharpCode.Decompiler.Tests/PrettyTestRunner.cs @@ -599,6 +599,17 @@ namespace ICSharpCode.Decompiler.Tests await RunForLibrary(cscOptions: cscOptions); } + [Test] + public async Task OptionalArgumentsDisabled([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions) + { + await RunForLibrary( + cscOptions: cscOptions, + configureDecompiler: settings => { + settings.OptionalArguments = false; + } + ); + } + [Test] public async Task Comparisons([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions) { @@ -617,6 +628,12 @@ namespace ICSharpCode.Decompiler.Tests await RunForLibrary(cscOptions: cscOptions); } + [Test] + public async Task ExpandParamsArgumentsDisabled([ValueSource(nameof(defaultOptions))] CompilerOptions cscOptions) + { + await RunForLibrary(cscOptions: cscOptions, configureDecompiler: settings => settings.ExpandParamsArguments = false); + } + [Test] public async Task Issue1080([ValueSource(nameof(roslynOnlyOptions))] CompilerOptions cscOptions) { diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExpandParamsArgumentsDisabled.cs b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExpandParamsArgumentsDisabled.cs new file mode 100644 index 000000000..86d168df6 --- /dev/null +++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExpandParamsArgumentsDisabled.cs @@ -0,0 +1,17 @@ +using System; + +namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty +{ + public class ExpandParamsArgumentsDisabled + { + public void Test() + { + MethodWithParams(Array.Empty()); + MethodWithParams(new int[1] { 5 }); + } + + public void MethodWithParams(params int[] b) + { + } + } +} diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/OptionalArgumentsDisabled.cs b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/OptionalArgumentsDisabled.cs new file mode 100644 index 000000000..b33456f2c --- /dev/null +++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/OptionalArgumentsDisabled.cs @@ -0,0 +1,19 @@ +namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty +{ + public class OptionalArgumentsDisabled + { + public void Test() + { + MixedArguments("123", 0, 0); + OnlyOptionalArguments(0, 0); + } + + public void MixedArguments(string msg, int a = 0, int b = 0) + { + } + + public void OnlyOptionalArguments(int a = 0, int b = 0) + { + } + } +} diff --git a/ICSharpCode.Decompiler/CSharp/CallBuilder.cs b/ICSharpCode.Decompiler/CSharp/CallBuilder.cs index 2ff1ce4d1..e1ee32c3b 100644 --- a/ICSharpCode.Decompiler/CSharp/CallBuilder.cs +++ b/ICSharpCode.Decompiler/CSharp/CallBuilder.cs @@ -967,9 +967,10 @@ namespace ICSharpCode.Decompiler.CSharp } else { - firstOptionalArgumentIndex = -2; + if (firstOptionalArgumentIndex != -1) + firstOptionalArgumentIndex = -2; } - if (parameter.IsParams && i + 1 == callArguments.Count && argumentToParameterMap == null) + if (expressionBuilder.settings.ExpandParamsArguments && parameter.IsParams && i + 1 == callArguments.Count && argumentToParameterMap == null) { // Parameter is marked params // If the argument is an array creation, inline all elements into the call and add missing default values. diff --git a/ICSharpCode.Decompiler/DecompilerSettings.cs b/ICSharpCode.Decompiler/DecompilerSettings.cs index 0abb9a2fb..1b8684d99 100644 --- a/ICSharpCode.Decompiler/DecompilerSettings.cs +++ b/ICSharpCode.Decompiler/DecompilerSettings.cs @@ -1703,6 +1703,25 @@ namespace ICSharpCode.Decompiler } } + bool expandParamsArguments = true; + + /// + /// Gets/Sets whether to expand params arguments by replacing explicit array creation + /// with individual values in method calls. + /// + [Category("C# 1.0 / VS .NET")] + [Description("DecompilerSettings.ExpandParamsArguments")] + public bool ExpandParamsArguments { + get { return expandParamsArguments; } + set { + if (expandParamsArguments != value) + { + expandParamsArguments = value; + OnPropertyChanged(); + } + } + } + bool localFunctions = true; /// diff --git a/ICSharpCode.Decompiler/Humanizer/StringHumanizeExtensions.cs b/ICSharpCode.Decompiler/Humanizer/StringHumanizeExtensions.cs new file mode 100644 index 000000000..926714866 --- /dev/null +++ b/ICSharpCode.Decompiler/Humanizer/StringHumanizeExtensions.cs @@ -0,0 +1,23 @@ +namespace Humanizer.Inflections; + +using CharSpan = System.ReadOnlySpan; + +/// +/// Contains extension methods for humanizing string values. +/// +internal static class StringHumanizeExtensions +{ + internal static unsafe string Concat(CharSpan left, CharSpan right) + { + var result = new string('\0', left.Length + right.Length); + fixed (char* pResult = result) + { + left.CopyTo(new(pResult, left.Length)); + right.CopyTo(new(pResult + left.Length, right.Length)); + } + return result; + } + + internal static unsafe string Concat(char left, CharSpan right) => + Concat(new CharSpan(&left, 1), right); +} \ No newline at end of file diff --git a/ICSharpCode.Decompiler/Humanizer/Vocabularies.cs b/ICSharpCode.Decompiler/Humanizer/Vocabularies.cs index efb2a12cd..302df27d5 100644 --- a/ICSharpCode.Decompiler/Humanizer/Vocabularies.cs +++ b/ICSharpCode.Decompiler/Humanizer/Vocabularies.cs @@ -1,149 +1,154 @@ using System; using System.Threading; -namespace Humanizer.Inflections +namespace Humanizer.Inflections; + +/// +/// Container for registered Vocabularies. At present, only a single vocabulary is supported: Default. +/// +internal static class Vocabularies { + static readonly Lazy Instance = new(BuildDefault, LazyThreadSafetyMode.PublicationOnly); + /// - /// Container for registered Vocabularies. At present, only a single vocabulary is supported: Default. + /// The default vocabulary used for singular/plural irregularities. + /// Rules can be added to this vocabulary and will be picked up by called to Singularize() and Pluralize(). + /// At this time, multiple vocabularies and removing existing rules are not supported. /// - internal static class Vocabularies - { - private static readonly Lazy Instance; - - static Vocabularies() - { - Instance = new Lazy(BuildDefault, LazyThreadSafetyMode.PublicationOnly); - } + public static Vocabulary Default => Instance.Value; - /// - /// The default vocabulary used for singular/plural irregularities. - /// Rules can be added to this vocabulary and will be picked up by called to Singularize() and Pluralize(). - /// At this time, multiple vocabularies and removing existing rules are not supported. - /// - public static Vocabulary Default => Instance.Value; - - private static Vocabulary BuildDefault() - { - var _default = new Vocabulary(); - - _default.AddPlural("$", "s"); - _default.AddPlural("s$", "s"); - _default.AddPlural("(ax|test)is$", "$1es"); - _default.AddPlural("(octop|vir|alumn|fung|cact|foc|hippopotam|radi|stimul|syllab|nucle)us$", "$1i"); - _default.AddPlural("(alias|bias|iris|status|campus|apparatus|virus|walrus|trellis)$", "$1es"); - _default.AddPlural("(buffal|tomat|volcan|ech|embarg|her|mosquit|potat|torped|vet)o$", "$1oes"); - _default.AddPlural("([dti])um$", "$1a"); - _default.AddPlural("sis$", "ses"); - _default.AddPlural("(?:([^f])fe|([lr])f)$", "$1$2ves"); - _default.AddPlural("(hive)$", "$1s"); - _default.AddPlural("([^aeiouy]|qu)y$", "$1ies"); - _default.AddPlural("(x|ch|ss|sh)$", "$1es"); - _default.AddPlural("(matr|vert|ind|d)ix|ex$", "$1ices"); - _default.AddPlural("(^[m|l])ouse$", "$1ice"); - _default.AddPlural("^(ox)$", "$1en"); - _default.AddPlural("(quiz)$", "$1zes"); - _default.AddPlural("(buz|blit|walt)z$", "$1zes"); - _default.AddPlural("(hoo|lea|loa|thie)f$", "$1ves"); - _default.AddPlural("(alumn|alg|larv|vertebr)a$", "$1ae"); - _default.AddPlural("(criteri|phenomen)on$", "$1a"); + static Vocabulary BuildDefault() + { + var _default = new Vocabulary(); - _default.AddSingular("s$", ""); - _default.AddSingular("(n)ews$", "$1ews"); - _default.AddSingular("([dti])a$", "$1um"); - _default.AddSingular("(analy|ba|diagno|parenthe|progno|synop|the|ellip|empha|neuro|oa|paraly)ses$", "$1sis"); - _default.AddSingular("([^f])ves$", "$1fe"); - _default.AddSingular("(hive)s$", "$1"); - _default.AddSingular("(tive)s$", "$1"); - _default.AddSingular("([lr]|hoo|lea|loa|thie)ves$", "$1f"); - _default.AddSingular("(^zomb)?([^aeiouy]|qu)ies$", "$2y"); - _default.AddSingular("(s)eries$", "$1eries"); - _default.AddSingular("(m)ovies$", "$1ovie"); - _default.AddSingular("(x|ch|ss|sh)es$", "$1"); - _default.AddSingular("(^[m|l])ice$", "$1ouse"); - _default.AddSingular("(o)es$", "$1"); - _default.AddSingular("(shoe)s$", "$1"); - _default.AddSingular("(cris|ax|test)es$", "$1is"); - _default.AddSingular("(octop|vir|alumn|fung|cact|foc|hippopotam|radi|stimul|syllab|nucle)i$", "$1us"); - _default.AddSingular("(alias|bias|iris|status|campus|apparatus|virus|walrus|trellis)es$", "$1"); - _default.AddSingular("^(ox)en", "$1"); - _default.AddSingular("(matr|d)ices$", "$1ix"); - _default.AddSingular("(vert|ind)ices$", "$1ex"); - _default.AddSingular("(quiz)zes$", "$1"); - _default.AddSingular("(buz|blit|walt)zes$", "$1z"); - _default.AddSingular("(alumn|alg|larv|vertebr)ae$", "$1a"); - _default.AddSingular("(criteri|phenomen)a$", "$1on"); - _default.AddSingular("([b|r|c]ook|room|smooth)ies$", "$1ie"); + _default.AddPlural("$", "s"); + _default.AddPlural("s$", "s"); + _default.AddPlural("(ax|test)is$", "$1es"); + _default.AddPlural("(octop|vir|alumn|fung|cact|foc|hippopotam|radi|stimul|syllab|nucle)us$", "$1i"); + _default.AddPlural("(alias|bias|iris|status|campus|apparatus|virus|walrus|trellis)$", "$1es"); + _default.AddPlural("(buffal|tomat|volcan|ech|embarg|her|mosquit|potat|torped|vet)o$", "$1oes"); + _default.AddPlural("([dti])um$", "$1a"); + _default.AddPlural("sis$", "ses"); + _default.AddPlural("(?:([^f])fe|([lr])f)$", "$1$2ves"); + _default.AddPlural("(hive)$", "$1s"); + _default.AddPlural("([^aeiouy]|qu)y$", "$1ies"); + _default.AddPlural("(x|ch|ss|sh)$", "$1es"); + _default.AddPlural("(matr|vert|ind|d)(ix|ex)$", "$1ices"); + _default.AddPlural("(^[m|l])ouse$", "$1ice"); + _default.AddPlural("^(ox)$", "$1en"); + _default.AddPlural("(quiz)$", "$1zes"); + _default.AddPlural("(buz|blit|walt)z$", "$1zes"); + _default.AddPlural("(hoo|lea|loa|thie)f$", "$1ves"); + _default.AddPlural("(alumn|alg|larv|vertebr)a$", "$1ae"); + _default.AddPlural("(criteri|phenomen)on$", "$1a"); - _default.AddIrregular("person", "people"); - _default.AddIrregular("man", "men"); - _default.AddIrregular("human", "humans"); - _default.AddIrregular("child", "children"); - _default.AddIrregular("sex", "sexes"); - _default.AddIrregular("glove", "gloves"); - _default.AddIrregular("move", "moves"); - _default.AddIrregular("goose", "geese"); - _default.AddIrregular("wave", "waves"); - _default.AddIrregular("die", "dice"); - _default.AddIrregular("foot", "feet"); - _default.AddIrregular("tooth", "teeth"); - _default.AddIrregular("curriculum", "curricula"); - _default.AddIrregular("database", "databases"); - _default.AddIrregular("zombie", "zombies"); - _default.AddIrregular("personnel", "personnel"); - //Fix #789 - _default.AddIrregular("cache", "caches"); + _default.AddSingular("s$", ""); + _default.AddSingular("(n)ews$", "$1ews"); + _default.AddSingular("([dti])a$", "$1um"); + _default.AddSingular("(analy|ba|diagno|parenthe|progno|synop|the|ellip|empha|neuro|oa|paraly)ses$", "$1sis"); + _default.AddSingular("([^f])ves$", "$1fe"); + _default.AddSingular("(hive)s$", "$1"); + _default.AddSingular("(tive)s$", "$1"); + _default.AddSingular("([lr]|hoo|lea|loa|thie)ves$", "$1f"); + _default.AddSingular("(^zomb)?([^aeiouy]|qu)ies$", "$2y"); + _default.AddSingular("(s)eries$", "$1eries"); + _default.AddSingular("(m)ovies$", "$1ovie"); + _default.AddSingular("(x|ch|ss|sh)es$", "$1"); + _default.AddSingular("(^[m|l])ice$", "$1ouse"); + _default.AddSingular("(? +/// A container for exceptions to simple pluralization/singularization rules. +/// Vocabularies.Default contains an extensive list of rules for US English. +/// At this time, multiple vocabularies and removing existing rules are not supported. +/// +internal class Vocabulary { + internal Vocabulary() + { + } + + readonly List plurals = []; + readonly List singulars = []; + readonly HashSet uncountables = new(StringComparer.CurrentCultureIgnoreCase); + readonly Regex letterS = new("^([sS])[sS]*$"); + /// - /// A container for exceptions to simple pluralization/singularization rules. - /// Vocabularies.Default contains an extensive list of rules for US English. - /// At this time, multiple vocabularies and removing existing rules are not supported. + /// Adds a word to the vocabulary which cannot easily be pluralized/singularized by RegEx, e.g. "person" and "people". /// - internal class Vocabulary + /// The singular form of the irregular word, e.g. "person". + /// The plural form of the irregular word, e.g. "people". + /// True to match these words on their own as well as at the end of longer words. False, otherwise. + public void AddIrregular(string singular, string plural, bool matchEnding = true) { - internal Vocabulary() + if (matchEnding) { + var singularSubstring = singular.Substring(1); + var pluralSubString = plural.Substring(1); + AddPlural($"({singular[0]}){singularSubstring}$", $"$1{pluralSubString}"); + AddSingular($"({plural[0]}){pluralSubString}$", $"$1{singularSubstring}"); } + else + { + AddPlural($"^{singular}$", plural); + AddSingular($"^{plural}$", singular); + } + } - private readonly List _plurals = new List(); - private readonly List _singulars = new List(); - private readonly List _uncountables = new List(); + /// + /// Adds an uncountable word to the vocabulary, e.g. "fish". Will be ignored when plurality is changed. + /// + /// Word to be added to the list of uncountables. + public void AddUncountable(string word) => + uncountables.Add(word); - /// - /// Adds a word to the vocabulary which cannot easily be pluralized/singularized by RegEx, e.g. "person" and "people". - /// - /// The singular form of the irregular word, e.g. "person". - /// The plural form of the irregular word, e.g. "people". - /// True to match these words on their own as well as at the end of longer words. False, otherwise. - public void AddIrregular(string singular, string plural, bool matchEnding = true) + /// + /// Adds a rule to the vocabulary that does not follow trivial rules for pluralization, e.g. "bus" -> "buses" + /// + /// RegEx to be matched, case insensitive, e.g. "(bus)es$" + /// RegEx replacement e.g. "$1" + public void AddPlural(string rule, string replacement) => + plurals.Add(new(rule, replacement)); + + /// + /// Adds a rule to the vocabulary that does not follow trivial rules for singularization, e.g. "vertices/indices -> "vertex/index" + /// + /// RegEx to be matched, case insensitive, e.g. ""(vert|ind)ices$"" + /// RegEx replacement e.g. "$1ex" + public void AddSingular(string rule, string replacement) => + singulars.Add(new(rule, replacement)); + + /// + /// Pluralizes the provided input considering irregular words + /// + /// Word to be pluralized + /// Normally you call Pluralize on singular words; but if you're unsure call it with false + [return: NotNullIfNotNull(nameof(word))] + public string? Pluralize(string? word, bool inputIsKnownToBeSingular = true) + { + if (word == null) { - if (matchEnding) - { - AddPlural("(" + singular[0] + ")" + singular.Substring(1) + "$", "$1" + plural.Substring(1)); - AddSingular("(" + plural[0] + ")" + plural.Substring(1) + "$", "$1" + singular.Substring(1)); - } - else - { - AddPlural($"^{singular}$", plural); - AddSingular($"^{plural}$", singular); - } + return null; } - /// - /// Adds an uncountable word to the vocabulary, e.g. "fish". Will be ignored when plurality is changed. - /// - /// Word to be added to the list of uncountables. - public void AddUncountable(string word) + var s = LetterS(word); + if (s != null) { - _uncountables.Add(word.ToLower()); + return s + "s"; } - /// - /// Adds a rule to the vocabulary that does not follow trivial rules for pluralization, e.g. "bus" -> "buses" - /// - /// RegEx to be matched, case insensitive, e.g. "(bus)es$" - /// RegEx replacement e.g. "$1" - public void AddPlural(string rule, string replacement) + var result = ApplyRules(plurals, word, false); + + if (inputIsKnownToBeSingular) { - _plurals.Add(new Rule(rule, replacement)); + return result ?? word; } - /// - /// Adds a rule to the vocabulary that does not follow trivial rules for singularization, e.g. "vertices/indices -> "vertex/index" - /// - /// RegEx to be matched, case insensitive, e.g. ""(vert|ind)ices$"" - /// RegEx replacement e.g. "$1ex" - public void AddSingular(string rule, string replacement) + var asSingular = ApplyRules(singulars, word, false); + var asSingularAsPlural = ApplyRules(plurals, asSingular, false); + if (asSingular != null && + asSingular != word && + asSingular + "s" != word && + asSingularAsPlural == word && + result != word) { - _singulars.Add(new Rule(rule, replacement)); + return word; } - /// - /// Pluralizes the provided input considering irregular words - /// - /// Word to be pluralized - /// Normally you call Pluralize on singular words; but if you're unsure call it with false - /// - public string Pluralize(string word, bool inputIsKnownToBeSingular = true) - { - var result = ApplyRules(_plurals, word, false); + return result!; + } - if (inputIsKnownToBeSingular) - { - return result ?? word; - } + /// + /// Singularizes the provided input considering irregular words + /// + /// Word to be singularized + /// Normally you call Singularize on plural words; but if you're unsure call it with false + /// Skip singularizing single words that have an 's' on the end + [return: NotNullIfNotNull(nameof(word))] + public string? Singularize(string? word, bool inputIsKnownToBePlural = true, bool skipSimpleWords = false) + { + if (word == null) + { + return null; + } + var s = LetterS(word); + if (s != null) + { + return s; + } - var asSingular = ApplyRules(_singulars, word, false); - var asSingularAsPlural = ApplyRules(_plurals, asSingular, false); - if (asSingular != null && asSingular != word && asSingular + "s" != word && asSingularAsPlural == word && result != word) - { - return word; - } + var result = ApplyRules(singulars, word, skipSimpleWords); - return result; + if (inputIsKnownToBePlural) + { + return result ?? word; } - /// - /// Singularizes the provided input considering irregular words - /// - /// Word to be singularized - /// Normally you call Singularize on plural words; but if you're unsure call it with false - /// Skip singularizing single words that have an 's' on the end - /// - public string Singularize(string word, bool inputIsKnownToBePlural = true, bool skipSimpleWords = false) + // the Plurality is unknown so we should check all possibilities + var asPlural = ApplyRules(plurals, word, false); + if (asPlural == word || + word + "s" == asPlural) { - var result = ApplyRules(_singulars, word, skipSimpleWords); - - if (inputIsKnownToBePlural) - { - return result ?? word; - } - - // the Plurality is unknown so we should check all possibilities - var asPlural = ApplyRules(_plurals, word, false); - var asPluralAsSingular = ApplyRules(_singulars, asPlural, false); - if (asPlural != word && word + "s" != asPlural && asPluralAsSingular == word && result != word) - { - return word; - } + return result ?? word; + } + var asPluralAsSingular = ApplyRules(singulars, asPlural, false); + if (asPluralAsSingular != word || + result == word) + { return result ?? word; } - private string ApplyRules(IList rules, string word, bool skipFirstRule) + return word; + } + + string? ApplyRules(IList rules, string? word, bool skipFirstRule) + { + if (word == null) { - if (word == null) - { - return null; - } + return null; + } - if (word.Length < 1) - { - return word; - } + if (word.Length < 1) + { + return word; + } - if (IsUncountable(word)) - { - return word; - } + if (IsUncountable(word)) + { + return word; + } - var result = word; - var end = skipFirstRule ? 1 : 0; - for (var i = rules.Count - 1; i >= end; i--) + var result = word; + var end = skipFirstRule ? 1 : 0; + for (var i = rules.Count - 1; i >= end; i--) + { + if ((result = rules[i].Apply(word)) != null) { - if ((result = rules[i].Apply(word)) != null) - { - break; - } + break; } - return result; } - private bool IsUncountable(string word) + if (result == null) { - return _uncountables.Contains(word.ToLower()); + return null; } - private class Rule - { - private readonly Regex _regex; - private readonly string _replacement; + return MatchUpperCase(word, result); + } - public Rule(string pattern, string replacement) - { - _regex = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled); - _replacement = replacement; - } + bool IsUncountable(string word) => + uncountables.Contains(word); - public string Apply(string word) - { - if (!_regex.IsMatch(word)) - { - return null; - } + static string MatchUpperCase(string word, string replacement) => + char.IsUpper(word[0]) && + char.IsLower(replacement[0]) ? StringHumanizeExtensions.Concat(char.ToUpper(replacement[0]), replacement.AsSpan(1)) : replacement; + + /// + /// If the word is the letter s, singular or plural, return the letter s singular + /// + string? LetterS(string word) + { + var s = letterS.Match(word); + return s.Groups.Count > 1 ? s.Groups[1].Value : null; + } + + class Rule(string pattern, string replacement) + { + readonly Regex regex = new(pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled); - return _regex.Replace(word, _replacement); + public string? Apply(string word) + { + if (!regex.IsMatch(word)) + { + return null; } + + return regex.Replace(word, replacement); } } } \ No newline at end of file diff --git a/ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj b/ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj index 15d677535..3a0cb5d01 100644 --- a/ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj +++ b/ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj @@ -80,7 +80,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -108,6 +108,7 @@ + diff --git a/ICSharpCode.Decompiler/Properties/DecompilerVersionInfo.template.cs b/ICSharpCode.Decompiler/Properties/DecompilerVersionInfo.template.cs index cc4e60030..9830ed388 100644 --- a/ICSharpCode.Decompiler/Properties/DecompilerVersionInfo.template.cs +++ b/ICSharpCode.Decompiler/Properties/DecompilerVersionInfo.template.cs @@ -4,7 +4,7 @@ public const string Minor = "0"; public const string Build = "0"; public const string Revision = "$INSERTREVISION$"; - public const string VersionName = "preview1"; + public const string VersionName = "preview2"; public const string FullVersion = Major + "." + Minor + "." + Build + ".$INSERTREVISION$$INSERTBRANCHPOSTFIX$$INSERTVERSIONNAMEPOSTFIX$"; public const string FullVersionWithShortCommitHash = FullVersion + "+$INSERTSHORTCOMMITHASH$"; diff --git a/ICSharpCode.Decompiler/packages.lock.json b/ICSharpCode.Decompiler/packages.lock.json index 26928c8d8..ba6f3bf0e 100644 --- a/ICSharpCode.Decompiler/packages.lock.json +++ b/ICSharpCode.Decompiler/packages.lock.json @@ -4,9 +4,9 @@ ".NETStandard,Version=v2.0": { "Microsoft.Sbom.Targets": { "type": "Direct", - "requested": "[4.0.3, )", - "resolved": "4.0.3", - "contentHash": "xwHbbj9gLj1HZzLVEM2UpQM7ZY7FkiEs/nRkt6G1H7mR/14aNhjsskRoI7K7CezHJA4cASsGxTvqorbUXTI1TQ==" + "requested": "[4.1.0, )", + "resolved": "4.1.0", + "contentHash": "GidfeSVHFtNwZSbD2wmwWiUiGkVdND8QR1z21WpFa+/47Mi3YiDkAzsWF02wXrMx2Xd8j3QSfKOUY1JtnF+7uw==" }, "Microsoft.SourceLink.GitHub": { "type": "Direct", diff --git a/ICSharpCode.ILSpyCmd/packages.lock.json b/ICSharpCode.ILSpyCmd/packages.lock.json index 79a7b81a7..c33074443 100644 --- a/ICSharpCode.ILSpyCmd/packages.lock.json +++ b/ICSharpCode.ILSpyCmd/packages.lock.json @@ -15,32 +15,32 @@ }, "Microsoft.Extensions.Hosting": { "type": "Direct", - "requested": "[10.0.0-preview.6.25358.103, )", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "CnjLZ27sR1RlqIs2JLf6EKcL2uJf9FekRlvsw669yVNQdRNO/p6Fc8oqN1YB03BTe5S6CUayGw84NUbzdTW9Hg==", - "dependencies": { - "Microsoft.Extensions.Configuration": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Configuration.Binder": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Configuration.CommandLine": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Configuration.EnvironmentVariables": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Configuration.FileExtensions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Configuration.Json": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Configuration.UserSecrets": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.DependencyInjection": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Diagnostics": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.FileProviders.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.FileProviders.Physical": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Hosting.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Logging": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Logging.Configuration": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Logging.Console": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Logging.Debug": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Logging.EventLog": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Logging.EventSource": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Options": "10.0.0-preview.6.25358.103" + "requested": "[10.0.0-preview.7.25380.108, )", + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "VcqnTGY8bMnFxZQb3cjcXnXy4x7dJgp85UlujErNh34xh4ZislQ2XhX7ak0gUnRh8c9ZTI3xj4groyqBl/DNHA==", + "dependencies": { + "Microsoft.Extensions.Configuration": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Configuration.Binder": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Configuration.CommandLine": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Configuration.EnvironmentVariables": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Configuration.FileExtensions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Configuration.Json": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Configuration.UserSecrets": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.DependencyInjection": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Diagnostics": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.FileProviders.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.FileProviders.Physical": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Hosting.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Logging": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Logging.Configuration": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Logging.Console": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Logging.Debug": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Logging.EventLog": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Logging.EventSource": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Options": "10.0.0-preview.7.25380.108" } }, "NuGet.Protocol": { @@ -54,9 +54,9 @@ }, "System.Security.Cryptography.Pkcs": { "type": "Direct", - "requested": "[9.0.7, )", - "resolved": "9.0.7", - "contentHash": "6LROjtkO4UCv0MVnnR8Z6FwnRryT+Sz5dz8ZefZG6/yz1kQGaVUd6gAdXZtqNPORQwuXFrNGTWvi7f8hWRkiyg==" + "requested": "[9.0.8, )", + "resolved": "9.0.8", + "contentHash": "+mtc8dZnrP9N1HZICncBzLUrX4YBP+WvAWb817auAA5mKOJzHZShuGpCtQiekgV/7N0uS/x0LkdBAezBcSBwVA==" }, "TomsToolbox.Composition.Analyzer": { "type": "Direct", @@ -66,227 +66,228 @@ }, "Microsoft.Extensions.Configuration.Abstractions": { "type": "Transitive", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "jMCM7Z7sqACZrJYcOrz2tE9toRKtR/2JlFAMc8In7epzdcOMCz5F7dINKZwnhltLBlYaAyg0xs/9KRRhHWuaNw==", + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "Tos2R09p02UbSg97w7QNr+dNTKuBtmsWKy4+awTnn2d34CXDpsKkAdDis6gLmhuCjz4c0HyB5S0l2ahaqu+u7A==", "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.0-preview.6.25358.103" + "Microsoft.Extensions.Primitives": "10.0.0-preview.7.25380.108" } }, "Microsoft.Extensions.Configuration.Binder": { "type": "Transitive", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "7dJhJ9ebXxqNeuabYk2gkzMr3LtrIp2qw7Mt2TXjCiEJudcK0z9ogm4vzwEH6AgUUiU+tGcJq8reEomzLZnkcw==", + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "BAcZtIevY+MgiTX9t9iuz8CoYmGPoL1QeAlhNav8EVJmNlhKR/H7nESjxJifejcCRuwQ+dcXlFtHo1xrCMaZWA==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.6.25358.103" + "Microsoft.Extensions.Configuration": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.7.25380.108" } }, "Microsoft.Extensions.Configuration.CommandLine": { "type": "Transitive", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "hE7vjnulJGfveTv8mFtBJAJywyGYQ6r8BvbCEtyK7XKC2JnUS5JhGqi87dG098hK48LdFXOH9u/kYoMlnptehA==", + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "wrRFfwx7avg204vRHD1C7//zo9axtSLqNydbPXVN6r1tpQUsTz2Mbd6QsYMo+zoNUSvFD7fPFZPsG8pkmbX50A==", "dependencies": { - "Microsoft.Extensions.Configuration": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.6.25358.103" + "Microsoft.Extensions.Configuration": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.7.25380.108" } }, "Microsoft.Extensions.Configuration.EnvironmentVariables": { "type": "Transitive", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "eswr15WlASdXGquY7OrTzNS4oMFaa1QvsEz7pP4ixOnodAZePt1BDs3rqJf0D97XpSbUKinYzaAq0hSDD4HrVQ==", + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "bIh84M0Clp94aGE827+cw3Ld3E+LN68Goqk1oyHTAkOMftp3YbkGB/yEHGdydsNEi3kfiLw5lZdu3Nh1Agt9gg==", "dependencies": { - "Microsoft.Extensions.Configuration": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.6.25358.103" + "Microsoft.Extensions.Configuration": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.7.25380.108" } }, "Microsoft.Extensions.Configuration.FileExtensions": { "type": "Transitive", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "6jecem+ivT6rue10h7+LFGu2tEdYA+Q1BeueBIwaA7M6QfxmRA8XXVA2/h3m6a/sm8NlFsJaxECQRzqVyUzvKA==", + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "eGgKM6UgrXTTGNDkPsXE4gofRMK+LPv2PIzMRUOVFLB2iAjoVhSgTTDBiQgVSXZW279FCaoILD8wC7zz5+sZBA==", "dependencies": { - "Microsoft.Extensions.Configuration": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.FileProviders.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.FileProviders.Physical": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Primitives": "10.0.0-preview.6.25358.103" + "Microsoft.Extensions.Configuration": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.FileProviders.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.FileProviders.Physical": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Primitives": "10.0.0-preview.7.25380.108" } }, "Microsoft.Extensions.Configuration.UserSecrets": { "type": "Transitive", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "z7Prpxxe7bmd5WLY7cn352vpRyDvqbmosUCYz2Cy6pWYJCx3yIm2c80y11chBjPM8oqPEUL7A6tK3MsdjF0wkA==", + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "X6M5ARSre9pHhQcrdIoPGCrGe2Xh6iM4AYwJGXRrgG6+blFTc04Iau7tvnjOhCDaEFr2g2cxMJI1wiLlJFOECg==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Configuration.Json": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.FileProviders.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.FileProviders.Physical": "10.0.0-preview.6.25358.103" + "Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Configuration.Json": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.FileProviders.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.FileProviders.Physical": "10.0.0-preview.7.25380.108" } }, "Microsoft.Extensions.DependencyInjection": { "type": "Transitive", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "789qUZQkqzBfPVvGDkHn+G/GCjjcZIREzgcnQVcNoPvR+hBM6YQnSzL7oNiwXSDBfhV3OoNJ3Q3VcUiuCWACsA==", + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "UVMEx1ZOOugXCNxXARPsmtu7B3RzYShFoeGvmO4wA1OmcW8cOSXr7QNTiCTp3uXNrx14daefmDX/BlsExlZyVg==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.6.25358.103" + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.7.25380.108" } }, "Microsoft.Extensions.Diagnostics": { "type": "Transitive", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "iYPgCak/Y5zOfTQljKv3FZlV667salExF3cwVipYRkw3IjLe9zYjvmbqKCc8xo0wyJAUqZuJyin0/3u2UG3rUg==", + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "hbUpAah1f1gSx7NT7GKnmnzdQiP6POB7Mo8HNGZQ5qdcsZm6c3e6toK92u4kMkgJ9Cp0mRgL2wIyDfT6ixS/qw==", "dependencies": { - "Microsoft.Extensions.Configuration": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Diagnostics.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Options.ConfigurationExtensions": "10.0.0-preview.6.25358.103" + "Microsoft.Extensions.Configuration": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Diagnostics.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Options.ConfigurationExtensions": "10.0.0-preview.7.25380.108" } }, "Microsoft.Extensions.Diagnostics.Abstractions": { "type": "Transitive", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "gC1arc0MQ+1sX46IrWterWv/yjhaIBA4e0QmyIVsHgWmgRX4pei2CuG2TXrRDY1u+pgG5xGlHN8FNhBI8YzXZQ==", + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "4KCRTDM1TUA1+zwUBefsM9vjCRzAjkhLOsITu5X/z8GxdwxvhVRQL3svELII4AwcWG2PUvAqWHIGnjmKlYJmIQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Options": "10.0.0-preview.6.25358.103" + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Options": "10.0.0-preview.7.25380.108" } }, "Microsoft.Extensions.FileProviders.Abstractions": { "type": "Transitive", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "CQyTCUGP9yF6N68+URCrS4F6F8YtQECb8BIqi4cVDNF5JykM551zCVL7vCoghfAFCBiERbCBPwu46nxy/u7lSA==", + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "lvXcu7o7ETZ0SRPTOMhMuzyABFSiTwQdye1ATqdQH4u0n46s0QtTMN8u8zrHdIDtU5zv8hv3PqnOmmQt6lMzEQ==", "dependencies": { - "Microsoft.Extensions.Primitives": "10.0.0-preview.6.25358.103" + "Microsoft.Extensions.Primitives": "10.0.0-preview.7.25380.108" } }, "Microsoft.Extensions.FileProviders.Physical": { "type": "Transitive", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "jCmO0T5g3eUgp6Z7DgyDIqgQQdhknxSJ3/Qt796inNrNcT3wGCtUQoxJKDHjNTfL8kDUe7Ajq221z9YhCd7EwQ==", + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "CCWJM/f0hEldsKdB+QXJpcyELI0VRHbIuWWejCk9pNQBTuPOJHX5Lxsn4Lt8d30DGosTfkAQWLpy/wh+TGT6xA==", "dependencies": { - "Microsoft.Extensions.FileProviders.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.FileSystemGlobbing": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Primitives": "10.0.0-preview.6.25358.103" + "Microsoft.Extensions.FileProviders.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.FileSystemGlobbing": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Primitives": "10.0.0-preview.7.25380.108" } }, "Microsoft.Extensions.FileSystemGlobbing": { "type": "Transitive", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "0ElgXEF7R+oTK06ctnHQ2GCKbMFDwcEf7PGjmFD/P2G4gD2B6Q4YeKca1+2X1wAaJaxrl9G5IqWJyQG5L/hPrg==" + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "HsDTy1yAhOyznpgtbaUpiHojeMDrmkwAI/iW6G9PksLfhJAFXT1PffKoWMG2+fS4rWo6yoaro2cmJH0RYBKJ0Q==" }, "Microsoft.Extensions.Hosting.Abstractions": { "type": "Transitive", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "YRzdob0VvFvaSbfJlLXeX1ij+3sAQo2fLWwfyh9WaYsXhGWDL9RB3R35YAeeZ33sFn/LCUVH+Z0XK8fWNlOlPA==", + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "J6zRebs9tVxWat6q3Z8v1fknqYhUbyUVoZYiGqhu7g+ChVYeCdp/YL2qSvC/Ap/KThXu6+C+R40gdDPCjUq5EQ==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Diagnostics.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.FileProviders.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.6.25358.103" + "Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Diagnostics.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.FileProviders.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.7.25380.108" } }, "Microsoft.Extensions.Logging": { "type": "Transitive", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "O7o3t9S1pc7JmnEem3bKmoyZUvfZMQxCJlQIRNv6ERVNXlgbagWgxCuwoI0b499b/MG8CpMryTWjQAsYba8VoQ==", + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "vktcXpKfaF3TEC5OoAv2ySdImeBErcbFwUduuFIGvKOdYGw1B1N8ZpG5GLxApMXFgygdMcAFrkotDWzOF1npUA==", "dependencies": { - "Microsoft.Extensions.DependencyInjection": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Options": "10.0.0-preview.6.25358.103" + "Microsoft.Extensions.DependencyInjection": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Options": "10.0.0-preview.7.25380.108" } }, "Microsoft.Extensions.Logging.Abstractions": { "type": "Transitive", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "ktG/8xOcrtBL176cYv6mzOL+YRSPySE8hcppHonAXYa8jf3lW/WmxfAUwK0WtUEl7MdYR8mbuEAbSg81crBq5Q==", + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "qfx62EG7wvjym/GusNX+kzqPByIVYiXyqBYaObQlIch5YukiVd4ovUJHALYt11jpcxpv9nmjgmqahIluf2j5xA==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.6.25358.103" + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.7.25380.108" } }, "Microsoft.Extensions.Logging.Configuration": { "type": "Transitive", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "P2dXt5+e7pDwTrK7V9wT/lJ0m5L0NvDGrjKb1XVLBXp3i6leNKG/knChvAp31vSHuypOxDN4HTnHKApNm69cFQ==", + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "nfivpgjltKnYWCT62WtNgaRyyTv92nRYkqJabEQIvmtlQrjuYNb/kiECy74+jd4t4AQPx3hlPn9hWiLGvIEHhg==", "dependencies": { - "Microsoft.Extensions.Configuration": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Configuration.Binder": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Logging": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Options": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Options.ConfigurationExtensions": "10.0.0-preview.6.25358.103" + "Microsoft.Extensions.Configuration": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Configuration.Binder": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Logging": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Options": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Options.ConfigurationExtensions": "10.0.0-preview.7.25380.108" } }, "Microsoft.Extensions.Logging.Console": { "type": "Transitive", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "JYTuOpP8vW93q9hue1Tx0+kxB3gLTN/KxFoxrpS+8wgElJ9O4lkw+JU/pAhzvohPGRPbGzy64kuAoPSdOF6VLA==", + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "VfOeXETfctJamiTwovg1SmyfEboi8klawzpE6hv45f8KPajn/PPTuYRCQjaQWiP0praYdAJWrV4TjvDF0+xxeg==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Logging": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Logging.Configuration": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Options": "10.0.0-preview.6.25358.103" + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Logging": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Logging.Configuration": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Options": "10.0.0-preview.7.25380.108" } }, "Microsoft.Extensions.Logging.Debug": { "type": "Transitive", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "HrhLOuVl/TiVDI/G280HCMwyqkvZYE1+WtDkecrjDH8hCP10JTsn0zODtHoGn+S9JOcIGa9woPb+7oklsEAx9Q==", + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "R1XFfHifpXKXtIGDt/QrvwnqPEOMEMdDppBMVjb5UpI3RSBKriTWdKeaJIcc1gx6e56aVO2xOT3EtfnK6Xb3Ig==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Logging": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.6.25358.103" + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Logging": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.7.25380.108" } }, "Microsoft.Extensions.Logging.EventLog": { "type": "Transitive", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "gOQk5BPZumh3wfe5LO/ptEKqlPmKZIDNrTx6cVmg8bVFmrB6SGsXyw8Rz5jyH7SNZ7JlFLoNharwYa/9Z3Ou2A==", + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "pa6ggb9nqfU+DPLI2NXRaUDmkrw3mvmXcnh4NQrgcvzNQPB1PW8HySNm+KvzX/nK/UmPtJEa3NbOhmpDBdrbMA==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Logging": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Options": "10.0.0-preview.6.25358.103", - "System.Diagnostics.EventLog": "10.0.0-preview.6.25358.103" + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Logging": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Options": "10.0.0-preview.7.25380.108", + "System.Diagnostics.EventLog": "10.0.0-preview.7.25380.108" } }, "Microsoft.Extensions.Logging.EventSource": { "type": "Transitive", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "h4M6SbPBP/0GILpLcvLZl2gkKYmKZTANx+5yCMUeAaBzZ8oTe4dr5TirTVPKscuNvaDFIUZ16sGQ0HwpmjoVzA==", + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "K0Qydvu3fnotw1kynMz6kDt8FX+VnKxOjX1lVFjKKkyHroHitpz8YUOuA+TlbXQFZQyv3bO7nDimKVkcvPFcVQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Logging": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Options": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Primitives": "10.0.0-preview.6.25358.103" + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Logging": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Logging.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Options": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Primitives": "10.0.0-preview.7.25380.108" } }, "Microsoft.Extensions.Options": { "type": "Transitive", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "V3IaV1wPAVpVfDrOK0b4xKZVEHMFlYSL0Wfx6/Tm8bt4ovodorVqHe/EvsogWmsbcj1XhJvFuWXVDuG479i2vw==", + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "kG3XdCpBiMSxPsAeMCy8YhHpe3sUlSoBGuZQfTcC/VaWKrvpQ5OrbhBCfb/SOPLzWexijSsDwtgjYenRvqE91Q==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Primitives": "10.0.0-preview.6.25358.103" + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Primitives": "10.0.0-preview.7.25380.108" } }, "Microsoft.Extensions.Options.ConfigurationExtensions": { "type": "Transitive", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "dx3KoYXwXtivveyBEDjxmYuFnN/ZyYWJWVn7vWInCP9D1MQ0WmXms7L4bPsC6Ad+4OYi0lNCYz3Tv3fyJ9DD2Q==", + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "z05jUKh7+6FTFE+Obdg6wEQqvdxNf+ty5YUZ9VjNyzYcoN9hZMbX7RucTifl4CZCJXadlv79C7ZCSmHIK4x0pw==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Configuration.Binder": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Options": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Primitives": "10.0.0-preview.6.25358.103" + "Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Configuration.Binder": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Options": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Primitives": "10.0.0-preview.7.25380.108" } }, "Microsoft.Extensions.Primitives": { "type": "Transitive", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "iSpD+A130hPiq20tbqKGujXtFY1Zc3q/R/AlN3qPpUYwmxEZbybykQ+YpiDzdyoGvo0gp/4vtk/Hqcvkwt53Gw==" + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "0oC37fX0irgi29vN8JQdvXn1jZI6upCIs8Q8J+loetDrWrB3fwYBqbUdz/mMS41G+kkjCSaGRfZM8dBiZqqMpw==" }, "Newtonsoft.Json": { "type": "Transitive", @@ -339,8 +340,8 @@ }, "System.Diagnostics.EventLog": { "type": "Transitive", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "JNwN+0tuqtHnELPl7P2T/OjWlgCdqB9fNuwAOh46W7t/2Z5HU+1ROqkiJCupwSVrXjSfV46lcas6HqhUC8BpYQ==" + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "kKFLata6tLJ/1+jJTbsE9YZu/zeOGO+9ZeukQ3uni5flEjcPpjqGxtmqOx/IFUecMQjNGheNEVyC1KaMl+aZMg==" }, "System.Security.Cryptography.ProtectedData": { "type": "Transitive", @@ -360,8 +361,8 @@ "ICSharpCode.Decompiler": "[8.0.0-noversion, )", "K4os.Compression.LZ4": "[1.3.8, )", "Mono.Cecil": "[0.11.6, )", - "System.Composition.AttributedModel": "[10.0.0-preview.6.25358.103, )", - "System.Reflection.Metadata": "[10.0.0-preview.6.25358.103, )", + "System.Composition.AttributedModel": "[10.0.0-preview.7.25380.108, )", + "System.Reflection.Metadata": "[10.0.0-preview.7.25380.108, )", "System.Runtime.CompilerServices.Unsafe": "[6.1.2, )" } }, @@ -382,31 +383,31 @@ }, "Microsoft.Extensions.Configuration": { "type": "CentralTransitive", - "requested": "[10.0.0-preview.6.25358.103, )", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "fypDLNI6JZe1ipJLYF0quEHa6I9qRQUNMRA1x8+BSY+KJn70BiNNPDSkJFrnAUdrJT+N2otJRm64xRhou0Em6w==", + "requested": "[10.0.0-preview.7.25380.108, )", + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "bqeb/og5BMVpJ0cAfVgHhyNPfQa/uF/t6MhoQ9Z0kAUuOvk+hCfnSKlx2CZUzrkrWN6zK/jRXZW8RsbIxtzexw==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Primitives": "10.0.0-preview.6.25358.103" + "Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Primitives": "10.0.0-preview.7.25380.108" } }, "Microsoft.Extensions.Configuration.Json": { "type": "CentralTransitive", - "requested": "[10.0.0-preview.6.25358.103, )", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "KcUEaL2H9PSn5K3lJHPYY6VXzv5hSZfmt+EYWq/ws9wE/mKDfjFUClDZ5LvqjMXU79PIYRlfB6nKn9bBglltnA==", + "requested": "[10.0.0-preview.7.25380.108, )", + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "vMUtXxczM+wt2rZT3AtDHRG4m0Wzn4R+cTFSr4RDq3VPy1z+qeX+xa+a9Ft73R5ODy/T0N5F1fXxYN6h1fvh6w==", "dependencies": { - "Microsoft.Extensions.Configuration": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.Configuration.FileExtensions": "10.0.0-preview.6.25358.103", - "Microsoft.Extensions.FileProviders.Abstractions": "10.0.0-preview.6.25358.103" + "Microsoft.Extensions.Configuration": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Configuration.Abstractions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.Configuration.FileExtensions": "10.0.0-preview.7.25380.108", + "Microsoft.Extensions.FileProviders.Abstractions": "10.0.0-preview.7.25380.108" } }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "CentralTransitive", - "requested": "[10.0.0-preview.6.25358.103, )", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "XrX5CQwI6dnGvmPJJxf/X1JxhPzRwdKKUf9onJKN+qyqP+wwH9floTgkckGdJxVV+jvnWeUgSJ6MZvQM6WmwSg==" + "requested": "[10.0.0-preview.7.25380.108, )", + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "0oSQ8o2O8eMxaInqR1GykEzzlerBTN3xQMsEtaWA4zbf1LmrqV7H9ctTTjK4oMeWMCTb9mfYoN9fsVWbAhkTXA==" }, "Mono.Cecil": { "type": "CentralTransitive", @@ -416,21 +417,21 @@ }, "System.Collections.Immutable": { "type": "CentralTransitive", - "requested": "[10.0.0-preview.6.25358.103, )", + "requested": "[10.0.0-preview.7.25380.108, )", "resolved": "9.0.0", "contentHash": "QhkXUl2gNrQtvPmtBTQHb0YsUrDiDQ2QS09YbtTTiSjGcf7NBqtYbrG/BE06zcBPCKEwQGzIv13IVdXNOSub2w==" }, "System.Composition.AttributedModel": { "type": "CentralTransitive", - "requested": "[10.0.0-preview.6.25358.103, )", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "PR03G/Tm4JC4lzzngX8gsfbdpQ4DrZiI38W5Q2HbKsyiKED998lYqiBZUcRriyMVenBw8TNSiGnNadai6+GHpA==" + "requested": "[10.0.0-preview.7.25380.108, )", + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "BgKfmK5BAjJPj3DvCh7Qv2v/91FQfY2HwYchSurW1JajkVNhpSCCciZgk5tNOr815yUUpcAG8gY/CUUdYYdXcw==" }, "System.Reflection.Metadata": { "type": "CentralTransitive", - "requested": "[10.0.0-preview.6.25358.103, )", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "/87qwC+yDFe0/xG/7rmq/jmlmRCoV+wwC6s3ek8zDU5iEiKo0wliHnvCFzlMbyQtFiTGBvabvyPiGFiO/6ZXEg==" + "requested": "[10.0.0-preview.7.25380.108, )", + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "8oQpCMmBOI24XT+xwG1dec/gOv+1uUqAasXYu2vq0NWpXsg/TYw563jD9wMSbQ/lIjnKJmPRvjLFyG8xaX9uww==" }, "System.Runtime.CompilerServices.Unsafe": { "type": "CentralTransitive", diff --git a/ICSharpCode.ILSpyX/packages.lock.json b/ICSharpCode.ILSpyX/packages.lock.json index 894559474..33c23514d 100644 --- a/ICSharpCode.ILSpyX/packages.lock.json +++ b/ICSharpCode.ILSpyX/packages.lock.json @@ -10,9 +10,9 @@ }, "Microsoft.Sbom.Targets": { "type": "Direct", - "requested": "[4.0.3, )", - "resolved": "4.0.3", - "contentHash": "xwHbbj9gLj1HZzLVEM2UpQM7ZY7FkiEs/nRkt6G1H7mR/14aNhjsskRoI7K7CezHJA4cASsGxTvqorbUXTI1TQ==" + "requested": "[4.1.0, )", + "resolved": "4.1.0", + "contentHash": "GidfeSVHFtNwZSbD2wmwWiUiGkVdND8QR1z21WpFa+/47Mi3YiDkAzsWF02wXrMx2Xd8j3QSfKOUY1JtnF+7uw==" }, "Microsoft.SourceLink.GitHub": { "type": "Direct", @@ -32,15 +32,15 @@ }, "System.Composition.AttributedModel": { "type": "Direct", - "requested": "[10.0.0-preview.6.25358.103, )", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "PR03G/Tm4JC4lzzngX8gsfbdpQ4DrZiI38W5Q2HbKsyiKED998lYqiBZUcRriyMVenBw8TNSiGnNadai6+GHpA==" + "requested": "[10.0.0-preview.7.25380.108, )", + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "BgKfmK5BAjJPj3DvCh7Qv2v/91FQfY2HwYchSurW1JajkVNhpSCCciZgk5tNOr815yUUpcAG8gY/CUUdYYdXcw==" }, "System.Reflection.Metadata": { "type": "Direct", - "requested": "[10.0.0-preview.6.25358.103, )", - "resolved": "10.0.0-preview.6.25358.103", - "contentHash": "/87qwC+yDFe0/xG/7rmq/jmlmRCoV+wwC6s3ek8zDU5iEiKo0wliHnvCFzlMbyQtFiTGBvabvyPiGFiO/6ZXEg==" + "requested": "[10.0.0-preview.7.25380.108, )", + "resolved": "10.0.0-preview.7.25380.108", + "contentHash": "8oQpCMmBOI24XT+xwG1dec/gOv+1uUqAasXYu2vq0NWpXsg/TYw563jD9wMSbQ/lIjnKJmPRvjLFyG8xaX9uww==" }, "System.Runtime.CompilerServices.Unsafe": { "type": "Direct", @@ -73,7 +73,7 @@ }, "System.Collections.Immutable": { "type": "CentralTransitive", - "requested": "[10.0.0-preview.6.25358.103, )", + "requested": "[10.0.0-preview.7.25380.108, )", "resolved": "9.0.0", "contentHash": "QhkXUl2gNrQtvPmtBTQHb0YsUrDiDQ2QS09YbtTTiSjGcf7NBqtYbrG/BE06zcBPCKEwQGzIv13IVdXNOSub2w==" } diff --git a/ILSpy.BamlDecompiler.Tests/ILSpy.BamlDecompiler.Tests.csproj b/ILSpy.BamlDecompiler.Tests/ILSpy.BamlDecompiler.Tests.csproj index a83191339..45f47d550 100644 --- a/ILSpy.BamlDecompiler.Tests/ILSpy.BamlDecompiler.Tests.csproj +++ b/ILSpy.BamlDecompiler.Tests/ILSpy.BamlDecompiler.Tests.csproj @@ -36,11 +36,11 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/ILSpy.Tests/ILSpy.Tests.csproj b/ILSpy.Tests/ILSpy.Tests.csproj index 321bf512f..8e68465e4 100644 --- a/ILSpy.Tests/ILSpy.Tests.csproj +++ b/ILSpy.Tests/ILSpy.Tests.csproj @@ -74,7 +74,6 @@ - all @@ -83,6 +82,7 @@ + diff --git a/ILSpy/Controls/CustomDialog.cs b/ILSpy/Controls/CustomDialog.cs index 63ca6bef9..b2fa2617e 100644 --- a/ILSpy/Controls/CustomDialog.cs +++ b/ILSpy/Controls/CustomDialog.cs @@ -51,7 +51,7 @@ namespace ICSharpCode.ILSpy.Controls using (Graphics g = this.CreateGraphics()) { - SizeF size = TextRenderer.MeasureText(message, label.Font, default, TextFormatFlags.NoPrefix); + Size size = TextRenderer.MeasureText(message, label.Font, new((int)(Screen.FromControl(this).WorkingArea.Width * 0.9), int.MaxValue), TextFormatFlags.NoPrefix | TextFormatFlags.WordBreak); Size clientSize = new Size((int)Math.Ceiling(size.Width * 96 / g.DpiX) + DockPadding.Left + DockPadding.Right, (int)Math.Ceiling(size.Height * 96 / g.DpiY) + DockPadding.Top + DockPadding.Bottom); Button[] buttons = new Button[buttonLabels.Length]; int[] positions = new int[buttonLabels.Length]; @@ -64,7 +64,7 @@ namespace ICSharpCode.ILSpy.Controls string buttonLabel = buttonLabels[i]; newButton.Text = buttonLabel; newButton.Click += new EventHandler(ButtonClick); - SizeF buttonSize = TextRenderer.MeasureText(buttonLabel, newButton.Font); + Size buttonSize = TextRenderer.MeasureText(buttonLabel, newButton.Font); newButton.Width = Math.Max(newButton.Width, ((int)Math.Ceiling(buttonSize.Width * 96 / g.DpiX / 8.0) + 1) * 8); positions[i] = pos; buttons[i] = newButton; diff --git a/ILSpy/Properties/Resources.Designer.cs b/ILSpy/Properties/Resources.Designer.cs index e6308d83e..6c08ae8e7 100644 --- a/ILSpy/Properties/Resources.Designer.cs +++ b/ILSpy/Properties/Resources.Designer.cs @@ -1017,6 +1017,15 @@ namespace ICSharpCode.ILSpy.Properties { } } + /// + /// Looks up a localized string similar to Expand params arguments by removing explicit array creation. + /// + public static string DecompilerSettings_ExpandParamsArguments { + get { + return ResourceManager.GetString("DecompilerSettings.ExpandParamsArguments", resourceCulture); + } + } + /// /// Looks up a localized string similar to Use file-scoped namespace declarations. /// diff --git a/ILSpy/Properties/Resources.resx b/ILSpy/Properties/Resources.resx index 65d7471aa..f14786326 100644 --- a/ILSpy/Properties/Resources.resx +++ b/ILSpy/Properties/Resources.resx @@ -360,6 +360,9 @@ Are you sure you want to continue? Transform to do-while, if possible + + Expand params arguments by removing explicit array creation + F#-specific options