anchor.diff:    }
   }
   
  +class NoIdeValidator extends DoctorValidator {
  +  NoIdeValidator() : super('Flutter IDE Support');
  +
  +  @override
  +  Future<ValidationResult> validate() async {
  +    // TODO(danrubel): do not show Atom once IntelliJ support is complete
  +    return new ValidationResult(ValidationType.missing, <ValidationMessage>[
  +      new ValidationMessage('Atom - https://atom.io/'),
  +      new ValidationMessage('IntelliJ - https://www.jetbrains.com/idea/'),
  +    ], statusInfo: 'No supported IDEs installed');
  +  }
  +}
  +
   class AtomValidator extends DoctorValidator {
     AtomValidator() : super('Atom - a lightweight development environment for Flutter');
  +
  +  static Iterable<DoctorValidator> get installed {
  +    AtomValidator atom = new AtomValidator();
  +    return atom.isInstalled ? <DoctorValidator>[atom] : <DoctorValidator>[];
  +  }
   
     static File getConfigFile() {
       // ~/.atom/config.cson
  
positive.code:       : path.join(env['HOME'], '.atom');
    }
  
    @override
    Future<ValidationResult> validate() async {
      List<ValidationMessage> messages = <ValidationMessage>[];
  
      int installCount = 0;
  
      bool atomDirExists = FileSystemEntity.isDirectorySync(_getAtomHomePath());
      if (!atomDirExists) {
        messages.add(new ValidationMessage.error('Atom not installed; download at https://atom.io.'));
      } else {
        installCount++;
  
        if (!_validateHasPackage(messages, 'flutter', 'Flutter'))
          installCount++;
  
        if (!_validateHasPackage(messages, 'dartlang', 'Dart'))
          installCount++;
      }
  
      return new ValidationResult(
        installCount == 3
          ? ValidationType.installed
          : installCount == 1 ? ValidationType.partial : ValidationType.missing,
        messages
      );
    }
  
negative.code:       final String separator = Platform.isWindows ? ' ' : '•';
  
        for (ValidationMessage message in result.messages) {
          String text = message.message.replaceAll('\n', '\n      ');
          if (message.isError) {
            printStatus('    x $text', emphasis: true);
          } else {
            printStatus('    $separator $text');
          }
        }
      }
  