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.
-
-
+
+
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