diff --git a/docs/reference.md b/docs/reference.md
index cb6960d..11e8212 100644
--- a/docs/reference.md
+++ b/docs/reference.md
@@ -5,143 +5,143 @@
 ## Contents
 
 *   [Commands](#commands)
-    *   [analyze: Analyze which targets are affected by a list of files.](#analyze)
-    *   [args: Display or configure arguments declared by the build.](#args)
-    *   [check: Check header dependencies.](#check)
-    *   [clean: Cleans the output directory.](#clean)
-    *   [desc: Show lots of insightful information about a target or config.](#desc)
-    *   [format: Format .gn file.](#format)
-    *   [gen: Generate ninja files.](#gen)
-    *   [help: Does what you think.](#help)
-    *   [ls: List matching targets.](#ls)
-    *   [meta: List target metadata collection results.](#meta)
-    *   [path: Find paths between two targets.](#path)
-    *   [refs: Find stuff referencing a target or file.](#refs)
+    *   [analyze: Analyze which targets are affected by a list of files.](#cmd_analyze)
+    *   [args: Display or configure arguments declared by the build.](#cmd_args)
+    *   [check: Check header dependencies.](#cmd_check)
+    *   [clean: Cleans the output directory.](#cmd_clean)
+    *   [desc: Show lots of insightful information about a target or config.](#cmd_desc)
+    *   [format: Format .gn file.](#cmd_format)
+    *   [gen: Generate ninja files.](#cmd_gen)
+    *   [help: Does what you think.](#cmd_help)
+    *   [ls: List matching targets.](#cmd_ls)
+    *   [meta: List target metadata collection results.](#cmd_meta)
+    *   [path: Find paths between two targets.](#cmd_path)
+    *   [refs: Find stuff referencing a target or file.](#cmd_refs)
 *   [Target declarations](#targets)
-    *   [action: Declare a target that runs a script a single time.](#action)
-    *   [action_foreach: Declare a target that runs a script over a set of files.](#action_foreach)
-    *   [bundle_data: [iOS/macOS] Declare a target without output.](#bundle_data)
-    *   [copy: Declare a target that copies files.](#copy)
-    *   [create_bundle: [iOS/macOS] Build an iOS or macOS bundle.](#create_bundle)
-    *   [executable: Declare an executable target.](#executable)
-    *   [generated_file: Declare a generated_file target.](#generated_file)
-    *   [group: Declare a named group of targets.](#group)
-    *   [loadable_module: Declare a loadable module target.](#loadable_module)
-    *   [shared_library: Declare a shared library target.](#shared_library)
-    *   [source_set: Declare a source set target.](#source_set)
-    *   [static_library: Declare a static library target.](#static_library)
-    *   [target: Declare an target with the given programmatic type.](#target)
+    *   [action: Declare a target that runs a script a single time.](#func_action)
+    *   [action_foreach: Declare a target that runs a script over a set of files.](#func_action_foreach)
+    *   [bundle_data: [iOS/macOS] Declare a target without output.](#func_bundle_data)
+    *   [copy: Declare a target that copies files.](#func_copy)
+    *   [create_bundle: [iOS/macOS] Build an iOS or macOS bundle.](#func_create_bundle)
+    *   [executable: Declare an executable target.](#func_executable)
+    *   [generated_file: Declare a generated_file target.](#func_generated_file)
+    *   [group: Declare a named group of targets.](#func_group)
+    *   [loadable_module: Declare a loadable module target.](#func_loadable_module)
+    *   [shared_library: Declare a shared library target.](#func_shared_library)
+    *   [source_set: Declare a source set target.](#func_source_set)
+    *   [static_library: Declare a static library target.](#func_static_library)
+    *   [target: Declare an target with the given programmatic type.](#func_target)
 *   [Buildfile functions](#functions)
-    *   [assert: Assert an expression is true at generation time.](#assert)
-    *   [config: Defines a configuration object.](#config)
-    *   [declare_args: Declare build arguments.](#declare_args)
-    *   [defined: Returns whether an identifier is defined.](#defined)
-    *   [exec_script: Synchronously run a script and return the output.](#exec_script)
-    *   [foreach: Iterate over a list.](#foreach)
-    *   [forward_variables_from: Copies variables from a different scope.](#forward_variables_from)
-    *   [get_label_info: Get an attribute from a target's label.](#get_label_info)
-    *   [get_path_info: Extract parts of a file or directory name.](#get_path_info)
-    *   [get_target_outputs: [file list] Get the list of outputs from a target.](#get_target_outputs)
-    *   [getenv: Get an environment variable.](#getenv)
-    *   [import: Import a file into the current scope.](#import)
-    *   [not_needed: Mark variables from scope as not needed.](#not_needed)
-    *   [pool: Defines a pool object.](#pool)
-    *   [print: Prints to the console.](#print)
-    *   [process_file_template: Do template expansion over a list of files.](#process_file_template)
-    *   [read_file: Read a file into a variable.](#read_file)
-    *   [rebase_path: Rebase a file or directory to another location.](#rebase_path)
-    *   [set_default_toolchain: Sets the default toolchain name.](#set_default_toolchain)
-    *   [set_defaults: Set default values for a target type.](#set_defaults)
-    *   [set_sources_assignment_filter: Set a pattern to filter source files.](#set_sources_assignment_filter)
-    *   [split_list: Splits a list into N different sub-lists.](#split_list)
-    *   [string_replace: Replaces substring in the given string.](#string_replace)
-    *   [template: Define a template rule.](#template)
-    *   [tool: Specify arguments to a toolchain tool.](#tool)
-    *   [toolchain: Defines a toolchain.](#toolchain)
-    *   [write_file: Write a file to disk.](#write_file)
+    *   [assert: Assert an expression is true at generation time.](#func_assert)
+    *   [config: Defines a configuration object.](#func_config)
+    *   [declare_args: Declare build arguments.](#func_declare_args)
+    *   [defined: Returns whether an identifier is defined.](#func_defined)
+    *   [exec_script: Synchronously run a script and return the output.](#func_exec_script)
+    *   [foreach: Iterate over a list.](#func_foreach)
+    *   [forward_variables_from: Copies variables from a different scope.](#func_forward_variables_from)
+    *   [get_label_info: Get an attribute from a target's label.](#func_get_label_info)
+    *   [get_path_info: Extract parts of a file or directory name.](#func_get_path_info)
+    *   [get_target_outputs: [file list] Get the list of outputs from a target.](#func_get_target_outputs)
+    *   [getenv: Get an environment variable.](#func_getenv)
+    *   [import: Import a file into the current scope.](#func_import)
+    *   [not_needed: Mark variables from scope as not needed.](#func_not_needed)
+    *   [pool: Defines a pool object.](#func_pool)
+    *   [print: Prints to the console.](#func_print)
+    *   [process_file_template: Do template expansion over a list of files.](#func_process_file_template)
+    *   [read_file: Read a file into a variable.](#func_read_file)
+    *   [rebase_path: Rebase a file or directory to another location.](#func_rebase_path)
+    *   [set_default_toolchain: Sets the default toolchain name.](#func_set_default_toolchain)
+    *   [set_defaults: Set default values for a target type.](#func_set_defaults)
+    *   [set_sources_assignment_filter: Set a pattern to filter source files.](#func_set_sources_assignment_filter)
+    *   [split_list: Splits a list into N different sub-lists.](#func_split_list)
+    *   [string_replace: Replaces substring in the given string.](#func_string_replace)
+    *   [template: Define a template rule.](#func_template)
+    *   [tool: Specify arguments to a toolchain tool.](#func_tool)
+    *   [toolchain: Defines a toolchain.](#func_toolchain)
+    *   [write_file: Write a file to disk.](#func_write_file)
 *   [Built-in predefined variables](#predefined_variables)
-    *   [current_cpu: [string] The processor architecture of the current toolchain.](#current_cpu)
-    *   [current_os: [string] The operating system of the current toolchain.](#current_os)
-    *   [current_toolchain: [string] Label of the current toolchain.](#current_toolchain)
-    *   [default_toolchain: [string] Label of the default toolchain.](#default_toolchain)
-    *   [host_cpu: [string] The processor architecture that GN is running on.](#host_cpu)
-    *   [host_os: [string] The operating system that GN is running on.](#host_os)
-    *   [invoker: [string] The invoking scope inside a template.](#invoker)
-    *   [python_path: [string] Absolute path of Python.](#python_path)
-    *   [root_build_dir: [string] Directory where build commands are run.](#root_build_dir)
-    *   [root_gen_dir: [string] Directory for the toolchain's generated files.](#root_gen_dir)
-    *   [root_out_dir: [string] Root directory for toolchain output files.](#root_out_dir)
-    *   [target_cpu: [string] The desired cpu architecture for the build.](#target_cpu)
-    *   [target_gen_dir: [string] Directory for a target's generated files.](#target_gen_dir)
-    *   [target_name: [string] The name of the current target.](#target_name)
-    *   [target_os: [string] The desired operating system for the build.](#target_os)
-    *   [target_out_dir: [string] Directory for target output files.](#target_out_dir)
+    *   [current_cpu: [string] The processor architecture of the current toolchain.](#var_current_cpu)
+    *   [current_os: [string] The operating system of the current toolchain.](#var_current_os)
+    *   [current_toolchain: [string] Label of the current toolchain.](#var_current_toolchain)
+    *   [default_toolchain: [string] Label of the default toolchain.](#var_default_toolchain)
+    *   [host_cpu: [string] The processor architecture that GN is running on.](#var_host_cpu)
+    *   [host_os: [string] The operating system that GN is running on.](#var_host_os)
+    *   [invoker: [string] The invoking scope inside a template.](#var_invoker)
+    *   [python_path: [string] Absolute path of Python.](#var_python_path)
+    *   [root_build_dir: [string] Directory where build commands are run.](#var_root_build_dir)
+    *   [root_gen_dir: [string] Directory for the toolchain's generated files.](#var_root_gen_dir)
+    *   [root_out_dir: [string] Root directory for toolchain output files.](#var_root_out_dir)
+    *   [target_cpu: [string] The desired cpu architecture for the build.](#var_target_cpu)
+    *   [target_gen_dir: [string] Directory for a target's generated files.](#var_target_gen_dir)
+    *   [target_name: [string] The name of the current target.](#var_target_name)
+    *   [target_os: [string] The desired operating system for the build.](#var_target_os)
+    *   [target_out_dir: [string] Directory for target output files.](#var_target_out_dir)
 *   [Variables you set in targets](#target_variables)
-    *   [all_dependent_configs: [label list] Configs to be forced on dependents.](#all_dependent_configs)
-    *   [allow_circular_includes_from: [label list] Permit includes from deps.](#allow_circular_includes_from)
-    *   [arflags: [string list] Arguments passed to static_library archiver.](#arflags)
-    *   [args: [string list] Arguments passed to an action.](#args)
-    *   [asmflags: [string list] Flags passed to the assembler.](#asmflags)
-    *   [assert_no_deps: [label pattern list] Ensure no deps on these targets.](#assert_no_deps)
-    *   [bundle_contents_dir: Expansion of {{bundle_contents_dir}} in create_bundle.](#bundle_contents_dir)
-    *   [bundle_deps_filter: [label list] A list of labels that are filtered out.](#bundle_deps_filter)
-    *   [bundle_executable_dir: Expansion of {{bundle_executable_dir}} in create_bundle](#bundle_executable_dir)
-    *   [bundle_plugins_dir: Expansion of {{bundle_plugins_dir}} in create_bundle.](#bundle_plugins_dir)
-    *   [bundle_resources_dir: Expansion of {{bundle_resources_dir}} in create_bundle.](#bundle_resources_dir)
-    *   [bundle_root_dir: Expansion of {{bundle_root_dir}} in create_bundle.](#bundle_root_dir)
-    *   [cflags: [string list] Flags passed to all C compiler variants.](#cflags)
-    *   [cflags_c: [string list] Flags passed to the C compiler.](#cflags_c)
-    *   [cflags_cc: [string list] Flags passed to the C++ compiler.](#cflags_cc)
-    *   [cflags_objc: [string list] Flags passed to the Objective C compiler.](#cflags_objc)
-    *   [cflags_objcc: [string list] Flags passed to the Objective C++ compiler.](#cflags_objcc)
-    *   [check_includes: [boolean] Controls whether a target's files are checked.](#check_includes)
-    *   [code_signing_args: [string list] Arguments passed to code signing script.](#code_signing_args)
-    *   [code_signing_outputs: [file list] Output files for code signing step.](#code_signing_outputs)
-    *   [code_signing_script: [file name] Script for code signing.](#code_signing_script)
-    *   [code_signing_sources: [file list] Sources for code signing step.](#code_signing_sources)
-    *   [complete_static_lib: [boolean] Links all deps into a static library.](#complete_static_lib)
-    *   [configs: [label list] Configs applying to this target or config.](#configs)
-    *   [contents: Contents to write to file.](#contents)
-    *   [data: [file list] Runtime data file dependencies.](#data)
-    *   [data_deps: [label list] Non-linked dependencies.](#data_deps)
-    *   [data_keys: [string list] Keys from which to collect metadata.](#data_keys)
-    *   [defines: [string list] C preprocessor defines.](#defines)
-    *   [depfile: [string] File name for input dependencies for actions.](#depfile)
-    *   [deps: [label list] Private linked dependencies.](#deps)
-    *   [friend: [label pattern list] Allow targets to include private headers.](#friend)
-    *   [include_dirs: [directory list] Additional include directories.](#include_dirs)
-    *   [inputs: [file list] Additional compile-time dependencies.](#inputs)
-    *   [ldflags: [string list] Flags passed to the linker.](#ldflags)
-    *   [lib_dirs: [directory list] Additional library directories.](#lib_dirs)
-    *   [libs: [string list] Additional libraries to link.](#libs)
-    *   [metadata: [scope] Metadata of this target.](#metadata)
-    *   [output_conversion: Data format for generated_file targets.](#output_conversion)
-    *   [output_dir: [directory] Directory to put output file in.](#output_dir)
-    *   [output_extension: [string] Value to use for the output's file extension.](#output_extension)
-    *   [output_name: [string] Name for the output file other than the default.](#output_name)
-    *   [output_prefix_override: [boolean] Don't use prefix for output name.](#output_prefix_override)
-    *   [outputs: [file list] Output files for actions and copy targets.](#outputs)
-    *   [partial_info_plist: [filename] Path plist from asset catalog compiler.](#partial_info_plist)
-    *   [pool: [string] Label of the pool used by the action.](#pool)
-    *   [precompiled_header: [string] Header file to precompile.](#precompiled_header)
-    *   [precompiled_header_type: [string] "gcc" or "msvc".](#precompiled_header_type)
-    *   [precompiled_source: [file name] Source file to precompile.](#precompiled_source)
-    *   [product_type: [string] Product type for Xcode projects.](#product_type)
-    *   [public: [file list] Declare public header files for a target.](#public)
-    *   [public_configs: [label list] Configs applied to dependents.](#public_configs)
-    *   [public_deps: [label list] Declare public dependencies.](#public_deps)
-    *   [rebase: [boolean] Rebase collected metadata as files.](#rebase)
-    *   [response_file_contents: [string list] Contents of .rsp file for actions.](#response_file_contents)
-    *   [script: [file name] Script file for actions.](#script)
-    *   [sources: [file list] Source files for a target.](#sources)
-    *   [testonly: [boolean] Declares a target must only be used for testing.](#testonly)
-    *   [visibility: [label list] A list of labels that can depend on a target.](#visibility)
-    *   [walk_keys: [string list] Key(s) for managing the metadata collection walk.](#walk_keys)
-    *   [write_runtime_deps: Writes the target's runtime_deps to the given path.](#write_runtime_deps)
-    *   [xcode_extra_attributes: [scope] Extra attributes for Xcode projects.](#xcode_extra_attributes)
-    *   [test_application_name: [string] Test application name for unit or ui test target.](#test_application_name)
+    *   [all_dependent_configs: [label list] Configs to be forced on dependents.](#var_all_dependent_configs)
+    *   [allow_circular_includes_from: [label list] Permit includes from deps.](#var_allow_circular_includes_from)
+    *   [arflags: [string list] Arguments passed to static_library archiver.](#var_arflags)
+    *   [args: [string list] Arguments passed to an action.](#var_args)
+    *   [asmflags: [string list] Flags passed to the assembler.](#var_asmflags)
+    *   [assert_no_deps: [label pattern list] Ensure no deps on these targets.](#var_assert_no_deps)
+    *   [bundle_contents_dir: Expansion of {{bundle_contents_dir}} in create_bundle.](#var_bundle_contents_dir)
+    *   [bundle_deps_filter: [label list] A list of labels that are filtered out.](#var_bundle_deps_filter)
+    *   [bundle_executable_dir: Expansion of {{bundle_executable_dir}} in create_bundle](#var_bundle_executable_dir)
+    *   [bundle_plugins_dir: Expansion of {{bundle_plugins_dir}} in create_bundle.](#var_bundle_plugins_dir)
+    *   [bundle_resources_dir: Expansion of {{bundle_resources_dir}} in create_bundle.](#var_bundle_resources_dir)
+    *   [bundle_root_dir: Expansion of {{bundle_root_dir}} in create_bundle.](#var_bundle_root_dir)
+    *   [cflags: [string list] Flags passed to all C compiler variants.](#var_cflags)
+    *   [cflags_c: [string list] Flags passed to the C compiler.](#var_cflags_c)
+    *   [cflags_cc: [string list] Flags passed to the C++ compiler.](#var_cflags_cc)
+    *   [cflags_objc: [string list] Flags passed to the Objective C compiler.](#var_cflags_objc)
+    *   [cflags_objcc: [string list] Flags passed to the Objective C++ compiler.](#var_cflags_objcc)
+    *   [check_includes: [boolean] Controls whether a target's files are checked.](#var_check_includes)
+    *   [code_signing_args: [string list] Arguments passed to code signing script.](#var_code_signing_args)
+    *   [code_signing_outputs: [file list] Output files for code signing step.](#var_code_signing_outputs)
+    *   [code_signing_script: [file name] Script for code signing.](#var_code_signing_script)
+    *   [code_signing_sources: [file list] Sources for code signing step.](#var_code_signing_sources)
+    *   [complete_static_lib: [boolean] Links all deps into a static library.](#var_complete_static_lib)
+    *   [configs: [label list] Configs applying to this target or config.](#var_configs)
+    *   [contents: Contents to write to file.](#var_contents)
+    *   [data: [file list] Runtime data file dependencies.](#var_data)
+    *   [data_deps: [label list] Non-linked dependencies.](#var_data_deps)
+    *   [data_keys: [string list] Keys from which to collect metadata.](#var_data_keys)
+    *   [defines: [string list] C preprocessor defines.](#var_defines)
+    *   [depfile: [string] File name for input dependencies for actions.](#var_depfile)
+    *   [deps: [label list] Private linked dependencies.](#var_deps)
+    *   [friend: [label pattern list] Allow targets to include private headers.](#var_friend)
+    *   [include_dirs: [directory list] Additional include directories.](#var_include_dirs)
+    *   [inputs: [file list] Additional compile-time dependencies.](#var_inputs)
+    *   [ldflags: [string list] Flags passed to the linker.](#var_ldflags)
+    *   [lib_dirs: [directory list] Additional library directories.](#var_lib_dirs)
+    *   [libs: [string list] Additional libraries to link.](#var_libs)
+    *   [metadata: [scope] Metadata of this target.](#var_metadata)
+    *   [output_conversion: Data format for generated_file targets.](#var_output_conversion)
+    *   [output_dir: [directory] Directory to put output file in.](#var_output_dir)
+    *   [output_extension: [string] Value to use for the output's file extension.](#var_output_extension)
+    *   [output_name: [string] Name for the output file other than the default.](#var_output_name)
+    *   [output_prefix_override: [boolean] Don't use prefix for output name.](#var_output_prefix_override)
+    *   [outputs: [file list] Output files for actions and copy targets.](#var_outputs)
+    *   [partial_info_plist: [filename] Path plist from asset catalog compiler.](#var_partial_info_plist)
+    *   [pool: [string] Label of the pool used by the action.](#var_pool)
+    *   [precompiled_header: [string] Header file to precompile.](#var_precompiled_header)
+    *   [precompiled_header_type: [string] "gcc" or "msvc".](#var_precompiled_header_type)
+    *   [precompiled_source: [file name] Source file to precompile.](#var_precompiled_source)
+    *   [product_type: [string] Product type for Xcode projects.](#var_product_type)
+    *   [public: [file list] Declare public header files for a target.](#var_public)
+    *   [public_configs: [label list] Configs applied to dependents.](#var_public_configs)
+    *   [public_deps: [label list] Declare public dependencies.](#var_public_deps)
+    *   [rebase: [boolean] Rebase collected metadata as files.](#var_rebase)
+    *   [response_file_contents: [string list] Contents of .rsp file for actions.](#var_response_file_contents)
+    *   [script: [file name] Script file for actions.](#var_script)
+    *   [sources: [file list] Source files for a target.](#var_sources)
+    *   [testonly: [boolean] Declares a target must only be used for testing.](#var_testonly)
+    *   [visibility: [label list] A list of labels that can depend on a target.](#var_visibility)
+    *   [walk_keys: [string list] Key(s) for managing the metadata collection walk.](#var_walk_keys)
+    *   [write_runtime_deps: Writes the target's runtime_deps to the given path.](#var_write_runtime_deps)
+    *   [xcode_extra_attributes: [scope] Extra attributes for Xcode projects.](#var_xcode_extra_attributes)
+    *   [xcode_test_application_name: [string] Name for Xcode test target.](#var_xcode_test_application_name)
 *   [Other help topics](#other)
-    *   [all: Print all the help at once](#all)
+    *   all: Print all the help at once
     *   [buildargs: How build arguments work.](#buildargs)
     *   [dotfile: Info about the toplevel .gn file.](#dotfile)
     *   [execution: Build graph and execution overview.](#execution)
@@ -154,11 +154,11 @@
     *   [output_conversion: Specifies how to transform a value to output.](#output_conversion)
     *   [runtime_deps: How runtime dependency computation works.](#runtime_deps)
     *   [source_expansion: Map sources to outputs for scripts.](#source_expansion)
-    *   [switches: Show available command-line switches.](#switches)
+    *   [switches: Show available command-line switches.](#switch_list)
 
 ## <a name="commands"></a>Commands
 
-### <a name="analyze"></a>**gn analyze &lt;out_dir&gt; &lt;input_path&gt; &lt;output_path&gt;**
+### <a name="cmd_analyze"></a>**gn analyze &lt;out_dir&gt; &lt;input_path&gt; &lt;output_path&gt;**
 
 ```
   Analyze which targets are affected by a list of files.
@@ -228,9 +228,13 @@
   tries really hard to always write something to the output JSON and convey
   errors that way rather than via return codes.
 ```
-### <a name="args"></a>**gn args &lt;out_dir&gt; [\--list] [\--short] [\--args] [\--overrides-only]**
+### <a name="cmd_args"></a>**gn args**: (command-line tool)
 
 ```
+  Display or configure arguments declared by the build.
+
+    gn args <out_dir> [--list] [--short] [--args] [--overrides-only]
+
   See also "gn help buildargs" for a more high-level overview of how
   build arguments work.
 ```
@@ -313,7 +317,7 @@
     given arguments set (which may affect the values of other
     arguments).
 ```
-### <a name="check"></a>**gn check &lt;out_dir&gt; [&lt;label_pattern&gt;] [\--force]**
+### <a name="cmd_check"></a>**gn check &lt;out_dir&gt; [&lt;label_pattern&gt;] [\--force]**
 
 ```
   GN's include header checker validates that the includes for C-like source
@@ -428,13 +432,13 @@
   gn check out/Default "//foo/*
       Check only the files in targets in the //foo directory tree.
 ```
-### <a name="clean"></a>**gn clean &lt;out_dir&gt;**
+### <a name="cmd_clean"></a>**gn clean &lt;out_dir&gt;**
 
 ```
   Deletes the contents of the output directory except for args.gn and
   creates a Ninja build environment sufficient to regenerate the build.
 ```
-### <a name="desc"></a>**gn desc &lt;out_dir&gt; &lt;label or pattern&gt; [&lt;what to show&gt;] [\--blame] "**
+### <a name="cmd_desc"></a>**gn desc &lt;out_dir&gt; &lt;label or pattern&gt; [&lt;what to show&gt;] [\--blame] "**
 #### **[\--format=json]**
 
 ```
@@ -598,7 +602,7 @@
       Shows defines set for the //base:base target, annotated by where
       each one was set from.
 ```
-### <a name="format"></a>**gn format [\--dump-tree] (\--stdin | &lt;build_file&gt;)**
+### <a name="cmd_format"></a>**gn format [\--dump-tree] (\--stdin | &lt;build_file&gt;)**
 
 ```
   Formats .gn file to a standard format.
@@ -641,7 +645,7 @@
   gn format /abspath/some/BUILD.gn
   gn format --stdin
 ```
-### <a name="gen"></a>**gn gen [\--check] [&lt;ide options&gt;] &lt;out_dir&gt;**
+### <a name="cmd_gen"></a>**gn gen [\--check] [&lt;ide options&gt;] &lt;out_dir&gt;**
 
 ```
   Generates ninja files from the current tree and puts them in the given output
@@ -771,7 +775,7 @@
       used for various Clang-based tooling, allowing for the replay of individual
       compilations independent of the build system.
 ```
-### <a name="help"></a>**gn help &lt;anything&gt;**
+### <a name="cmd_help"></a>**gn help &lt;anything&gt;**
 
 ```
   Yo dawg, I heard you like help on your help so I put help on the help in the
@@ -793,7 +797,7 @@
   gn help --markdown all
       Dump all help to stdout in markdown format.
 ```
-### <a name="ls"></a>**gn ls &lt;out_dir&gt; [&lt;label_pattern&gt;] [\--all-toolchains] [\--as=...]**
+### <a name="cmd_ls"></a>**gn ls &lt;out_dir&gt; [&lt;label_pattern&gt;] [\--all-toolchains] [\--as=...]**
 ```
       [--type=...] [--testonly=...]
 
@@ -866,7 +870,7 @@
       Lists all variants of the target //base:base (it may be referenced
       in multiple toolchains).
 ```
-### <a name="meta"></a>**gn meta &lt;out_dir&gt; &lt;target&gt;* \--data=&lt;key&gt;[,&lt;key&gt;*]* [\--walk=&lt;key&gt;[,&lt;key&gt;*]*]**
+### <a name="cmd_meta"></a>**gn meta &lt;out_dir&gt; &lt;target&gt;* \--data=&lt;key&gt;[,&lt;key&gt;*]* [\--walk=&lt;key&gt;[,&lt;key&gt;*]*]**
 ```
        [--rebase=<dest dir>]
 
@@ -921,7 +925,7 @@
       target and all of its dependency tree, rebasing the strings in the `files`
       key onto the source directory of the target's declaration relative to "/".
 ```
-### <a name="path"></a>**gn path &lt;out_dir&gt; &lt;target_one&gt; &lt;target_two&gt;**
+### <a name="cmd_path"></a>**gn path &lt;out_dir&gt; &lt;target_one&gt; &lt;target_two&gt;**
 
 ```
   Finds paths of dependencies between two targets. Each unique path will be
@@ -966,7 +970,7 @@
 ```
   gn path out/Default //base //tools/gn
 ```
-### <a name="refs"></a>**gn refs &lt;out_dir&gt; (&lt;label_pattern&gt;|&lt;label&gt;|&lt;file&gt;|@&lt;response_file&gt;)***
+### <a name="cmd_refs"></a>**gn refs &lt;out_dir&gt; (&lt;label_pattern&gt;|&lt;label&gt;|&lt;file&gt;|@&lt;response_file&gt;)***
 ```
         [--all] [--all-toolchains] [--as=...] [--testonly=...] [--type=...]
 
@@ -1091,7 +1095,7 @@
 ```
 ## <a name="targets"></a>Target declarations
 
-### <a name="action"></a>**action**: Declare a target that runs a script a single time.
+### <a name="func_action"></a>**action**: Declare a target that runs a script a single time.
 
 ```
   This target type allows you to run a script a single time to produce one or
@@ -1177,7 +1181,7 @@
            rebase_path(sources, root_build_dir)
   }
 ```
-### <a name="action_foreach"></a>**action_foreach**: Declare a target that runs a script over a set of files.
+### <a name="func_action_foreach"></a>**action_foreach**: Declare a target that runs a script over a set of files.
 
 ```
   This target type allows you to run a script once-per-file over a set of
@@ -1268,7 +1272,7 @@
         "/{{source_name_part}}.h" ]
   }
 ```
-### <a name="bundle_data"></a>**bundle_data**: [iOS/macOS] Declare a target without output.
+### <a name="func_bundle_data"></a>**bundle_data**: [iOS/macOS] Declare a target without output.
 
 ```
   This target type allows to declare data that is required at runtime. It is
@@ -1322,7 +1326,7 @@
     ]
   }
 ```
-### <a name="copy"></a>**copy**: Declare a target that copies files.
+### <a name="func_copy"></a>**copy**: Declare a target that copies files.
 
 #### **File name handling**
 
@@ -1359,7 +1363,7 @@
     outputs = [ "$target_gen_dir/{{source_file_part}}" ]
   }
 ```
-### <a name="create_bundle"></a>**create_bundle**: [ios/macOS] Build an iOS or macOS bundle.
+### <a name="func_create_bundle"></a>**create_bundle**: [ios/macOS] Build an iOS or macOS bundle.
 
 ```
   This target generates an iOS or macOS bundle (which is a directory with a
@@ -1512,7 +1516,7 @@
     }
   }
 ```
-### <a name="executable"></a>**executable**: Declare an executable target.
+### <a name="func_executable"></a>**executable**: Declare an executable target.
 
 #### **Variables**
 
@@ -1526,7 +1530,7 @@
            output_name, output_extension, public, sources, testonly,
            visibility
 ```
-### <a name="generated_file"></a>**generated_file**: Declare a generated_file target.
+### <a name="func_generated_file"></a>**generated_file**: Declare a generated_file target.
 
 ```
   Writes data value(s) to disk on resolution. This target type mirrors some
@@ -1658,7 +1662,7 @@
   Deps: data_deps, deps, public_deps
   Dependent configs: all_dependent_configs, public_configs
 ```
-### <a name="group"></a>**group**: Declare a named group of targets.
+### <a name="func_group"></a>**group**: Declare a named group of targets.
 
 ```
   This target type allows you to create meta-targets that just collect a set of
@@ -1683,7 +1687,7 @@
     ]
   }
 ```
-### <a name="loadable_module"></a>**loadable_module**: Declare a loadable module target.
+### <a name="func_loadable_module"></a>**loadable_module**: Declare a loadable module target.
 
 ```
   This target type allows you to create an object file that is (and can only
@@ -1707,7 +1711,7 @@
            output_name, output_extension, public, sources, testonly,
            visibility
 ```
-### <a name="shared_library"></a>**shared_library**: Declare a shared library target.
+### <a name="func_shared_library"></a>**shared_library**: Declare a shared library target.
 
 ```
   A shared library will be specified on the linker line for targets listing the
@@ -1729,7 +1733,7 @@
            output_name, output_extension, public, sources, testonly,
            visibility
 ```
-### <a name="source_set"></a>**source_set**: Declare a source set target.
+### <a name="func_source_set"></a>**source_set**: Declare a source set target.
 
 ```
   A source set is a collection of sources that get compiled, but are not linked
@@ -1766,7 +1770,7 @@
            output_name, output_extension, public, sources, testonly,
            visibility
 ```
-### <a name="static_library"></a>**static_library**: Declare a static library target.
+### <a name="func_static_library"></a>**static_library**: Declare a static library target.
 
 ```
   Make a ".a" / ".lib" file.
@@ -1789,7 +1793,7 @@
            output_name, output_extension, public, sources, testonly,
            visibility
 ```
-### <a name="target"></a>**target**: Declare an target with the given programmatic type.
+### <a name="func_target"></a>**target**: Declare an target with the given programmatic type.
 
 ```
   target(target_type_string, target_name_string) { ... }
@@ -1823,7 +1827,7 @@
 ```
 ## <a name="functions"></a>Buildfile functions
 
-### <a name="assert"></a>**assert**: Assert an expression is true at generation time.
+### <a name="func_assert"></a>**assert**: Assert an expression is true at generation time.
 
 ```
   assert(<condition> [, <error string>])
@@ -1839,7 +1843,7 @@
   assert(is_win)
   assert(defined(sources), "Sources must be defined");
 ```
-### <a name="config"></a>**config**: Defines a configuration object.
+### <a name="func_config"></a>**config**: Defines a configuration object.
 
 ```
   Configuration objects can be applied to targets and specify sets of compiler
@@ -1886,7 +1890,7 @@
     configs = [ ":myconfig" ]
   }
 ```
-### <a name="declare_args"></a>**declare_args**: Declare build arguments.
+### <a name="func_declare_args"></a>**declare_args**: Declare build arguments.
 
 ```
   Introduces the given arguments into the current scope. If they are not
@@ -1946,7 +1950,7 @@
   This also sets the teleporter, but it's already defaulted to on so it will
   have no effect.
 ```
-### <a name="defined"></a>**defined**: Returns whether an identifier is defined.
+### <a name="func_defined"></a>**defined**: Returns whether an identifier is defined.
 
 ```
   Returns true if the given argument is defined. This is most useful in
@@ -1980,7 +1984,7 @@
     }
   }
 ```
-### <a name="exec_script"></a>**exec_script**: Synchronously run a script and return the output.
+### <a name="func_exec_script"></a>**exec_script**: Synchronously run a script and return the output.
 
 ```
   exec_script(filename,
@@ -2040,7 +2044,7 @@
   # result.
   exec_script("//foo/bar/myscript.py")
 ```
-### <a name="foreach"></a>**foreach**: Iterate over a list.
+### <a name="func_foreach"></a>**foreach**: Iterate over a list.
 
 ```
     foreach(<loop_var>, <list>) {
@@ -2074,7 +2078,7 @@
   b
   c
 ```
-### <a name="forward_variables_from"></a>**forward_variables_from**: Copies variables from a different scope.
+### <a name="func_forward_variables_from"></a>**forward_variables_from**: Copies variables from a different scope.
 
 ```
   forward_variables_from(from_scope, variable_list_or_star,
@@ -2156,7 +2160,7 @@
     }
   }
 ```
-### <a name="get_label_info"></a>**get_label_info**: Get an attribute from a target's label.
+### <a name="func_get_label_info"></a>**get_label_info**: Get an attribute from a target's label.
 
 ```
   get_label_info(target_label, what)
@@ -2220,7 +2224,7 @@
   get_label_info("//foo/bar:baz", "target_gen_dir")
   # Returns string "//out/Debug/gen/foo/bar".
 ```
-### <a name="get_path_info"></a>**get_path_info**: Extract parts of a file or directory name.
+### <a name="func_get_path_info"></a>**get_path_info**: Extract parts of a file or directory name.
 
 ```
   get_path_info(input, what)
@@ -2300,7 +2304,7 @@
   # Extract the source-absolute directory name,
   result = get_path_info(get_path_info(path, "dir"), "abspath"
 ```
-### <a name="get_target_outputs"></a>**get_target_outputs**: [file list] Get the list of outputs from a target.
+### <a name="func_get_target_outputs"></a>**get_target_outputs**: [file list] Get the list of outputs from a target.
 
 ```
   get_target_outputs(target_label)
@@ -2357,7 +2361,7 @@
     sources = get_target_outputs(":my_action")
   }
 ```
-### <a name="getenv"></a>**getenv**: Get an environment variable.
+### <a name="func_getenv"></a>**getenv**: Get an environment variable.
 
 ```
   value = getenv(env_var_name)
@@ -2377,7 +2381,7 @@
 ```
   home_dir = getenv("HOME")
 ```
-### <a name="import"></a>**import**: Import a file into the current scope.
+### <a name="func_import"></a>**import**: Import a file into the current scope.
 
 ```
   The import command loads the rules and variables resulting from executing the
@@ -2412,7 +2416,7 @@
   # Looks in the current directory.
   import("my_vars.gni")
 ```
-### <a name="not_needed"></a>**not_needed**: Mark variables from scope as not needed.
+### <a name="func_not_needed"></a>**not_needed**: Mark variables from scope as not needed.
 
 ```
   not_needed(variable_list_or_star, variable_to_ignore_list = [])
@@ -2433,7 +2437,7 @@
   not_needed(invoker, "*", [ "config" ])
   not_needed(invoker, [ "data_deps", "deps" ])
 ```
-### <a name="pool"></a>**pool**: Defines a pool object.
+### <a name="func_pool"></a>**pool**: Defines a pool object.
 
 ```
   Pool objects can be applied to a tool to limit the parallelism of the
@@ -2477,7 +2481,7 @@
     }
   }
 ```
-### <a name="print"></a>**print**: Prints to the console.
+### <a name="func_print"></a>**print**: Prints to the console.
 
 ```
   Prints all arguments to the console separated by spaces. A newline is
@@ -2497,7 +2501,7 @@
 
   print(sources, deps)
 ```
-### <a name="process_file_template"></a>**process_file_template**: Do template expansion over a list of files.
+### <a name="func_process_file_template"></a>**process_file_template**: Do template expansion over a list of files.
 
 ```
   process_file_template(source_list, template)
@@ -2542,7 +2546,7 @@
       "//out/Debug/bar.cc"
       "//out/Debug/bar.h" ]
 ```
-### <a name="read_file"></a>**read_file**: Read a file into a variable.
+### <a name="func_read_file"></a>**read_file**: Read a file into a variable.
 
 ```
   read_file(filename, input_conversion)
@@ -2566,7 +2570,7 @@
 ```
   lines = read_file("foo.txt", "list lines")
 ```
-### <a name="rebase_path"></a>**rebase_path**: Rebase a file or directory to another location.
+### <a name="func_rebase_path"></a>**rebase_path**: Rebase a file or directory to another location.
 
 ```
   converted = rebase_path(input,
@@ -2662,7 +2666,7 @@
     ] + rebase_path(sources, root_build_dir)
   }
 ```
-### <a name="set_default_toolchain"></a>**set_default_toolchain**: Sets the default toolchain name.
+### <a name="func_set_default_toolchain"></a>**set_default_toolchain**: Sets the default toolchain name.
 
 ```
   set_default_toolchain(toolchain_label)
@@ -2702,7 +2706,7 @@
     set_default_toolchain("//toolchains:32")
   }
 ```
-### <a name="set_defaults"></a>**set_defaults**: Set default values for a target type.
+### <a name="func_set_defaults"></a>**set_defaults**: Set default values for a target type.
 
 ```
   set_defaults(<target_type_name>) { <values...> }
@@ -2736,7 +2740,7 @@
     configs -= [ "//tools/mything:settings" ]
   }
 ```
-### <a name="set_sources_assignment_filter"></a>**set_sources_assignment_filter**: Set a pattern to filter source files.
+### <a name="func_set_sources_assignment_filter"></a>**set_sources_assignment_filter**: Set a pattern to filter source files.
 
 ```
   The sources assignment filter is a list of patterns that remove files from
@@ -2800,7 +2804,7 @@
   print(sources)
   # Will print [ "a.cc" ]. b_win one was filtered out.
 ```
-### <a name="split_list"></a>**split_list**: Splits a list into N different sub-lists.
+### <a name="func_split_list"></a>**split_list**: Splits a list into N different sub-lists.
 
 ```
   result = split_list(input, n)
@@ -2823,7 +2827,7 @@
   Will print:
     [[1, 2], [3, 4], [5, 6]
 ```
-### <a name="string_replace"></a>**string_replace**: Replaces substring in the given string.
+### <a name="func_string_replace"></a>**string_replace**: Replaces substring in the given string.
 
 ```
   result = string_replace(str, old, new[, max])
@@ -2844,7 +2848,7 @@
   Will print:
     Hello, GN!
 ```
-### <a name="template"></a>**template**: Define a template rule.
+### <a name="func_template"></a>**template**: Define a template rule.
 
 ```
   A template defines a custom name that acts like a function. It provides a way
@@ -3007,7 +3011,7 @@
     deps = [ ":foo_idl_files" ]
   }
 ```
-### <a name="tool"></a>**tool**: Specify arguments to a toolchain tool.
+### <a name="func_tool"></a>**tool**: Specify arguments to a toolchain tool.
 
 #### **Usage**
 
@@ -3474,7 +3478,7 @@
     }
   };
 ```
-### <a name="toolchain"></a>**toolchain**: Defines a toolchain.
+### <a name="func_toolchain"></a>**toolchain**: Defines a toolchain.
 
 ```
   A toolchain is a set of commands and build flags used to compile the source
@@ -3628,7 +3632,7 @@
       }
     }
 ```
-### <a name="write_file"></a>**write_file**: Write a file to disk.
+### <a name="func_write_file"></a>**write_file**: Write a file to disk.
 
 ```
   write_file(filename, data, output_conversion = "")
@@ -3659,7 +3663,7 @@
 ```
 ## <a name="predefined_variables"></a>Built-in predefined variables
 
-### <a name="current_cpu"></a>**current_cpu**: The processor architecture of the current toolchain.
+### <a name="var_current_cpu"></a>**current_cpu**: The processor architecture of the current toolchain.
 
 ```
   The build configuration usually sets this value based on the value of
@@ -3673,7 +3677,7 @@
 
   See "gn help target_cpu" for a list of common values returned.
 ```
-### <a name="current_os"></a>**current_os**: The operating system of the current toolchain.
+### <a name="var_current_os"></a>**current_os**: The operating system of the current toolchain.
 
 ```
   The build configuration usually sets this value based on the value of
@@ -3687,7 +3691,7 @@
 
   See "gn help target_os" for a list of common values returned.
 ```
-### <a name="current_toolchain"></a>**current_toolchain**: Label of the current toolchain.
+### <a name="var_current_toolchain"></a>**current_toolchain**: Label of the current toolchain.
 
 ```
   A fully-qualified label representing the current toolchain. You can use this
@@ -3702,13 +3706,13 @@
     executable("output_thats_64_bit_only") {
       ...
 ```
-### <a name="default_toolchain"></a>**default_toolchain**: [string] Label of the default toolchain.
+### <a name="var_default_toolchain"></a>**default_toolchain**: [string] Label of the default toolchain.
 
 ```
   A fully-qualified label representing the default toolchain, which may not
   necessarily be the current one (see "current_toolchain").
 ```
-### <a name="host_cpu"></a>**host_cpu**: The processor architecture that GN is running on.
+### <a name="var_host_cpu"></a>**host_cpu**: The processor architecture that GN is running on.
 
 ```
   This is value is exposed so that cross-compile toolchains can access the host
@@ -3726,7 +3730,7 @@
   - "x64"
   - "x86"
 ```
-### <a name="host_os"></a>**host_os**: [string] The operating system that GN is running on.
+### <a name="var_host_os"></a>**host_os**: [string] The operating system that GN is running on.
 
 ```
   This value is exposed so that cross-compiles can access the host build
@@ -3743,7 +3747,7 @@
   - "mac"
   - "win"
 ```
-### <a name="invoker"></a>**invoker**: [string] The invoking scope inside a template.
+### <a name="var_invoker"></a>**invoker**: [string] The invoking scope inside a template.
 
 ```
   Inside a template invocation, this variable refers to the scope of the
@@ -3774,14 +3778,14 @@
     bar = 123
   }
 ```
-### <a name="python_path"></a>**python_path**: Absolute path of Python.
+### <a name="var_python_path"></a>**python_path**: Absolute path of Python.
 
 ```
   Normally used in toolchain definitions if running some command requires
   Python. You will normally not need this when invoking scripts since GN
   automatically finds it for you.
 ```
-### <a name="root_build_dir"></a>**root_build_dir**: [string] Directory where build commands are run.
+### <a name="var_root_build_dir"></a>**root_build_dir**: [string] Directory where build commands are run.
 
 ```
   This is the root build output directory which will be the current directory
@@ -3790,7 +3794,7 @@
   Most often this is used with rebase_path (see "gn help rebase_path") to
   convert arguments to be relative to a script's current directory.
 ```
-### <a name="root_gen_dir"></a>**root_gen_dir**: Directory for the toolchain's generated files.
+### <a name="var_root_gen_dir"></a>**root_gen_dir**: Directory for the toolchain's generated files.
 
 ```
   Absolute path to the root of the generated output directory tree for the
@@ -3805,7 +3809,7 @@
   See also "target_gen_dir" which is usually a better location for generated
   files. It will be inside the root generated dir.
 ```
-### <a name="root_out_dir"></a>**root_out_dir**: [string] Root directory for toolchain output files.
+### <a name="var_root_out_dir"></a>**root_out_dir**: [string] Root directory for toolchain output files.
 
 ```
   Absolute path to the root of the output directory tree for the current
@@ -3831,7 +3835,7 @@
     args = [ "-o", rebase_path(root_out_dir, root_build_dir) ]
   }
 ```
-### <a name="target_cpu"></a>**target_cpu**: The desired cpu architecture for the build.
+### <a name="var_target_cpu"></a>**target_cpu**: The desired cpu architecture for the build.
 
 ```
   This value should be used to indicate the desired architecture for the
@@ -3860,7 +3864,7 @@
   - "arm64"
   - "mipsel"
 ```
-### <a name="target_gen_dir"></a>**target_gen_dir**: Directory for a target's generated files.
+### <a name="var_target_gen_dir"></a>**target_gen_dir**: Directory for a target's generated files.
 
 ```
   Absolute path to the target's generated file directory. This will be the
@@ -3884,7 +3888,7 @@
     args = [ "-o", rebase_path(target_gen_dir, root_build_dir) ]"
   }
 ```
-### <a name="target_name"></a>**target_name**: [string] The name of the current target.
+### <a name="var_target_name"></a>**target_name**: [string] The name of the current target.
 
 ```
   Inside a target or template invocation, this variable refers to the name
@@ -3923,7 +3927,7 @@
   my_template("space_ray") {
   }
 ```
-### <a name="target_os"></a>**target_os**: The desired operating system for the build.
+### <a name="var_target_os"></a>**target_os**: The desired operating system for the build.
 
 ```
   This value should be used to indicate the desired operating system for the
@@ -3964,7 +3968,7 @@
   - "mac"
   - "win"
 ```
-### <a name="target_out_dir"></a>**target_out_dir**: [string] Directory for target output files.
+### <a name="var_target_out_dir"></a>**target_out_dir**: [string] Directory for target output files.
 
 ```
   Absolute path to the target's generated file directory. If your current
@@ -3989,7 +3993,7 @@
 ```
 ## <a name="target_variables"></a>Variables you set in targets
 
-### <a name="all_dependent_configs"></a>**all_dependent_configs**: Configs to be forced on dependents.
+### <a name="var_all_dependent_configs"></a>**all_dependent_configs**: Configs to be forced on dependents.
 
 ```
   A list of config labels.
@@ -4025,7 +4029,7 @@
      "deps" list. If a dependency is public, they will be applied
      recursively.
 ```
-### <a name="allow_circular_includes_from"></a>**allow_circular_includes_from**: Permit includes from deps.
+### <a name="var_allow_circular_includes_from"></a>**allow_circular_includes_from**: Permit includes from deps.
 
 ```
   A list of target labels. Must be a subset of the target's "deps". These
@@ -4098,7 +4102,7 @@
     public_deps = [ ":c" ]
   }
 ```
-### <a name="arflags"></a>**arflags**: Arguments passed to static_library archiver.
+### <a name="var_arflags"></a>**arflags**: Arguments passed to static_library archiver.
 
 ```
   A list of flags passed to the archive/lib command that creates static
@@ -4131,7 +4135,7 @@
      "deps" list. If a dependency is public, they will be applied
      recursively.
 ```
-### <a name="args"></a>**args**: Arguments passed to an action.
+### <a name="var_args"></a>**args**: (target variable) Arguments passed to an action.
 
 ```
   For action and action_foreach targets, args is the list of arguments to pass
@@ -4140,7 +4144,7 @@
 
   See also "gn help action" and "gn help action_foreach".
 ```
-### <a name="asmflags"></a>**asmflags**: Flags passed to the assembler.
+### <a name="var_asmflags"></a>**asmflags**: Flags passed to the assembler.
 
 ```
   A list of strings.
@@ -4166,7 +4170,7 @@
      "deps" list. If a dependency is public, they will be applied
      recursively.
 ```
-### <a name="assert_no_deps"></a>**assert_no_deps**: Ensure no deps on these targets.
+### <a name="var_assert_no_deps"></a>**assert_no_deps**: Ensure no deps on these targets.
 
 ```
   A list of label patterns.
@@ -4206,7 +4210,7 @@
     ]
   }
 ```
-### <a name="bundle_contents_dir"></a>**bundle_contents_dir**: Expansion of {{bundle_contents_dir}} in
+### <a name="var_bundle_contents_dir"></a>**bundle_contents_dir**: Expansion of {{bundle_contents_dir}} in
 ```
                              create_bundle.
 
@@ -4218,7 +4222,7 @@
 
   See "gn help bundle_root_dir" for examples.
 ```
-### <a name="bundle_deps_filter"></a>**bundle_deps_filter**: [label list] A list of labels that are filtered out.
+### <a name="var_bundle_deps_filter"></a>**bundle_deps_filter**: [label list] A list of labels that are filtered out.
 
 ```
   A list of target labels.
@@ -4249,7 +4253,7 @@
     ]
   }
 ```
-### <a name="bundle_executable_dir"></a>**bundle_executable_dir**: Expansion of {{bundle_executable_dir}} in
+### <a name="var_bundle_executable_dir"></a>**bundle_executable_dir**: Expansion of {{bundle_executable_dir}} in
 ```
                               create_bundle.
 
@@ -4261,7 +4265,7 @@
 
   See "gn help bundle_root_dir" for examples.
 ```
-### <a name="bundle_plugins_dir"></a>**bundle_plugins_dir**: Expansion of {{bundle_plugins_dir}} in create_bundle.
+### <a name="var_bundle_plugins_dir"></a>**bundle_plugins_dir**: Expansion of {{bundle_plugins_dir}} in create_bundle.
 
 ```
   A string corresponding to a path in $root_build_dir.
@@ -4272,7 +4276,7 @@
 
   See "gn help bundle_root_dir" for examples.
 ```
-### <a name="bundle_resources_dir"></a>**bundle_resources_dir**: Expansion of {{bundle_resources_dir}} in
+### <a name="var_bundle_resources_dir"></a>**bundle_resources_dir**: Expansion of {{bundle_resources_dir}} in
 ```
                              create_bundle.
 
@@ -4284,7 +4288,7 @@
 
   See "gn help bundle_root_dir" for examples.
 ```
-### <a name="bundle_root_dir"></a>**bundle_root_dir**: Expansion of {{bundle_root_dir}} in create_bundle.
+### <a name="var_bundle_root_dir"></a>**bundle_root_dir**: Expansion of {{bundle_root_dir}} in create_bundle.
 
 ```
   A string corresponding to a path in root_build_dir.
@@ -4311,7 +4315,7 @@
     bundle_plugins_dir = "${bundle_contents_dir}/PlugIns"
   }
 ```
-### <a name="cflags*"></a>**cflags***: Flags passed to the C compiler.
+### <a name="var_cflags"></a>**cflags***: Flags passed to the C compiler.
 
 ```
   A list of strings.
@@ -4344,7 +4348,7 @@
      "deps" list. If a dependency is public, they will be applied
      recursively.
 ```
-### <a name="cflags*"></a>**cflags***: Flags passed to the C compiler.
+### <a name="var_cflags_c"></a>**cflags***: Flags passed to the C compiler.
 
 ```
   A list of strings.
@@ -4377,7 +4381,7 @@
      "deps" list. If a dependency is public, they will be applied
      recursively.
 ```
-### <a name="cflags*"></a>**cflags***: Flags passed to the C compiler.
+### <a name="var_cflags_cc"></a>**cflags***: Flags passed to the C compiler.
 
 ```
   A list of strings.
@@ -4410,7 +4414,7 @@
      "deps" list. If a dependency is public, they will be applied
      recursively.
 ```
-### <a name="cflags*"></a>**cflags***: Flags passed to the C compiler.
+### <a name="var_cflags_objc"></a>**cflags***: Flags passed to the C compiler.
 
 ```
   A list of strings.
@@ -4443,7 +4447,7 @@
      "deps" list. If a dependency is public, they will be applied
      recursively.
 ```
-### <a name="cflags*"></a>**cflags***: Flags passed to the C compiler.
+### <a name="var_cflags_objcc"></a>**cflags***: Flags passed to the C compiler.
 
 ```
   A list of strings.
@@ -4476,7 +4480,7 @@
      "deps" list. If a dependency is public, they will be applied
      recursively.
 ```
-### <a name="check_includes"></a>**check_includes**: [boolean] Controls whether a target's files are checked.
+### <a name="var_check_includes"></a>**check_includes**: [boolean] Controls whether a target's files are checked.
 
 ```
   When true (the default), the "gn check" command (as well as "gn gen" with the
@@ -4504,7 +4508,7 @@
     ...
   }
 ```
-### <a name="code_signing_args"></a>**code_signing_args**: [string list] Arguments passed to code signing script.
+### <a name="var_code_signing_args"></a>**code_signing_args**: [string list] Arguments passed to code signing script.
 
 ```
   For create_bundle targets, code_signing_args is the list of arguments to pass
@@ -4513,7 +4517,7 @@
 
   See also "gn help create_bundle".
 ```
-### <a name="code_signing_outputs"></a>**code_signing_outputs**: [file list] Output files for code signing step.
+### <a name="var_code_signing_outputs"></a>**code_signing_outputs**: [file list] Output files for code signing step.
 
 ```
   Outputs from the code signing step of a create_bundle target. Must refer to
@@ -4521,7 +4525,7 @@
 
   See also "gn help create_bundle".
 ```
-### <a name="code_signing_script"></a>**code_signing_script**: [file name] Script for code signing."
+### <a name="var_code_signing_script"></a>**code_signing_script**: [file name] Script for code signing."
 
 ```
   An absolute or buildfile-relative file name of a Python script to run for a
@@ -4529,7 +4533,7 @@
 
   See also "gn help create_bundle".
 ```
-### <a name="code_signing_sources"></a>**code_signing_sources**: [file list] Sources for code signing step.
+### <a name="var_code_signing_sources"></a>**code_signing_sources**: [file list] Sources for code signing step.
 
 ```
   A list of files used as input for code signing script step of a create_bundle
@@ -4538,7 +4542,7 @@
 
   See also "gn help create_bundle".
 ```
-### <a name="complete_static_lib"></a>**complete_static_lib**: [boolean] Links all deps into a static library.
+### <a name="var_complete_static_lib"></a>**complete_static_lib**: [boolean] Links all deps into a static library.
 
 ```
   A static library normally doesn't include code from dependencies, but instead
@@ -4573,7 +4577,7 @@
     deps = [ "bar" ]
   }
 ```
-### <a name="configs"></a>**configs**: Configs applying to this target or config.
+### <a name="var_configs"></a>**configs**: Configs applying to this target or config.
 
 ```
   A list of config labels.
@@ -4666,13 +4670,13 @@
     }
   }
 ```
-### <a name="contents"></a>**contents**: Contents to write to file.
+### <a name="var_contents"></a>**contents**: Contents to write to file.
 
 ```
   The contents of the file for a generated_file target.
   See "gn help generated_file".
 ```
-### <a name="data"></a>**data**: Runtime data file dependencies.
+### <a name="var_data"></a>**data**: Runtime data file dependencies.
 
 ```
   Lists files or directories required to run the given target. These are
@@ -4701,7 +4705,7 @@
 
   See "gn help runtime_deps" for how these are used.
 ```
-### <a name="data_deps"></a>**data_deps**: Non-linked dependencies.
+### <a name="var_data_deps"></a>**data_deps**: Non-linked dependencies.
 
 ```
   A list of target labels.
@@ -4727,7 +4731,7 @@
     data_deps = [ "//plugins:my_runtime_plugin" ]
   }
 ```
-### <a name="data_keys"></a>**data_keys**: Keys from which to collect metadata.
+### <a name="var_data_keys"></a>**data_keys**: Keys from which to collect metadata.
 
 ```
   These keys are used to identify metadata to collect. If a walked target
@@ -4736,7 +4740,7 @@
 
   See "gn help generated_file".
 ```
-### <a name="defines"></a>**defines**: C preprocessor defines.
+### <a name="var_defines"></a>**defines**: C preprocessor defines.
 
 ```
   A list of strings
@@ -4768,7 +4772,7 @@
 ```
   defines = [ "AWESOME_FEATURE", "LOG_LEVEL=3" ]
 ```
-### <a name="depfile"></a>**depfile**: [string] File name for input dependencies for actions.
+### <a name="var_depfile"></a>**depfile**: [string] File name for input dependencies for actions.
 
 ```
   If nonempty, this string specifies that the current action or action_foreach
@@ -4807,7 +4811,7 @@
     args = [ "{{source}}", "-o", depfile ]
   }
 ```
-### <a name="deps"></a>**deps**: Private linked dependencies.
+### <a name="var_deps"></a>**deps**: Private linked dependencies.
 
 ```
   A list of target labels.
@@ -4840,7 +4844,7 @@
 
   See also "public_deps".
 ```
-### <a name="friend"></a>**friend**: Allow targets to include private headers.
+### <a name="var_friend"></a>**friend**: Allow targets to include private headers.
 
 ```
   A list of label patterns (see "gn help label_pattern") that allow dependent
@@ -4901,7 +4905,7 @@
     ]
   }
 ```
-### <a name="include_dirs"></a>**include_dirs**: Additional include directories.
+### <a name="var_include_dirs"></a>**include_dirs**: Additional include directories.
 
 ```
   A list of source directories.
@@ -4933,7 +4937,7 @@
 ```
   include_dirs = [ "src/include", "//third_party/foo" ]
 ```
-### <a name="inputs"></a>**inputs**: Additional compile-time dependencies.
+### <a name="var_inputs"></a>**inputs**: Additional compile-time dependencies.
 
 ```
   Inputs are compile-time dependencies of the current target. This means that
@@ -5003,7 +5007,7 @@
     inputs = [ "input.data" ]
   }
 ```
-### <a name="ldflags"></a>**ldflags**: Flags passed to the linker.
+### <a name="var_ldflags"></a>**ldflags**: Flags passed to the linker.
 
 ```
   A list of strings.
@@ -5035,7 +5039,7 @@
      "deps" list. If a dependency is public, they will be applied
      recursively.
 ```
-### <a name="lib_dirs"></a>**lib_dirs**: Additional library directories.
+### <a name="var_lib_dirs"></a>**lib_dirs**: Additional library directories.
 
 ```
   A list of directories.
@@ -5078,7 +5082,7 @@
 ```
   lib_dirs = [ "/usr/lib/foo", "lib/doom_melon" ]
 ```
-### <a name="libs"></a>**libs**: Additional libraries to link.
+### <a name="var_libs"></a>**libs**: Additional libraries to link.
 
 ```
   A list of library names or library paths.
@@ -5151,7 +5155,7 @@
   On Linux:
     libs = [ "ld" ]
 ```
-### <a name="metadata"></a>**metadata**: Metadata of this target.
+### <a name="var_metadata"></a>**metadata**: Metadata of this target.
 
 ```
   Metadata is a collection of keys and values relating to a particular target.
@@ -5173,13 +5177,13 @@
     }
   }
 ```
-### <a name=""output_conversion"></a>**"output_conversion**: Data format for generated_file targets.
+### <a name="var_output_conversion"></a>**"output_conversion**: Data format for generated_file targets.
 
 ```
   Controls how the "contents" of a generated_file target is formatted.
   See "gn help output_conversion".
 ```
-### <a name="output_dir"></a>**output_dir**: [directory] Directory to put output file in.
+### <a name="var_output_dir"></a>**output_dir**: [directory] Directory to put output file in.
 
 ```
   For library and executable targets, overrides the directory for the final
@@ -5206,7 +5210,7 @@
     ...
   }
 ```
-### <a name="output_extension"></a>**output_extension**: Value to use for the output's file extension.
+### <a name="var_output_extension"></a>**output_extension**: Value to use for the output's file extension.
 
 ```
   Normally the file extension for a target is based on the target type and the
@@ -5242,7 +5246,7 @@
     }
   }
 ```
-### <a name="output_name"></a>**output_name**: Define a name for the output file other than the default.
+### <a name="var_output_name"></a>**output_name**: Define a name for the output file other than the default.
 
 ```
   Normally the output name of a target will be based on the target name, so the
@@ -5268,7 +5272,7 @@
     output_name = "fluffy_bunny"
   }
 ```
-### <a name="output_prefix_override"></a>**output_prefix_override**: Don't use prefix for output name.
+### <a name="var_output_prefix_override"></a>**output_prefix_override**: Don't use prefix for output name.
 
 ```
   A boolean that overrides the output prefix for a target. Defaults to false.
@@ -5292,7 +5296,7 @@
     ...
   }
 ```
-### <a name="outputs"></a>**outputs**: Output files for actions and copy targets.
+### <a name="var_outputs"></a>**outputs**: Output files for actions and copy targets.
 
 ```
   Outputs is valid for "copy", "action", and "action_foreach" target types and
@@ -5315,7 +5319,7 @@
     Action targets (excluding action_foreach) must list literal output file(s)
     with no source expansions. See "gn help action".
 ```
-### <a name="partial_info_plist"></a>**partial_info_plist**: [filename] Path plist from asset catalog compiler.
+### <a name="var_partial_info_plist"></a>**partial_info_plist**: [filename] Path plist from asset catalog compiler.
 
 ```
   Valid for create_bundle target, corresponds to the path for the partial
@@ -5325,7 +5329,7 @@
   The file will be generated regardless of whether the asset compiler has
   been invoked or not. See "gn help create_bundle".
 ```
-### <a name="pool"></a>**pool**: Label of the pool used by the action.
+### <a name="var_pool"></a>**pool**: Label of the pool used by the action.
 
 ```
   A fully-qualified label representing the pool that will be used for the
@@ -5340,7 +5344,7 @@
     ...
   }
 ```
-### <a name="precompiled_header"></a>**precompiled_header**: [string] Header file to precompile.
+### <a name="var_precompiled_header"></a>**precompiled_header**: [string] Header file to precompile.
 
 ```
   Precompiled headers will be used when a target specifies this value, or a
@@ -5408,19 +5412,19 @@
       configs += [ ":use_precompiled_headers" ]
       ...
 ```
-### <a name="precompiled_header_type"></a>**precompiled_header_type**: [string] "gcc" or "msvc".
+### <a name="var_precompiled_header_type"></a>**precompiled_header_type**: [string] "gcc" or "msvc".
 
 ```
   See "gn help precompiled_header".
 ```
-### <a name="precompiled_source"></a>**precompiled_source**: [file name] Source file to precompile.
+### <a name="var_precompiled_source"></a>**precompiled_source**: [file name] Source file to precompile.
 
 ```
   The source file that goes along with the precompiled_header when using
   "msvc"-style precompiled headers. It will be implicitly added to the sources
   of the target. See "gn help precompiled_header".
 ```
-### <a name="product_type"></a>**product_type**: Product type for Xcode projects.
+### <a name="var_product_type"></a>**product_type**: Product type for Xcode projects.
 
 ```
   Correspond to the type of the product of a create_bundle target. Only
@@ -5429,7 +5433,7 @@
   When generating Xcode project files, only create_bundle target with a
   non-empty product_type will have a corresponding target in Xcode project.
 ```
-### <a name="public"></a>**public**: Declare public header files for a target.
+### <a name="var_public"></a>**public**: Declare public header files for a target.
 
 ```
   A list of files that other targets can include. These permissions are checked
@@ -5482,7 +5486,7 @@
     # This allows starting compilation in dependent targets earlier.
     public = []
 ```
-### <a name="public_configs"></a>**public_configs**: Configs to be applied on dependents.
+### <a name="var_public_configs"></a>**public_configs**: Configs to be applied on dependents.
 
 ```
   A list of config labels.
@@ -5573,7 +5577,7 @@
      "deps" list. If a dependency is public, they will be applied
      recursively.
 ```
-### <a name="public_deps"></a>**public_deps**: Declare public dependencies.
+### <a name="var_public_deps"></a>**public_deps**: Declare public dependencies.
 
 ```
   Public dependencies are like private dependencies (see "gn help deps") but
@@ -5624,7 +5628,7 @@
     public_deps = [ ":c" ]
   }
 ```
-### <a name="rebase"></a>**rebase**: Rebase collected metadata as files.
+### <a name="var_rebase"></a>**rebase**: Rebase collected metadata as files.
 
 ```
   A boolean that triggers a rebase of collected metadata strings based on their
@@ -5640,7 +5644,7 @@
 
   See also "gn help generated_file".
 ```
-### <a name="response_file_contents"></a>**response_file_contents**: Contents of a response file for actions.
+### <a name="var_response_file_contents"></a>**response_file_contents**: Contents of a response file for actions.
 
 ```
   Sometimes the arguments passed to a script can be too long for the system's
@@ -5678,14 +5682,14 @@
     ]
   }
 ```
-### <a name="script"></a>**script**: Script file for actions.
+### <a name="var_script"></a>**script**: Script file for actions.
 
 ```
   An absolute or buildfile-relative file name of a Python script to run for a
   action and action_foreach targets (see "gn help action" and "gn help
   action_foreach").
 ```
-### <a name="sources"></a>**sources**: Source files for a target
+### <a name="var_sources"></a>**sources**: Source files for a target
 
 ```
   A list of files. Non-absolute paths will be resolved relative to the current
@@ -5723,7 +5727,7 @@
   copy
     The source are the source files to copy.
 ```
-### <a name="testonly"></a>**testonly**: Declares a target must only be used for testing.
+### <a name="var_testonly"></a>**testonly**: Declares a target must only be used for testing.
 
 ```
   Boolean. Defaults to false.
@@ -5744,7 +5748,7 @@
     ...
   }
 ```
-### <a name="visibility"></a>**visibility**: A list of labels that can depend on a target.
+### <a name="var_visibility"></a>**visibility**: A list of labels that can depend on a target.
 
 ```
   A list of labels and label patterns that define which targets can depend on
@@ -5799,7 +5803,7 @@
   any targets in "//bar/" and any subdirectory thereof.
     visibility = [ "./*", "//bar/*" ]
 ```
-### <a name="walk_keys"></a>**walk_keys**: Key(s) for managing the metadata collection walk.
+### <a name="var_walk_keys"></a>**walk_keys**: Key(s) for managing the metadata collection walk.
 
 ```
   Defaults to [].
@@ -5813,7 +5817,7 @@
 
   See "gn help generated_file".
 ```
-### <a name="write_runtime_deps"></a>**write_runtime_deps**: Writes the target's runtime_deps to the given path.
+### <a name="var_write_runtime_deps"></a>**write_runtime_deps**: Writes the target's runtime_deps to the given path.
 
 ```
   Does not synchronously write the file, but rather schedules it to be written
@@ -5833,7 +5837,7 @@
   same as requesting the runtime deps be written on the command line (see "gn
   help --runtime-deps-list-file").
 ```
-### <a name="xcode_extra_attributes"></a>**xcode_extra_attributes**: [scope] Extra attributes for Xcode projects.
+### <a name="var_xcode_extra_attributes"></a>**xcode_extra_attributes**: [scope] Extra attributes for Xcode projects.
 
 ```
   The value defined in this scope will be copied to the EXTRA_ATTRIBUTES
@@ -5842,7 +5846,7 @@
 
   See "gn help create_bundle" for more information.
 ```
-### <a name="test_application_name"></a>**test_application_name**: Test application name for unit or ui test target.
+### <a name="var_xcode_test_application_name"></a>**xcode_test_application_name**: Name for Xcode test target.
 
 ```
   Each unit and ui test target must have a test application target, and this
@@ -6345,11 +6349,13 @@
   within the second, and vice versa. Note that this means inherited scopes are
   always unequal by definition.
 ```
-### <a name="input_conversion"></a>**Input and output conversions are arguments to file and process functions**
-#### **that specify how to convert data to or from external formats. The possible**
-#### **values for parameters specifying conversions are**:
+### <a name="input_conversion"></a>**Input and output conversion**
 
 ```
+  Input and output conversions are arguments to file and process functions
+  that specify how to convert data to or from external formats. The possible
+  values for parameters specifying conversions are:
+
   "" (the default)
       input: Discard the result and return None.
 
@@ -6358,21 +6364,21 @@
   "list lines"
       input:
         Return the file contents as a list, with a string for each line. The
-        newlines will not be present in the result. The last line may or may not
-        end in a newline.
+        newlines will not be present in the result. The last line may or may
+        not end in a newline.
 
         After splitting, each individual line will be trimmed of whitespace on
         both ends.
 
       output:
         Renders the value contents as a list, with a string for each line. The
-        newlines will not be present in the result. The last line will end in with
-        a newline.
+        newlines will not be present in the result. The last line will end in
+        with a newline.
 
   "scope"
       input:
-        Execute the block as GN code and return a scope with the resulting values
-        in it. If the input was:
+        Execute the block as GN code and return a scope with the resulting
+        values in it. If the input was:
           a = [ "hello.cc", "world.cc" ]
           b = 26
         and you read the result into a variable named "val", then you could
@@ -6417,8 +6423,8 @@
         will produce an error if assigned to a variable.
 
       output:
-        Render the value contents as a literal rvalue. Strings render with escaped
-        quotes.
+        Render the value contents as a literal rvalue. Strings render with
+        escaped quotes.
 
   "json"
       input: Parse the input as a JSON and convert it to equivalent GN rvalue.
@@ -6629,11 +6635,13 @@
   advice on fixing problems. Targets can also opt-out of checking, see
   "gn help check_includes".
 ```
-### <a name="output_conversion"></a>**Input and output conversions are arguments to file and process functions**
-#### **that specify how to convert data to or from external formats. The possible**
-#### **values for parameters specifying conversions are**:
+### <a name="output_conversion"></a>**Input and output conversion**
 
 ```
+  Input and output conversions are arguments to file and process functions
+  that specify how to convert data to or from external formats. The possible
+  values for parameters specifying conversions are:
+
   "" (the default)
       input: Discard the result and return None.
 
@@ -6642,21 +6650,21 @@
   "list lines"
       input:
         Return the file contents as a list, with a string for each line. The
-        newlines will not be present in the result. The last line may or may not
-        end in a newline.
+        newlines will not be present in the result. The last line may or may
+        not end in a newline.
 
         After splitting, each individual line will be trimmed of whitespace on
         both ends.
 
       output:
         Renders the value contents as a list, with a string for each line. The
-        newlines will not be present in the result. The last line will end in with
-        a newline.
+        newlines will not be present in the result. The last line will end in
+        with a newline.
 
   "scope"
       input:
-        Execute the block as GN code and return a scope with the resulting values
-        in it. If the input was:
+        Execute the block as GN code and return a scope with the resulting
+        values in it. If the input was:
           a = [ "hello.cc", "world.cc" ]
           b = 26
         and you read the result into a variable named "val", then you could
@@ -6701,8 +6709,8 @@
         will produce an error if assigned to a variable.
 
       output:
-        Render the value contents as a literal rvalue. Strings render with escaped
-        quotes.
+        Render the value contents as a literal rvalue. Strings render with
+        escaped quotes.
 
   "json"
       input: Parse the input as a JSON and convert it to equivalent GN rvalue.
@@ -6921,28 +6929,28 @@
     //out/Debug/obj/mydirectory/input2.h
     //out/Debug/obj/mydirectory/input2.cc
 ```
-## <a name="switches"></a>Command Line Switches
-
-**Available global switches
-**  Do "gn help --the_switch_you_want_help_on" for more. Individual
-  commands may take command-specific switches not listed here. See the
-  help on your specific command for more.
+### <a name="switch_list"></a>**Available global switches**
 
 ```
-    *   [--args: Specifies build arguments overrides.](#--args)
-    *   [--color: Force colored output.](#--color)
-    *   [--dotfile: Override the name of the ".gn" file.](#--dotfile)
-    *   [--fail-on-unused-args: Treat unused build args as fatal errors.](#--fail-on-unused-args)
-    *   [--markdown: Write help output in the Markdown format.](#--markdown)
-    *   [--nocolor: Force non-colored output.](#--nocolor)
-    *   [-q: Quiet mode. Don't print output on success.](#-q)
-    *   [--root: Explicitly specify source root.](#--root)
-    *   [--runtime-deps-list-file: Save runtime dependencies for targets in file.](#--runtime-deps-list-file)
-    *   [--script-executable: Set the executable used to execute scripts.](#--script-executable)
-    *   [--threads: Specify number of worker threads.](#--threads)
-    *   [--time: Outputs a summary of how long everything took.](#--time)
-    *   [--tracelog: Writes a Chrome-compatible trace log to the given file.](#--tracelog)
-    *   [-v: Verbose logging.](#-v)
-    *   [--version: Prints the GN version number and exits.](#--version)
+  Do "gn help --the_switch_you_want_help_on" for more. Individual commands may
+  take command-specific switches not listed here. See the help on your specific
+  command for more.
+```
+```
+    *   --args: Specifies build arguments overrides.
+    *   --color: Force colored output.
+    *   --dotfile: Override the name of the ".gn" file.
+    *   --fail-on-unused-args: Treat unused build args as fatal errors.
+    *   --markdown: Write help output in the Markdown format.
+    *   --nocolor: Force non-colored output.
+    *   -q: Quiet mode. Don't print output on success.
+    *   --root: Explicitly specify source root.
+    *   --runtime-deps-list-file: Save runtime dependencies for targets in file.
+    *   --script-executable: Set the executable used to execute scripts.
+    *   --threads: Specify number of worker threads.
+    *   --time: Outputs a summary of how long everything took.
+    *   --tracelog: Writes a Chrome-compatible trace log to the given file.
+    *   -v: Verbose logging.
+    *   --version: Prints the GN version number and exits.
 ```
 
diff --git a/tools/gn/command_args.cc b/tools/gn/command_args.cc
index fac8683..9957508 100644
--- a/tools/gn/command_args.cc
+++ b/tools/gn/command_args.cc
@@ -409,7 +409,11 @@
 const char kArgs_HelpShort[] =
     "args: Display or configure arguments declared by the build.";
 const char kArgs_Help[] =
-    R"(gn args <out_dir> [--list] [--short] [--args] [--overrides-only]
+    R"(gn args: (command-line tool)
+
+  Display or configure arguments declared by the build.
+
+    gn args <out_dir> [--list] [--short] [--args] [--overrides-only]
 
   See also "gn help buildargs" for a more high-level overview of how
   build arguments work.
diff --git a/tools/gn/command_help.cc b/tools/gn/command_help.cc
index 6e816ce..b7662a4 100644
--- a/tools/gn/command_help.cc
+++ b/tools/gn/command_help.cc
@@ -29,65 +29,86 @@
 
 namespace {
 
+// Some names exist in multiple sections, these prefixes are used for the
+// internal links to disambiguate when writing markdown.
+const char kCommandLinkPrefix[] = "cmd_";
+const char kFunctionLinkPrefix[] = "func_";
+const char kVariableLinkPrefix[] = "var_";
+
 void PrintToplevelHelp() {
   PrintSectionHelp("Commands", "<command>", "commands");
   for (const auto& cmd : commands::GetCommands())
-    PrintShortHelp(cmd.second.help_short);
+    PrintShortHelp(cmd.second.help_short, kCommandLinkPrefix + cmd.first);
 
   // Target declarations.
   PrintSectionHelp("Target declarations", "<function>", "targets");
   for (const auto& func : functions::GetFunctions()) {
     if (func.second.is_target)
-      PrintShortHelp(func.second.help_short);
+      PrintShortHelp(func.second.help_short, kFunctionLinkPrefix + func.first);
   }
 
   // Functions.
   PrintSectionHelp("Buildfile functions", "<function>", "functions");
   for (const auto& func : functions::GetFunctions()) {
     if (!func.second.is_target)
-      PrintShortHelp(func.second.help_short);
+      PrintShortHelp(func.second.help_short, kFunctionLinkPrefix + func.first);
   }
 
   // Built-in variables.
   PrintSectionHelp("Built-in predefined variables", "<variable>",
                    "predefined_variables");
-  for (const auto& builtin : variables::GetBuiltinVariables())
-    PrintShortHelp(builtin.second.help_short);
+  for (const auto& builtin : variables::GetBuiltinVariables()) {
+    PrintShortHelp(builtin.second.help_short,
+                   kVariableLinkPrefix + builtin.first);
+  }
 
   // Target variables.
   PrintSectionHelp("Variables you set in targets", "<variable>",
                    "target_variables");
-  for (const auto& target : variables::GetTargetVariables())
-    PrintShortHelp(target.second.help_short);
+  for (const auto& target : variables::GetTargetVariables()) {
+    PrintShortHelp(target.second.help_short,
+                   kVariableLinkPrefix + target.first);
+  }
 
   PrintSectionHelp("Other help topics", "", "other");
   PrintShortHelp("all: Print all the help at once");
-  PrintShortHelp("buildargs: How build arguments work.");
-  PrintShortHelp("dotfile: Info about the toplevel .gn file.");
-  PrintShortHelp("execution: Build graph and execution overview.");
-  PrintShortHelp("grammar: Language and grammar for GN build files.");
+  PrintShortHelp("buildargs: How build arguments work.", "buildargs");
+  PrintShortHelp("dotfile: Info about the toplevel .gn file.", "dotfile");
+  PrintShortHelp("execution: Build graph and execution overview.", "execution");
+  PrintShortHelp("grammar: Language and grammar for GN build files.",
+                 "grammar");
   PrintShortHelp(
-      "input_conversion: Processing input from exec_script and read_file.");
-  PrintShortHelp("label_pattern: Matching more than one label.");
-  PrintShortHelp("labels: About labels.");
-  PrintShortHelp("ninja_rules: How Ninja build rules are named.");
-  PrintShortHelp("nogncheck: Annotating includes for checking.");
+      "input_conversion: Processing input from exec_script and read_file.",
+      "input_conversion");
+  PrintShortHelp("label_pattern: Matching more than one label.",
+                 "label_pattern");
+  PrintShortHelp("labels: About labels.", "labels");
+  PrintShortHelp("ninja_rules: How Ninja build rules are named.",
+                 "ninja_rules");
+  PrintShortHelp("nogncheck: Annotating includes for checking.", "nogncheck");
   PrintShortHelp(
-      "output_conversion: Specifies how to transform a value to output.");
-  PrintShortHelp("runtime_deps: How runtime dependency computation works.");
-  PrintShortHelp("source_expansion: Map sources to outputs for scripts.");
-  PrintShortHelp("switches: Show available command-line switches.");
+      "output_conversion: Specifies how to transform a value to output.",
+      "output_conversion");
+  PrintShortHelp("runtime_deps: How runtime dependency computation works.",
+                 "runtime_deps");
+  PrintShortHelp("source_expansion: Map sources to outputs for scripts.",
+                 "source_expansion");
+  PrintShortHelp("switches: Show available command-line switches.", "switch_list");
 }
 
 void PrintSwitchHelp() {
   const base::CommandLine* cmdline = base::CommandLine::ForCurrentProcess();
   bool is_markdown = cmdline->HasSwitch(switches::kMarkdown);
 
-  OutputString("Available global switches\n", DECORATION_YELLOW);
-  OutputString(
-      "  Do \"gn help --the_switch_you_want_help_on\" for more. Individual\n"
-      "  commands may take command-specific switches not listed here. See the\n"
-      "  help on your specific command for more.\n\n");
+  // This uses "switch_list" for the tag because Markdown seems to generate
+  // implicit tags for headings that match the strings, and some headings are
+  // labeled "switches".
+  PrintLongHelp(R"(Available global switches
+
+  Do "gn help --the_switch_you_want_help_on" for more. Individual commands may
+  take command-specific switches not listed here. See the help on your specific
+  command for more.
+)", "switch_list");
 
   if (is_markdown)
     OutputString("```\n", DECORATION_NONE);
@@ -125,7 +146,7 @@
                  NO_ESCAPING);
   }
   for (const auto& c : commands::GetCommands())
-    PrintLongHelp(c.second.help);
+    PrintLongHelp(c.second.help, kCommandLinkPrefix + c.first);
 
   if (is_markdown) {
     OutputString("## <a name=\"targets\"></a>Target declarations\n\n",
@@ -133,7 +154,7 @@
   }
   for (const auto& f : functions::GetFunctions()) {
     if (f.second.is_target)
-      PrintLongHelp(f.second.help);
+      PrintLongHelp(f.second.help, kFunctionLinkPrefix + f.first);
   }
 
   if (is_markdown) {
@@ -142,7 +163,7 @@
   }
   for (const auto& f : functions::GetFunctions()) {
     if (!f.second.is_target)
-      PrintLongHelp(f.second.help);
+      PrintLongHelp(f.second.help, kFunctionLinkPrefix + f.first);
   }
 
   if (is_markdown) {
@@ -152,7 +173,7 @@
         DECORATION_NONE, NO_ESCAPING);
   }
   for (const auto& v : variables::GetBuiltinVariables())
-    PrintLongHelp(v.second.help);
+    PrintLongHelp(v.second.help, kVariableLinkPrefix + v.first);
 
   if (is_markdown) {
     OutputString(
@@ -161,7 +182,7 @@
         DECORATION_NONE, NO_ESCAPING);
   }
   for (const auto& v : variables::GetTargetVariables())
-    PrintLongHelp(v.second.help);
+    PrintLongHelp(v.second.help, kVariableLinkPrefix + v.first);
 
   if (is_markdown) {
     OutputString("## <a name=\"other\"></a>Other help topics\n\n",
@@ -180,10 +201,6 @@
   PrintLongHelp(kRuntimeDeps_Help, "runtime_deps");
   PrintLongHelp(kSourceExpansion_Help, "source_expansion");
 
-  if (is_markdown) {
-    OutputString("## <a name=\"switches\"></a>Command Line Switches\n\n",
-                 DECORATION_NONE, NO_ESCAPING);
-  }
   PrintSwitchHelp();
 }
 
@@ -200,6 +217,18 @@
   return true;
 }
 
+// Special-case help for ambiguous "args" case.
+void PrintArgsHelp() {
+  PrintLongHelp(
+      "The string \"args\" is both a command and a variable for action "
+      "targets.\nShowing help for both...\n\n");
+  PrintLongHelp(commands::kArgs_Help);
+  PrintLongHelp(
+      "\n----------------------------------------------------------------------"
+      "---------\n\n");
+  PrintLongHelp(variables::kArgs_Help);
+}
+
 }  // namespace
 
 const char kHelp[] = "help";
@@ -248,6 +277,12 @@
 
   std::vector<base::StringPiece> all_help_topics;
 
+  // Special-case ambiguous topics.
+  if (what == "args") {
+    PrintArgsHelp();
+    return 0;
+  }
+
   // Check commands.
   const commands::CommandInfoMap& command_map = commands::GetCommands();
   auto found_command = command_map.find(what);
diff --git a/tools/gn/input_conversion.cc b/tools/gn/input_conversion.cc
index df58d9d..270d437 100644
--- a/tools/gn/input_conversion.cc
+++ b/tools/gn/input_conversion.cc
@@ -241,9 +241,11 @@
 }  // namespace
 
 const char kInputOutputConversion_Help[] =
-    R"(Input and output conversions are arguments to file and process functions
-that specify how to convert data to or from external formats. The possible
-values for parameters specifying conversions are:
+    R"(Input and output conversion
+
+  Input and output conversions are arguments to file and process functions
+  that specify how to convert data to or from external formats. The possible
+  values for parameters specifying conversions are:
 
   "" (the default)
       input: Discard the result and return None.
@@ -253,21 +255,21 @@
   "list lines"
       input:
         Return the file contents as a list, with a string for each line. The
-        newlines will not be present in the result. The last line may or may not
-        end in a newline.
+        newlines will not be present in the result. The last line may or may
+        not end in a newline.
 
         After splitting, each individual line will be trimmed of whitespace on
         both ends.
 
       output:
         Renders the value contents as a list, with a string for each line. The
-        newlines will not be present in the result. The last line will end in with
-        a newline.
+        newlines will not be present in the result. The last line will end in
+        with a newline.
 
   "scope"
       input:
-        Execute the block as GN code and return a scope with the resulting values
-        in it. If the input was:
+        Execute the block as GN code and return a scope with the resulting
+        values in it. If the input was:
           a = [ "hello.cc", "world.cc" ]
           b = 26
         and you read the result into a variable named "val", then you could
@@ -312,8 +314,8 @@
         will produce an error if assigned to a variable.
 
       output:
-        Render the value contents as a literal rvalue. Strings render with escaped
-        quotes.
+        Render the value contents as a literal rvalue. Strings render with
+        escaped quotes.
 
   "json"
       input: Parse the input as a JSON and convert it to equivalent GN rvalue.
diff --git a/tools/gn/standard_out.cc b/tools/gn/standard_out.cc
index d2ff52e..f74b9ab 100644
--- a/tools/gn/standard_out.cc
+++ b/tools/gn/standard_out.cc
@@ -78,8 +78,8 @@
 #endif  // !defined(OS_WIN)
 
 void OutputMarkdownDec(TextDecoration dec) {
-  // The markdown rendering turns "dim" text to italics and any
-  // other colored text to bold.
+// The markdown rendering turns "dim" text to italics and any
+// other colored text to bold.
 
 #if defined(OS_WIN)
   DWORD written = 0;
@@ -226,26 +226,24 @@
   }
 }
 
-void PrintShortHelp(const std::string& line) {
+void PrintShortHelp(const std::string& line, const std::string& link_tag) {
   EnsureInitialized();
 
+  if (is_markdown) {
+    if (link_tag.empty())
+      OutputString("    *   " + line + "\n");
+    else
+      OutputString("    *   [" + line + "](#" + link_tag + ")\n");
+    return;
+  }
+
   size_t colon_offset = line.find(':');
   size_t first_normal = 0;
   if (colon_offset != std::string::npos) {
-    if (is_markdown) {
-      OutputString("    *   [" + line + "](#" + line.substr(0, colon_offset) +
-                   ")\n");
-    } else {
-      OutputString("  " + line.substr(0, colon_offset), DECORATION_YELLOW);
-      first_normal = colon_offset;
-    }
-  } else if (is_markdown) {
-    OutputString("    *   [" + line + "](" + line + ")\n");
+    OutputString("  " + line.substr(0, colon_offset), DECORATION_YELLOW);
+    first_normal = colon_offset;
   }
 
-  if (is_markdown)
-    return;
-
   // See if the colon is followed by a " [" and if so, dim the contents of [ ].
   if (first_normal > 0 && line.size() > first_normal + 2 &&
       line[first_normal + 1] == ' ' && line[first_normal + 2] == '[') {
@@ -289,16 +287,8 @@
           in_body = false;
         }
 
-        if (first_header) {
-          std::string the_tag = tag;
-          if (the_tag.size() == 0) {
-            if (line.substr(0, 2) == "gn") {
-              the_tag = line.substr(3, line.substr(3).find(' '));
-            } else {
-              the_tag = line.substr(0, line.find(':'));
-            }
-          }
-          OutputString("### <a name=\"" + the_tag + "\"></a>", DECORATION_NONE,
+        if (first_header && !tag.empty()) {
+          OutputString("### <a name=\"" + tag + "\"></a>", DECORATION_NONE,
                        NO_ESCAPING);
           first_header = false;
         } else {
diff --git a/tools/gn/standard_out.h b/tools/gn/standard_out.h
index c793b29..5c0fcce 100644
--- a/tools/gn/standard_out.h
+++ b/tools/gn/standard_out.h
@@ -38,13 +38,24 @@
 // the colon is the command (and is highlighted). After the colon if there is
 // a square bracket, the contents of the bracket is dimmed.
 //
+// The link_tag is set, it will be used for markdown output links. This is
+// used when generating the markdown for all help topics. If empty, no link tag
+// will be emitted. In non-markdown mode, this parameter will be ignored.
+//
 // The line is indented 2 spaces.
-void PrintShortHelp(const std::string& line);
+void PrintShortHelp(const std::string& line,
+                    const std::string& link_tag = std::string());
 
+// Prints a longer help section.
+//
 // Rules:
 // - Lines beginning with non-whitespace are highlighted up to the first
 //   colon (or the whole line if not).
 // - Lines whose first non-whitespace character is a # are dimmed.
+//
+// The tag will be used as a link target for the first header. This is used
+// when generating the markdown for all help topics. If empty, no link tag will
+// be emitted. Used only in markdown mode.
 void PrintLongHelp(const std::string& text, const std::string& tag = "");
 
 #endif  // TOOLS_GN_STANDARD_OUT_H_
diff --git a/tools/gn/variables.cc b/tools/gn/variables.cc
index 7723636..7d607e4 100644
--- a/tools/gn/variables.cc
+++ b/tools/gn/variables.cc
@@ -516,7 +516,7 @@
 const char kArgs_HelpShort[] =
     "args: [string list] Arguments passed to an action.";
 const char kArgs_Help[] =
-    R"(args: Arguments passed to an action.
+    R"(args: (target variable) Arguments passed to an action.
 
   For action and action_foreach targets, args is the list of arguments to pass
   to the script. Typically you would use source expansion (see "gn help
@@ -1945,10 +1945,9 @@
 
 const char kXcodeTestApplicationName[] = "xcode_test_application_name";
 const char kXcodeTestApplicationName_HelpShort[] =
-    "test_application_name: [string] Test application name for unit or ui test "
-    "target.";
+    "xcode_test_application_name: [string] Name for Xcode test target.";
 const char kXcodeTestApplicationName_Help[] =
-    R"(test_application_name: Test application name for unit or ui test target.
+    R"(xcode_test_application_name: Name for Xcode test target.
 
   Each unit and ui test target must have a test application target, and this
   value is used to specify the relationship. Only meaningful to Xcode (used as
