/// <summary> /// Checks if this tagged template is a path interpolation such that it can contains path separators /// </summary> public static bool IsPathInterpolation(this ITaggedTemplateExpression taggedTemplateExpression) { switch (taggedTemplateExpression.GetInterpolationKind()) { case InterpolationKind.FileInterpolation: case InterpolationKind.DirectoryInterpolation: case InterpolationKind.PathInterpolation: case InterpolationKind.RelativePathInterpolation: return(true); default: return(false); } }
private static int CompareTaggedTemplateExpression(ITaggedTemplateExpression left, ITaggedTemplateExpression right) { // Standard left,right and null checks if (left == null && right == null) { return(0); } if (left == null) { return(1); } if (right == null) { return(-1); } // Compare tag var result = CompareNodeAsText(left.Tag, right.Tag); if (result != 0) { return(result); } // Special case check for path literal. var interpolationKind = left.GetInterpolationKind(); bool usePathCompareSemantics = false; switch (interpolationKind) { case InterpolationKind.PathInterpolation: case InterpolationKind.FileInterpolation: case InterpolationKind.DirectoryInterpolation: case InterpolationKind.RelativePathInterpolation: usePathCompareSemantics = true; break; } var leftIsLiteral = IsTemplateLiteral(left.TemplateExpression); var rightIsLiteral = IsTemplateLiteral(right.TemplateExpression); ITemplateExpression leftTemplate; ITemplateExpression rightTemplate; if (leftIsLiteral) { if (rightIsLiteral) { return(CompareStringLiteralExpression(left.TemplateExpression.Cast <ILiteralExpression>(), right.TemplateExpression.Cast <ILiteralExpression>(), usePathCompareSemantics)); } leftTemplate = new TemplateExpression() { Head = new TemplateLiteralFragment() { Text = left.TemplateExpression.GetTemplateText() }, TemplateSpans = NodeArray <ITemplateSpan> .Empty }; rightTemplate = right.TemplateExpression.Cast <ITemplateExpression>(); } else if (rightIsLiteral) { leftTemplate = left.TemplateExpression.Cast <ITemplateExpression>(); rightTemplate = new TemplateExpression() { Head = new TemplateLiteralFragment() { Text = right.TemplateExpression.GetTemplateText() }, TemplateSpans = NodeArray <ITemplateSpan> .Empty }; } else { leftTemplate = left.TemplateExpression.Cast <ITemplateExpression>(); rightTemplate = right.TemplateExpression.Cast <ITemplateExpression>(); } return(CompareTemplateExpression(leftTemplate, rightTemplate, usePathCompareSemantics)); }