private static StyleCopSettings GetStyleCopSettings(AnalyzerOptions options, SyntaxTree tree, ImmutableArray <AdditionalText> additionalFiles, DeserializationFailureBehavior failureBehavior, CancellationToken cancellationToken) { foreach (var additionalFile in additionalFiles) { if (IsStyleCopSettingsFile(additionalFile.Path)) { SourceText additionalTextContent = additionalFile.GetText(cancellationToken); return(GetStyleCopSettings(options, tree, additionalFile.Path, additionalTextContent, failureBehavior)); } } if (tree != null) { var optionsProvider = options.AnalyzerConfigOptionsProvider().GetOptions(tree); return(new StyleCopSettings(new JsonObject(), optionsProvider)); } return(new StyleCopSettings()); }
private static StyleCopSettings GetStyleCopSettings(AnalyzerOptions options, SyntaxTree tree, string path, SourceText text, DeserializationFailureBehavior failureBehavior) { var optionsProvider = options.AnalyzerConfigOptionsProvider().GetOptions(tree); try { var rootValue = JsonReader.Parse(text.ToString()); if (!rootValue.IsJsonObject) { throw new JsonParseException( $"Settings file at '{path}' was missing or empty.", JsonParseException.ErrorType.InvalidOrUnexpectedCharacter, default); } var settingsObject = rootValue.AsJsonObject["settings"]; if (settingsObject.IsJsonObject) { return(new StyleCopSettings(settingsObject.AsJsonObject, optionsProvider)); } else if (settingsObject.IsNull) { throw new InvalidSettingsException("\"settings\" must be a JSON object."); } return(new StyleCopSettings()); } catch (InvalidSettingsException) when(failureBehavior == DeserializationFailureBehavior.ReturnDefaultSettings) { // The settings file is invalid -> return the default settings. } catch (JsonParseException) when(failureBehavior == DeserializationFailureBehavior.ReturnDefaultSettings) { // The settings file is invalid -> return the default settings. } return(new StyleCopSettings()); }