Use full paths when writing MSVS-style errors. Patch from Oleg Smolsky.

pull/3335/head
kenton@google.com 15 years ago
parent eeb8fd7dc8
commit 6793c1af26
  1. 16
      src/google/protobuf/compiler/command_line_interface.cc
  2. 2
      src/google/protobuf/compiler/command_line_interface_unittest.cc

@ -182,14 +182,23 @@ bool TryCreateParentDirectory(const string& prefix, const string& filename) {
class CommandLineInterface::ErrorPrinter : public MultiFileErrorCollector,
public io::ErrorCollector {
public:
ErrorPrinter(ErrorFormat format) : format_(format) {}
ErrorPrinter(ErrorFormat format, DiskSourceTree *tree = NULL)
: format_(format), tree_(tree) {}
~ErrorPrinter() {}
// implements MultiFileErrorCollector ------------------------------
void AddError(const string& filename, int line, int column,
const string& message) {
cerr << filename;
// Print full path when running under MSVS
std::string dfile;
if (format_ == CommandLineInterface::ERROR_FORMAT_MSVS &&
tree_ != NULL &&
tree_->VirtualFileToDiskFile(filename, &dfile)) {
cerr << dfile;
} else {
cerr << filename;
}
// Users typically expect 1-based line/column numbers, so we add 1
// to each here.
@ -215,6 +224,7 @@ class CommandLineInterface::ErrorPrinter : public MultiFileErrorCollector,
private:
const ErrorFormat format_;
DiskSourceTree *tree_;
};
// -------------------------------------------------------------------
@ -583,7 +593,7 @@ int CommandLineInterface::Run(int argc, const char* const argv[]) {
}
// Allocate the Importer.
ErrorPrinter error_collector(error_format_);
ErrorPrinter error_collector(error_format_, &source_tree);
Importer importer(&source_tree, &error_collector);
vector<const FileDescriptor*> parsed_files;

@ -1153,7 +1153,7 @@ TEST_F(CommandLineInterfaceTest, MsvsFormatErrors) {
"--proto_path=$tmpdir --error_format=msvs foo.proto");
ExpectErrorText(
"foo.proto(2) : error in column=1: Expected top-level statement "
"$tmpdir/foo.proto(2) : error in column=1: Expected top-level statement "
"(e.g. \"message\").\n");
}

Loading…
Cancel
Save