public static bool Validate(JObject jobject, FileDiagnostics diagnostics, DocRange range)
        {
            SettingValidation validation = new SettingValidation();

            // Check for invalid properties.
            foreach (JProperty setting in jobject.Properties())
            {
                if (!new string[] { "Lobby", "Modes", "Heroes", "Description", "Workshop", "Extensions", "Mode Name" }.Contains(setting.Name))
                {
                    validation.InvalidSetting(setting.Name);
                }
            }

            // Check lobby settings.
            if (jobject.TryGetValue("Lobby", out JToken lobbySettings))
            {
                ValidateSetting(validation, LobbySettings, lobbySettings);
            }

            // Check modes.
            if (jobject.TryGetValue("Modes", out JToken modes))
            {
                ModeSettingCollection.Validate(validation, (JObject)modes);
            }

            // Check heroes.
            if (jobject.TryGetValue("Heroes", out JToken heroes))
            {
                HeroesRoot.Validate(validation, (JObject)heroes);
            }

            // Check description.
            if (jobject.TryGetValue("Description", out JToken description) && description.Type != JTokenType.String)
            {
                validation.IncorrectType("Description", "string");
            }

            // Check mode name.
            if (jobject.TryGetValue("Mode Name", out JToken modeName) && modeName.Type != JTokenType.String)
            {
                validation.IncorrectType("Mode Name", "string");
            }

            // Check extensions.
            if (jobject.TryGetValue("Extensions", out JToken extensionsToken)
                // Make sure the extension group's value is an object.
                && validation.TryGetObject("Extensions", extensionsToken, out var extensions))
            {
                // Check each extension.
                foreach (var prop in extensions)
                {
                    // The extension name does not exist.
                    if (!ExtensionInfo.Extensions.Any(e => e.Name == prop.Key))
                    {
                        validation.Error($"The extension '{prop.Key}' does not exist.");
                    }
                    // The extension value is not a boolean.
                    else if (prop.Value.Type != JTokenType.Boolean)
                    {
                        validation.Error($"The value of the extension '{prop.Key}' must be a boolean.");
                    }
                }
            }

            validation.Dump(diagnostics, range);
            return(!validation.HasErrors());
        }
Exemplo n.º 2
0
 public void OutputComment(FileDiagnostics diagnostics, DocRange range, string comment) => _comment = comment;
 public VariableComponentCollection(FileDiagnostics diagnostics)
 {
     Diagnostics = diagnostics;
 }
Exemplo n.º 4
0
 public ConstStringElementErrorHandler(FileDiagnostics diagnostics, DocRange errorRange)
 {
     _diagnostics = diagnostics;
     _errorRange  = errorRange;
 }
 bool IApplyAttribute.Apply(FileDiagnostics diagnostics, AttributeContext attributeContext)
 {
     AddComponent(new AttributeComponent(attributeContext.Type, attributeContext.Range));
     return(true);
 }