protected override void Analyze(IObjectPropertyInitializer element, ElementProblemAnalyzerData data, IHighlightingConsumer consumer) { if (element.DeclaredName == "includePlatforms" || element.DeclaredName == "excludePlatforms" || element.DeclaredName == "references") { if (!(element.Value is IArrayLiteral arrayLiteral)) { return; } var elements = arrayLiteral.ArrayElements; if (elements.Count <= 1) { return; } var items = new OneToCompactListMap <string, IJavaScriptLiteralExpression>(); foreach (var expressionOrSpread in elements) { if (expressionOrSpread is IJavaScriptLiteralExpression literalExpression) { var value = literalExpression.GetStringValue(); if (value != null) { items.Add(value, literalExpression); } } } foreach (var item in items) { var expressions = item.Value; if (expressions.Count > 1) { foreach (var expression in expressions) { // We can cheat. We know that `includePlatforms` and `excludePlatforms` are enums // and get a quick fix to change it to another value var fixableKind = element.DeclaredName == "references" ? FixableIssueKind.None : FixableIssueKind.NonEnumValue; var result = new AssertionResult(false, AsmDefDuplicateItemDescription, expression, fixableIssueKind: fixableKind); var warning = new JsonValidationFailedWarning(result.Node, result.Description, result); consumer.AddHighlighting(warning); } } } } }
public AsmDefRemoveInvalidArrayItemQuickFix(JsonValidationFailedWarning warning) { myLiteral = warning.Brace as IJavaScriptLiteralExpression; myIsValid = warning.AssertionResult.Description == AsmDefDuplicateItemsProblemAnalyzer.AsmDefDuplicateItemDescription; }