code: def get_source_scanner(self, node):
          
          scanner = None
          try:
              scanner = self.builder.source_scanner
          except AttributeError:
              pass
          if not scanner:
              # The builder didn't have an explicit scanner, so go look up
              # a scanner from env['SCANNERS'] based on the node's scanner
              # key (usually the file extension).
              scanner = self.get_env_scanner(self.get_build_env())
          if scanner:
              scanner = scanner.select(node)
          return scanner
docs: Fetch the source scanner for the specified node
  
          NOTE:  "self" is the target being built, "node" is
          the source file for which we want to fetch the scanner.
  
          Implies self.has_builder() is true; again, expect to only be
          called from locations where this is already verified.
  
          This function may be called very often; it attempts to cache
          the scanner found to improve performance.