diff --git a/ReferenceCopAnalyzer/ReferenceCopAnalyzer.Test/NamedWildcardsTests.cs b/ReferenceCopAnalyzer/ReferenceCopAnalyzer.Test/NamedWildcardsTests.cs new file mode 100644 index 0000000..79f6f85 --- /dev/null +++ b/ReferenceCopAnalyzer/ReferenceCopAnalyzer.Test/NamedWildcardsTests.cs @@ -0,0 +1,41 @@ +using System.Threading.Tasks; +using ReferenceCopAnalyzer.Test.Verifiers; +using Xunit; + +namespace ReferenceCopAnalyzer.Test +{ + public class NamedWildcardsTests + { + private const string Src = $@" +namespace One.Contracts {{ +}} +namespace One.Contracts.Internal {{ +}} +namespace Two {{ + using One.Contracts.Internal; + using One.Contracts; +}} +namespace One.B.C {{ + using One.Contracts.Internal; +}} +"; + + [Theory] + [InlineData(Src, @"* * +!* *.Contracts.Internal +[context].* [context].Contracts.Internal", new[] { "Two", "One.Contracts.Internal" })] + public async Task ShouldReportIllegalReference( + string source, + string rules, + object[] arguments) + { + await ReferenceCopAnalyzerVerifier.VerifyReferenceCopAnalysis(source, rules, new[] + { + ReferenceCopAnalyzerVerifier + .Diagnostic(ReferenceCopAnalyzer.ReferenceNotAllowedDiagnosticId) + .WithSpan(7, 5, 7, 34) + .WithArguments(arguments) + }); + } + } +} diff --git a/ReferenceCopAnalyzer/ReferenceCopAnalyzer/ReferenceCopAnalyzer.cs b/ReferenceCopAnalyzer/ReferenceCopAnalyzer/ReferenceCopAnalyzer.cs index a6cf5a6..957ebe1 100644 --- a/ReferenceCopAnalyzer/ReferenceCopAnalyzer/ReferenceCopAnalyzer.cs +++ b/ReferenceCopAnalyzer/ReferenceCopAnalyzer/ReferenceCopAnalyzer.cs @@ -384,7 +384,7 @@ private static bool IsAllowedReference(List> allowe } // Build the mappings based on the sourceName - foreach (Match match in Regex.Matches(sourceName, WildCardToRegular(ruleSource))) + foreach (Match match in Regex.Matches(sourceName, WildCardToRegular(ruleSource), RegexOptions.RightToLeft)) { bool first = true; foreach (Group matchGroup in match.Groups)