anchor.diff:            help: 'Print this usage information.',
             negatable: false));
   
  -
  -  List<String> get commandPath => [];
  +  List<String> _commandPath;
  +  List<String> get commandPath {
  +    if(_commandPath == null) {
  +      var path = [];
  +      var usage = this;
  +      while(true) {
  +        if(usage.parent == null) {
  +          _commandPath = path;
  +          break;
  +        }
  +        usage = usage.parent;
  +      }
  +      return _commandPath;
  +    }
  +  }
  +
     List<ArgExample> _examples = [];
     List<ArgExample> _examplesView;
     List<ArgExample> get examples {
  
positive.code: class _SubCommandUsage extends Usage {
  
    final Usage parent;
    final String _subCommandName;
  
    CallStyle get callStyle => parent.callStyle;
  
    _SubCommandUsage(this.parent, this._subCommandName);
  
    List<String> _path;
    List<String> get commandPath {
      if(_path == null) {
        _path = parent.commandPath.toList()..add(_subCommandName);
      }
      return _path;
    }
  
    ArgParser _getParser() => parent.parser.commands[_subCommandName];
  }
  
  class CommandInvocation {
  
negative.code: /// and recursively add help to all sub-commands' parsers.
  class Usage {
  
    /// The name used to invoke this command.
    final String name = null;
  
    /// The parent command's usage.  This is null for root commands.
    final Usage parent = null;
  
    /// A simple description of what this script does, for use in help text.
    String description;
  