def parse_from(path, short = path.relative_path_from(root))
      contents = path.read
      digest = Digest::SHA2.digest(contents)

      cache.fetch(digest) do
        scanner = Scanner.new(contents, short, options)
        parser = Parser.new(scanner.call)
        parser.call.tap { |r| cache[digest] = r }
      end
    end
def parse_from(path, short = path.relative_path_from(root))
      contents = path.read
      digest = Digest::SHA2.digest(contents)

      cache.fetch(digest) do
        scanner = Scanner.new(contents, short, options)
        parser = Parser.new(scanner.call)
        parser.call.tap { |r| cache[digest] = r }
      end
    end
Parses a file.  This bypasses the filename cache.

 @param path [::Pathname] The path to the actual file.  This should
   respond to `#read`.  If this isn't a pathname, the short should be
   provided.
 @param short [::String] The short name of the file.  This is used for
   location information.
 @return [Parser::Root]