Files
codeql/csharp/ql/test/library-tests/csharp8/patterns.ql
2021-03-09 09:06:35 +01:00

72 lines
2.2 KiB
Plaintext

import csharp
query predicate switchExprs(SwitchExpr switch, Expr e) { e = switch.getExpr() }
query predicate switchExprCases(SwitchCaseExpr case, Expr pattern, Expr res) {
pattern = case.getPattern() and res = case.getBody()
}
query predicate switchFilters(SwitchCaseExpr case, Expr when) { when = case.getCondition() }
query predicate propertyPatterns(PropertyPatternExpr pp) { any() }
query predicate propertyPatternChild(PropertyPatternExpr pp, int n, Expr child) {
child = pp.getPattern(n)
}
query predicate positionalPatterns(PositionalPatternExpr pp, Expr parent, int n, Expr child) {
parent = pp.getParent() and
child = pp.getPattern(n)
}
query predicate caseStatements(CaseStmt case) { any() }
private class RecursivePatternCase extends CaseStmt {
private RecursivePatternExpr p;
RecursivePatternCase() { p = this.getPattern() }
RecursivePatternExpr getRecursivePattern() { result = p }
}
query predicate recursivePatternCases(RecursivePatternCase case, RecursivePatternExpr p) {
p = case.getRecursivePattern()
}
query predicate recursiveCasePatternDecl(
RecursivePatternCase case, TypeAccess ta, LocalVariableDeclExpr decl
) {
ta = case.getRecursivePattern().getTypeAccess() and
decl = case.getRecursivePattern().getVariableDeclExpr()
}
query predicate recursivePatternDecl(RecursivePatternExpr pattern, LocalVariableDeclExpr decl) {
decl = pattern.getVariableDeclExpr()
}
query predicate recursivePatterns(RecursivePatternExpr expr) { any() }
query predicate discards(DiscardExpr discard) { any() }
query predicate isExprs(IsExpr is) { any() }
private class IsRecursivePatternExpr extends IsExpr {
private RecursivePatternExpr p;
IsRecursivePatternExpr() { p = this.getPattern() }
RecursivePatternExpr getRecursivePattern() { result = p }
}
query predicate isRecursivePatternExpr(IsRecursivePatternExpr expr) { any() }
query predicate isRecursivePatternExprWithDecl(
IsRecursivePatternExpr expr, LocalVariableDeclExpr decl
) {
decl = expr.getRecursivePattern().getVariableDeclExpr()
}
query predicate labeledPatternExpr(LabeledPatternExpr e, string s) { s = e.getLabel() }
query predicate tupleTypes(TupleExpr te, Type t) { te.getType() = t }