public void AdditionalFileService_ParseXmlFile_ValidXml_Parsed() { var additionalFile = new TestAdditionalDocument( ExampleXmlFileName, ValidXml); var additionalFileService = new AdditionalFileService(ImmutableArray.Create <AdditionalText>(additionalFile), FileParseRule); var parsedFile = additionalFileService.ParseXmlFile(additionalFile); Assert.Empty(additionalFileService.ParsingDiagnostics); Assert.Equal(3, parsedFile.Elements("Entry").Count()); }
public void AdditionalFileService_ParseXmlFile_InvalidXml_ParsingDiagnostic() { const string ExpectedExceptionMessage = "The 'Entry' start tag on line 1 position 8 does not match the end tag of 'Root'. Line 1, position 17."; var additionalFile = new TestAdditionalDocument(ExampleXmlFileName, InvalidXml); var additionalFileService = new AdditionalFileService(ImmutableArray.Create <AdditionalText>(additionalFile), FileParseRule); additionalFileService.ParseXmlFile(additionalFile); Assert.Equal(1, additionalFileService.ParsingDiagnostics.Count); Assert.Equal(FileParseRuleId, additionalFileService.ParsingDiagnostics[0].Id); Assert.Equal(ExpectedExceptionMessage, additionalFileService.ParsingDiagnostics[0].GetMessage()); }
public void AdditionalFileService_GetFilesMatchingPattern_MatchesFound() { var additionalFiles = ImmutableArray.Create <AdditionalText>( new TestAdditionalDocument("a1.txt", string.Empty), new TestAdditionalDocument("aa.xml", string.Empty), new TestAdditionalDocument("a2.txt", string.Empty)); var additionalFileService = new AdditionalFileService(additionalFiles, FileParseRule); var matchingFiles = additionalFileService.GetFilesMatchingPattern(@"a\d.txt").Select(x => x.Path).ToList(); Assert.Equal(2, matchingFiles.Count); Assert.Contains("a1.txt", matchingFiles); Assert.Contains("a2.txt", matchingFiles); }
public void AdditionalFileService_ParseXmlFile_MultipleFilesWithInvalidXml_ParsingDiagnostics() { var additionalFiles = ImmutableArray.Create <AdditionalText>( new TestAdditionalDocument("a.xml", InvalidXml), new TestAdditionalDocument("b.xml", InvalidXml)); var additionalFileService = new AdditionalFileService(additionalFiles, FileParseRule); foreach (var file in additionalFiles) { additionalFileService.ParseXmlFile(file); } Assert.Equal(2, additionalFileService.ParsingDiagnostics.Count); }
public override void Initialize(AnalysisContext context) { context.EnableConcurrentExecutionIf(IsRunningInProduction); context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None); context.RegisterCompilationStartAction(compilationStartContext => { var additionalFileService = new AdditionalFileService(compilationStartContext.Options.AdditionalFiles, FileParseRule); var analyzer = new StringLiteralAnalyzer(additionalFileService, compilationStartContext.Compilation, compilationStartContext.CancellationToken); analyzer.LoadConfigurations("LiteralExemptions"); compilationStartContext.RegisterSyntaxTreeAction(analyzer.AnalyzeSyntaxTree); compilationStartContext.RegisterCompilationEndAction(additionalFileService.ReportAnyParsingDiagnostics); }); }
public void LoadConfigurations_MultipleFiles_ConfigurationsLoad() { string[] expectedEntries = { "A", "B" }; var configurationFiles = ImmutableArray.Create<AdditionalText>( new TestAdditionalDocument("first.xml", $"<Data><Entry>{expectedEntries[0]}</Entry></Data>"), new TestAdditionalDocument("second.xml", $"<Data><Entry>{expectedEntries[1]}</Entry></Data>"), new TestAdditionalDocument("third.txt", "<Data><Entry>C</Entry></Data>")); var additionalFileService = new AdditionalFileService(configurationFiles, FileParseRule); var testAnalyzer = new TestAnalyzer(additionalFileService, CancellationToken.None); testAnalyzer.LoadConfigurations(@".+\.xml"); Assert.Equal(expectedEntries, testAnalyzer.Entries); }
public override void Initialize(AnalysisContext context) { context.RegisterCompilationStartAction(compilationStartContext => { var additionalFileService = new AdditionalFileService(compilationStartContext.Options.AdditionalFiles, FileParseRule); foreach (AdditionalText file in additionalFileService.GetFilesMatchingPattern(ExampleXmlFileName)) { additionalFileService.ParseXmlFile(file); } // Register a random SyntaxNodeAction to avoid error RS1013: Start action has no registered non-end actions compilationStartContext.RegisterSyntaxNodeAction(_ => { }, SyntaxKind.ClassDeclaration); compilationStartContext.RegisterCompilationEndAction(additionalFileService.ReportAnyParsingDiagnostics); }); }
public override void Initialize(AnalysisContext context) { context.EnableConcurrentExecutionIf(IsRunningInProduction); context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None); context.RegisterCompilationStartAction(compilationStartContext => { var additionalFileService = new AdditionalFileService(compilationStartContext.Options.AdditionalFiles, FileParseRule); var analyzer = new BannedMethodsAnalyzer(additionalFileService, compilationStartContext.CancellationToken); analyzer.LoadConfigurations("BannedMethods"); compilationStartContext.RegisterSyntaxNodeAction( analyzer.AnalyzeMethodInvocation, SyntaxKind.InvocationExpression, SyntaxKind.ObjectCreationExpression); compilationStartContext.RegisterCompilationEndAction(additionalFileService.ReportAnyParsingDiagnostics); }); }