From a81d776b2dfd9e60390d8c31ca7e9f5c49a7dca0 Mon Sep 17 00:00:00 2001 From: Joe4evr Date: Thu, 14 Dec 2017 08:25:24 +0100 Subject: [PATCH] Extrapolate DerivesFromModuleBase() to an extension method --- .../GuildAccessAnalyzer.cs | 17 +------------ src/Discord.Net.Analyzers/SymbolExtensions.cs | 24 +++++++++++++++++++ .../AnalyzerTests/TestModule.cs | 12 ---------- 3 files changed, 25 insertions(+), 28 deletions(-) create mode 100644 src/Discord.Net.Analyzers/SymbolExtensions.cs delete mode 100644 test/Discord.Net.Tests/AnalyzerTests/TestModule.cs diff --git a/src/Discord.Net.Analyzers/GuildAccessAnalyzer.cs b/src/Discord.Net.Analyzers/GuildAccessAnalyzer.cs index 7ed4408b2..995bd3f15 100644 --- a/src/Discord.Net.Analyzers/GuildAccessAnalyzer.cs +++ b/src/Discord.Net.Analyzers/GuildAccessAnalyzer.cs @@ -41,7 +41,7 @@ namespace Discord.Analyzers // Bail out if the containing class doesn't derive from 'ModuleBase' var classNode = context.Node.FirstAncestorOrSelf(); var classSymbol = context.SemanticModel.GetDeclaredSymbol(classNode); - if (!DerivesFromModuleBase(classSymbol)) + if (!classSymbol.DerivesFromModuleBase()) return; // Bail out if the containing method isn't marked with '[Command]' @@ -66,20 +66,5 @@ namespace Discord.Analyzers private static readonly Func _attributeDataPredicate = (a => a.AttributeClass.Name == nameof(RequireContextAttribute)); - - private static readonly string _moduleBaseName = typeof(ModuleBase<>).Name; - - private static bool DerivesFromModuleBase(INamedTypeSymbol symbol) - { - var bType = symbol.BaseType; - while (bType != null) - { - if (bType.MetadataName == _moduleBaseName) - return true; - - bType = bType.BaseType; - } - return false; - } } } diff --git a/src/Discord.Net.Analyzers/SymbolExtensions.cs b/src/Discord.Net.Analyzers/SymbolExtensions.cs new file mode 100644 index 000000000..fa7bc30a6 --- /dev/null +++ b/src/Discord.Net.Analyzers/SymbolExtensions.cs @@ -0,0 +1,24 @@ +using System; +using Microsoft.CodeAnalysis; +using Discord.Commands; + +namespace Discord.Analyzers +{ + internal static class SymbolExtensions + { + private static readonly string _moduleBaseName = typeof(ModuleBase<>).Name; + + public static bool DerivesFromModuleBase(this INamedTypeSymbol symbol) + { + var bType = symbol.BaseType; + while (bType != null) + { + if (bType.MetadataName == _moduleBaseName) + return true; + + bType = bType.BaseType; + } + return false; + } + } +} diff --git a/test/Discord.Net.Tests/AnalyzerTests/TestModule.cs b/test/Discord.Net.Tests/AnalyzerTests/TestModule.cs deleted file mode 100644 index 59f8732c1..000000000 --- a/test/Discord.Net.Tests/AnalyzerTests/TestModule.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using System.Threading.Tasks; -using Discord.Commands; - -namespace Test -{ - public class TestModule : ModuleBase - { - [Command("test"), RequireContext(ContextType.Group)] - public Task TestCmd() => ReplyAsync(Context.Guild.Name); - } -}