// Parse 'packages' field if it exists private static Possible <List <INugetPackage> > ParsePackagesField(IObjectLiteralExpression resolverConfigurationLiteral, List <INugetPackage> packages) { IExpression expression; if (resolverConfigurationLiteral.TryFindAssignmentPropertyInitializer(NaiveConfigurationParsingUtilities.PackagesFieldName, out expression)) { if (expression.Kind != SyntaxKind.ArrayLiteralExpression) { return(new MalformedConfigurationFailure( I($"An array literal is expected for field '{NaiveConfigurationParsingUtilities.PackagesFieldName}', but it is of type {expression.Kind}"))); } var packagesExpression = expression.Cast <IArrayLiteralExpression>(); foreach (var packageExpression in packagesExpression.Elements) { var maybePackage = ParseNugetPackageFrom(packageExpression.As <IObjectLiteralExpression>()); if (!maybePackage.Succeeded) { return(maybePackage.Failure); } packages.Add(maybePackage.Result); } } return(packages); }
private Possible <INugetConfiguration> ParseNugetConfigurationFrom( [CanBeNull] IObjectLiteralExpression configurationExpression) { IExpression expression; if (configurationExpression == null) { return(new MalformedConfigurationFailure("An object literal with NuGet resolver-specific configuration is expected")); } var result = new NugetConfiguration(); if (configurationExpression.TryFindAssignmentPropertyInitializer(NaiveConfigurationParsingUtilities.CredentialProvidersFieldName, out expression)) { if (expression.Kind != SyntaxKind.ArrayLiteralExpression) { return(new MalformedConfigurationFailure("An array literal is expected for NuGet credential providers")); } var credentialProviders = expression.Cast <IArrayLiteralExpression>(); foreach (var element in credentialProviders.Elements) { var elementResult = ParseNugetConfigurationFrom(element.As <IObjectLiteralExpression>()); if (!elementResult.Succeeded) { return(elementResult); } result.CredentialProviders.Add(elementResult.Result); } } if (configurationExpression.TryFindAssignmentPropertyInitializer(NaiveConfigurationParsingUtilities.ToolUrlFieldName, out expression)) { // TODO: Consider validating that string is well-formed URL result.ToolUrl = expression.As <ILiteralExpression>()?.Text; } if (configurationExpression.TryFindAssignmentPropertyInitializer(NaiveConfigurationParsingUtilities.HashFieldName, out expression)) { result.Hash = expression.As <ILiteralExpression>()?.Text; } return(result); }
// Parse 'configuration' field private Possible <INugetConfiguration> ParseConfigurationField(IObjectLiteralExpression resolverConfigurationLiteral) { IExpression expression; if (!resolverConfigurationLiteral.TryFindAssignmentPropertyInitializer(NaiveConfigurationParsingUtilities.ConfigurationFieldName, out expression)) { return (new MalformedConfigurationFailure( I($"Field '{NaiveConfigurationParsingUtilities.ConfigurationFieldName}' is not present."))); } return(ParseNugetConfigurationFrom(expression.As <IObjectLiteralExpression>())); }
// Parse 'doNotEnforceDependencyVersions' field if it exists private static Possible <bool?> ParseDoNotEnforceDependencyVersionsField(IObjectLiteralExpression resolverConfigurationLiteral) { IExpression expression; if (resolverConfigurationLiteral.TryFindAssignmentPropertyInitializer(NaiveConfigurationParsingUtilities.DoNotEnforceDependencyVersionsFieldName, out expression)) { switch (expression.Kind) { case SyntaxKind.TrueKeyword: return(true); case SyntaxKind.FalseKeyword: return(false); default: return(new MalformedConfigurationFailure( I($"Field '{NaiveConfigurationParsingUtilities.DoNotEnforceDependencyVersionsFieldName}' is supposed to be a boolean literal, but is of type {expression.Kind}."))); } } return((bool?)null); }
// Parse 'respositories' field if it exists private static Possible <Dictionary <string, string> > ParseRepositoriesField(IObjectLiteralExpression resolverConfigurationLiteral, Dictionary <string, string> repositories) { Contract.Assert(repositories != null); IExpression expression; if (resolverConfigurationLiteral.TryFindAssignmentPropertyInitializer(NaiveConfigurationParsingUtilities.RepositoriesFieldName, out expression)) { var repositoriesExpression = expression.As <IObjectLiteralExpression>(); if (repositoriesExpression == null) { return(new MalformedConfigurationFailure("An object literal with NuGet respositories definitions is expected")); } foreach (var property in repositoriesExpression.Properties) { if (property.Kind != SyntaxKind.PropertyAssignment) { return(new MalformedConfigurationFailure( I($"Field '{NaiveConfigurationParsingUtilities.RepositoriesFieldName}' is supposed to contain property assignments only but property '{property.Name.Text}' is of type {property.Kind}."))); } var propertyInitializer = property.Cast <IPropertyAssignment>().Initializer; if (propertyInitializer.Kind != SyntaxKind.StringLiteral) { return(new MalformedConfigurationFailure( I($"Field '{NaiveConfigurationParsingUtilities.RepositoriesFieldName}' is supposed to contain string literal property assignments only, but property '{property.Name.Text}' has initializer of type '{propertyInitializer.Kind}'."))); } repositories.Add( property.Name.Text, propertyInitializer.Cast <IStringLiteral>().Text); } } return(repositories); }