def visit_Call(self, node):
<EOL>if self.within_logging_statement():<EOL><INDENT>if self.within_logging_argument() and self.is_format_call(node):<EOL><INDENT>self.violations.append((node, STRING_FORMAT_VIOLATION))<EOL>super(LoggingVisitor, self).generic_visit(node)<EOL>return<EOL><DEDENT><DEDENT>logging_level = self.detect_logging_level(node)<EOL>if logging_level and self.current_logging_level is None:<EOL><INDENT>self.current_logging_level = logging_level<EOL><DEDENT>if logging_level is None:<EOL><INDENT>super(LoggingVisitor, self).generic_visit(node)<EOL>return<EOL><DEDENT>self.current_logging_call = node<EOL>if logging_level == "<STR_LIT>":<EOL><INDENT>self.violations.append((node, WARN_VIOLATION))<EOL><DEDENT>self.check_exc_info(node)<EOL>for index, child in enumerate(iter_child_nodes(node)):<EOL><INDENT>if index == <NUM_LIT:1>:<EOL><INDENT>self.current_logging_argument = child<EOL><DEDENT>if index >= <NUM_LIT:1>:<EOL><INDENT>self.check_exception_arg(child)<EOL><DEDENT>if index > <NUM_LIT:1> and isinstance(child, keyword) and child.arg == "<STR_LIT>":<EOL><INDENT>self.current_extra_keyword = child<EOL><DEDENT>super(LoggingVisitor, self).visit(child)<EOL>self.current_logging_argument = None<EOL>self.current_extra_keyword = None<EOL><DEDENT>self.current_logging_call = None<EOL>self.current_logging_level = None<EOL>
Visit a function call.

We expect every logging statement and string format to be a function call.