code: def _splitnode(nodeid):
      """Split a nodeid into constituent 'parts'.
  
      Node IDs are strings, and can be things like:
          ''
          'testing/code'
          'testing/code/test_excinfo.py'
          'testing/code/test_excinfo.py::TestFormattedExcinfo'
  
      Return values are lists e.g.
          []
          ['testing', 'code']
          ['testing', 'code', 'test_excinfo.py']
          ['testing', 'code', 'test_excinfo.py', 'TestFormattedExcinfo', '()']
      """
      if nodeid == "":
          # If there is no root node at all, return an empty list so the caller's logic can remain sane
          return []
      parts = nodeid.split(SEP)
      # Replace single last element 'test_foo.py::Bar' with multiple elements 'test_foo.py', 'Bar'
      parts[-1:] = parts[-1].split("::")
      return parts
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import os
  import warnings
  import py
  import six
  import _pytest._code
  from _pytest.compat import getfslineno
  from _pytest.mark.structures import NodeKeywords
  from _pytest.outcomes import fail
label_desc: Use image node_id 1 for calling a global function with example usage: _splitnode(nodeid) and returns: parts, list