Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2581)

Unified Diff: tools/gn/command_format.cc

Issue 613083003: gn format: support absolute file system paths (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: help Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | tools/gn/command_format_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/gn/command_format.cc
diff --git a/tools/gn/command_format.cc b/tools/gn/command_format.cc
index f1340bf0a0b04d2565318eecc12745acc75043d6..63383679cb70eee543b2d26c8300727dbc0bb0b7 100644
--- a/tools/gn/command_format.cc
+++ b/tools/gn/command_format.cc
@@ -7,6 +7,7 @@
#include "base/command_line.h"
#include "base/strings/string_split.h"
#include "tools/gn/commands.h"
+#include "tools/gn/filesystem_utils.h"
#include "tools/gn/input_file.h"
#include "tools/gn/parser.h"
#include "tools/gn/scheduler.h"
@@ -17,20 +18,31 @@
namespace commands {
const char kSwitchDumpTree[] = "dump-tree";
+const char kSwitchInPlace[] = "in-place";
const char kFormat[] = "format";
const char kFormat_HelpShort[] =
- "format: Format .gn file.";
+ "format: Format .gn file. (ALPHA, WILL DESTROY DATA!)";
const char kFormat_Help[] =
- "gn format: Format .gn file. (ALPHA, WILL CURRENTLY DESTROY DATA!)\n"
- "\n"
- " gn format //some/BUILD.gn\n"
- " gn format some\\BUILD.gn\n"
+ "gn format [--dump-tree] [--in-place] BUILD.gn\n"
"\n"
" Formats .gn file to a standard format. THIS IS NOT FULLY IMPLEMENTED\n"
" YET! IT WILL EAT YOUR BEAUTIFUL .GN FILES. AND YOUR LAUNDRY.\n"
" At a minimum, make sure everything is `git commit`d so you can\n"
- " `git checkout -f` to recover.\n";
+ " `git checkout -f` to recover.\n"
+ "\n"
+ "Arguments\n"
+ " --dump-tree\n"
+ " For debugging only, dumps the parse tree.\n"
+ "\n"
+ " --in-place\n"
+ " Instead writing the formatted file to stdout, replace the input\n"
+ " with the formatted output.\n"
+ "\n"
+ "Examples\n"
+ " gn format //some/BUILD.gn\n"
+ " gn format some\\BUILD.gn\n"
+ " gn format /abspath/some/BUILD.gn\n";
namespace {
@@ -490,15 +502,14 @@ void Printer::Sequence(SequenceStyle style,
} // namespace
-bool FormatFileToString(const std::string& input_filename,
+bool FormatFileToString(Setup* setup,
+ const SourceFile& file,
bool dump_tree,
std::string* output) {
- Setup setup;
Err err;
- SourceFile input_file(input_filename);
const ParseNode* parse_node =
- setup.scheduler().input_file_manager()->SyncLoadFile(
- LocationRange(), &setup.build_settings(), input_file, &err);
+ setup->scheduler().input_file_manager()->SyncLoadFile(
+ LocationRange(), &setup->build_settings(), file, &err);
if (err.has_error()) {
err.PrintToStdout();
return false;
@@ -532,13 +543,16 @@ int RunFormat(const std::vector<std::string>& args) {
bool dump_tree =
base::CommandLine::ForCurrentProcess()->HasSwitch(kSwitchDumpTree);
- std::string input_name = args[0];
- if (input_name[0] != '/') {
- std::replace(input_name.begin(), input_name.end(), '\\', '/');
- input_name = "//" + input_name;
- }
+ Setup setup;
+ SourceDir source_dir =
+ SourceDirForCurrentDirectory(setup.build_settings().root_path());
+ SourceFile file = source_dir.ResolveRelativeFile(args[0]);
+
std::string output_string;
- if (FormatFileToString(input_name, dump_tree, &output_string)) {
+ if (FormatFileToString(&setup, file, dump_tree, &output_string)) {
+ bool in_place =
+ base::CommandLine::ForCurrentProcess()->HasSwitch(kSwitchInPlace);
+ CHECK(!in_place) << "TODO(scottmg)";
scottmg 2014/10/02 21:54:29 (is there an easy way to map a SourceFile back to
brettw 2014/10/02 22:03:27 setup.build_settings()->GetFullPath(source_file)
printf("%s", output_string.c_str());
}
« no previous file with comments | « no previous file | tools/gn/command_format_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698