private static void ValidateRequiredAttributes(TagHelperIntermediateNode node, TagHelperDescriptor tagHelper, ComponentIntermediateNode intermediateNode) { if (intermediateNode.Children.Any(c => c is TagHelperDirectiveAttributeIntermediateNode node && (node.TagHelper?.IsSplatTagHelper() ?? false))) { // If there are any splat attributes, assume the user may have provided all values. // This pass runs earlier than ComponentSplatLoweringPass, so we cannot rely on the presence of SplatIntermediateNode to make this check. return; } foreach (var requiredAttribute in tagHelper.EditorRequiredAttributes) { if (!IsPresentAsAttribute(requiredAttribute.Name, intermediateNode)) { intermediateNode.Diagnostics.Add( RazorDiagnosticFactory.CreateComponent_EditorRequiredParameterNotSpecified( node.Source ?? SourceSpan.Undefined, intermediateNode.TagName, requiredAttribute.Name)); } }