| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <algorithm> | 5 #include <algorithm> |
| 6 #include <iostream> | 6 #include <iostream> |
| 7 | 7 |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "tools/gn/args.h" | 9 #include "tools/gn/args.h" |
| 10 #include "tools/gn/commands.h" | 10 #include "tools/gn/commands.h" |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 59 PrintShortHelp(target.second.help_short); | 59 PrintShortHelp(target.second.help_short); |
| 60 | 60 |
| 61 OutputString("\nOther help topics:\n"); | 61 OutputString("\nOther help topics:\n"); |
| 62 PrintShortHelp("all: Print all the help at once"); | 62 PrintShortHelp("all: Print all the help at once"); |
| 63 PrintShortHelp("buildargs: How build arguments work."); | 63 PrintShortHelp("buildargs: How build arguments work."); |
| 64 PrintShortHelp("dotfile: Info about the toplevel .gn file."); | 64 PrintShortHelp("dotfile: Info about the toplevel .gn file."); |
| 65 PrintShortHelp("grammar: Formal grammar for GN build files."); | 65 PrintShortHelp("grammar: Formal grammar for GN build files."); |
| 66 PrintShortHelp( | 66 PrintShortHelp( |
| 67 "input_conversion: Processing input from exec_script and read_file."); | 67 "input_conversion: Processing input from exec_script and read_file."); |
| 68 PrintShortHelp("label_pattern: Matching more than one label."); | 68 PrintShortHelp("label_pattern: Matching more than one label."); |
| 69 PrintShortHelp("nogncheck: Annotating includes for checking."); |
| 69 PrintShortHelp("runtime_deps: How runtime dependency computation works."); | 70 PrintShortHelp("runtime_deps: How runtime dependency computation works."); |
| 70 PrintShortHelp("source_expansion: Map sources to outputs for scripts."); | 71 PrintShortHelp("source_expansion: Map sources to outputs for scripts."); |
| 71 PrintShortHelp("switches: Show available command-line switches."); | 72 PrintShortHelp("switches: Show available command-line switches."); |
| 72 } | 73 } |
| 73 | 74 |
| 74 void PrintSwitchHelp() { | 75 void PrintSwitchHelp() { |
| 75 const base::CommandLine* cmdline = base::CommandLine::ForCurrentProcess(); | 76 const base::CommandLine* cmdline = base::CommandLine::ForCurrentProcess(); |
| 76 bool use_markdown = cmdline->HasSwitch(switches::kMarkdown); | 77 bool use_markdown = cmdline->HasSwitch(switches::kMarkdown); |
| 77 | 78 |
| 78 OutputString("Available global switches\n", DECORATION_YELLOW); | 79 OutputString("Available global switches\n", DECORATION_YELLOW); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 119 PrintLongHelp(v.second.help); | 120 PrintLongHelp(v.second.help); |
| 120 | 121 |
| 121 for (const auto& v: variables::GetTargetVariables()) | 122 for (const auto& v: variables::GetTargetVariables()) |
| 122 PrintLongHelp(v.second.help); | 123 PrintLongHelp(v.second.help); |
| 123 | 124 |
| 124 PrintLongHelp(kBuildArgs_Help); | 125 PrintLongHelp(kBuildArgs_Help); |
| 125 PrintLongHelp(kDotfile_Help); | 126 PrintLongHelp(kDotfile_Help); |
| 126 PrintLongHelp(kGrammar_Help); | 127 PrintLongHelp(kGrammar_Help); |
| 127 PrintLongHelp(kInputConversion_Help); | 128 PrintLongHelp(kInputConversion_Help); |
| 128 PrintLongHelp(kLabelPattern_Help); | 129 PrintLongHelp(kLabelPattern_Help); |
| 130 PrintLongHelp(kNoGnCheck_Help); |
| 129 PrintLongHelp(kRuntimeDeps_Help); | 131 PrintLongHelp(kRuntimeDeps_Help); |
| 130 PrintLongHelp(kSourceExpansion_Help); | 132 PrintLongHelp(kSourceExpansion_Help); |
| 131 PrintSwitchHelp(); | 133 PrintSwitchHelp(); |
| 132 } | 134 } |
| 133 | 135 |
| 134 // Prints help on the given switch. There should be no leading hyphens. Returns | 136 // Prints help on the given switch. There should be no leading hyphens. Returns |
| 135 // true if the switch was found and help was printed. False means the switch is | 137 // true if the switch was found and help was printed. False means the switch is |
| 136 // unknown. | 138 // unknown. |
| 137 bool PrintHelpOnSwitch(const std::string& what) { | 139 bool PrintHelpOnSwitch(const std::string& what) { |
| 138 const switches::SwitchInfoMap& all = switches::GetSwitches(); | 140 const switches::SwitchInfoMap& all = switches::GetSwitches(); |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 224 // Random other topics. | 226 // Random other topics. |
| 225 std::map<std::string, void(*)()> random_topics; | 227 std::map<std::string, void(*)()> random_topics; |
| 226 random_topics["all"] = PrintAllHelp; | 228 random_topics["all"] = PrintAllHelp; |
| 227 random_topics["buildargs"] = []() { PrintLongHelp(kBuildArgs_Help); }; | 229 random_topics["buildargs"] = []() { PrintLongHelp(kBuildArgs_Help); }; |
| 228 random_topics["dotfile"] = []() { PrintLongHelp(kDotfile_Help); }; | 230 random_topics["dotfile"] = []() { PrintLongHelp(kDotfile_Help); }; |
| 229 random_topics["grammar"] = []() { PrintLongHelp(kGrammar_Help); }; | 231 random_topics["grammar"] = []() { PrintLongHelp(kGrammar_Help); }; |
| 230 random_topics["input_conversion"] = []() { | 232 random_topics["input_conversion"] = []() { |
| 231 PrintLongHelp(kInputConversion_Help); | 233 PrintLongHelp(kInputConversion_Help); |
| 232 }; | 234 }; |
| 233 random_topics["label_pattern"] = []() { PrintLongHelp(kLabelPattern_Help); }; | 235 random_topics["label_pattern"] = []() { PrintLongHelp(kLabelPattern_Help); }; |
| 236 random_topics["nogncheck"] = []() { PrintLongHelp(kNoGnCheck_Help); }; |
| 234 random_topics["runtime_deps"] = []() { PrintLongHelp(kRuntimeDeps_Help); }; | 237 random_topics["runtime_deps"] = []() { PrintLongHelp(kRuntimeDeps_Help); }; |
| 235 random_topics["source_expansion"] = []() { | 238 random_topics["source_expansion"] = []() { |
| 236 PrintLongHelp(kSourceExpansion_Help); | 239 PrintLongHelp(kSourceExpansion_Help); |
| 237 }; | 240 }; |
| 238 random_topics["switches"] = PrintSwitchHelp; | 241 random_topics["switches"] = PrintSwitchHelp; |
| 239 auto found_random_topic = random_topics.find(what); | 242 auto found_random_topic = random_topics.find(what); |
| 240 if (found_random_topic != random_topics.end()) { | 243 if (found_random_topic != random_topics.end()) { |
| 241 found_random_topic->second(); | 244 found_random_topic->second(); |
| 242 return 0; | 245 return 0; |
| 243 } | 246 } |
| 244 for (const auto& entry : random_topics) | 247 for (const auto& entry : random_topics) |
| 245 all_help_topics.push_back(entry.first); | 248 all_help_topics.push_back(entry.first); |
| 246 | 249 |
| 247 // No help on this. | 250 // No help on this. |
| 248 Err(Location(), "No help on \"" + what + "\".").PrintToStdout(); | 251 Err(Location(), "No help on \"" + what + "\".").PrintToStdout(); |
| 249 base::StringPiece suggestion = SpellcheckString(what, all_help_topics); | 252 base::StringPiece suggestion = SpellcheckString(what, all_help_topics); |
| 250 if (suggestion.empty()) { | 253 if (suggestion.empty()) { |
| 251 OutputString("Run `gn help` for a list of available topics.\n", | 254 OutputString("Run `gn help` for a list of available topics.\n", |
| 252 DECORATION_NONE); | 255 DECORATION_NONE); |
| 253 } else { | 256 } else { |
| 254 OutputString("Did you mean `gn help " + suggestion.as_string() + "`?\n", | 257 OutputString("Did you mean `gn help " + suggestion.as_string() + "`?\n", |
| 255 DECORATION_NONE); | 258 DECORATION_NONE); |
| 256 } | 259 } |
| 257 return 1; | 260 return 1; |
| 258 } | 261 } |
| 259 | 262 |
| 260 } // namespace commands | 263 } // namespace commands |
| OLD | NEW |