C#: Add extractor support for list- and slice patterns.

This commit is contained in:
Michael Nebel
2022-12-07 16:26:28 +01:00
parent 00354a2f08
commit cfd3c1fcbe
4 changed files with 51 additions and 0 deletions

View File

@@ -0,0 +1,15 @@
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Semmle.Extraction.Kinds;
using Semmle.Util;
namespace Semmle.Extraction.CSharp.Entities.Expressions
{
internal class ListPattern : Expression
{
internal ListPattern(Context cx, ListPatternSyntax syntax, IExpressionParentEntity parent, int child) :
base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), ExprKind.LIST_PATTERN, parent, child, false, null))
{
syntax.Patterns.ForEach((p, i) => Pattern.Create(cx, p, this, i));
}
}
}

View File

@@ -74,6 +74,12 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
case DiscardPatternSyntax dp:
return new Discard(cx, dp, parent, child);
case ListPatternSyntax listPattern:
return new ListPattern(cx, listPattern, parent, child);
case SlicePatternSyntax slicePattern:
return new SlicePattern(cx, slicePattern, parent, child);
default:
throw new InternalError(syntax, "Pattern not handled");
}

View File

@@ -0,0 +1,17 @@
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Semmle.Extraction.Kinds;
namespace Semmle.Extraction.CSharp.Entities.Expressions
{
internal class SlicePattern : Expression
{
public SlicePattern(Context cx, SlicePatternSyntax syntax, IExpressionParentEntity parent, int child) :
base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), ExprKind.SLICE_PATTERN, parent, child, false, null))
{
if (syntax.Pattern is not null)
{
Pattern.Create(cx, syntax.Pattern, this, 0);
}
}
}
}