private void ParseSamplePopulator(ProjectModel model, ProjectLexer lexer) { var populator = new SampleProjectModelPopulator { Type = ProjectModelPopulatorType.Sample, Id = lexer.Consume(TokenKind.Identifier) }; model.Populators.Add(populator); lexer.Consume(TokenKind.LeftCurly); while (lexer.Token.Kind == TokenKind.Keyword) { var keyword = lexer.Consume(TokenKind.Keyword); switch (keyword) { case "files": populator.Files.AddRange(ConsumeWildcardFiles(lexer)); OptionallyConsume(lexer, TokenKind.Semicolon); break; case "zip-mask": populator.ZipMask = lexer.Consume(TokenKind.String); OptionallyConsume(lexer, TokenKind.Semicolon); break; } } lexer.Consume(TokenKind.RightCurly); }
private IModelUpdater CreateSampleUpdater(SampleProjectModelPopulator modelPopulator, ProjectModel projectModel, AppSettings settings) { // Going through lots of files to gather up the samples takes quite some time. To amortize // the impact, we do the sampling and write a summary to the scratch area. The normal pipeline // reads this summary and loads it into the model. The process begins by creating a sample writer... var writer = serviceProvider.GetRequiredService <SampleWriter>(); writer.OutputPath = Path.Combine(settings.TempDir, $"{projectModel.Id}-{modelPopulator.Id}.json"); writer.InputFiles = modelPopulator.Files; writer.ZipMask = modelPopulator.ZipMask; // Create the updater, which reads the samples and updates the model var updater = serviceProvider.GetRequiredService <IModelSampleUpdater>(); updater.Writer = writer; updater.SampleId = modelPopulator.Id; return(updater); }