code: func newNodeFromLine(line string, directive *Directive) (*Node, error) {
  	cmd, flags, args, err := splitCommand(line)
  	if err != nil {
  		return nil, err
  	}
  
  	fn := dispatch[cmd]
  	// Ignore invalid Dockerfile instructions
  	if fn == nil {
  		fn = parseIgnore
  	}
  	next, attrs, err := fn(args, directive)
  	if err != nil {
  		return nil, err
  	}
  
  	return &Node{
  		Value:      cmd,
  		Original:   line,
  		Flags:      flags,
  		Next:       next,
  		Attributes: attrs,
  	}, nil
  }
docs: // newNodeFromLine splits the line into parts, and dispatches to a function
  // based on the command and command arguments. A Node is created from the
  // result of the dispatch.