diff --git a/Contracts/Synergy.Contracts.Samples/Synergy.Contracts.Samples.csproj b/Contracts/Synergy.Contracts.Samples/Synergy.Contracts.Samples.csproj index 5e87042..81f76f8 100644 --- a/Contracts/Synergy.Contracts.Samples/Synergy.Contracts.Samples.csproj +++ b/Contracts/Synergy.Contracts.Samples/Synergy.Contracts.Samples.csproj @@ -1,8 +1,10 @@  - netstandard2.0;net472 false false + net6.0 + enable + 10 full @@ -20,8 +22,12 @@ + + + + \ No newline at end of file diff --git a/Contracts/Synergy.Contracts.Test/PublicApi/Conventions/Synergy.Contracts.approved.md b/Contracts/Synergy.Contracts.Test/PublicApi/Conventions/Synergy.Contracts.approved.md index d9a71c7..aa5f43d 100644 --- a/Contracts/Synergy.Contracts.Test/PublicApi/Conventions/Synergy.Contracts.approved.md +++ b/Contracts/Synergy.Contracts.Test/PublicApi/Conventions/Synergy.Contracts.approved.md @@ -2,13 +2,13 @@ ## DesignByContractViolationException : Exception - TargetSite: MethodBase { get; } - - StackTrace: string { get; } - Message: string? [Nullable] { get; } - Data: IDictionary? [Nullable] { get; } - InnerException: Exception { get; } - HelpLink: string { get; set; } - Source: string { get; set; } - HResult: int { get; set; } + - StackTrace: string { get; } ## Fail - Fail.IfTooLong( @@ -139,13 +139,13 @@ ) : DateTime [Extension, AssertionMethod] - Fail.BecauseEnumOutOfRange( value: T - ) : DesignByContractViolationException [NotNull, Pure] + ) : DesignByContractViolationException? [NullableContext, NotNull, Pure] - Fail.IfEnumNotDefined( value: object [NotNull, NotNull] ) : Void - Fail.IfEnumNotDefined( value: T - ) : Void + ) : Void? [NullableContext] - Fail.FailIfEnumOutOfRange( value: Enum [NotNull, NotNull], name: string [NotNull, NotNull] @@ -201,8 +201,8 @@ ) : T [Extension, NotNull, AssertionMethod, ContractAnnotation] - Fail.OrFail( value: Nullable`1, - name: string [NotNull, NotNull] - ) : T [Extension, ContractAnnotation] + name: string? [Nullable, NotNull, NotNull] + ) : T? [NullableContext, Extension, ContractAnnotation] - Fail.NotNull( value: T [CanBeNull, AssertionCondition, NoEnumeration], name: string [NotNull, NotNull] @@ -247,7 +247,7 @@ argumentName: string [NotNull, NotNull] ) : Void [AssertionMethod, ContractAnnotation] - Fail.OrFailIfWhiteSpace( - value: string [CanBeNull, AssertionCondition, NoEnumeration], + value: string? [Nullable, AssertionCondition, NoEnumeration], name: string [NotNull, NotNull] ) : string [Extension, NotNull, AssertionMethod, ContractAnnotation] - Fail.IfWhitespace( @@ -270,8 +270,9 @@ description: string ) : Principle [MustUseReturnValue] - Business.When( - preCondition: bool - ) : Precondition [MustUseReturnValue] + preCondition: bool, + expression: string [CallerArgumentExpression, Optional] + ) : Precondition? [NullableContext, MustUseReturnValue] - Business.Requires( condition: bool ) : Requirement [MustUseReturnValue] @@ -279,13 +280,13 @@ ## Requirements.BusinessRuleViolationException : Exception - Requirement: Requirement { get; } - TargetSite: MethodBase { get; } - - StackTrace: string { get; } - Message: string? [Nullable] { get; } - Data: IDictionary? [Nullable] { get; } - InnerException: Exception { get; } - HelpLink: string { get; set; } - Source: string { get; set; } - HResult: int { get; set; } + - StackTrace: string { get; } ## Requirements.Business+Precondition (struct) - Met: bool { get; } diff --git a/Contracts/Synergy.Contracts.Test/PublicApi/Synergy.Contracts.approved.txt b/Contracts/Synergy.Contracts.Test/PublicApi/Synergy.Contracts.approved.txt index 50b0100..f3bfafb 100644 --- a/Contracts/Synergy.Contracts.Test/PublicApi/Synergy.Contracts.approved.txt +++ b/Contracts/Synergy.Contracts.Test/PublicApi/Synergy.Contracts.approved.txt @@ -1,6 +1,6 @@ [assembly: System.Resources.NeutralResourcesLanguage("en")] [assembly: System.Runtime.InteropServices.ComVisible(false)] -[assembly: System.Runtime.Versioning.TargetFramework(".NETCoreApp,Version=v5.0", FrameworkDisplayName="")] +[assembly: System.Runtime.Versioning.TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName="")] namespace Synergy.Contracts { [System.Serializable] @@ -207,7 +207,7 @@ namespace Synergy.Contracts [JetBrains.Annotations.ContractAnnotation("value: null => halt; value: notnull => notnull")] [JetBrains.Annotations.NotNull] [return: System.Diagnostics.CodeAnalysis.NotNull] - public static string OrFailIfWhiteSpace([JetBrains.Annotations.AssertionCondition(JetBrains.Annotations.AssertionConditionType.IS_NOT_NULL)] [JetBrains.Annotations.CanBeNull] [JetBrains.Annotations.NoEnumeration] this string value, [JetBrains.Annotations.NotNull] [System.Diagnostics.CodeAnalysis.NotNull] string name) { } + public static string OrFailIfWhiteSpace([JetBrains.Annotations.AssertionCondition(JetBrains.Annotations.AssertionConditionType.IS_NOT_NULL)] [JetBrains.Annotations.NoEnumeration] this string? value, [JetBrains.Annotations.NotNull] [System.Diagnostics.CodeAnalysis.NotNull] string name) { } } [System.Diagnostics.CodeAnalysis.SuppressMessage("ReSharper", "HeapView.BoxingAllocation")] public readonly struct Violation @@ -230,7 +230,7 @@ namespace Synergy.Contracts.Requirements [JetBrains.Annotations.MustUseReturnValue] public static Synergy.Contracts.Requirements.Business.Principle Rule(string description) { } [JetBrains.Annotations.MustUseReturnValue] - public static Synergy.Contracts.Requirements.Business.Precondition When(bool preCondition) { } + public static Synergy.Contracts.Requirements.Business.Precondition When(bool preCondition, [System.Runtime.CompilerServices.CallerArgumentExpression("preCondition")] string? expression = null) { } public interface IPrecondition { bool Met { get; } diff --git a/Contracts/Synergy.Contracts.Test/Requirements/BusinessDocumentation.cs b/Contracts/Synergy.Contracts.Test/Requirements/BusinessDocumentation.cs index 770efe9..5177c9a 100644 --- a/Contracts/Synergy.Contracts.Test/Requirements/BusinessDocumentation.cs +++ b/Contracts/Synergy.Contracts.Test/Requirements/BusinessDocumentation.cs @@ -12,6 +12,11 @@ namespace Synergy.Contracts.Test.Requirements { public class BusinessDocumentation : BusinessTest { + public static string? Read(string method) + { + return ClassReader.ReadMethodBody(method); + } + [Fact] public void General() { @@ -57,6 +62,8 @@ private void Step1Sample() yield return new Markdown.Paragraph("This will throw `NotImplementedException` for sure. But we have not finished our job yet."); } + + private void Step2Sample(int withdrawLimit, int withdrawAmount) { Business.Rule("When withdraw limit is set, withdrawn amount cannot exceed the limit") diff --git a/Contracts/Synergy.Contracts.Test/Requirements/BusinessUsage.Samples.cs b/Contracts/Synergy.Contracts.Test/Requirements/BusinessUsage.Samples.cs new file mode 100644 index 0000000..235ab24 --- /dev/null +++ b/Contracts/Synergy.Contracts.Test/Requirements/BusinessUsage.Samples.cs @@ -0,0 +1,20 @@ +using System; +using Synergy.Contracts.Requirements; +using Synergy.Contracts.Test.Documentation; + +namespace Synergy.Contracts.Test.Requirements +{ + partial class BusinessUsage + { + private static string? Read(string method) + { + return ClassReader.ReadMethodBody(method); + } + + public void Step1Sample() + { + Business.Rule("When withdraw limit is set, withdrawn amount cannot exceed the limit") + .Throws(new NotImplementedException("NOT IMPLEMENTED")); + } + } +} \ No newline at end of file diff --git a/Contracts/Synergy.Contracts.Test/Requirements/BusinessUsage.cs b/Contracts/Synergy.Contracts.Test/Requirements/BusinessUsage.cs new file mode 100644 index 0000000..58ca63b --- /dev/null +++ b/Contracts/Synergy.Contracts.Test/Requirements/BusinessUsage.cs @@ -0,0 +1,314 @@ +// ------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version: 16.0.0.0 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +// ------------------------------------------------------------------------------ +namespace Synergy.Contracts.Test.Requirements +{ + using System; + + /// + /// Class to produce the template output + /// + + #line 1 "C:\Projects\Synergy\framework\src\Contracts\Synergy.Contracts.Test\Requirements\BusinessUsage.tt" + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "16.0.0.0")] + public partial class BusinessUsage : BusinessUsageBase + { +#line hidden + /// + /// Create the template output + /// + public virtual string TransformText() + { + this.Write("\r\n# Business class\r\n\r\n## Definition\r\n\r\nNamespace: Synergy.Contracts.Requirements
\r\nAssembly: Synergy.Contracts.dll\r\n\r\nAllows to create business requirement verification conditions and checks.\r\n\r\n## Methods\r\n\r\n| Name | Summary |\r\n|------|---------|\r\n| Rule(string) | Gets rule with description only. |\r\n| When(bool, string) | |\r\n| Requires(bool) | |\r\n\r\n## Examples\r\n\r\n### First step: business requirements gathering\r\n\r\nQuite often you might hear during analysis phase of your project such words:\r\n\r\n> When withdraw limit is set, withdrawn amount cannot exceed the limit\r\n\r\nWhen you hear such sentence just start your development by writing it down like that:\r\n\r\n``` csharp\r\n"); + + #line 32 "C:\Projects\Synergy\framework\src\Contracts\Synergy.Contracts.Test\Requirements\BusinessUsage.tt" + this.Write(this.ToStringHelper.ToStringWithCulture(Read(nameof(this.Step1Sample)))); + + #line default + #line hidden + this.Write("\r\n```\r\n\r\ntest"); + return this.GenerationEnvironment.ToString(); + } + } + + #line default + #line hidden + #region Base class + /// + /// Base class for this transformation + /// + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "16.0.0.0")] + public class BusinessUsageBase + { + #region Fields + private global::System.Text.StringBuilder generationEnvironmentField; + private global::System.CodeDom.Compiler.CompilerErrorCollection errorsField; + private global::System.Collections.Generic.List indentLengthsField; + private string currentIndentField = ""; + private bool endsWithNewline; + private global::System.Collections.Generic.IDictionary sessionField; + #endregion + #region Properties + /// + /// The string builder that generation-time code is using to assemble generated output + /// + protected System.Text.StringBuilder GenerationEnvironment + { + get + { + if ((this.generationEnvironmentField == null)) + { + this.generationEnvironmentField = new global::System.Text.StringBuilder(); + } + return this.generationEnvironmentField; + } + set + { + this.generationEnvironmentField = value; + } + } + /// + /// The error collection for the generation process + /// + public System.CodeDom.Compiler.CompilerErrorCollection Errors + { + get + { + if ((this.errorsField == null)) + { + this.errorsField = new global::System.CodeDom.Compiler.CompilerErrorCollection(); + } + return this.errorsField; + } + } + /// + /// A list of the lengths of each indent that was added with PushIndent + /// + private System.Collections.Generic.List indentLengths + { + get + { + if ((this.indentLengthsField == null)) + { + this.indentLengthsField = new global::System.Collections.Generic.List(); + } + return this.indentLengthsField; + } + } + /// + /// Gets the current indent we use when adding lines to the output + /// + public string CurrentIndent + { + get + { + return this.currentIndentField; + } + } + /// + /// Current transformation session + /// + public virtual global::System.Collections.Generic.IDictionary Session + { + get + { + return this.sessionField; + } + set + { + this.sessionField = value; + } + } + #endregion + #region Transform-time helpers + /// + /// Write text directly into the generated output + /// + public void Write(string textToAppend) + { + if (string.IsNullOrEmpty(textToAppend)) + { + return; + } + // If we're starting off, or if the previous text ended with a newline, + // we have to append the current indent first. + if (((this.GenerationEnvironment.Length == 0) + || this.endsWithNewline)) + { + this.GenerationEnvironment.Append(this.currentIndentField); + this.endsWithNewline = false; + } + // Check if the current text ends with a newline + if (textToAppend.EndsWith(global::System.Environment.NewLine, global::System.StringComparison.CurrentCulture)) + { + this.endsWithNewline = true; + } + // This is an optimization. If the current indent is "", then we don't have to do any + // of the more complex stuff further down. + if ((this.currentIndentField.Length == 0)) + { + this.GenerationEnvironment.Append(textToAppend); + return; + } + // Everywhere there is a newline in the text, add an indent after it + textToAppend = textToAppend.Replace(global::System.Environment.NewLine, (global::System.Environment.NewLine + this.currentIndentField)); + // If the text ends with a newline, then we should strip off the indent added at the very end + // because the appropriate indent will be added when the next time Write() is called + if (this.endsWithNewline) + { + this.GenerationEnvironment.Append(textToAppend, 0, (textToAppend.Length - this.currentIndentField.Length)); + } + else + { + this.GenerationEnvironment.Append(textToAppend); + } + } + /// + /// Write text directly into the generated output + /// + public void WriteLine(string textToAppend) + { + this.Write(textToAppend); + this.GenerationEnvironment.AppendLine(); + this.endsWithNewline = true; + } + /// + /// Write formatted text directly into the generated output + /// + public void Write(string format, params object[] args) + { + this.Write(string.Format(global::System.Globalization.CultureInfo.CurrentCulture, format, args)); + } + /// + /// Write formatted text directly into the generated output + /// + public void WriteLine(string format, params object[] args) + { + this.WriteLine(string.Format(global::System.Globalization.CultureInfo.CurrentCulture, format, args)); + } + /// + /// Raise an error + /// + public void Error(string message) + { + System.CodeDom.Compiler.CompilerError error = new global::System.CodeDom.Compiler.CompilerError(); + error.ErrorText = message; + this.Errors.Add(error); + } + /// + /// Raise a warning + /// + public void Warning(string message) + { + System.CodeDom.Compiler.CompilerError error = new global::System.CodeDom.Compiler.CompilerError(); + error.ErrorText = message; + error.IsWarning = true; + this.Errors.Add(error); + } + /// + /// Increase the indent + /// + public void PushIndent(string indent) + { + if ((indent == null)) + { + throw new global::System.ArgumentNullException("indent"); + } + this.currentIndentField = (this.currentIndentField + indent); + this.indentLengths.Add(indent.Length); + } + /// + /// Remove the last indent that was added with PushIndent + /// + public string PopIndent() + { + string returnValue = ""; + if ((this.indentLengths.Count > 0)) + { + int indentLength = this.indentLengths[(this.indentLengths.Count - 1)]; + this.indentLengths.RemoveAt((this.indentLengths.Count - 1)); + if ((indentLength > 0)) + { + returnValue = this.currentIndentField.Substring((this.currentIndentField.Length - indentLength)); + this.currentIndentField = this.currentIndentField.Remove((this.currentIndentField.Length - indentLength)); + } + } + return returnValue; + } + /// + /// Remove any indentation + /// + public void ClearIndent() + { + this.indentLengths.Clear(); + this.currentIndentField = ""; + } + #endregion + #region ToString Helpers + /// + /// Utility class to produce culture-oriented representation of an object as a string. + /// + public class ToStringInstanceHelper + { + private System.IFormatProvider formatProviderField = global::System.Globalization.CultureInfo.InvariantCulture; + /// + /// Gets or sets format provider to be used by ToStringWithCulture method. + /// + public System.IFormatProvider FormatProvider + { + get + { + return this.formatProviderField ; + } + set + { + if ((value != null)) + { + this.formatProviderField = value; + } + } + } + /// + /// This is called from the compile/run appdomain to convert objects within an expression block to a string + /// + public string ToStringWithCulture(object objectToConvert) + { + if ((objectToConvert == null)) + { + throw new global::System.ArgumentNullException("objectToConvert"); + } + System.Type t = objectToConvert.GetType(); + System.Reflection.MethodInfo method = t.GetMethod("ToString", new System.Type[] { + typeof(System.IFormatProvider)}); + if ((method == null)) + { + return objectToConvert.ToString(); + } + else + { + return ((string)(method.Invoke(objectToConvert, new object[] { + this.formatProviderField }))); + } + } + } + private ToStringInstanceHelper toStringHelperField = new ToStringInstanceHelper(); + /// + /// Helper to produce culture-oriented representation of an object as a string + /// + public ToStringInstanceHelper ToStringHelper + { + get + { + return this.toStringHelperField; + } + } + #endregion + } + #endregion +} diff --git a/Contracts/Synergy.Contracts.Test/Requirements/BusinessUsage.tt b/Contracts/Synergy.Contracts.Test/Requirements/BusinessUsage.tt new file mode 100644 index 0000000..1ea47d9 --- /dev/null +++ b/Contracts/Synergy.Contracts.Test/Requirements/BusinessUsage.tt @@ -0,0 +1,35 @@ +<#@ template language="C#" #> +<#@output extension=".md"#> + +# Business class + +## Definition + +Namespace: Synergy.Contracts.Requirements
+Assembly: Synergy.Contracts.dll + +Allows to create business requirement verification conditions and checks. + +## Methods + +| Name | Summary | +|------|---------| +| Rule(string) | Gets rule with description only. | +| When(bool, string) | | +| Requires(bool) | | + +## Examples + +### First step: business requirements gathering + +Quite often you might hear during analysis phase of your project such words: + +> When withdraw limit is set, withdrawn amount cannot exceed the limit + +When you hear such sentence just start your development by writing it down like that: + +``` csharp +<#= Read(nameof(this.Step1Sample)) #> +``` + +test \ No newline at end of file diff --git a/Contracts/Synergy.Contracts.Test/Synergy.Contracts.Test.csproj b/Contracts/Synergy.Contracts.Test/Synergy.Contracts.Test.csproj index f0c1fb6..4d8e1df 100644 --- a/Contracts/Synergy.Contracts.Test/Synergy.Contracts.Test.csproj +++ b/Contracts/Synergy.Contracts.Test/Synergy.Contracts.Test.csproj @@ -3,8 +3,8 @@ false false enable - 9 - net5.0 + 10 + net6.0 full @@ -24,9 +24,15 @@ + + + True + True + BusinessUsage.tt + @@ -35,5 +41,12 @@ + + + + + TextTemplatingFilePreprocessor + BusinessUsage.cs + \ No newline at end of file diff --git a/Contracts/Synergy.Contracts/Synergy.Contracts.csproj b/Contracts/Synergy.Contracts/Synergy.Contracts.csproj index 44f638a..2982974 100644 --- a/Contracts/Synergy.Contracts/Synergy.Contracts.csproj +++ b/Contracts/Synergy.Contracts/Synergy.Contracts.csproj @@ -1,6 +1,6 @@  - net452;net472;net5.0;netcoreapp2.1;netcoreapp3.1;netstandard2.0;netstandard2.1 + net472;net5.0;net6.0;netcoreapp2.1;netcoreapp3.1;netstandard2.0;netstandard2.1 false false true @@ -13,7 +13,8 @@ Design by contract programming support Copyright © Synergy Marcin Celej 2019 DbC Design-By-Contract Precondition Postcondition Contract Code-Contract Resharper Annotations R# jetbrains.annotations design contract programming SLARCH - 9 + 10 + enable full diff --git a/Contracts/Synergy.Convention.Testing/Synergy.Convention.Testing.csproj b/Contracts/Synergy.Convention.Testing/Synergy.Convention.Testing.csproj index dba51bd..f6e91ae 100644 --- a/Contracts/Synergy.Convention.Testing/Synergy.Convention.Testing.csproj +++ b/Contracts/Synergy.Convention.Testing/Synergy.Convention.Testing.csproj @@ -1,7 +1,7 @@ - netstandard2.0;net472 + net472;net6.0;netstandard2.0 8 enable diff --git a/Contracts/Synergy.Contracts.Test/Documentation/ClassReader.cs b/Contracts/Synergy.Documentation/ClassReader.cs similarity index 100% rename from Contracts/Synergy.Contracts.Test/Documentation/ClassReader.cs rename to Contracts/Synergy.Documentation/ClassReader.cs diff --git a/Contracts/Synergy.Documentation/Synergy.Documentation.csproj b/Contracts/Synergy.Documentation/Synergy.Documentation.csproj new file mode 100644 index 0000000..efdd810 --- /dev/null +++ b/Contracts/Synergy.Documentation/Synergy.Documentation.csproj @@ -0,0 +1,10 @@ + + + + enable + 10 + net6.0 + enable + + + diff --git a/Markdown/Synergy.Markdowns.Test/Synergy.Markdowns.Test.csproj b/Markdown/Synergy.Markdowns.Test/Synergy.Markdowns.Test.csproj index 01b634a..e7f4cc4 100644 --- a/Markdown/Synergy.Markdowns.Test/Synergy.Markdowns.Test.csproj +++ b/Markdown/Synergy.Markdowns.Test/Synergy.Markdowns.Test.csproj @@ -1,8 +1,8 @@ - net5.0 enable + net5.0;net6.0 diff --git a/Markdown/Synergy.Markdowns/Synergy.Markdowns.csproj b/Markdown/Synergy.Markdowns/Synergy.Markdowns.csproj index 8f68fcf..30ba819 100644 --- a/Markdown/Synergy.Markdowns/Synergy.Markdowns.csproj +++ b/Markdown/Synergy.Markdowns/Synergy.Markdowns.csproj @@ -1,8 +1,8 @@ - net5.0 enable + net5.0;net6.0 diff --git a/Synergy.Catalogue/Reflection/Tests/ReflectionExtensionDocumentation.GetFriendlyMethodName.approved.md b/Synergy.Catalogue/Reflection/Tests/ReflectionExtensionDocumentation.GetFriendlyMethodName.approved.md index a819700..13b2953 100644 --- a/Synergy.Catalogue/Reflection/Tests/ReflectionExtensionDocumentation.GetFriendlyMethodName.approved.md +++ b/Synergy.Catalogue/Reflection/Tests/ReflectionExtensionDocumentation.GetFriendlyMethodName.approved.md @@ -23,10 +23,21 @@ The following example table shows result of method execution on System.String pu | Method | Friendly name | |--------|---------------| +| Int32 LastIndexOf(System.String, Int32) | LastIndexOf(string, int) | +| Int32 LastIndexOf(System.String, Int32, Int32) | LastIndexOf(string, int, int) | +| Int32 LastIndexOf(System.String, System.StringComparison) | LastIndexOf(string, StringComparison) | +| Int32 LastIndexOf(System.String, Int32, System.StringComparison) | LastIndexOf(string, int, StringComparison) | +| Int32 LastIndexOf(System.String, Int32, Int32, System.StringComparison) | LastIndexOf(string, int, int, StringComparison) | +| System.String PadRight(Int32) | PadRight(int) | +| System.String PadRight(Int32, Char) | PadRight(int, char) | +| System.String Remove(Int32, Int32) | Remove(int, int) | +| System.String Remove(Int32) | Remove(int) | | System.String Replace(System.String, System.String, Boolean, System.Globalization.CultureInfo) | Replace(string, string, bool, CultureInfo) | | System.String Replace(System.String, System.String, System.StringComparison) | Replace(string, string, StringComparison) | | System.String Replace(Char, Char) | Replace(char, char) | | System.String Replace(System.String, System.String) | Replace(string, string) | +| System.String ReplaceLineEndings() | ReplaceLineEndings() | +| System.String ReplaceLineEndings(System.String) | ReplaceLineEndings(string) | | System.String[] Split(Char, System.StringSplitOptions) | Split(char, StringSplitOptions) | | System.String[] Split(Char, Int32, System.StringSplitOptions) | Split(char, int, StringSplitOptions) | | System.String[] Split(Char[]) | Split(char[]) | @@ -78,11 +89,8 @@ The following example table shows result of method execution on System.String pu | Int32 LastIndexOfAny(Char[], Int32) | LastIndexOfAny(char[], int) | | Int32 LastIndexOfAny(Char[], Int32, Int32) | LastIndexOfAny(char[], int, int) | | Int32 LastIndexOf(System.String) | LastIndexOf(string) | -| Int32 LastIndexOf(System.String, Int32) | LastIndexOf(string, int) | -| Int32 LastIndexOf(System.String, Int32, Int32) | LastIndexOf(string, int, int) | -| Int32 LastIndexOf(System.String, System.StringComparison) | LastIndexOf(string, StringComparison) | -| Int32 LastIndexOf(System.String, Int32, System.StringComparison) | LastIndexOf(string, int, StringComparison) | -| Int32 LastIndexOf(System.String, Int32, Int32, System.StringComparison) | LastIndexOf(string, int, int, StringComparison) | +| Boolean IsNullOrEmpty(System.String) | IsNullOrEmpty(string) | +| Boolean IsNullOrWhiteSpace(System.String) | IsNullOrWhiteSpace(string) | | Char& GetPinnableReference() | GetPinnableReference() | | System.String ToString() | ToString() | | System.String ToString(System.IFormatProvider) | ToString(IFormatProvider) | @@ -93,6 +101,8 @@ The following example table shows result of method execution on System.String pu | Boolean IsNormalized(System.Text.NormalizationForm) | IsNormalized(NormalizationForm) | | System.String Normalize() | Normalize() | | System.String Normalize(System.Text.NormalizationForm) | Normalize(NormalizationForm) | +| Char get_Chars(Int32) | get_Chars(int) | +| Int32 get_Length() | get_Length() | | System.String Concat(System.Object) | Concat(object) | | System.String Concat(System.Object, System.Object) | Concat(object, object) | | System.String Concat(System.Object, System.Object, System.Object) | Concat(object, object, object) | @@ -116,22 +126,16 @@ The following example table shows result of method execution on System.String pu | System.String Format(System.IFormatProvider, System.String, System.Object[]) | Format(IFormatProvider, string, object[]) | | System.String Insert(Int32, System.String) | Insert(int, string) | | System.String Join(Char, System.String[]) | Join(char, string[]) | -| System.String Join(Char, System.Object[]) | Join(char, object[]) | -| System.String Join[T](Char, System.Collections.Generic.IEnumerable`1[T]) | Join(char, IEnumerable) | -| System.String Join(Char, System.String[], Int32, Int32) | Join(char, string[], int, int) | | System.String Join(System.String, System.String[]) | Join(string, string[]) | +| System.String Join(Char, System.String[], Int32, Int32) | Join(char, string[], int, int) | +| System.String Join(System.String, System.String[], Int32, Int32) | Join(string, string[], int, int) | +| System.String Join(System.String, System.Collections.Generic.IEnumerable`1[System.String]) | Join(string, IEnumerable) | +| System.String Join(Char, System.Object[]) | Join(char, object[]) | | System.String Join(System.String, System.Object[]) | Join(string, object[]) | +| System.String Join[T](Char, System.Collections.Generic.IEnumerable`1[T]) | Join(char, IEnumerable) | | System.String Join[T](System.String, System.Collections.Generic.IEnumerable`1[T]) | Join(string, IEnumerable) | -| System.String Join(System.String, System.Collections.Generic.IEnumerable`1[System.String]) | Join(string, IEnumerable) | -| System.String Join(System.String, System.String[], Int32, Int32) | Join(string, string[], int, int) | | System.String PadLeft(Int32) | PadLeft(int) | | System.String PadLeft(Int32, Char) | PadLeft(int, char) | -| System.String PadRight(Int32) | PadRight(int) | -| System.String PadRight(Int32, Char) | PadRight(int, char) | -| System.String Remove(Int32, Int32) | Remove(int, int) | -| System.String Remove(Int32) | Remove(int) | -| Char get_Chars(Int32) | get_Chars(int) | -| Int32 get_Length() | get_Length() | | System.String Intern(System.String) | Intern(string) | | System.String IsInterned(System.String) | IsInterned(string) | | Int32 Compare(System.String, System.String) | Compare(string, string) | @@ -168,14 +172,16 @@ The following example table shows result of method execution on System.String pu | Boolean StartsWith(System.String, Boolean, System.Globalization.CultureInfo) | StartsWith(string, bool, CultureInfo) | | Boolean StartsWith(Char) | StartsWith(char) | | System.String Create[TState](Int32, TState, System.Buffers.SpanAction`2[System.Char,TState]) | Create(int, TState, SpanAction) | +| System.String Create(System.IFormatProvider, System.Runtime.CompilerServices.DefaultInterpolatedStringHandler ByRef) | Create(IFormatProvider, DefaultInterpolatedStringHandler&) | +| System.String Create(System.IFormatProvider, System.Span`1[System.Char], System.Runtime.CompilerServices.DefaultInterpolatedStringHandler ByRef) | Create(IFormatProvider, Span, DefaultInterpolatedStringHandler&) | | System.ReadOnlySpan`1[System.Char] op_Implicit(System.String) | op_Implicit(string) | | System.Object Clone() | Clone() | | System.String Copy(System.String) | Copy(string) | | Void CopyTo(Int32, Char[], Int32, Int32) | CopyTo(int, char[], int, int) | +| Void CopyTo(System.Span`1[System.Char]) | CopyTo(Span) | +| Boolean TryCopyTo(System.Span`1[System.Char]) | TryCopyTo(Span) | | Char[] ToCharArray() | ToCharArray() | | Char[] ToCharArray(Int32, Int32) | ToCharArray(int, int) | -| Boolean IsNullOrEmpty(System.String) | IsNullOrEmpty(string) | -| Boolean IsNullOrWhiteSpace(System.String) | IsNullOrWhiteSpace(string) | | System.Type GetType() | GetType() | The following example table shows result of method execution on some other methods diff --git a/Synergy.Catalogue/Synergy.Catalogue.csproj b/Synergy.Catalogue/Synergy.Catalogue.csproj index 1f804ae..9a0d0e0 100644 --- a/Synergy.Catalogue/Synergy.Catalogue.csproj +++ b/Synergy.Catalogue/Synergy.Catalogue.csproj @@ -1,8 +1,8 @@ - net5.0 enable + net6.0 diff --git a/Synergy.Framework.sln b/Synergy.Framework.sln index 56fe3af..e51ef8a 100644 --- a/Synergy.Framework.sln +++ b/Synergy.Framework.sln @@ -67,6 +67,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Synergy.Markdowns", "Markdo EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Synergy.Markdowns.Test", "Markdown\Synergy.Markdowns.Test\Synergy.Markdowns.Test.csproj", "{2464CDA4-AA2E-4932-A17A-7283647689B6}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Synergy.Documentation", "Contracts\Synergy.Documentation\Synergy.Documentation.csproj", "{C2D8A794-86EC-48F5-A7ED-B7B6746757DA}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -169,6 +171,10 @@ Global {2464CDA4-AA2E-4932-A17A-7283647689B6}.Debug|Any CPU.Build.0 = Debug|Any CPU {2464CDA4-AA2E-4932-A17A-7283647689B6}.Release|Any CPU.ActiveCfg = Release|Any CPU {2464CDA4-AA2E-4932-A17A-7283647689B6}.Release|Any CPU.Build.0 = Release|Any CPU + {C2D8A794-86EC-48F5-A7ED-B7B6746757DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C2D8A794-86EC-48F5-A7ED-B7B6746757DA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C2D8A794-86EC-48F5-A7ED-B7B6746757DA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C2D8A794-86EC-48F5-A7ED-B7B6746757DA}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -198,6 +204,7 @@ Global {50DBF0BA-6592-4876-81DE-99D9684625E4} = {146E5D84-D923-4731-BAB4-8D46E30A1433} {CDA7013B-5E75-4A1F-8549-F8B9057118B3} = {A72ACF23-1F2D-425F-A349-A39DA75C373D} {2464CDA4-AA2E-4932-A17A-7283647689B6} = {A72ACF23-1F2D-425F-A349-A39DA75C373D} + {C2D8A794-86EC-48F5-A7ED-B7B6746757DA} = {146E5D84-D923-4731-BAB4-8D46E30A1433} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {2DD5F49D-3F67-4D88-A29C-EFDBE7B76098}