| Index: tools/gn/args.cc
|
| diff --git a/tools/gn/args.cc b/tools/gn/args.cc
|
| index 7285d7a5388a4e042d7674f14090c2d3446fc58c..022192f96e57ac853931dafdfbf5f8c111ca39ad 100644
|
| --- a/tools/gn/args.cc
|
| +++ b/tools/gn/args.cc
|
| @@ -6,6 +6,7 @@
|
|
|
| #include "base/sys_info.h"
|
| #include "build/build_config.h"
|
| +#include "tools/gn/string_utils.h"
|
| #include "tools/gn/variables.h"
|
|
|
| const char kBuildArgs_Help[] =
|
| @@ -219,19 +220,34 @@ bool Args::DeclareArgs(const Scope::KeyValueMap& args,
|
|
|
| bool Args::VerifyAllOverridesUsed(Err* err) const {
|
| base::AutoLock lock(lock_);
|
| - Scope::KeyValueMap all_overrides(all_overrides_);
|
| + Scope::KeyValueMap unused_overrides(all_overrides_);
|
| for (const auto& map_pair : declared_arguments_per_toolchain_)
|
| - RemoveDeclaredOverrides(map_pair.second, &all_overrides);
|
| + RemoveDeclaredOverrides(map_pair.second, &unused_overrides);
|
|
|
| - if (all_overrides.empty())
|
| + if (unused_overrides.empty())
|
| return true;
|
|
|
| - *err = Err(
|
| - all_overrides.begin()->second.origin(), "Build argument has no effect.",
|
| - "The variable \"" + all_overrides.begin()->first.as_string() +
|
| - "\" was set as a build argument\nbut never appeared in a " +
|
| - "declare_args() block in any buildfile.\n\n"
|
| - "To view possible args, run \"gn args --list <builddir>\"");
|
| + // Some assignments in args.gn had no effect. Show an error for the first
|
| + // unused assignment.
|
| + base::StringPiece name = unused_overrides.begin()->first;
|
| + const Value& value = unused_overrides.begin()->second;
|
| +
|
| + std::string err_help(
|
| + "The variable \"" + name + "\" was set as a build argument\n"
|
| + "but never appeared in a declare_args() block in any buildfile.\n\n"
|
| + "To view all possible args, run \"gn args --list <builddir>\"");
|
| +
|
| + // Use all declare_args for a spelling suggestion.
|
| + std::vector<base::StringPiece> candidates;
|
| + for (const auto& map_pair : declared_arguments_per_toolchain_) {
|
| + for (const auto& declared_arg : map_pair.second)
|
| + candidates.push_back(declared_arg.first);
|
| + }
|
| + base::StringPiece suggestion = SpellcheckString(name, candidates);
|
| + if (!suggestion.empty())
|
| + err_help = "Did you mean \"" + suggestion + "\"?\n\n" + err_help;
|
| +
|
| + *err = Err(value.origin(), "Build argument has no effect.", err_help);
|
| return false;
|
| }
|
|
|
|
|