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

Side by Side Diff: tools/gn/args.cc

Issue 2552593002: gn: Add spelling suggestions for args.gn and --args. (Closed)
Patch Set: rebase Created 4 years 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "tools/gn/args.h" 5 #include "tools/gn/args.h"
6 6
7 #include "base/sys_info.h" 7 #include "base/sys_info.h"
8 #include "build/build_config.h" 8 #include "build/build_config.h"
9 #include "tools/gn/string_utils.h"
9 #include "tools/gn/variables.h" 10 #include "tools/gn/variables.h"
10 11
11 const char kBuildArgs_Help[] = 12 const char kBuildArgs_Help[] =
12 R"(Build Arguments Overview 13 R"(Build Arguments Overview
13 14
14 Build arguments are variables passed in from outside of the build that build 15 Build arguments are variables passed in from outside of the build that build
15 files can query to determine how the build works. 16 files can query to determine how the build works.
16 17
17 How build arguments are set 18 How build arguments are set
18 19
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 213
213 scope_to_set->SetValue(arg.first, arg.second, arg.second.origin()); 214 scope_to_set->SetValue(arg.first, arg.second, arg.second.origin());
214 scope_to_set->MarkUsed(arg.first); 215 scope_to_set->MarkUsed(arg.first);
215 } 216 }
216 217
217 return true; 218 return true;
218 } 219 }
219 220
220 bool Args::VerifyAllOverridesUsed(Err* err) const { 221 bool Args::VerifyAllOverridesUsed(Err* err) const {
221 base::AutoLock lock(lock_); 222 base::AutoLock lock(lock_);
222 Scope::KeyValueMap all_overrides(all_overrides_); 223 Scope::KeyValueMap unused_overrides(all_overrides_);
223 for (const auto& map_pair : declared_arguments_per_toolchain_) 224 for (const auto& map_pair : declared_arguments_per_toolchain_)
224 RemoveDeclaredOverrides(map_pair.second, &all_overrides); 225 RemoveDeclaredOverrides(map_pair.second, &unused_overrides);
225 226
226 if (all_overrides.empty()) 227 if (unused_overrides.empty())
227 return true; 228 return true;
228 229
229 *err = Err( 230 // Some assignments in args.gn had no effect. Show an error for the first
230 all_overrides.begin()->second.origin(), "Build argument has no effect.", 231 // unused assignment.
231 "The variable \"" + all_overrides.begin()->first.as_string() + 232 base::StringPiece name = unused_overrides.begin()->first;
232 "\" was set as a build argument\nbut never appeared in a " + 233 const Value& value = unused_overrides.begin()->second;
233 "declare_args() block in any buildfile.\n\n" 234
234 "To view possible args, run \"gn args --list <builddir>\""); 235 std::string err_help(
236 "The variable \"" + name + "\" was set as a build argument\n"
237 "but never appeared in a declare_args() block in any buildfile.\n\n"
238 "To view all possible args, run \"gn args --list <builddir>\"");
239
240 // Use all declare_args for a spelling suggestion.
241 std::vector<base::StringPiece> candidates;
242 for (const auto& map_pair : declared_arguments_per_toolchain_) {
243 for (const auto& declared_arg : map_pair.second)
244 candidates.push_back(declared_arg.first);
245 }
246 base::StringPiece suggestion = SpellcheckString(name, candidates);
247 if (!suggestion.empty())
248 err_help = "Did you mean \"" + suggestion + "\"?\n\n" + err_help;
249
250 *err = Err(value.origin(), "Build argument has no effect.", err_help);
235 return false; 251 return false;
236 } 252 }
237 253
238 void Args::MergeDeclaredArguments(Scope::KeyValueMap* dest) const { 254 void Args::MergeDeclaredArguments(Scope::KeyValueMap* dest) const {
239 base::AutoLock lock(lock_); 255 base::AutoLock lock(lock_);
240 for (const auto& map_pair : declared_arguments_per_toolchain_) { 256 for (const auto& map_pair : declared_arguments_per_toolchain_) {
241 for (const auto& arg : map_pair.second) 257 for (const auto& arg : map_pair.second)
242 (*dest)[arg.first] = arg.second; 258 (*dest)[arg.first] = arg.second;
243 } 259 }
244 } 260 }
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 Scope* scope) const { 368 Scope* scope) const {
353 lock_.AssertAcquired(); 369 lock_.AssertAcquired();
354 return declared_arguments_per_toolchain_[scope->settings()]; 370 return declared_arguments_per_toolchain_[scope->settings()];
355 } 371 }
356 372
357 Scope::KeyValueMap& Args::OverridesForToolchainLocked( 373 Scope::KeyValueMap& Args::OverridesForToolchainLocked(
358 Scope* scope) const { 374 Scope* scope) const {
359 lock_.AssertAcquired(); 375 lock_.AssertAcquired();
360 return toolchain_overrides_[scope->settings()]; 376 return toolchain_overrides_[scope->settings()];
361 } 377 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698