diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..18350c6 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +root=true +# seeing issues caused by the presence of .editorconfig in Visual Studio 2019 16.5.5 (VS, VS Extensions, R#, analyzers), +# scoping to bash scripts and yml + +[*.{sh,yml}] +indent_style=space +charset=utf-8 +trim_trailing_whitespace=true +insert_final_newline=true + +[*.yml] +indent_size=2 diff --git a/AssemblyVersion.cs b/AssemblyVersion.cs index 0c9d36a..ce24cd1 100644 --- a/AssemblyVersion.cs +++ b/AssemblyVersion.cs @@ -1,14 +1,14 @@ -using System.Reflection; - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Revision and Build Numbers -// by using the '*' as shown below: -[assembly: AssemblyVersion("0.9.0")] -[assembly: AssemblyFileVersion("0.9.0")] -[assembly: AssemblyInformationalVersion("0.9.0")] \ No newline at end of file +using System.Reflection; + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("0.9.0")] +[assembly: AssemblyFileVersion("0.9.0")] +[assembly: AssemblyInformationalVersion("0.9.0")] diff --git a/DotNetCoreBuildTools.sln b/DotNetCoreBuildTools.sln index f3aaee6..6a29f0f 100644 --- a/DotNetCoreBuildTools.sln +++ b/DotNetCoreBuildTools.sln @@ -1,9 +1,36 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.26124.0 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30114.105 MinimumVisualStudioVersion = 15.0.26124.0 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotNetCoreBuildTools", "DotNetCoreBuildTools\DotNetCoreBuildTools.csproj", "{01BD78FE-1E0E-42B1-BFD7-A07BA5853D95}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotNetCoreBuildTools", "DotNetCoreBuildTools\DotNetCoreBuildTools.csproj", "{01BD78FE-1E0E-42B1-BFD7-A07BA5853D95}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{DA3D082B-16EC-4DE7-ADAD-6F1DB6C2772C}" + ProjectSection(SolutionItems) = preProject + .DS_Store = .DS_Store + .editorconfig = .editorconfig + .gitignore = .gitignore + AssemblyVersion.cs = AssemblyVersion.cs + azure-pipelines.yml = azure-pipelines.yml + Directory.Build.props = Directory.Build.props + LICENSE = LICENSE + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{4FEA2035-92FA-4EA1-A8C9-8DAE3D8C8C51}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CodeAnalysis", "CodeAnalysis", "{9B97DA13-A66D-4708-A779-FE02EB6FD69C}" + ProjectSection(SolutionItems) = preProject + build\CodeAnalysis\AllRules.16.5.WithSonarLint.ruleset = build\CodeAnalysis\AllRules.16.5.WithSonarLint.ruleset + build\CodeAnalysis\CustomDictionary.xml = build\CodeAnalysis\CustomDictionary.xml + build\CodeAnalysis\Default.Source.16.5.WithSonarLint.ruleset = build\CodeAnalysis\Default.Source.16.5.WithSonarLint.ruleset + build\CodeAnalysis\Default.Test.16.5.WithSonarLint.ruleset = build\CodeAnalysis\Default.Test.16.5.WithSonarLint.ruleset + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "JetBrains", "JetBrains", "{A3A26E2B-7661-4819-91B7-2669B2EAB7A7}" + ProjectSection(SolutionItems) = preProject + build\JetBrains\ResharperLayout.Current.xml = build\JetBrains\ResharperLayout.Current.xml + build\JetBrains\ResharperLayout.Editing.xml = build\JetBrains\ResharperLayout.Editing.xml + EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -14,9 +41,6 @@ Global Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {01BD78FE-1E0E-42B1-BFD7-A07BA5853D95}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {01BD78FE-1E0E-42B1-BFD7-A07BA5853D95}.Debug|Any CPU.Build.0 = Debug|Any CPU @@ -31,4 +55,14 @@ Global {01BD78FE-1E0E-42B1-BFD7-A07BA5853D95}.Release|x86.ActiveCfg = Release|Any CPU {01BD78FE-1E0E-42B1-BFD7-A07BA5853D95}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {9B97DA13-A66D-4708-A779-FE02EB6FD69C} = {4FEA2035-92FA-4EA1-A8C9-8DAE3D8C8C51} + {A3A26E2B-7661-4819-91B7-2669B2EAB7A7} = {4FEA2035-92FA-4EA1-A8C9-8DAE3D8C8C51} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {92CBFFE7-3870-4BA0-8160-76A5F1C1CE5D} + EndGlobalSection EndGlobal diff --git a/DotNetCoreBuildTools.sln.DotSettings b/DotNetCoreBuildTools.sln.DotSettings new file mode 100644 index 0000000..eaadb2d --- /dev/null +++ b/DotNetCoreBuildTools.sln.DotSettings @@ -0,0 +1,1618 @@ + + DISABLED + False + False + False + False + SUGGESTION + DO_NOT_SHOW + True + + True + + True + + True + + True + + True + + True + + True + + True + <?xml version="1.0" encoding="utf-16"?><Profile name="Solution No-Reorder"><AspOptimizeRegisterDirectives>True</AspOptimizeRegisterDirectives><CSArrangeThisQualifier>True</CSArrangeThisQualifier><CSRemoveCodeRedundancies>True</CSRemoveCodeRedundancies><CSUseVar><BehavourStyle>CAN_CHANGE_BOTH</BehavourStyle><LocalVariableStyle>IMPLICIT_WHEN_INITIALIZER_HAS_TYPE</LocalVariableStyle><ForeachVariableStyle>ALWAYS_EXPLICIT</ForeachVariableStyle></CSUseVar><CSUpdateFileHeader>True</CSUpdateFileHeader><CSOptimizeUsings><OptimizeUsings>True</OptimizeUsings><EmbraceInRegion>False</EmbraceInRegion><RegionName></RegionName></CSOptimizeUsings><CSShortenReferences>True</CSShortenReferences><CSReorderTypeMembers>True</CSReorderTypeMembers><CssAlphabetizeProperties>True</CssAlphabetizeProperties><CSCodeStyleAttributes ArrangeTypeAccessModifier="True" ArrangeTypeMemberAccessModifier="True" SortModifiers="True" RemoveRedundantParentheses="True" AddMissingParentheses="True" ArrangeBraces="True" ArrangeAttributes="True" ArrangeArgumentsStyle="True" ArrangeCodeBodyStyle="True" ArrangeVarStyle="True" /><RemoveCodeRedundancies>True</RemoveCodeRedundancies><CSArrangeQualifiers>True</CSArrangeQualifiers><CSFixBuiltinTypeReferences>True</CSFixBuiltinTypeReferences><JsInsertSemicolon>True</JsInsertSemicolon><FormatAttributeQuoteDescriptor>True</FormatAttributeQuoteDescriptor><CorrectVariableKindsDescriptor>True</CorrectVariableKindsDescriptor><VariablesToInnerScopesDescriptor>True</VariablesToInnerScopesDescriptor><StringToTemplatesDescriptor>True</StringToTemplatesDescriptor><RemoveRedundantQualifiersTs>True</RemoveRedundantQualifiersTs><OptimizeImportsTs>True</OptimizeImportsTs><OptimizeReferenceCommentsTs>True</OptimizeReferenceCommentsTs><PublicModifierStyleTs>True</PublicModifierStyleTs><ExplicitAnyTs>True</ExplicitAnyTs><TypeAnnotationStyleTs>True</TypeAnnotationStyleTs><RelativePathStyleTs>True</RelativePathStyleTs></Profile> + <?xml version="1.0" encoding="utf-16"?><Profile name="Solution Reorder"><AspOptimizeRegisterDirectives>True</AspOptimizeRegisterDirectives><CSArrangeThisQualifier>True</CSArrangeThisQualifier><CSRemoveCodeRedundancies>True</CSRemoveCodeRedundancies><CSUseVar><BehavourStyle>CAN_CHANGE_BOTH</BehavourStyle><LocalVariableStyle>IMPLICIT_WHEN_INITIALIZER_HAS_TYPE</LocalVariableStyle><ForeachVariableStyle>ALWAYS_IMPLICIT</ForeachVariableStyle></CSUseVar><CSOptimizeUsings><OptimizeUsings>True</OptimizeUsings><EmbraceInRegion>False</EmbraceInRegion><RegionName></RegionName></CSOptimizeUsings><CSShortenReferences>True</CSShortenReferences><CSReformatCode>True</CSReformatCode><CSReorderTypeMembers>True</CSReorderTypeMembers><RemoveCodeRedundancies>True</RemoveCodeRedundancies><CSEnforceVarKeywordUsageSettings>True</CSEnforceVarKeywordUsageSettings><CSArrangeQualifiers>True</CSArrangeQualifiers><FormatAttributeQuoteDescriptor>True</FormatAttributeQuoteDescriptor><CorrectVariableKindsDescriptor>True</CorrectVariableKindsDescriptor><VariablesToInnerScopesDescriptor>True</VariablesToInnerScopesDescriptor><StringToTemplatesDescriptor>True</StringToTemplatesDescriptor><JsReformatCode>True</JsReformatCode><JsInsertSemicolon>True</JsInsertSemicolon><RemoveRedundantQualifiersTs>True</RemoveRedundantQualifiersTs><OptimizeImportsTs>True</OptimizeImportsTs><OptimizeReferenceCommentsTs>True</OptimizeReferenceCommentsTs><PublicModifierStyleTs>True</PublicModifierStyleTs><ExplicitAnyTs>True</ExplicitAnyTs><TypeAnnotationStyleTs>True</TypeAnnotationStyleTs><RelativePathStyleTs>True</RelativePathStyleTs><CssAlphabetizeProperties>True</CssAlphabetizeProperties><CssReformatCode>True</CssReformatCode><VBOptimizeImports>True</VBOptimizeImports><VBShortenReferences>True</VBShortenReferences><VBReformatCode>True</VBReformatCode><HtmlReformatCode>True</HtmlReformatCode><VBFormatDocComments>True</VBFormatDocComments><CSUpdateFileHeader>True</CSUpdateFileHeader><CSCodeStyleAttributes ArrangeTypeAccessModifier="True" ArrangeTypeMemberAccessModifier="True" SortModifiers="True" RemoveRedundantParentheses="True" AddMissingParentheses="True" ArrangeBraces="True" ArrangeAttributes="True" ArrangeArgumentsStyle="True" ArrangeCodeBodyStyle="True" ArrangeVarStyle="True" /><CSFixBuiltinTypeReferences>True</CSFixBuiltinTypeReferences><RemoveCodeRedundanciesVB>True</RemoveCodeRedundanciesVB><XMLReformatCode>True</XMLReformatCode></Profile> + Solution Reorder + True + False + 4 + 4 + False + Required + Required + Required + Required + UseKeyword + UseKeyword + 0 + MULTILINE + 1 + 1 + True + True + + NEVER + NEVER + + False + + True + False + False + True + True + CHOP_IF_LONG + CHOP_IF_LONG + True + CHOP_IF_LONG + CHOP_IF_LONG + CHOP_IF_LONG + 200 + WRAP_IF_LONG + CHOP_IF_LONG + 2 + 2 + False + 2 + 2 + False + 2 + 2 + False + 2 + 2 + False + False + 2 + 2 + False + 2 + 2 + False + <Patterns xmlns="urn:schemas-jetbrains-com:member-reordering-patterns"> + <TypePattern Priority="200" DisplayName="Non-reorderable types" RemoveRegions="All"> + <TypePattern.Match> + <Or> + <And> + <Kind Is="Interface" /> + <Or> + <HasAttribute Name="System.Runtime.InteropServices.InterfaceTypeAttribute" /> + <HasAttribute Name="System.Runtime.InteropServices.ComImport" /> + </Or> + </And> + <Kind Is="Struct" /> + <HasAttribute Name="JetBrains.Annotations.NoReorderAttribute" /> + <HasAttribute Name="JetBrains.Annotations.NoReorder" /> + <HasAttribute Name="System.Runtime.InteropServices.StructLayoutAttribute" Inherited="True" /> + </Or> + </TypePattern.Match> + </TypePattern> + + <TypePattern Priority="95" DisplayName="Spec Flow Bindings" RemoveRegions="All"> + <TypePattern.Match> + <Or> + <And> + <Kind Is="Class" /> + <HasAttribute Name="TechTalk.SpecFlow.BindingAttribute" /> + </And> + </Or> + </TypePattern.Match> + <Entry Priority="150" DisplayName="Delegates"> + <Entry.Match> + <Kind Is="Delegate" /> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry Priority="145" DisplayName="Fields And Constants"> + <Entry.Match> + <Or> + <Kind Is="Constant" /> + <Kind Is="Field" /> + </Or> + </Entry.Match> + <Entry.SortBy> + <Access /> + <Kind Is="Member" /> + <Static /> + <Readonly /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry Priority="140" DisplayName="Enumerations"> + <Entry.Match> + <Kind Is="Enum" /> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry Priority="135" DisplayName="Constructors"> + <Entry.Match> + <Kind Is="Constructor" /> + </Entry.Match> + <Entry.SortBy> + <Static /> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + </Entry.SortBy> + </Entry> + <Entry Priority="132" DisplayName="Clone"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <Name Is="^Clone$" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Static /> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + </Entry.SortBy> + </Entry> + <Entry Priority="125" DisplayName="Dispose"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <Name Is="^Dispose$" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Static /> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + </Entry.SortBy> + </Entry> + <Entry Priority="120" DisplayName="ReleaseManagedResources"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <Name Is="^ReleaseManagedResources$" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Static /> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + </Entry.SortBy> + </Entry> + <Entry Priority="115" DisplayName="ReleaseUnmanagedResources"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <Name Is="^ReleaseUnmanagedResources$" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Static /> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + </Entry.SortBy> + </Entry> + <Entry Priority="110" DisplayName="Destructor"> + <Entry.Match> + <Kind Is="Destructor" /> + </Entry.Match> + <Entry.SortBy> + <Static /> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + </Entry.SortBy> + </Entry> + <Entry Priority="105" DisplayName="GetObjectData"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <Name Is="^GetObjectData$" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Static /> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + </Entry.SortBy> + </Entry> + <Entry Priority="100" DisplayName="OnSerializing"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <HasAttribute Name="System.Runtime.Serialization.OnSerializingAttribute" Inherited="True" /> + </And> + </Entry.Match> + </Entry> + <Entry Priority="95" DisplayName="OnSerialized"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <HasAttribute Name="System.Runtime.Serialization.OnSerializedAttribute" Inherited="True" /> + </And> + </Entry.Match> + </Entry> + <Entry Priority="90" DisplayName="OnDeserializing"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <HasAttribute Name="System.Runtime.Serialization.OnDeserializingAttribute" Inherited="True" /> + </And> + </Entry.Match> + </Entry> + <Entry Priority="85" DisplayName="OnDeserialized"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <HasAttribute Name="System.Runtime.Serialization.OnDeserializedAttribute" Inherited="True" /> + </And> + </Entry.Match> + </Entry> + <Entry Priority="80" DisplayName="Factory Methods"> + <Entry.Match> + <And> + <Static /> + <Kind Is="Method" /> + <Name Is="^Create$" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Static /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry Priority="75" DisplayName="Events"> + <Entry.Match> + <Kind Is="Event" /> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry Priority="70" DisplayName="Properties"> + <Entry.Match> + <And> + <Kind Is="Property" /> + <Not> + <Kind Is="Indexer" /> + </Not> + </And> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Static /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry Priority="65" DisplayName="Indexers"> + <Entry.Match> + <Kind Is="Indexer" /> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Static /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry Priority="64" DisplayName="BeforeTestRun"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <HasAttribute Name="TechTalk.SpecFlow.BeforeTestRunAttribute" /> + </And> + </Entry.Match> + </Entry> + <Entry Priority="63" DisplayName="BeforeFeature"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <HasAttribute Name="TechTalk.SpecFlow.BeforeFeatureAttribute" /> + </And> + </Entry.Match> + </Entry> + <Entry Priority="62" DisplayName="BeforeScenario"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <HasAttribute Name="TechTalk.SpecFlow.BeforeScenarioAttribute" /> + </And> + </Entry.Match> + </Entry> + <Entry Priority="61" DisplayName="BeforeScenarioBlock"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <HasAttribute Name="TechTalk.SpecFlow.BeforeScenarioBlockAttribute" /> + </And> + </Entry.Match> + </Entry> + <Entry Priority="60" DisplayName="BeforeStep"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <HasAttribute Name="TechTalk.SpecFlow.BeforeStepAttribute" /> + </And> + </Entry.Match> + </Entry> + <Entry Priority="59" DisplayName="AfterStep"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <HasAttribute Name="TechTalk.SpecFlow.AfterStepAttribute" /> + </And> + </Entry.Match> + </Entry> + <Entry Priority="58" DisplayName="AfterScenarioBlock"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <HasAttribute Name="TechTalk.SpecFlow.AfterScenarioBlockAttribute" /> + </And> + </Entry.Match> + </Entry> + <Entry Priority="57" DisplayName="AfterScenario"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <HasAttribute Name="TechTalk.SpecFlow.AfterScenarioAttribute" /> + </And> + </Entry.Match> + </Entry> + <Entry Priority="56" DisplayName="AfterFeatureA"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <HasAttribute Name="TechTalk.SpecFlow.AfterFeatureAttribute" /> + </And> + </Entry.Match> + </Entry> + <Entry Priority="55" DisplayName="AfterTestRun"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <HasAttribute Name="TechTalk.SpecFlow.AfterTestRunAttribute" /> + </And> + </Entry.Match> + </Entry> + <Entry DisplayName="Methods"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <Not> + <Kind Is="Destructor" /> + </Not> + <Not> + <HandlesEvent /> + </Not> + </And> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Static /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry Priority="45" DisplayName="Event Handlers"> + <Entry.Match> + <And> + <HandlesEvent /> + <Not> + <Kind Is="Destructor" /> + </Not> + </And> + </Entry.Match> + <Entry.SortBy> + <Static /> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry Priority="20" DisplayName="Operators"> + <Entry.Match> + <And> + <Kind Is="Operator" /> + <Not> + <Kind Is="Destructor" /> + </Not> + </And> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Static /> + <Abstract /> + <Virtual /> + <Override /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry Priority="10" DisplayName="All other members" /> + <Entry Priority="1" DisplayName="Nested Classes"> + <Entry.Match> + <Kind Is="Type" /> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Static /> + <Name /> + </Entry.SortBy> + </Entry> + </TypePattern> + + <TypePattern Priority="90" DisplayName="MSTest/NUnit (BDD)" RemoveRegions="All"> + <TypePattern.Match> + <Or> + <And> + <Kind Is="Class" /> + <HasAttribute Name="Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute" Inherited="True" /> + </And> + <And> + <Kind Is="Class" /> + <HasAttribute Name="NUnit.Framework.TestFixtureAttribute" Inherited="True" /> + </And> + </Or> + </TypePattern.Match> + <!-- Match the default up to but not including Default Methods (Add initialization before methods) --> + + <!--<Region Name="${0} BDD A" Priority="150"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="150" DisplayName="All Delegates"> + <Entry.Match> + <Kind Is="Delegate" /> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Name /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} BDD B" Priority="145"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="145" DisplayName="All Enumerations"> + <Entry.Match> + <Kind Is="Enum" /> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Name /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} BDD C" Priority="140"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="140" DisplayName="All Fields And Constants"> + <Entry.Match> + <Or> + <Kind Is="Constant" /> + <Kind Is="Field" /> + </Or> + </Entry.Match> + <Entry.SortBy> + <Access /> + <Static /> + <Kind Is="Member" /> + <Readonly /> + <Name /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} BDD D" Priority="135"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="135" DisplayName="Constructors"> + <Entry.Match> + <Kind Is="Constructor" /> + </Entry.Match> + <Entry.SortBy> + <Static /> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} BDD E" Priority="130"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="130" DisplayName="Dispose"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <Name Is="^Dispose$" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Static /> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} BDD F" Priority="125"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="125" DisplayName="ReleaseManagedResources"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <Name Is="^ReleaseManagedResources$" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Static /> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} BDD G" Priority="120"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="120" DisplayName="ReleaseUnmanagedResources"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <Name Is="^ReleaseUnmanagedResources$" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Static /> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} BDD H" Priority="115"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="115" DisplayName="Destructor"> + <Entry.Match> + <Kind Is="Destructor" /> + </Entry.Match> + <Entry.SortBy> + <Static /> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} BDD I" Priority="110"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="110" DisplayName="Static Factory Methods"> + <Entry.Match> + <And> + <Static /> + <Kind Is="Method" /> + <Name Is="^Create$" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Static /> + <Name /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} BDD J" Priority="100"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="100" DisplayName="Clone"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <Name Is="^Clone$" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Static /> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} BDD K" Priority="95"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="95" DisplayName="GetObjectData"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <Name Is="^GetObjectData$" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Static /> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} BDD L" Priority="90"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="90" DisplayName="Events"> + <Entry.Match> + <Kind Is="Event" /> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Name /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} BDD M" Priority="85"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="85" DisplayName="Properties"> + <Entry.Match> + <And> + <Kind Is="Property" /> + <Not> + <Kind Is="Indexer" /> + </Not> + </And> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Static /> + <Name /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} BDD N" Priority="80"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="80" DisplayName="Indexers"> + <Entry.Match> + <And> + <Kind Is="Indexer" /> + <Not> + <Kind Is="Property" /> + </Not> + </And> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Static /> + <Name /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--End match default production: break for initialization teardown--> + <!-- Start Test Specific --> + <!--<Region Name="${0} BDD TEST A" Priority="69"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="69" DisplayName="AssemblyInitialize"> + <Entry.Match> + <Or> + <And> + <Kind Is="Method" /> + <HasAttribute Name="Microsoft.VisualStudio.TestTools.UnitTesting.AssemblyInitializeAttribute" Inherited="True" /> + </And> + <And> + <!-- could improve this to check for no namespace --> + <Kind Is="Method" /> + <HasAttribute Name="NUnit.Framework.OneTimeSetUpAttribute" Inherited="True" /> + </And> + </Or> + </Entry.Match> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} BDD TEST B" Priority="68"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="68" DisplayName="ClassInitialize"> + <Entry.Match> + <Or> + <And> + <Kind Is="Method" /> + <HasAttribute Name="Microsoft.VisualStudio.TestTools.UnitTesting.ClassInitializeAttribute" Inherited="True" /> + </And> + <And> + <Kind Is="Method" /> + <HasAttribute Name="NUnit.Framework.OneTimeSetUpAttribute" Inherited="True" /> + </And> + </Or> + </Entry.Match> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} BDD TEST C" Priority="67"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="67" DisplayName="TestInitialize"> + <Entry.Match> + <Or> + <And> + <Kind Is="Method" /> + <HasAttribute Name="Microsoft.VisualStudio.TestTools.UnitTesting.TestInitializeAttribute" Inherited="True" /> + </And> + <And> + <Kind Is="Method" /> + <HasAttribute Name="NUnit.Framework.SetUpAttribute" Inherited="True" /> + </And> + </Or> + </Entry.Match> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} BDD TEST D" Priority="66"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="66" DisplayName="TestBase.InitializeTestMethod"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <Name Is="^InitializeTestMethod$" /> + </And> + </Entry.Match> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} BDD TEST E" Priority="65"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="65" DisplayName="TestBase.TeardownTestMethod"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <Name Is="^TeardownTestMethod$" /> + </And> + </Entry.Match> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} BDD TEST F" Priority="64"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="64" DisplayName="TestCleanup"> + <Entry.Match> + <Or> + <And> + <Kind Is="Method" /> + <HasAttribute Name="Microsoft.VisualStudio.TestTools.UnitTesting.TestCleanupAttribute" Inherited="True" /> + </And> + <And> + <Kind Is="Method" /> + <HasAttribute Name="NUnit.Framework.TearDownAttribute" Inherited="True" /> + </And> + </Or> + </Entry.Match> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} BDD TEST G" Priority="63"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="63" DisplayName="ClassCleanup"> + <Entry.Match> + <Or> + <And> + <Kind Is="Method" /> + <HasAttribute Name="Microsoft.VisualStudio.TestTools.UnitTesting.ClassCleanupAttribute" Inherited="True" /> + </And> + <And> + <Kind Is="Method" /> + <HasAttribute Name="NUnit.Framework.OneTimeTearDownAttribute" Inherited="True" /> + </And> + </Or> + </Entry.Match> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} BDD TEST H" Priority="62"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="62" DisplayName="AssemblyCleanup"> + <Entry.Match> + <Or> + <And> + <Kind Is="Method" /> + <HasAttribute Name="Microsoft.VisualStudio.TestTools.UnitTesting.AssemblyCleanupAttribute" Inherited="True" /> + </And> + <And> + <!-- could improve this to check for no namespace --> + <Kind Is="Method" /> + <HasAttribute Name="NUnit.Framework.OneTimeTearDownAttribute" Inherited="True" /> + </And> + </Or> + </Entry.Match> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} BDD TEST K" Priority="59"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="59" DisplayName="ArrangeMethod"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <Name Is="^ArrangeMethod$" /> + </And> + </Entry.Match> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} BDD TEST L" Priority="58"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="58" DisplayName="ActMethod"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <Name Is="^ActMethod$" /> + </And> + </Entry.Match> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} BDD TEST M" Priority="57"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority ="57" DisplayName="Test Methods"> + <Entry.Match> + <Or> + <And> + <Kind Is="Method" /> + <HasAttribute Name="Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute" Inherited="True" /> + </And> + <And> + <Kind Is="Method" /> + <HasAttribute Name="NUnit.Framework.TestAttribute" Inherited="True" /> + </And> + </Or> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Static /> + <Name /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--End Test Specific --> + + <!--Continue matching default pattern--> + + <!--<Region Name="${0} BDD O" Priority="50"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="50" DisplayName="Interface Implementations" > + <Entry.Match> + <And> + <Kind Is="Member" /> + <ImplementsInterface /> + </And> + </Entry.Match> + <Entry.SortBy> + <ImplementsInterface Immediate="true" /> + <Name /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} BDD P" Priority="45"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority ="45" DisplayName="Non Test/Non Interface Methods"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <Not> + <Kind Is="Destructor" /> + </Not> + <Not> + <HandlesEvent /> + </Not> + </And> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Static /> + <Name /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} BDD Q" Priority="40"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="40" DisplayName="Event Handlers"> + <Entry.Match> + <Or> + <HandlesEvent/> + </Or> + </Entry.Match> + <Entry.SortBy> + <Static /> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Name /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} BDD R" Priority="35"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="35" DisplayName="Operators"> + <Entry.Match> + <And> + <Kind Is="Operator" /> + <Not> + <Kind Is="Destructor" /> + </Not> + </And> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Static /> + <Abstract /> + <Virtual /> + <Override /> + <Name /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} BDD S" Priority="30"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="30" DisplayName="All Test Hooks" > + <Entry.Match> + <And> + <Kind Is="Method" /> + <Name Is="\bTestHook*" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Static /> + <Abstract /> + <Virtual /> + <Override /> + <Name /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} BDD T All Other Members" Priority="20"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="20" DisplayName="All other members" /> + <!--</Region>--> + + <!--<Region Name="${0} U Nested Types" Priority="15"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="15" DisplayName="Nested Types"> + <Entry.Match> + <Kind Is="Type" /> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Static /> + <Name /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + </TypePattern> + + <TypePattern Priority="0" DisplayName="Default Pattern" RemoveRegions="All"> + <!--<Region Name="${0} A" Priority="150"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + + <Entry Priority="150" DisplayName="All Delegates"> + <Entry.Match> + <Kind Is="Delegate" /> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Name /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} B" Priority="145"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + + <Entry Priority="145" DisplayName="All Enumerations"> + <Entry.Match> + <Kind Is="Enum" /> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Name /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} C" Priority="140"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + + <Entry Priority="140" DisplayName="All Fields And Constants"> + <Entry.Match> + <Or> + <Kind Is="Constant" /> + <Kind Is="Field" /> + </Or> + </Entry.Match> + <Entry.SortBy> + <Access /> + <Static /> + <Kind Is="Member" /> + <Readonly /> + <Name /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} D" Priority="135"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + + <Entry Priority="135" DisplayName="Constructors"> + <Entry.Match> + <Kind Is="Constructor" /> + </Entry.Match> + <Entry.SortBy> + <Static /> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} E" Priority="130"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + + <Entry Priority="130" DisplayName="Dispose"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <Name Is="^Dispose$" /> + <Not> + <!-- + Resharper was treating event handlers for INotifyDisposed.OnDisposed + as if they were dispose methods, ignoring the Name constraint above. + This kludge fixes the problem. + --> + <HandlesEvent/> + </Not> + </And> + </Entry.Match> + <Entry.SortBy> + <Static /> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} F" Priority="125"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + + + <Entry Priority="125" DisplayName="ReleaseManagedResources"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <Name Is="^ReleaseManagedResources$" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Static /> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} G" Priority="120"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + + <Entry Priority="120" DisplayName="ReleaseUnmanagedResources"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <Name Is="^ReleaseUnmanagedResources$" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Static /> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} H" Priority="115"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + + <Entry Priority="115" DisplayName="Destructor"> + <Entry.Match> + <Kind Is="Destructor" /> + </Entry.Match> + <Entry.SortBy> + <Static /> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} I" Priority="110"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + + <Entry Priority="110" DisplayName="Static Factory Methods"> + <Entry.Match> + <And> + <Static /> + <Kind Is="Method" /> + <Name Is="^Create$" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Static /> + <Name /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} J" Priority="100"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + + <Entry Priority="100" DisplayName="Clone"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <Name Is="^Clone$" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Static /> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} K" Priority="85"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + + <Entry Priority="85" DisplayName="GetObjectData"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <Name Is="^GetObjectData$" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Static /> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} L" Priority="80"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + + <Entry Priority="80" DisplayName="Events"> + <Entry.Match> + <Kind Is="Event" /> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Name /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} M" Priority="75"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + + <Entry Priority="75" DisplayName="Properties"> + <Entry.Match> + <And> + <Kind Is="Property" /> + <Not> + <Kind Is="Indexer" /> + </Not> + </And> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Static /> + <Name /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} N" Priority="70"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + + <Entry Priority="70" DisplayName="Indexers"> + <Entry.Match> + <And> + <Kind Is="Indexer" /> + <Not> + <Kind Is="Property" /> + </Not> + </And> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Static /> + <Name /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!-- INSERT MS TEST BDD Entries HERE --> + <!-- Methods is altered int MS Test pattern, the rest are the same--> + + <!--<Region Name="${0} O" Priority="65"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + + <Entry Priority="55" DisplayName="Interface Implementations" > + <Entry.Match> + <And> + <Kind Is="Member" /> + <ImplementsInterface /> + </And> + </Entry.Match> + <Entry.SortBy> + <ImplementsInterface Immediate="true" /> + <Name /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} P" Priority="11"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority ="11" DisplayName="Methods"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <Not> + <Kind Is="Destructor" /> + </Not> + <Not> + <HandlesEvent /> + </Not> + </And> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Static /> + <Name /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} Q" Priority="80"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + + <Entry Priority="50" DisplayName="Event Handlers"> + <Entry.Match> + <Or> + <HandlesEvent/> + </Or> + </Entry.Match> + <Entry.SortBy> + <Static /> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Name /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} R" Priority="55"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="45" DisplayName="Operators"> + <Entry.Match> + <And> + <Kind Is="Operator" /> + <Not> + <Kind Is="Destructor" /> + </Not> + </And> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Static /> + <Abstract /> + <Virtual /> + <Override /> + <Name /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} S" Priority="15"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="40" DisplayName="All Test Hooks" > + <Entry.Match> + <And> + <Kind Is="Method" /> + <Name Is="^TestHook*" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Static /> + <Abstract /> + <Virtual /> + <Override /> + <Name /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + + <!--<Region Name="${0} T All Other Members" Priority="10"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="10" DisplayName="All other members" /> + <!--</Region>--> + + <!--<Region Name="${0} U Nested Types" Priority="10"> + <Region.GroupBy> + <Name /> + </Region.GroupBy>--> + <Entry Priority="10" DisplayName="Nested Types"> + <Entry.Match> + <Kind Is="Type" /> + </Entry.Match> + <Entry.SortBy> + <Access Order="Public Internal ProtectedInternal Protected Private" /> + <Static /> + <Name /> + </Entry.SortBy> + </Entry> + <!--</Region>--> + </TypePattern> +</Patterns> + + True + True + True + True + True + IO + False + <Policy Inspect="True" Prefix="t_" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="t_" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="I" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="T" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + False + OUTLINE + False + TEMP_FOLDER + OnlyFullLine + True + False + DO_NOTHING + DO_NOTHING + LIVE_MONITOR + LIVE_MONITOR + DO_NOTHING + DO_NOTHING + LIVE_MONITOR + LIVE_MONITOR + DO_NOTHING + LIVE_MONITOR + DO_NOTHING + DO_NOTHING + LIVE_MONITOR + DO_NOTHING + + True + AUTO_FIX + AUTO_FIX + + True + + True + AUTO_FIX + AUTO_FIX + + True + AUTO_FIX + + True + + True + AUTO_FIX + + True + True + True + True + True + True + True + True + True + True + True + True + Check-In-Non-Ide, Nightly, Manual + 8 + False + True + True + <data /> + <data><IncludeFilters /><ExcludeFilters><Filter ModuleMask="*.Tests" ModuleVersionMask="*" ClassMask="*" FunctionMask="*" IsEnabled="True" /><Filter ModuleMask="*.tests" ModuleVersionMask="*" ClassMask="*" FunctionMask="*" IsEnabled="True" /></ExcludeFilters></data> + 30 + True + WindowText + True + Note + (?<=\W|^)(?<TAG>NOTE)(\W|$)(.*) + Normal + True + True + True + True + True + False + True + True + True + True + True + True + True + True + + True + True + True + False + True + True + True + True + True + True + True + True + True + True + True + True + False + True + True + True + True + True + True + True + True + True + True + True + True + True \ No newline at end of file diff --git a/DotNetCoreBuildTools/Attributes/DisplayInMapAttribute.cs b/DotNetCoreBuildTools/Attributes/DisplayInMapAttribute.cs index 004ea0f..6a5cc61 100644 --- a/DotNetCoreBuildTools/Attributes/DisplayInMapAttribute.cs +++ b/DotNetCoreBuildTools/Attributes/DisplayInMapAttribute.cs @@ -1,9 +1,8 @@ -using System; - -namespace ProjectOrder.Attributes -{ - public class DisplayInMapAttribute : Attribute - { - - } -} \ No newline at end of file +namespace ProjectOrder.Attributes +{ + using System; + + public class DisplayInMapAttribute : Attribute + { + } +} diff --git a/DotNetCoreBuildTools/DotNetCoreBuildMap.cs b/DotNetCoreBuildTools/DotNetCoreBuildMap.cs index c696517..edd8006 100644 --- a/DotNetCoreBuildTools/DotNetCoreBuildMap.cs +++ b/DotNetCoreBuildTools/DotNetCoreBuildMap.cs @@ -1,223 +1,224 @@ -using System; -using System.IO; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using System.Diagnostics.CodeAnalysis; -using System.Reflection; -using ProjectOrder.Attributes; -using ProjectOrder.Helpers; -using ProjectOrder.Model; -using ProjectOrder.Parsers; - -namespace ProjectOrder -{ - public class CreateOrder // : IComparer>> - { - //public int InternalCompare(KeyValuePair> x, KeyValuePair> y) - //{ - // if (y.Value.Contains(x.Key)) - // { - // return 1; - // } - // if (x.Value.Contains(y.Key)) - // { - // return -1; - // } - // return x.Key.CompareTo(y.Key); - //} - //public int Compare(KeyValuePair> x, KeyValuePair> y) - //{ - // var result = InternalCompare(x,y); - // if (result == 0) - // { - // Console.WriteLine($"{x.Key.ToString().ToUpperInvariant()}={y.Key.ToString().ToUpperInvariant()}"); - // } - // else if (result < 0) - // { - // Console.WriteLine($"{x.Key.ToString().ToUpperInvariant()}<{y.Key.ToString().ToUpperInvariant()}"); - // } - // else - // { - // Console.WriteLine($"{x.Key.ToString().ToUpperInvariant()}>{y.Key.ToString().ToUpperInvariant()}"); - // } - // return result; - //} - - public static void Main(string[] args) - { - Console.Error.WriteLine("Dot Net Build Mapping Tool"); - Console.Error.WriteLine($"Version: {Assembly.GetExecutingAssembly().GetName().Version}"); - var me = new CreateOrder(); - var runParameters = new RunParameters(); - foreach (var arg in args) - { - runParameters.PathList.Add(arg); - } - - if (Console.IsInputRedirected) - { - using (var reader = new StreamReader(Console.OpenStandardInput())) - { - while (!reader.EndOfStream) - { - runParameters.PathList.Add(reader.ReadLine()); - } - } - } - - me.Run(runParameters); - } - - private List SolutionFileParsers = new List(); - private List ProjectFiles = new List(); - private Dictionary MasterProjectList = new Dictionary(); - - public void AssemblyProjectList(RunParameters runParameters) - { - foreach (var path in runParameters.PathList) - { - string workingPath = XPlatHelper.FullyNormalizePath(Directory.GetCurrentDirectory(), path); - if (workingPath.EndsWith(".sln", StringComparison.OrdinalIgnoreCase)) - { - this.SolutionFileParsers.Add(new SolutionFileParser(workingPath)); - } - else - { - this.ProjectFiles.Add(new ProjectFileReference(workingPath)); - } - } - } - - public void AddIndependentProjectFiles() - { - foreach (var projectFileReference in this.ProjectFiles) - { - if (!this.MasterProjectList.ContainsKey(projectFileReference.FilePath)) - { - this.MasterProjectList.Add(projectFileReference.FilePath, new ProjectFile(projectFileReference)); - } - } - } - - public void ParseSolutionFiles() - { - foreach (var parser in SolutionFileParsers) - { - Dictionary> solutionFilesById = new Dictionary>(); - var projectFilesInSolution = parser.Parse(); - // TWO passes are needed here to ensure all dependencies are tracked. - // The first pass simply find all projects in the solution by their ID. - foreach (var projectFileReference in projectFilesInSolution.ProjectFiles) - { - var projectFile = new ProjectFile(projectFileReference) { Solution = parser.SolutionFile.Name}; - var tuple = new Tuple(projectFileReference, projectFile); - solutionFilesById.Add(projectFileReference.Id, tuple); - this.MasterProjectList.Add(projectFileReference.FilePath, projectFile); - } - // The second pass creates the solution file object and associates any Solution dependencies - foreach (var projectFileTuple in solutionFilesById) - { - foreach (var projectId in projectFileTuple.Value.Item1.DependentOnIds) - { - projectFileTuple.Value.Item2.DependentOn.Add(solutionFilesById[projectId].Item2); - } - } - } - } - - public void ResolveAllProjectReferences() - { - foreach (var projectItem in MasterProjectList) - { - projectItem.Value.ParseAndResolve(this.MasterProjectList); - } - } - - public void WriteProjectListOutput() - { - Type projectFileType = typeof(ProjectFile); - var properties = projectFileType.GetProperties().Where(p => p.GetCustomAttribute(typeof(DisplayInMapAttribute)) != null); - int i = 0; - foreach (var property in properties) - { - Console.Write($":{i}>{property.Name}<{i++}"); - Console.WriteLine(":"); - } - foreach (var projectFile in MasterProjectList.Values.OrderBy(x => x.BuildGroup)) - { - i = 0; - foreach (var property in properties) - { - Console.Write($"|{i}>{property.GetValue(projectFile)}<{i++}"); - } -// Console.Write($"|{i}>{projectFile.Id}<{i++}"); -// Console.Write($"|{i}>{projectFile.ProjectType}<{i++}"); -// Console.Write($"|{i}>{projectFile.Name}<{i++}"); -// Console.Write($"|{i}>{projectFile.Solution}<{i++}"); -// Console.Write($"|{i}>{projectFile.FilePath}<{i++}"); - Console.WriteLine("|"); - } - - foreach (var projectFile in MasterProjectList.Values.OrderBy(x => x.BuildGroup)) - { - if (projectFile.DependentOn?.Count > 0) - { - foreach (var dependentOn in projectFile.DependentOn) - { - Console.WriteLine($"*{projectFile.FilePath}|{dependentOn.FilePath}*"); - } - } - } - } - - public void DetermineProjectBuildGroups() - { - foreach (var projectFile in MasterProjectList.Values.OrderBy(x => x.DependentOn.Count)) - { - if (projectFile.DependentOn.Any()) - { - projectFile.BuildGroup = projectFile.DependentOn.Max(p => p.BuildGroup) + 1; - } - } - } - - public void Run(RunParameters runParameters) - { - AssemblyProjectList(runParameters); - ParseSolutionFiles(); - AddIndependentProjectFiles(); - ResolveAllProjectReferences(); - DetermineProjectBuildGroups(); - WriteProjectListOutput(); - - //Dictionary> orderMap = new Dictionary>(); - //using (var stream = File.OpenRead(args[0])) - //using (var reader = new StreamReader(stream)) - //{ - // while (!reader.EndOfStream) - // { - // var line = reader.ReadLine(); - // var parts = line.Split("->"); - // var project = Guid.Parse(parts[0]); - // var dependency = Guid.Parse(parts[1]); - // if (!orderMap.TryGetValue(project, out var dependencies)) - // { - // dependencies = new List(); - // orderMap.Add(project, dependencies); - // } - // dependencies.Add(dependency); - // } - //} - //var ordered = orderMap.ToList(); - //ordered.Sort(this); - //foreach (var pair in ordered) - //{ - // foreach(var item in pair.Value) - // { - // Console.WriteLine($"{pair.Key.ToString().ToUpperInvariant()}->{item.ToString().ToUpperInvariant()}"); - // } - //} - } - } -} \ No newline at end of file +namespace ProjectOrder +{ + using System; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Reflection; + using ProjectOrder.Attributes; + using ProjectOrder.Helpers; + using ProjectOrder.Model; + using ProjectOrder.Parsers; + + public class CreateOrder // : IComparer>> + { + private Dictionary MasterProjectList = new Dictionary(); + private List ProjectFiles = new List(); + + private List SolutionFileParsers = new List(); + //public int InternalCompare(KeyValuePair> x, KeyValuePair> y) + //{ + // if (y.Value.Contains(x.Key)) + // { + // return 1; + // } + // if (x.Value.Contains(y.Key)) + // { + // return -1; + // } + // return x.Key.CompareTo(y.Key); + //} + //public int Compare(KeyValuePair> x, KeyValuePair> y) + //{ + // var result = InternalCompare(x,y); + // if (result == 0) + // { + // Console.WriteLine($"{x.Key.ToString().ToUpperInvariant()}={y.Key.ToString().ToUpperInvariant()}"); + // } + // else if (result < 0) + // { + // Console.WriteLine($"{x.Key.ToString().ToUpperInvariant()}<{y.Key.ToString().ToUpperInvariant()}"); + // } + // else + // { + // Console.WriteLine($"{x.Key.ToString().ToUpperInvariant()}>{y.Key.ToString().ToUpperInvariant()}"); + // } + // return result; + //} + + public static void Main(string[] args) + { + Console.Error.WriteLine("Dot Net Build Mapping Tool"); + Console.Error.WriteLine($"Version: {Assembly.GetExecutingAssembly().GetName().Version}"); + var me = new CreateOrder(); + var runParameters = new RunParameters(); + foreach (var arg in args) + { + runParameters.PathList.Add(arg); + } + + if (Console.IsInputRedirected) + { + using (var reader = new StreamReader(Console.OpenStandardInput())) + { + while (!reader.EndOfStream) + { + runParameters.PathList.Add(reader.ReadLine()); + } + } + } + + me.Run(runParameters); + } + + public void AddIndependentProjectFiles() + { + foreach (var projectFileReference in ProjectFiles) + { + if (!MasterProjectList.ContainsKey(projectFileReference.FilePath)) + { + MasterProjectList.Add(projectFileReference.FilePath, new ProjectFile(projectFileReference)); + } + } + } + + public void AssemblyProjectList(RunParameters runParameters) + { + foreach (var path in runParameters.PathList) + { + var workingPath = XPlatHelper.FullyNormalizePath(Directory.GetCurrentDirectory(), path); + if (workingPath.EndsWith(".sln", StringComparison.OrdinalIgnoreCase)) + { + SolutionFileParsers.Add(new SolutionFileParser(workingPath)); + } + else + { + ProjectFiles.Add(new ProjectFileReference(workingPath)); + } + } + } + + public void DetermineProjectBuildGroups() + { + foreach (var projectFile in MasterProjectList.Values.OrderBy(x => x.DependentOn.Count)) + { + if (projectFile.DependentOn.Any()) + { + projectFile.BuildGroup = projectFile.DependentOn.Max(p => p.BuildGroup) + 1; + } + } + } + + public void ParseSolutionFiles() + { + foreach (var parser in SolutionFileParsers) + { + var solutionFilesById = new Dictionary>(); + var projectFilesInSolution = parser.Parse(); + // TWO passes are needed here to ensure all dependencies are tracked. + // The first pass simply find all projects in the solution by their ID. + foreach (var projectFileReference in projectFilesInSolution.ProjectFiles) + { + var projectFile = new ProjectFile(projectFileReference) { Solution = parser.SolutionFile.Name }; + var tuple = new Tuple(projectFileReference, projectFile); + solutionFilesById.Add(projectFileReference.Id, tuple); + MasterProjectList.Add(projectFileReference.FilePath, projectFile); + } + + // The second pass creates the solution file object and associates any Solution dependencies + foreach (var projectFileTuple in solutionFilesById) + { + foreach (var projectId in projectFileTuple.Value.Item1.DependentOnIds) + { + projectFileTuple.Value.Item2.DependentOn.Add(solutionFilesById[projectId].Item2); + } + } + } + } + + public void ResolveAllProjectReferences() + { + foreach (var projectItem in MasterProjectList) + { + projectItem.Value.ParseAndResolve(MasterProjectList); + } + } + + public void Run(RunParameters runParameters) + { + AssemblyProjectList(runParameters); + ParseSolutionFiles(); + AddIndependentProjectFiles(); + ResolveAllProjectReferences(); + DetermineProjectBuildGroups(); + WriteProjectListOutput(); + + //Dictionary> orderMap = new Dictionary>(); + //using (var stream = File.OpenRead(args[0])) + //using (var reader = new StreamReader(stream)) + //{ + // while (!reader.EndOfStream) + // { + // var line = reader.ReadLine(); + // var parts = line.Split("->"); + // var project = Guid.Parse(parts[0]); + // var dependency = Guid.Parse(parts[1]); + // if (!orderMap.TryGetValue(project, out var dependencies)) + // { + // dependencies = new List(); + // orderMap.Add(project, dependencies); + // } + // dependencies.Add(dependency); + // } + //} + //var ordered = orderMap.ToList(); + //ordered.Sort(this); + //foreach (var pair in ordered) + //{ + // foreach(var item in pair.Value) + // { + // Console.WriteLine($"{pair.Key.ToString().ToUpperInvariant()}->{item.ToString().ToUpperInvariant()}"); + // } + //} + } + + public void WriteProjectListOutput() + { + var projectFileType = typeof(ProjectFile); + var properties = projectFileType.GetProperties().Where(p => p.GetCustomAttribute(typeof(DisplayInMapAttribute)) != null); + var i = 0; + foreach (var property in properties) + { + Console.Write($":{i}>{property.Name}<{i++}"); + Console.WriteLine(":"); + } + + foreach (var projectFile in MasterProjectList.Values.OrderBy(x => x.BuildGroup)) + { + i = 0; + foreach (var property in properties) + { + Console.Write($"|{i}>{property.GetValue(projectFile)}<{i++}"); + } + + // Console.Write($"|{i}>{projectFile.Id}<{i++}"); + // Console.Write($"|{i}>{projectFile.ProjectType}<{i++}"); + // Console.Write($"|{i}>{projectFile.Name}<{i++}"); + // Console.Write($"|{i}>{projectFile.Solution}<{i++}"); + // Console.Write($"|{i}>{projectFile.FilePath}<{i++}"); + Console.WriteLine("|"); + } + + foreach (var projectFile in MasterProjectList.Values.OrderBy(x => x.BuildGroup)) + { + if (projectFile.DependentOn?.Count > 0) + { + foreach (var dependentOn in projectFile.DependentOn) + { + Console.WriteLine($"*{projectFile.FilePath}|{dependentOn.FilePath}*"); + } + } + } + } + } +} diff --git a/DotNetCoreBuildTools/DotNetCoreBuildTools.csproj b/DotNetCoreBuildTools/DotNetCoreBuildTools.csproj index 96c0fea..3deb521 100644 --- a/DotNetCoreBuildTools/DotNetCoreBuildTools.csproj +++ b/DotNetCoreBuildTools/DotNetCoreBuildTools.csproj @@ -4,14 +4,21 @@ Exe false netcoreapp3.1 + 7.2 True Landorphan.DotNetCoreBuildTools $(BUILD_VERSION) Timothy Stockstill, Landorphan LLC, Michael Prochaska Landorphan LLC + ..\build\CodeAnalysis\Default.Source.16.5.WithSonarLint.ruleset true + ProjectOrder + + + + @@ -23,4 +30,4 @@ - + \ No newline at end of file diff --git a/DotNetCoreBuildTools/Helpers/XPlatHelper.cs b/DotNetCoreBuildTools/Helpers/XPlatHelper.cs index bd5fab2..62f7892 100644 --- a/DotNetCoreBuildTools/Helpers/XPlatHelper.cs +++ b/DotNetCoreBuildTools/Helpers/XPlatHelper.cs @@ -1,19 +1,18 @@ -using System.IO; - -namespace ProjectOrder.Helpers -{ - public static class XPlatHelper - { - public static string ConvertPath(string path) - { - return path.Replace("\\", "/"); - } - - public static string FullyNormalizePath(string root, string path) - { - return Path.GetFullPath(Path.Combine(root, ConvertPath(path))) - .TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); - - } - } -} \ No newline at end of file +namespace ProjectOrder.Helpers +{ + using System.IO; + + public static class XPlatHelper + { + public static string ConvertPath(string path) + { + return path.Replace("\\", "/"); + } + + public static string FullyNormalizePath(string root, string path) + { + return Path.GetFullPath(Path.Combine(root, ConvertPath(path))) + .TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); + } + } +} diff --git a/DotNetCoreBuildTools/Model/ProjectFile.cs b/DotNetCoreBuildTools/Model/ProjectFile.cs index 52265a0..7acdd8d 100644 --- a/DotNetCoreBuildTools/Model/ProjectFile.cs +++ b/DotNetCoreBuildTools/Model/ProjectFile.cs @@ -1,128 +1,129 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Xml.Linq; -using System.Xml.XPath; -using ProjectOrder.Attributes; -using ProjectOrder.Helpers; - -namespace ProjectOrder.Model -{ - public class ProjectFile : ProjectFileBase, IComparable, IComparer - { - [DisplayInMap] - public int BuildGroup { get; set; } - - public enum TypeOfProject - { - Unknown, - Library, - Application, - Web, - Test - } - - public enum PackageType - { - None, - PackageOnBuild, - PackageStepNeeded - } - - [DisplayInMap] - public TypeOfProject ProjectType { get; set; } - - [DisplayInMap] - public PackageType Package { get; set; } - - [DisplayInMap] - public string Solution { get; set; } - - public ProjectFile() : base() - { - } - - public ProjectFile(string path) : base(path) - { - } - - public ProjectFile(ProjectFileReference original) : base(original) - { - } - - public const string WebSdk = "Microsoft.NET.Sdk.Web"; - public const string TestSdk = "Microsoft.NET.Test.Sdk"; - public const string Exe = "Exe"; - - public List DependentOn { get; set; } = new List(); - - public void ParseAndResolve(Dictionary masterProjectList) - { - XDocument xDocument = XDocument.Load(this.FilePath); - string sdk = ((xDocument.XPathEvaluate("/Project/@Sdk") as IEnumerable)?.FirstOrDefault() as XAttribute)?.Value; - string outputType = (xDocument.XPathSelectElement("/Project/PropertyGroup[not(@Condition) or @Condition='']/OutputType"))?.Value; - var packageReferences = (xDocument.XPathEvaluate("/Project/ItemGroup/PackageReference/@Include") as IEnumerable)?.Cast(); - var projectReferences = (xDocument.XPathEvaluate("/Project/ItemGroup/ProjectReference/@Include") as IEnumerable)?.Cast(); - var canPackageReference = (xDocument.XPathSelectElement("/Project/PropertyGroup[not(@Condition) or @Condition='']/IsPackable"))?.Value; - var packageIdReference = (xDocument.XPathSelectElement("/Project/PropertyGroup[not(@Condition) or @Condition='']/PackageId"))?.Value; - var packageOnBuildReference = (xDocument.XPathSelectElement("/Project/PropertyGroup[not(@Condition) or @Condition='']/GeneratePackageOnBuild"))?.Value; - - if (string.Equals(sdk, WebSdk, StringComparison.OrdinalIgnoreCase)) - { - this.ProjectType = TypeOfProject.Web; - } - else if (packageReferences.Any(a => string.Equals(a.Value, TestSdk, StringComparison.OrdinalIgnoreCase))) - { - this.ProjectType = TypeOfProject.Test; - } - else if (string.Equals(outputType, Exe, StringComparison.OrdinalIgnoreCase)) - { - this.ProjectType = TypeOfProject.Application; - } - else - { - this.ProjectType = TypeOfProject.Library; - } - - foreach (var include in projectReferences) - { - var includePath = XPlatHelper.FullyNormalizePath(this.Directory, include.Value); - this.DependentOn.Add(masterProjectList[includePath]); - } - - if (bool.TryParse(canPackageReference, out var canPackage) && canPackage && - !string.IsNullOrWhiteSpace(packageIdReference)) - { - if (bool.TryParse(packageOnBuildReference, out var packageOnBuild) && packageOnBuild) - { - - this.Package = PackageType.PackageOnBuild; - } - else - { - this.Package = PackageType.PackageStepNeeded; - } - } - } - - public int Compare(ProjectFile x, ProjectFile y) - { - if (x.DependentOn.Any(d => d.FilePath == y.FilePath)) - { - return 1; - } - - if (y.DependentOn.Any(d => d.FilePath == y.FilePath)) - { - return -1; - } - - return string.Compare(x.Id, y.Id, StringComparison.OrdinalIgnoreCase); - } - - public int CompareTo(ProjectFile other) - { - return Compare(this, other); - } - } -} \ No newline at end of file +namespace ProjectOrder.Model +{ + using System; + using System.Collections.Generic; + using System.Linq; + using System.Xml.Linq; + using System.Xml.XPath; + using ProjectOrder.Attributes; + using ProjectOrder.Helpers; + + public class ProjectFile : ProjectFileBase, IComparable, IComparer + { + public enum PackageType + { + None, + PackageOnBuild, + PackageStepNeeded + } + + public enum TypeOfProject + { + Unknown, + Library, + Application, + Web, + Test + } + + public const string Exe = "Exe"; + public const string TestSdk = "Microsoft.NET.Test.Sdk"; + + public const string WebSdk = "Microsoft.NET.Sdk.Web"; + + public ProjectFile() + { + } + + public ProjectFile(string path) : base(path) + { + } + + public ProjectFile(ProjectFileReference original) : base(original) + { + } + + [DisplayInMap] + public int BuildGroup { get; set; } + + public List DependentOn { get; set; } = new List(); + + [DisplayInMap] + public PackageType Package { get; set; } + + [DisplayInMap] + public TypeOfProject ProjectType { get; set; } + + [DisplayInMap] + public string Solution { get; set; } + + public int CompareTo(ProjectFile other) + { + return Compare(this, other); + } + + public int Compare(ProjectFile x, ProjectFile y) + { + if (x.DependentOn.Any(d => d.FilePath == y.FilePath)) + { + return 1; + } + + if (y.DependentOn.Any(d => d.FilePath == y.FilePath)) + { + return -1; + } + + return string.Compare(x.Id, y.Id, StringComparison.OrdinalIgnoreCase); + } + + public void ParseAndResolve(Dictionary masterProjectList) + { + var xDocument = XDocument.Load(FilePath); + var sdk = ((xDocument.XPathEvaluate("/Project/@Sdk") as IEnumerable)?.FirstOrDefault() as XAttribute)?.Value; + var outputType = xDocument.XPathSelectElement("/Project/PropertyGroup[not(@Condition) or @Condition='']/OutputType")?.Value; + var packageReferences = (xDocument.XPathEvaluate("/Project/ItemGroup/PackageReference/@Include") as IEnumerable)?.Cast(); + var projectReferences = (xDocument.XPathEvaluate("/Project/ItemGroup/ProjectReference/@Include") as IEnumerable)?.Cast(); + var canPackageReference = xDocument.XPathSelectElement("/Project/PropertyGroup[not(@Condition) or @Condition='']/IsPackable")?.Value; + var packageIdReference = xDocument.XPathSelectElement("/Project/PropertyGroup[not(@Condition) or @Condition='']/PackageId")?.Value; + var packageOnBuildReference = xDocument.XPathSelectElement("/Project/PropertyGroup[not(@Condition) or @Condition='']/GeneratePackageOnBuild")?.Value; + + if (string.Equals(sdk, WebSdk, StringComparison.OrdinalIgnoreCase)) + { + ProjectType = TypeOfProject.Web; + } + else if (packageReferences.Any(a => string.Equals(a.Value, TestSdk, StringComparison.OrdinalIgnoreCase))) + { + ProjectType = TypeOfProject.Test; + } + else if (string.Equals(outputType, Exe, StringComparison.OrdinalIgnoreCase)) + { + ProjectType = TypeOfProject.Application; + } + else + { + ProjectType = TypeOfProject.Library; + } + + foreach (var include in projectReferences) + { + var includePath = XPlatHelper.FullyNormalizePath(Directory, include.Value); + DependentOn.Add(masterProjectList[includePath]); + } + + if (bool.TryParse(canPackageReference, out var canPackage) && + canPackage && + !string.IsNullOrWhiteSpace(packageIdReference)) + { + if (bool.TryParse(packageOnBuildReference, out var packageOnBuild) && packageOnBuild) + { + Package = PackageType.PackageOnBuild; + } + else + { + Package = PackageType.PackageStepNeeded; + } + } + } + } +} diff --git a/DotNetCoreBuildTools/Model/ProjectFileBase.cs b/DotNetCoreBuildTools/Model/ProjectFileBase.cs index 44fb2e6..6fc8563 100644 --- a/DotNetCoreBuildTools/Model/ProjectFileBase.cs +++ b/DotNetCoreBuildTools/Model/ProjectFileBase.cs @@ -1,35 +1,37 @@ -using System; -using System.IO; -using ProjectOrder.Attributes; - -namespace ProjectOrder.Model -{ - public class ProjectFileBase - { - public ProjectFileBase() {} - - public ProjectFileBase(string filePath) - { - this.FilePath = filePath; - this.Name = Path.GetFileName(filePath); - } - - public ProjectFileBase(ProjectFileBase original) - { - this.Id = original.Id; - this.Name = original.Name; - this.FilePath = original.FilePath; - } - - [DisplayInMap] - public string Id { get; set; } = Guid.NewGuid().ToString().ToUpperInvariant(); - - [DisplayInMap] - public string Name { get; set; } - - [DisplayInMap] - public string FilePath { get; set; } - - public string Directory => Path.GetDirectoryName(this.FilePath); - } -} \ No newline at end of file +namespace ProjectOrder.Model +{ + using System; + using System.IO; + using ProjectOrder.Attributes; + + public class ProjectFileBase + { + public ProjectFileBase() + { + } + + public ProjectFileBase(string filePath) + { + FilePath = filePath; + Name = Path.GetFileName(filePath); + } + + public ProjectFileBase(ProjectFileBase original) + { + Id = original.Id; + Name = original.Name; + FilePath = original.FilePath; + } + + public string Directory => Path.GetDirectoryName(FilePath); + + [DisplayInMap] + public string FilePath { get; set; } + + [DisplayInMap] + public string Id { get; set; } = Guid.NewGuid().ToString().ToUpperInvariant(); + + [DisplayInMap] + public string Name { get; set; } + } +} diff --git a/DotNetCoreBuildTools/Model/ProjectFileReference.cs b/DotNetCoreBuildTools/Model/ProjectFileReference.cs index 9947ccb..b004f02 100644 --- a/DotNetCoreBuildTools/Model/ProjectFileReference.cs +++ b/DotNetCoreBuildTools/Model/ProjectFileReference.cs @@ -1,23 +1,22 @@ -using System.Collections.Generic; -using System.Text; - -namespace ProjectOrder.Model +namespace ProjectOrder.Model { - public class ProjectFileReference : ProjectFileBase - { - public ProjectFileReference() : base() - { - } + using System.Collections.Generic; + + public class ProjectFileReference : ProjectFileBase + { + public ProjectFileReference() + { + } - public ProjectFileReference(string path) : base(path) - { - } + public ProjectFileReference(string path) : base(path) + { + } - public ProjectFileReference(ProjectFileReference original) : base(original) - { - this.DependentOnIds.AddRange(original.DependentOnIds); - } + public ProjectFileReference(ProjectFileReference original) : base(original) + { + DependentOnIds.AddRange(original.DependentOnIds); + } - public List DependentOnIds { get; set; } = new List(); - } + public List DependentOnIds { get; set; } = new List(); + } } diff --git a/DotNetCoreBuildTools/Model/VisualStudioSolutionFile.cs b/DotNetCoreBuildTools/Model/VisualStudioSolutionFile.cs index 2d095ad..f03a48b 100644 --- a/DotNetCoreBuildTools/Model/VisualStudioSolutionFile.cs +++ b/DotNetCoreBuildTools/Model/VisualStudioSolutionFile.cs @@ -1,22 +1,19 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Text; - -namespace ProjectOrder.Model +namespace ProjectOrder.Model { - public class VisualStudioSolutionFile - { - public string FilePath { get; set; } + using System.Collections.Generic; + using System.IO; - public string Directory => Path.GetDirectoryName(this.FilePath); + public class VisualStudioSolutionFile + { + public string Directory => Path.GetDirectoryName(FilePath); + public string FilePath { get; set; } - public string Name => Path.GetFileName(this.FilePath); + public string Name => Path.GetFileName(FilePath); - // This is held as a list of strings because it makes the file easier to parse - // given the nature of SLN files. - public List RawFileText { get; set; } = new List(); + public List ProjectFiles { get; set; } = new List(); - public List ProjectFiles { get; set; } = new List(); - } + // This is held as a list of strings because it makes the file easier to parse + // given the nature of SLN files. + public List RawFileText { get; set; } = new List(); + } } diff --git a/DotNetCoreBuildTools/Parsers/SolutionFileParser.cs b/DotNetCoreBuildTools/Parsers/SolutionFileParser.cs index 44968d8..cb14e6e 100644 --- a/DotNetCoreBuildTools/Parsers/SolutionFileParser.cs +++ b/DotNetCoreBuildTools/Parsers/SolutionFileParser.cs @@ -1,159 +1,161 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Reflection.Metadata.Ecma335; -using System.Text; -using System.Text.RegularExpressions; -using ProjectOrder.Helpers; -using ProjectOrder.Model; - -namespace ProjectOrder.Parsers +namespace ProjectOrder.Parsers { - public class SolutionFileParser - { - - public enum State - { - NotInProject, - InSolutionFolder, - InProject, - InProjectDependencies, - } - - public enum LineType - { - Ignore, - StartProject, - EndProject, - StartDependencyList, - EndDependencyList, - DependencyLine - } - - public VisualStudioSolutionFile SolutionFile { get; private set; } - - public SolutionFileParser(string solutionFileFilePath) - { - this.SolutionFile = new VisualStudioSolutionFile(); - this.SolutionFile.FilePath = solutionFileFilePath; - using (var stream = File.OpenRead(solutionFileFilePath)) - using (var reader = new StreamReader(stream)) - { - while (!reader.EndOfStream) + using System.IO; + using System.Text.RegularExpressions; + using ProjectOrder.Helpers; + using ProjectOrder.Model; + + public class SolutionFileParser + { + public enum LineType + { + Ignore = 0, + StartProject = 1, + EndProject = 2, + StartDependencyList = 3, + EndDependencyList = 4, + DependencyLine = 5, + } + + public enum State + { + NotInProject = 0, + InSolutionFolder = 1, + InProject = 2, + InProjectDependencies = 3, + } + + private const string DependencyLinePattern = + @"\s*\{([a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12})\}\s*=\s*\{([a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12})\}.*"; + private const string ProjectLinePattern = + @".*Project\(\s*""\s*\{([a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12})\}\s*""\s*\)\s*=\s*""([^""]*)""\s*,\s*""([^""]*)""\s*,\s*""\s*\{([a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12})\}\s*"".*"; + + private const string SolutionFolderId = @"2150E333-8FDC-42A3-9474-1A3956D46DE8"; + private readonly Regex DependencyLineRegex = new Regex(DependencyLinePattern, RegexOptions.Compiled); + private readonly Regex ProjectLineRegex = new Regex(ProjectLinePattern, RegexOptions.Compiled); + + private ProjectFileReference currentProject; + + private State SolutionFileState = State.NotInProject; + + public SolutionFileParser(string solutionFileFilePath) + { + SolutionFile = new VisualStudioSolutionFile(); + SolutionFile.FilePath = solutionFileFilePath; + using (var stream = File.OpenRead(solutionFileFilePath)) + using (var reader = new StreamReader(stream)) { - var line = reader.ReadLine(); - this.SolutionFile.RawFileText.Add(line); + while (!reader.EndOfStream) + { + var line = reader.ReadLine(); + SolutionFile.RawFileText.Add(line); + } } - } - } - - private LineType DetermineLineTyeType(string line) - { - var retval = LineType.Ignore; - return retval; - } - - private State SolutionFileState = State.NotInProject; - - private LineType DeterminLineType(string line) - { - if (line.StartsWith(@"Project(""")) - { - return LineType.StartProject; - } - else if (line.Contains("EndProjectSection")) - { - return LineType.EndDependencyList; - } - else if (line.StartsWith("EndProject")) - { - return LineType.EndProject; - } - else if (line.Contains("ProjectSection(ProjectDependencies)")) - { - return LineType.StartDependencyList; - } - else if (SolutionFileState == State.InProjectDependencies) - { - return LineType.DependencyLine; - } - - return LineType.Ignore; - } - - - void ProcDependencyLine(string line) - { - var match = DependencyLineRegex.Match(line); - if (match.Groups.Count == 3) - { - this.currentProject.DependentOnIds.Add(match.Groups[1].Value); - } - } - - private ProjectFileReference currentProject = null; - private const string ProjectLinePattern = @".*Project\(\s*""\s*\{([a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12})\}\s*""\s*\)\s*=\s*""([^""]*)""\s*,\s*""([^""]*)""\s*,\s*""\s*\{([a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12})\}\s*"".*"; - private readonly Regex ProjectLineRegex = new Regex(ProjectLinePattern, RegexOptions.Compiled); - - private const string DependencyLinePattern = @"\s*\{([a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12})\}\s*=\s*\{([a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12})\}.*"; - private readonly Regex DependencyLineRegex = new Regex(DependencyLinePattern, RegexOptions.Compiled); - - - private const string SolutionFolderId = @"2150E333-8FDC-42A3-9474-1A3956D46DE8"; - void ProcStartProject(string line) - { - var match = ProjectLineRegex.Match(line); - if (match.Groups.Count == 5) - { - if (match.Groups[1].Value.ToUpperInvariant() == SolutionFolderId) + } + + public VisualStudioSolutionFile SolutionFile { get; private set; } + + public VisualStudioSolutionFile Parse() + { + SolutionFileState = State.NotInProject; + foreach (var line in SolutionFile.RawFileText) { - this.SolutionFileState = State.InSolutionFolder; - return; + ProcLine(line); } - this.currentProject = new ProjectFileReference() + + return SolutionFile; + } + + private LineType DetermineLineTyeType(string line) + { + var retval = LineType.Ignore; + return retval; + } + + private LineType DetermineLineType(string line) + { + if (line.StartsWith(@"Project(""")) + { + return LineType.StartProject; + } + + if (line.Contains("EndProjectSection")) { - Id = match.Groups[4].Value.ToUpperInvariant(), - Name = match.Groups[2].Value, - FilePath = XPlatHelper.FullyNormalizePath(this.SolutionFile.Directory, match.Groups[3].Value) - }; - this.SolutionFile.ProjectFiles.Add(this.currentProject); - } - - this.SolutionFileState = State.InProject; - } - - void ProcLine(string line) - { - var lineType = DeterminLineType(line); - switch (lineType) - { - case LineType.StartProject: - ProcStartProject(line); - break; - case LineType.EndProject: - this.currentProject = null; - this.SolutionFileState = State.NotInProject; - break; - case LineType.StartDependencyList: - this.SolutionFileState = State.InProjectDependencies; - break; - case LineType.EndDependencyList: - this.SolutionFileState = State.InProject; - break; - case LineType.DependencyLine: - ProcDependencyLine(line); - break; - } - } - - public VisualStudioSolutionFile Parse() - { - this.SolutionFileState = State.NotInProject; - foreach(var line in SolutionFile.RawFileText) - { - ProcLine(line); - } - return SolutionFile; - } - } + return LineType.EndDependencyList; + } + + if (line.StartsWith("EndProject")) + { + return LineType.EndProject; + } + + if (line.Contains("ProjectSection(ProjectDependencies)")) + { + return LineType.StartDependencyList; + } + + if (SolutionFileState == State.InProjectDependencies) + { + return LineType.DependencyLine; + } + + return LineType.Ignore; + } + + private void ProcDependencyLine(string line) + { + var match = DependencyLineRegex.Match(line); + if (match.Groups.Count == 3) + { + currentProject.DependentOnIds.Add(match.Groups[1].Value); + } + } + + private void ProcLine(string line) + { + var lineType = DetermineLineType(line); + switch (lineType) + { + case LineType.StartProject: + ProcStartProject(line); + break; + case LineType.EndProject: + currentProject = null; + SolutionFileState = State.NotInProject; + break; + case LineType.StartDependencyList: + SolutionFileState = State.InProjectDependencies; + break; + case LineType.EndDependencyList: + SolutionFileState = State.InProject; + break; + case LineType.DependencyLine: + ProcDependencyLine(line); + break; + } + } + + private void ProcStartProject(string line) + { + var match = ProjectLineRegex.Match(line); + if (match.Groups.Count == 5) + { + if (match.Groups[1].Value.ToUpperInvariant() == SolutionFolderId) + { + SolutionFileState = State.InSolutionFolder; + return; + } + + currentProject = new ProjectFileReference + { + Id = match.Groups[4].Value.ToUpperInvariant(), + Name = match.Groups[2].Value, + FilePath = XPlatHelper.FullyNormalizePath(SolutionFile.Directory, match.Groups[3].Value) + }; + SolutionFile.ProjectFiles.Add(currentProject); + } + + SolutionFileState = State.InProject; + } + } } diff --git a/DotNetCoreBuildTools/RunParameters.cs b/DotNetCoreBuildTools/RunParameters.cs index 92f4835..16ff725 100644 --- a/DotNetCoreBuildTools/RunParameters.cs +++ b/DotNetCoreBuildTools/RunParameters.cs @@ -1,11 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace ProjectOrder +namespace ProjectOrder { - public class RunParameters - { - public List PathList { get; set; } = new List(); - } + using System.Collections.Generic; + + public class RunParameters + { + public List PathList { get; set; } = new List(); + } } diff --git a/DotNetCoreBuildTools/Scripts/extract-project-parts.sh b/DotNetCoreBuildTools/Scripts/extract-project-parts.sh index 735f98e..4b87373 100644 --- a/DotNetCoreBuildTools/Scripts/extract-project-parts.sh +++ b/DotNetCoreBuildTools/Scripts/extract-project-parts.sh @@ -4,7 +4,7 @@ function writeUsage() { echo "Usage:" echo " extract-project-parts.sh -h Display this help message" echo " extract-project-parts.sh -? Display this help message" - echo " extract-project-parts.sh -p {parts} Comma seperated parts list" + echo " extract-project-parts.sh -p {parts} Comma separated parts list" exit 0; } diff --git a/build/CodeAnalysis/AllRules.16.5.WithSonarLint.ruleset b/build/CodeAnalysis/AllRules.16.5.WithSonarLint.ruleset new file mode 100644 index 0000000..6697fc2 --- /dev/null +++ b/build/CodeAnalysis/AllRules.16.5.WithSonarLint.ruleset @@ -0,0 +1,2022 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/CodeAnalysis/CustomDictionary.xml b/build/CodeAnalysis/CustomDictionary.xml new file mode 100644 index 0000000..c667e8c --- /dev/null +++ b/build/CodeAnalysis/CustomDictionary.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + bmf + ctor + etw + gui + ioc + Landorphan + loggable + oem + perf + param + params + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/build/CodeAnalysis/Default.Source.16.5.WithSonarLint.ruleset b/build/CodeAnalysis/Default.Source.16.5.WithSonarLint.ruleset new file mode 100644 index 0000000..1173428 --- /dev/null +++ b/build/CodeAnalysis/Default.Source.16.5.WithSonarLint.ruleset @@ -0,0 +1,2022 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/CodeAnalysis/Default.Test.16.5.WithSonarLint.ruleset b/build/CodeAnalysis/Default.Test.16.5.WithSonarLint.ruleset new file mode 100644 index 0000000..7d751b5 --- /dev/null +++ b/build/CodeAnalysis/Default.Test.16.5.WithSonarLint.ruleset @@ -0,0 +1,2071 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/JetBrains/ResharperLayout.Current.xml b/build/JetBrains/ResharperLayout.Current.xml new file mode 100644 index 0000000..9fada50 --- /dev/null +++ b/build/JetBrains/ResharperLayout.Current.xml @@ -0,0 +1,1372 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/JetBrains/ResharperLayout.Editing.xml b/build/JetBrains/ResharperLayout.Editing.xml new file mode 100644 index 0000000..98064e9 --- /dev/null +++ b/build/JetBrains/ResharperLayout.Editing.xml @@ -0,0 +1,1372 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +