Example #1
0
/// AddFixItLocations - Add any individual user specified "fix-it" locations,
/// and return true on success.
static bool AddFixItLocations(CompilerInstance &CI,
                              FixItRewriter &FixItRewrite) {
  const std::vector<ParsedSourceLocation> &Locs =
    CI.getFrontendOpts().FixItLocations;
  for (unsigned i = 0, e = Locs.size(); i != e; ++i) {
    const FileEntry *File = CI.getFileManager().getFile(Locs[i].FileName);
    if (!File) {
      CI.getDiagnostics().Report(diag::err_fe_unable_to_find_fixit_file)
        << Locs[i].FileName;
      return false;
    }

    RequestedSourceLocation Requested;
    Requested.File = File;
    Requested.Line = Locs[i].Line;
    Requested.Column = Locs[i].Column;
    FixItRewrite.addFixItLocation(Requested);
  }

  const std::string &OutputFile = CI.getFrontendOpts().OutputFile;
  if (Locs.empty() && !OutputFile.empty()) {
    // FIXME: we will issue "FIX-IT applied suggested code changes" for every
    // input, but only the main file will actually be rewritten.
    const std::vector<std::pair<FrontendOptions::InputKind, std::string> > &Inputs =
      CI.getFrontendOpts().Inputs;
    for (unsigned i = 0, e = Inputs.size(); i != e; ++i) {
      const FileEntry *File = CI.getFileManager().getFile(Inputs[i].second);
      assert(File && "Input file not found in FileManager");
      RequestedSourceLocation Requested;
      Requested.File = File;
      Requested.Line = 0;
      Requested.Column = 0;
      FixItRewrite.addFixItLocation(Requested);
    }
  }

  return true;
}
Example #2
0
/// AddFixItLocations - Add any individual user specified "fix-it" locations,
/// and return true on success.
static bool AddFixItLocations(CompilerInstance &CI,
                              FixItRewriter &FixItRewrite) {
  const std::vector<ParsedSourceLocation> &Locs =
    CI.getFrontendOpts().FixItLocations;
  for (unsigned i = 0, e = Locs.size(); i != e; ++i) {
    const FileEntry *File = CI.getFileManager().getFile(Locs[i].FileName);
    if (!File) {
      CI.getDiagnostics().Report(diag::err_fe_unable_to_find_fixit_file)
        << Locs[i].FileName;
      return false;
    }

    RequestedSourceLocation Requested;
    Requested.File = File;
    Requested.Line = Locs[i].Line;
    Requested.Column = Locs[i].Column;
    FixItRewrite.addFixItLocation(Requested);
  }

  return true;
}