code: def get_function_args(function_source):
      """Return the function arguments given the source-code string."""
      # We are stripping the whitespace from the left of the
      # function source.
      # This is so that if the docstring has incorrectly
      # indented lines, which are at a lower indent than the
      # function source, we still dedent the source correctly
      # and the AST parser doesn't throw an error.
      try:
          function_arg_node = (
              ast.parse(function_source.lstrip()).body[0].args
          )
      except SyntaxError:
          # If we still get a syntax error, we don't want the
          # the checker to crash. Instead we just return a blank list.
          return []
      arg_nodes = function_arg_node.args
      kwonly_arg_nodes = function_arg_node.kwonlyargs
      return [
          arg_node.arg
          for arg_node in chain(arg_nodes, kwonly_arg_nodes)
      ]
  
imports: import ast
  import string
  import tokenize
  from collections import namedtuple
  from itertools import chain, takewhile
  from re import compile
  from textwrap import dedent
  from .None import violations
  from .config import IllegalConfiguration
  from .parser import AllError, Class, Definition, Function, Method, Module, NestedClass, NestedFunction, Package, ParseError, Parser, StringIO
  from .utils import common_prefix_length, is_blank, log, pairwise, strip_non_alphanumeric
  from .wordlists import IMPERATIVE_BLACKLIST, IMPERATIVE_VERBS, stem
label_desc: Use image node_id 7 for calling a global function with example usage: get_function_args(function_source) and returns: unknown, list