public void visit()

in bigquery-antipattern-recognition/src/main/java/com/google/zetasql/toolkit/antipattern/parser/visitors/IdentifyRegexpContainsVisitor.java [49:71]


  public void visit(ASTNodes.ASTFunctionCall node) {
    ImmutableList<ASTNodes.ASTIdentifier> identifiers = node.getFunction().getNames();
    for (ASTNodes.ASTIdentifier identifier : identifiers) {
      // search for regexp_contains
      if (identifier.getIdString().toLowerCase().equals(REGEXP_CONTAINS_FUN_ID_STR)) {
        ImmutableList<ASTNodes.ASTExpression> arguments = node.getArguments();
        // search for argument with string
        for (ASTNodes.ASTExpression argument : arguments) {
          if (argument instanceof ASTNodes.ASTStringLiteral) {
            String stringLiteralArg = ((ASTNodes.ASTStringLiteral) argument).getImage();
            Pattern pattern = Pattern.compile(REGEX_STRING);
            Matcher matcher = pattern.matcher(stringLiteralArg);
            if (matcher.find()) {
              int lineNum =
                  ZetaSQLStringParsingHelper.countLine(
                      query, identifier.getParseLocationRange().start());
              result.add(String.format(REGEXP_CONTAINS_ANTI_PATTERN_MESSAGE, lineNum));
            }
          }
        }
      }
    }
  }