mirror of
https://github.com/github/codeql.git
synced 2026-04-30 11:15:13 +02:00
C#: Extract relational patterns
This commit is contained in:
@@ -42,6 +42,9 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
|
||||
case RecursivePatternSyntax recPattern:
|
||||
return new RecursivePattern(cx, recPattern, parent, child);
|
||||
|
||||
case RelationalPatternSyntax relPattern:
|
||||
return new RelationalPattern(cx, relPattern, parent, child);
|
||||
|
||||
case VarPatternSyntax varPattern:
|
||||
switch (varPattern.Designation)
|
||||
{
|
||||
|
||||
@@ -6,7 +6,7 @@ using Semmle.Extraction.Entities;
|
||||
|
||||
namespace Semmle.Extraction.CSharp.Entities.Expressions
|
||||
{
|
||||
internal class RecursivePattern : Expression
|
||||
internal partial class RecursivePattern : Expression
|
||||
{
|
||||
/// <summary>
|
||||
/// Creates and populates a recursive pattern.
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
||||
using Microsoft.CodeAnalysis.CSharp;
|
||||
using Semmle.Extraction.Kinds;
|
||||
using Semmle.Extraction.Entities;
|
||||
|
||||
namespace Semmle.Extraction.CSharp.Entities.Expressions
|
||||
{
|
||||
internal class RelationalPattern : Expression
|
||||
{
|
||||
public RelationalPattern(Context cx, RelationalPatternSyntax syntax, IExpressionParentEntity parent, int child) :
|
||||
base(new ExpressionInfo(cx, NullType.Create(cx), cx.Create(syntax.GetLocation()), GetKind(syntax.OperatorToken), parent, child, false, null))
|
||||
{
|
||||
Expression.Create(cx, syntax.Expression, this, 0);
|
||||
}
|
||||
|
||||
private static ExprKind GetKind(SyntaxToken operatorToken)
|
||||
{
|
||||
return operatorToken.Kind() switch
|
||||
{
|
||||
SyntaxKind.LessThanEqualsToken => ExprKind.LE_PATTERN,
|
||||
SyntaxKind.GreaterThanEqualsToken => ExprKind.GE_PATTERN,
|
||||
SyntaxKind.LessThanToken => ExprKind.LT_PATTERN,
|
||||
SyntaxKind.GreaterThanToken => ExprKind.GT_PATTERN,
|
||||
_ => throw new InternalError(operatorToken.Parent, $"Relation pattern with operator token '{operatorToken.Kind()}' is not supported."),
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user