Esempio n. 1
0
        // 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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        // 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>()));
        }
Esempio n. 4
0
        // 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);
        }
Esempio n. 5
0
        // 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);
        }