diff --git a/Analyzer/Analyzer.Package/Analyzer.Package.csproj b/Analyzer/Analyzer.Package/DisCatSharp.Analyzer.Package.csproj similarity index 84% rename from Analyzer/Analyzer.Package/Analyzer.Package.csproj rename to Analyzer/Analyzer.Package/DisCatSharp.Analyzer.Package.csproj index 74ba453a8..3aeb801c4 100644 --- a/Analyzer/Analyzer.Package/Analyzer.Package.csproj +++ b/Analyzer/Analyzer.Package/DisCatSharp.Analyzer.Package.csproj @@ -1,39 +1,39 @@ netstandard2.0 false true true DisCatSharp.Analyzer - 4.2.0.0 + 4.3.0.0 Lala Sabathil false DisCatSharp Analyzer Various DisCatSharp Analyzers. Copyright 2022 AITSYS Analyzer, analyzers true true $(TargetsForTfmSpecificContentInPackage);_AddAnalyzersToOutput - + - + diff --git a/Analyzer/Analyzer.Vsix/Analyzer.Vsix.csproj b/Analyzer/Analyzer.Vsix/DisCatSharp.Analyzer.Vsix.csproj similarity index 89% rename from Analyzer/Analyzer.Vsix/Analyzer.Vsix.csproj rename to Analyzer/Analyzer.Vsix/DisCatSharp.Analyzer.Vsix.csproj index 34aeb29c7..5dc26f02a 100644 --- a/Analyzer/Analyzer.Vsix/Analyzer.Vsix.csproj +++ b/Analyzer/Analyzer.Vsix/DisCatSharp.Analyzer.Vsix.csproj @@ -1,47 +1,47 @@ net472 - Analyzer.Vsix - Analyzer.Vsix + DisCatSharp.Analyzer.Vsix + DisCatSharp.Analyzer.Vsix false false false false false false Roslyn Program $(DevEnvDir)devenv.exe /rootsuffix $(VSSDKTargetPlatformRegRootSuffix) - + \ No newline at end of file diff --git a/Analyzer/Analyzer.Vsix/source.extension.vsixmanifest b/Analyzer/Analyzer.Vsix/source.extension.vsixmanifest index 6d7bff2bf..9d0fb168f 100644 --- a/Analyzer/Analyzer.Vsix/source.extension.vsixmanifest +++ b/Analyzer/Analyzer.Vsix/source.extension.vsixmanifest @@ -1,27 +1,27 @@ - + DisCatSharp Analyzer This is an diagnostic extension for DisCatSharp. x86 amd64 - - + + diff --git a/Analyzer/Analyzer/AnalyzerReleases.Shipped.md b/Analyzer/Analyzer/AnalyzerReleases.Shipped.md index 6a053f2cc..100cfe5a9 100644 --- a/Analyzer/Analyzer/AnalyzerReleases.Shipped.md +++ b/Analyzer/Analyzer/AnalyzerReleases.Shipped.md @@ -1,10 +1,25 @@ ; Shipped analyzer releases ; https://github.com/dotnet/roslyn-analyzers/blob/main/src/Microsoft.CodeAnalysis.Analyzers/ReleaseTrackingAnalyzers.Help.md ## Release 4.2 ### New Rules Rule ID | Category | Severity | Notes --------|----------|----------|------- DcsExp | Informations | Warning | Informs if a method or attribute or similar is considered experimental + + +## Release 4.3 + +### New Rules + +Rule ID | Category | Severity | Notes +--------|----------|----------|------- +DCS0001 | Informations | Warning | Experimental Attribute Analyzer + +### Removed Rules + +Rule ID | Category | Severity | Notes +--------|----------|----------|------- +DcsExp | Informations | Warning | Informs if a method or attribute or similar is considered experimental diff --git a/Analyzer/Analyzer/AnalyzerAnalyzer.cs b/Analyzer/Analyzer/AttributeAnalyzer.cs similarity index 74% rename from Analyzer/Analyzer/AnalyzerAnalyzer.cs rename to Analyzer/Analyzer/AttributeAnalyzer.cs index 4a5afc1a2..fd3da9854 100644 --- a/Analyzer/Analyzer/AnalyzerAnalyzer.cs +++ b/Analyzer/Analyzer/AttributeAnalyzer.cs @@ -1,105 +1,99 @@ // This file is part of the DisCatSharp project, based off DSharpPlus. // // Copyright (c) 2021-2022 AITSYS // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. -using System; -using System.Collections.Generic; -using System.Collections.Immutable; -using System.Linq; -using System.Threading; - using DisCatSharp.Experimental; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.CSharp.Syntax; using Microsoft.CodeAnalysis.Diagnostics; -namespace Analyzer +using System; +using System.Collections.Immutable; +using System.Linq; + +namespace DisCatSharp.Analyzer { [DiagnosticAnalyzer(LanguageNames.CSharp)] - public class AnalyzerAnalyzer : DiagnosticAnalyzer + public class AttributeAnalyzer : DiagnosticAnalyzer { - public const string DiagnosticId = "DcsExp"; + public const string DiagnosticIdPrefix = "DCS"; - // You can change these strings in the Resources.resx file. If you do not want your analyzer to be localize-able, you can use regular strings for Title and MessageFormat. - // See https://github.com/dotnet/roslyn/blob/main/docs/analyzers/Localizing%20Analyzers.md for more on localization private static readonly LocalizableString Title = new LocalizableResourceString(nameof(Resources.AnalyzerTitle), Resources.ResourceManager, typeof(Resources)); private static readonly LocalizableString MessageFormat = new LocalizableResourceString(nameof(Resources.AnalyzerMessageFormat), Resources.ResourceManager, typeof(Resources)); private static readonly LocalizableString Description = new LocalizableResourceString(nameof(Resources.AnalyzerDescription), Resources.ResourceManager, typeof(Resources)); private const string Category = "Informations"; - private static readonly DiagnosticDescriptor Rule = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, Category, DiagnosticSeverity.Warning, isEnabledByDefault: true, description: Description); + private static readonly DiagnosticDescriptor ExperimentalRule = new DiagnosticDescriptor(DiagnosticIdPrefix + "0001", Title, MessageFormat, Category, DiagnosticSeverity.Warning, true, Description, "https://docs.discatsharp.tech/vs/analyzer/dcs/0001", "DisCatSharp", "Experimental"); - public override ImmutableArray SupportedDiagnostics { get { return ImmutableArray.Create(Rule); } } + public override ImmutableArray SupportedDiagnostics { get { return ImmutableArray.Create(ExperimentalRule); } } public override void Initialize(AnalysisContext context) { context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None); context.EnableConcurrentExecution(); - // See https://github.com/dotnet/roslyn/blob/main/docs/analyzers/Analyzer%20Actions%20Semantics.md for more information context.RegisterSyntaxNodeAction(AnalyzerInvocation, SyntaxKind.InvocationExpression); } private static void AnalyzerInvocation(SyntaxNodeAnalysisContext context) { var invocation = (InvocationExpressionSyntax)context.Node; var methodDeclaration = (context.SemanticModel.GetSymbolInfo(invocation, context.CancellationToken).Symbol as IMethodSymbol); //There are several reason why this may be null e.g invoking a delegate if (null == methodDeclaration) { return; } var methodAttributes = methodDeclaration.GetAttributes(); - var attributeData = methodAttributes.FirstOrDefault(attr => IsExperimentalAttribute(context.SemanticModel, attr, typeof(ExperimentalAttribute))); + var attributeData = methodAttributes.FirstOrDefault(attr => IsRequiredAttribute(context.SemanticModel, attr, typeof(ExperimentalAttribute))); if (null == attributeData) { return; } var message = GetMessage(attributeData); - var diagnostic = Diagnostic.Create(Rule, invocation.GetLocation(), methodDeclaration.Name, message); + var diagnostic = Diagnostic.Create(ExperimentalRule, invocation.GetLocation(), methodDeclaration.Name, message); context.ReportDiagnostic(diagnostic); } - static bool IsExperimentalAttribute(SemanticModel semanticModel, AttributeData attribute, Type desiredAttributeType) + static bool IsRequiredAttribute(SemanticModel semanticModel, AttributeData attribute, Type desiredAttributeType) { var desiredTypeNamedSymbol = semanticModel.Compilation.GetTypeByMetadataName(desiredAttributeType.FullName); - var result = attribute.AttributeClass.Equals(desiredTypeNamedSymbol); + var result = attribute.AttributeClass.Equals(desiredTypeNamedSymbol, SymbolEqualityComparer.Default); return result; } static string GetMessage(AttributeData attribute) { if (attribute.ConstructorArguments.Length < 1) { return "Do not use in production"; } - return attribute.ConstructorArguments[0].Value as string; } } } diff --git a/Analyzer/Analyzer/Analyzer.csproj b/Analyzer/Analyzer/DisCatSharp.Analyzer.csproj similarity index 100% rename from Analyzer/Analyzer/Analyzer.csproj rename to Analyzer/Analyzer/DisCatSharp.Analyzer.csproj diff --git a/Analyzer/Analyzer/Resources.Designer.cs b/Analyzer/Analyzer/Resources.Designer.cs index cb361bc06..0301ea73b 100644 --- a/Analyzer/Analyzer/Resources.Designer.cs +++ b/Analyzer/Analyzer/Resources.Designer.cs @@ -1,90 +1,90 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ -namespace Analyzer { +namespace DisCatSharp.Analyzer { using System; /// /// A strongly-typed resource class, for looking up localized strings, etc. /// // This class was auto-generated by the StronglyTypedResourceBuilder // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { private static global::System.Resources.ResourceManager resourceMan; private static global::System.Globalization.CultureInfo resourceCulture; [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal Resources() { } /// /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Analyzer.Resources", typeof(Resources).Assembly); + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("DisCatSharp.Analyzer.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; } } /// /// Overrides the current thread's CurrentUICulture property for all /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } /// /// Looks up a localized string similar to This is considered experimental and shouldn't be used in production.. /// internal static string AnalyzerDescription { get { return ResourceManager.GetString("AnalyzerDescription", resourceCulture); } } /// /// Looks up a localized string similar to '{0}' is considered experimental: {1}. /// internal static string AnalyzerMessageFormat { get { return ResourceManager.GetString("AnalyzerMessageFormat", resourceCulture); } } /// /// Looks up a localized string similar to Experimental. /// internal static string AnalyzerTitle { get { return ResourceManager.GetString("AnalyzerTitle", resourceCulture); } } } } diff --git a/Attributes/ExperimentalAttribute.cs b/Attributes/ExperimentalAttribute.cs index b9293741b..3e70fcb72 100644 --- a/Attributes/ExperimentalAttribute.cs +++ b/Attributes/ExperimentalAttribute.cs @@ -1,36 +1,40 @@ // This file is part of the DisCatSharp project, based off DSharpPlus. // // Copyright (c) 2021-2022 AITSYS // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. using System; namespace DisCatSharp.Experimental { [AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = true)] public sealed class ExperimentalAttribute : Attribute { - public string Message; - public ExperimentalAttribute(string message = "This is experimental") + public string Message { get; set; } + + public ExperimentalAttribute(string message) { this.Message = message; } + + public ExperimentalAttribute() + { } } } diff --git a/Attributes/Properties/AssemblyProperties.cs b/Attributes/Properties/AssemblyProperties.cs new file mode 100644 index 000000000..5841f7937 --- /dev/null +++ b/Attributes/Properties/AssemblyProperties.cs @@ -0,0 +1,47 @@ +// This file is part of the DisCatSharp project, based off DSharpPlus. +// +// Copyright (c) 2021-2022 AITSYS +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("DisCatSharp")] +[assembly: InternalsVisibleTo("DisCatSharp.ApplicationCommands")] +[assembly: InternalsVisibleTo("DisCatSharp.CommandsNext")] +[assembly: InternalsVisibleTo("DisCatSharp.Common")] +[assembly: InternalsVisibleTo("DisCatSharp.Configuration")] +[assembly: InternalsVisibleTo("DisCatSharp.Configuration.Tests")] +[assembly: InternalsVisibleTo("DisCatSharp.Hosting")] +[assembly: InternalsVisibleTo("DisCatSharp.Hosting.DependencyInjection")] +[assembly: InternalsVisibleTo("DisCatSharp.Hosting.Tests")] +[assembly: InternalsVisibleTo("DisCatSharp.Interactivity")] +[assembly: InternalsVisibleTo("DisCatSharp.Lavalink")] +[assembly: InternalsVisibleTo("DisCatSharp.Phabricator")] +[assembly: InternalsVisibleTo("DisCatSharp.Support")] +[assembly: InternalsVisibleTo("DisCatSharp.Test")] +[assembly: InternalsVisibleTo("DisCatSharp.VoiceNext")] +[assembly: InternalsVisibleTo("DisCatSharp.VoiceNext.Natives")] +[assembly: InternalsVisibleTo("Nyaw")] +[assembly: InternalsVisibleTo("DisCatSharp.DevTools")] +[assembly: InternalsVisibleTo("DisCatSharp.DocsGenerator")] +[assembly: InternalsVisibleTo("DisCatSharp.StaffApps")] +[assembly: InternalsVisibleTo("Microsoft.DocAsCode")] +[assembly: InternalsVisibleTo("Microsoft.DocAsCode.Metadata.ManagedReference")] +[assembly: InternalsVisibleTo("DisCatSharp.Experimental")] diff --git a/DisCatSharp.Experimental/Program.cs b/DisCatSharp.Experimental/Program.cs index 275d506a9..ecf7b6019 100644 --- a/DisCatSharp.Experimental/Program.cs +++ b/DisCatSharp.Experimental/Program.cs @@ -1,26 +1,26 @@ using System; namespace DisCatSharp.Experimental; public class Program { public static void Main(string[] args = null) { Test2(); } - [Experimental("Booba.")] + [Experimental] public static void Test2() { Console.WriteLine("Test2"); } } diff --git a/DisCatSharp.sln b/DisCatSharp.sln index 3c7826c69..193d905e2 100644 --- a/DisCatSharp.sln +++ b/DisCatSharp.sln @@ -1,177 +1,185 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.1.31911.260 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp", "DisCatSharp\DisCatSharp.csproj", "{EB3D8310-DFAD-4295-97F9-82E253647583}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp.VoiceNext", "DisCatSharp.VoiceNext\DisCatSharp.VoiceNext.csproj", "{FB6B9EE9-65FB-4DFB-8D51-06F0BE6C1BA5}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{4255B64D-92EC-46B3-BC3B-ED2C3A8073EE}" ProjectSection(SolutionItems) = preProject .editorconfig = .editorconfig .gitattributes = .gitattributes .gitignore = .gitignore BUILDING.md = BUILDING.md CODE_OF_CONDUCT.md = CODE_OF_CONDUCT.md CONTRIBUTING.md = CONTRIBUTING.md LICENSE.md = LICENSE.md README.md = README.md SECURITY.md = SECURITY.md EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp.CommandsNext", "DisCatSharp.CommandsNext\DisCatSharp.CommandsNext.csproj", "{C8ED55FB-E028-468D-955F-1534C20274EF}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp.Interactivity", "DisCatSharp.Interactivity\DisCatSharp.Interactivity.csproj", "{DD32BEC3-0189-479F-86DC-CCF95E5634A9}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{F953F5D0-F0C9-41E6-ADBF-60A76D295899}" ProjectSection(SolutionItems) = preProject .nuget\NuGet.config = .nuget\NuGet.config EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build Items", "Build Items", "{84464D70-687B-40A8-836D-C4F737698969}" ProjectSection(SolutionItems) = preProject appveyor.yml = appveyor.yml .github\workflows\codeql-analysis.yml = .github\workflows\codeql-analysis.yml .github\dependabot.yml = .github\dependabot.yml DisCatSharp.targets = DisCatSharp.targets docs-oneclick-rebuild.ps1 = docs-oneclick-rebuild.ps1 .github\workflows\docs.yml = .github\workflows\docs.yml .github\workflows\dotnet.yml = .github\workflows\dotnet.yml Library.targets = Library.targets NuGet.targets = NuGet.targets oneclick-rebuild.ps1 = oneclick-rebuild.ps1 Package.targets = Package.targets rebuild-all.ps1 = rebuild-all.ps1 rebuild-docs.ps1 = rebuild-docs.ps1 rebuild-lib.ps1 = rebuild-lib.ps1 Version.targets = Version.targets EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".github", ".github", "{430C28D8-5F85-4D6E-AA68-211549435245}" ProjectSection(SolutionItems) = preProject .github\ISSUE_TEMPLATE\bug_report.md = .github\ISSUE_TEMPLATE\bug_report.md .github\CODEOWNERS = .github\CODEOWNERS .github\workflows\codeql-analysis.yml = .github\workflows\codeql-analysis.yml .github\workflows\docs-preview.yml = .github\workflows\docs-preview.yml .github\workflows\docs.yml = .github\workflows\docs.yml .github\workflows\dotnet.yml = .github\workflows\dotnet.yml .github\ISSUE_TEMPLATE\feature_request.md = .github\ISSUE_TEMPLATE\feature_request.md .github\FUNDING.yml = .github\FUNDING.yml .github\pull_request_template.md = .github\pull_request_template.md EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp.Lavalink", "DisCatSharp.Lavalink\DisCatSharp.Lavalink.csproj", "{A8B8FB09-C6AF-4F28-89B8-B53EE0DCE6E5}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp.VoiceNext.Natives", "DisCatSharp.VoiceNext.Natives\DisCatSharp.VoiceNext.Natives.csproj", "{BEC47B41-71E4-41D1-A4F9-BB7C56A1B82B}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp.Common", "DisCatSharp.Common\DisCatSharp.Common.csproj", "{CD84A5C7-C7FF-48CA-B23D-FA726CF80E09}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp.ApplicationCommands", "DisCatSharp.ApplicationCommands\DisCatSharp.ApplicationCommands.csproj", "{AD530FD0-523C-4DE7-9AF6-B9A3785492C2}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp.Configuration", "DisCatSharp.Configuration\DisCatSharp.Configuration.csproj", "{603287D3-1EF2-47F1-A611-C7F25869DE14}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp.Configuration.Tests", "DisCatSharp.Configuration.Tests\DisCatSharp.Configuration.Tests.csproj", "{E15E88B4-63AD-42DE-B685-D31697C62194}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp.Hosting", "DisCatSharp.Hosting\DisCatSharp.Hosting.csproj", "{72CCE5D5-926B-432A-876A-065FA2BC9B7B}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp.Hosting.Tests", "DisCatSharp.Hosting.Tests\DisCatSharp.Hosting.Tests.csproj", "{D02B598A-F0C9-4A8C-B8DE-7C0BAC8C9B94}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp.Hosting.DependencyInjection", "DisCatSharp.Hosting.DependencyInjection\DisCatSharp.Hosting.DependencyInjection.csproj", "{2D67D1DD-E5B2-40C7-80E2-54D63730E7F0}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp.Experimental", "DisCatSharp.Experimental\DisCatSharp.Experimental.csproj", "{CF03EADC-E178-45B3-BD72-B6F70B625C8F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Analyzer", "Analyzer\Analyzer\Analyzer.csproj", "{C13DBEE0-AFB9-4022-B2CC-BE898F90737C}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp.Analyzer", "Analyzer\Analyzer\DisCatSharp.Analyzer.csproj", "{C13DBEE0-AFB9-4022-B2CC-BE898F90737C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Analyzer.Package", "Analyzer\Analyzer.Package\Analyzer.Package.csproj", "{20DC6B91-69A3-407B-AAE1-0C8F2F2A93C2}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp.Analyzer.Package", "Analyzer\Analyzer.Package\DisCatSharp.Analyzer.Package.csproj", "{20DC6B91-69A3-407B-AAE1-0C8F2F2A93C2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Attributes", "Attributes\Attributes.csproj", "{2EEA9FC8-D358-47BB-9998-2128A0182ABB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Attributes", "Attributes\Attributes.csproj", "{2EEA9FC8-D358-47BB-9998-2128A0182ABB}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Analyzer.Vsix", "Analyzer\Analyzer.Vsix\Analyzer.Vsix.csproj", "{560384C1-B4D2-4B83-925C-3DF9F148E4F4}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DisCatSharp.Analyzer.Vsix", "Analyzer\Analyzer.Vsix\DisCatSharp.Analyzer.Vsix.csproj", "{560384C1-B4D2-4B83-925C-3DF9F148E4F4}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SideTools", "SideTools", "{B5D3367B-92DC-4B7F-ABCF-E1F72E205230}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {EB3D8310-DFAD-4295-97F9-82E253647583}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EB3D8310-DFAD-4295-97F9-82E253647583}.Debug|Any CPU.Build.0 = Debug|Any CPU {EB3D8310-DFAD-4295-97F9-82E253647583}.Release|Any CPU.ActiveCfg = Release|Any CPU {EB3D8310-DFAD-4295-97F9-82E253647583}.Release|Any CPU.Build.0 = Release|Any CPU {FB6B9EE9-65FB-4DFB-8D51-06F0BE6C1BA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FB6B9EE9-65FB-4DFB-8D51-06F0BE6C1BA5}.Debug|Any CPU.Build.0 = Debug|Any CPU {FB6B9EE9-65FB-4DFB-8D51-06F0BE6C1BA5}.Release|Any CPU.ActiveCfg = Release|Any CPU {FB6B9EE9-65FB-4DFB-8D51-06F0BE6C1BA5}.Release|Any CPU.Build.0 = Release|Any CPU {C8ED55FB-E028-468D-955F-1534C20274EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C8ED55FB-E028-468D-955F-1534C20274EF}.Debug|Any CPU.Build.0 = Debug|Any CPU {C8ED55FB-E028-468D-955F-1534C20274EF}.Release|Any CPU.ActiveCfg = Release|Any CPU {C8ED55FB-E028-468D-955F-1534C20274EF}.Release|Any CPU.Build.0 = Release|Any CPU {DD32BEC3-0189-479F-86DC-CCF95E5634A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DD32BEC3-0189-479F-86DC-CCF95E5634A9}.Debug|Any CPU.Build.0 = Debug|Any CPU {DD32BEC3-0189-479F-86DC-CCF95E5634A9}.Release|Any CPU.ActiveCfg = Release|Any CPU {DD32BEC3-0189-479F-86DC-CCF95E5634A9}.Release|Any CPU.Build.0 = Release|Any CPU {A8B8FB09-C6AF-4F28-89B8-B53EE0DCE6E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A8B8FB09-C6AF-4F28-89B8-B53EE0DCE6E5}.Debug|Any CPU.Build.0 = Debug|Any CPU {A8B8FB09-C6AF-4F28-89B8-B53EE0DCE6E5}.Release|Any CPU.ActiveCfg = Release|Any CPU {A8B8FB09-C6AF-4F28-89B8-B53EE0DCE6E5}.Release|Any CPU.Build.0 = Release|Any CPU {BEC47B41-71E4-41D1-A4F9-BB7C56A1B82B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BEC47B41-71E4-41D1-A4F9-BB7C56A1B82B}.Debug|Any CPU.Build.0 = Debug|Any CPU {BEC47B41-71E4-41D1-A4F9-BB7C56A1B82B}.Release|Any CPU.ActiveCfg = Release|Any CPU {BEC47B41-71E4-41D1-A4F9-BB7C56A1B82B}.Release|Any CPU.Build.0 = Release|Any CPU {CD84A5C7-C7FF-48CA-B23D-FA726CF80E09}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CD84A5C7-C7FF-48CA-B23D-FA726CF80E09}.Debug|Any CPU.Build.0 = Debug|Any CPU {CD84A5C7-C7FF-48CA-B23D-FA726CF80E09}.Release|Any CPU.ActiveCfg = Release|Any CPU {CD84A5C7-C7FF-48CA-B23D-FA726CF80E09}.Release|Any CPU.Build.0 = Release|Any CPU {AD530FD0-523C-4DE7-9AF6-B9A3785492C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AD530FD0-523C-4DE7-9AF6-B9A3785492C2}.Debug|Any CPU.Build.0 = Debug|Any CPU {AD530FD0-523C-4DE7-9AF6-B9A3785492C2}.Release|Any CPU.ActiveCfg = Release|Any CPU {AD530FD0-523C-4DE7-9AF6-B9A3785492C2}.Release|Any CPU.Build.0 = Release|Any CPU {603287D3-1EF2-47F1-A611-C7F25869DE14}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {603287D3-1EF2-47F1-A611-C7F25869DE14}.Debug|Any CPU.Build.0 = Debug|Any CPU {603287D3-1EF2-47F1-A611-C7F25869DE14}.Release|Any CPU.ActiveCfg = Release|Any CPU {603287D3-1EF2-47F1-A611-C7F25869DE14}.Release|Any CPU.Build.0 = Release|Any CPU {E15E88B4-63AD-42DE-B685-D31697C62194}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E15E88B4-63AD-42DE-B685-D31697C62194}.Debug|Any CPU.Build.0 = Debug|Any CPU {E15E88B4-63AD-42DE-B685-D31697C62194}.Release|Any CPU.ActiveCfg = Release|Any CPU {E15E88B4-63AD-42DE-B685-D31697C62194}.Release|Any CPU.Build.0 = Release|Any CPU {72CCE5D5-926B-432A-876A-065FA2BC9B7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {72CCE5D5-926B-432A-876A-065FA2BC9B7B}.Debug|Any CPU.Build.0 = Debug|Any CPU {72CCE5D5-926B-432A-876A-065FA2BC9B7B}.Release|Any CPU.ActiveCfg = Release|Any CPU {72CCE5D5-926B-432A-876A-065FA2BC9B7B}.Release|Any CPU.Build.0 = Release|Any CPU {D02B598A-F0C9-4A8C-B8DE-7C0BAC8C9B94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D02B598A-F0C9-4A8C-B8DE-7C0BAC8C9B94}.Debug|Any CPU.Build.0 = Debug|Any CPU {D02B598A-F0C9-4A8C-B8DE-7C0BAC8C9B94}.Release|Any CPU.ActiveCfg = Release|Any CPU {D02B598A-F0C9-4A8C-B8DE-7C0BAC8C9B94}.Release|Any CPU.Build.0 = Release|Any CPU {2D67D1DD-E5B2-40C7-80E2-54D63730E7F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2D67D1DD-E5B2-40C7-80E2-54D63730E7F0}.Debug|Any CPU.Build.0 = Debug|Any CPU {2D67D1DD-E5B2-40C7-80E2-54D63730E7F0}.Release|Any CPU.ActiveCfg = Release|Any CPU {2D67D1DD-E5B2-40C7-80E2-54D63730E7F0}.Release|Any CPU.Build.0 = Release|Any CPU {CF03EADC-E178-45B3-BD72-B6F70B625C8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {CF03EADC-E178-45B3-BD72-B6F70B625C8F}.Debug|Any CPU.Build.0 = Debug|Any CPU {CF03EADC-E178-45B3-BD72-B6F70B625C8F}.Release|Any CPU.ActiveCfg = Release|Any CPU {CF03EADC-E178-45B3-BD72-B6F70B625C8F}.Release|Any CPU.Build.0 = Release|Any CPU {C13DBEE0-AFB9-4022-B2CC-BE898F90737C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C13DBEE0-AFB9-4022-B2CC-BE898F90737C}.Debug|Any CPU.Build.0 = Debug|Any CPU {C13DBEE0-AFB9-4022-B2CC-BE898F90737C}.Release|Any CPU.ActiveCfg = Release|Any CPU {C13DBEE0-AFB9-4022-B2CC-BE898F90737C}.Release|Any CPU.Build.0 = Release|Any CPU {20DC6B91-69A3-407B-AAE1-0C8F2F2A93C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {20DC6B91-69A3-407B-AAE1-0C8F2F2A93C2}.Debug|Any CPU.Build.0 = Debug|Any CPU {20DC6B91-69A3-407B-AAE1-0C8F2F2A93C2}.Release|Any CPU.ActiveCfg = Release|Any CPU {20DC6B91-69A3-407B-AAE1-0C8F2F2A93C2}.Release|Any CPU.Build.0 = Release|Any CPU {2EEA9FC8-D358-47BB-9998-2128A0182ABB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2EEA9FC8-D358-47BB-9998-2128A0182ABB}.Debug|Any CPU.Build.0 = Debug|Any CPU {2EEA9FC8-D358-47BB-9998-2128A0182ABB}.Release|Any CPU.ActiveCfg = Release|Any CPU {2EEA9FC8-D358-47BB-9998-2128A0182ABB}.Release|Any CPU.Build.0 = Release|Any CPU {560384C1-B4D2-4B83-925C-3DF9F148E4F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {560384C1-B4D2-4B83-925C-3DF9F148E4F4}.Debug|Any CPU.Build.0 = Debug|Any CPU {560384C1-B4D2-4B83-925C-3DF9F148E4F4}.Release|Any CPU.ActiveCfg = Release|Any CPU {560384C1-B4D2-4B83-925C-3DF9F148E4F4}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {C13DBEE0-AFB9-4022-B2CC-BE898F90737C} = {B5D3367B-92DC-4B7F-ABCF-E1F72E205230} + {20DC6B91-69A3-407B-AAE1-0C8F2F2A93C2} = {B5D3367B-92DC-4B7F-ABCF-E1F72E205230} + {2EEA9FC8-D358-47BB-9998-2128A0182ABB} = {B5D3367B-92DC-4B7F-ABCF-E1F72E205230} + {560384C1-B4D2-4B83-925C-3DF9F148E4F4} = {B5D3367B-92DC-4B7F-ABCF-E1F72E205230} + EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {23F3A981-51B8-4285-A38C-3267F1D25FE7} EndGlobalSection EndGlobal