Fix #2293 - Update linter option documentation

* The README now points to a valid helptag for linter options.
* The now very, very large part of the table of contents for linter and
  fixer options has been moved into a section so the initial table is
  smaller.
* Special linter or fixer options now lie beneath the general linter
  or fixer options.
This commit is contained in:
w0rp 2019-02-13 21:22:02 +00:00
parent 3050a132b5
commit 3140abcd0c
No known key found for this signature in database
GPG Key ID: 0FC1ECAA8C81CD83
3 changed files with 439 additions and 72 deletions

View File

@ -100,7 +100,7 @@ new buffers or as you make edits to your files.
The behaviour of linting can be configured with a variety of options,
documented in [the Vim help file](doc/ale.txt). For more information on the
options ALE offers, consult `:help ale-options` for global options and `:help
ale-linter-options` for options specified to particular linters.
ale-integration-options` for options specified to particular linters.
<a name="usage-fixing"></a>

View File

@ -20,9 +20,33 @@ CONTENTS *ale-contents*
5.6 Symbol Search.....................|ale-symbol-search|
6. Global Options.......................|ale-options|
6.1 Highlights........................|ale-highlights|
6.2 Options for alex Linter...........|ale-alex-options|
6.3 Options for write-good Linter.....|ale-write-good-options|
7. Integration Documentation............|ale-integrations|
7. Linter/Fixer Options.................|ale-integration-options|
7.1 Options for alex..................|ale-alex-options|
7.2 Options for write-good............|ale-write-good-options|
7.3 Other Linter/Fixer Options........|ale-other-integration-options|
8. Commands/Keybinds....................|ale-commands|
9. API..................................|ale-api|
10. Special Thanks......................|ale-special-thanks|
11. Contact.............................|ale-contact|
===============================================================================
1. Introduction *ale-introduction*
ALE provides the means to run linters asynchronously in Vim in a variety of
languages and tools. ALE sends the contents of buffers to linter programs
using the |job-control| features available in Vim 8 and NeoVim. For Vim 8,
Vim must be compiled with the |job| and |channel| and |timers| features
as a minimum.
ALE supports the following key features for linting:
1. Running linters when text is changed.
2. Running linters when files are opened.
3. Running linters when files are saved. (When a global flag is set.)
4. Populating the |loclist| with warning and errors.
5. Setting |signs| with warnings and errors for error markers.
6. Using |echo| to show error messages when the cursor moves.
7. Setting syntax highlights for errors.
ada...................................|ale-ada-options|
gcc.................................|ale-ada-gcc|
ansible...............................|ale-ansible-options|
@ -378,29 +402,6 @@ CONTENTS *ale-contents*
yamllint............................|ale-yaml-yamllint|
yang..................................|ale-yang-options|
yang-lsp............................|ale-yang-lsp|
8. Commands/Keybinds....................|ale-commands|
9. API..................................|ale-api|
10. Special Thanks......................|ale-special-thanks|
11. Contact.............................|ale-contact|
===============================================================================
1. Introduction *ale-introduction*
ALE provides the means to run linters asynchronously in Vim in a variety of
languages and tools. ALE sends the contents of buffers to linter programs
using the |job-control| features available in Vim 8 and NeoVim. For Vim 8,
Vim must be compiled with the |job| and |channel| and |timers| features
as a minimum.
ALE supports the following key features for linting:
1. Running linters when text is changed.
2. Running linters when files are opened.
3. Running linters when files are saved. (When a global flag is set.)
4. Populating the |loclist| with warning and errors.
5. Setting |signs| with warnings and errors for error markers.
6. Using |echo| to show error messages when the cursor moves.
7. Setting syntax highlights for errors.
ALE can fix problems with files with the |ALEFix| command, using the same job
control functionality used for checking for problems. Try using the
@ -2105,11 +2106,45 @@ ALEWarningSign *ALEWarningSign*
The highlight for warning signs. See |g:ale_set_signs|.
-------------------------------------------------------------------------------
6.2. Options for alex *ale-alex-options*
===============================================================================
7. Linter/Fixer Options *ale-integration-options*
The options for the alex linter are global because it does not make sense to
have them specified on a per-language basis.
Linter and fixer options are documented below and in individual help files.
Every option for programs can be set globally, or individually for each
buffer. For example, `b:ale_python_flake8_executable` will override any
values set for `g:ale_python_flake8_executable`.
*ale-integrations-local-executables*
Some tools will prefer to search for locally-installed executables, unless
configured otherwise. For example, the `eslint` linter will search for
various executable paths in `node_modules`. The `flake8` linter will search
for virtualenv directories.
If you prefer to use global executables for those tools, set the relevant
`_use_global` and `_executable` options for those linters. >
" Use the global executable with a special name for eslint.
let g:ale_javascript_eslint_executable = 'special-eslint'
let g:ale_javascript_eslint_use_global = 1
" Use the global executable with a special name for flake8.
let g:ale_python_flake8_executable = '/foo/bar/flake8'
let g:ale_python_flake8_use_global = 1
<
|g:ale_use_global_executables| can be set to `1` in your vimrc file to make
ALE use global executables for all linters by default.
The option |g:ale_virtualenv_dir_names| controls the local virtualenv paths
ALE will use to search for Python executables.
-------------------------------------------------------------------------------
7.1. Options for alex *ale-alex-options*
The options for `alex` are shared between all filetypes, so options can be
configured once.
g:ale_alex_executable *g:ale_alex_executable*
*b:ale_alex_executable*
@ -2128,10 +2163,10 @@ g:ale_alex_use_global *g:ale_alex_use_global*
-------------------------------------------------------------------------------
6.3. Options for write-good *ale-write-good-options*
7.2. Options for write-good *ale-write-good-options*
The options for the write-good linter are global because it does not make
sense to have them specified on a per-language basis.
The options for `write-good` are shared between all filetypes, so options can
be configured once.
g:ale_writegood_executable *g:ale_writegood_executable*
*b:ale_writegood_executable*
@ -2157,40 +2192,367 @@ g:ale_writegood_use_global *g:ale_writegood_use_global*
See |ale-integrations-local-executables|
===============================================================================
7. Integration Documentation *ale-integrations*
-------------------------------------------------------------------------------
7.3. Other Linter/Fixer Options *ale-other-integration-options*
Linter and fixer options are documented in individual help files. See the
table of contents at |ale-contents|.
ALE supports a very wide variety of tools. Other linter or fixer options are
documented in additional help files.
Every option for programs can be set globally, or individually for each
buffer. For example, `b:ale_python_flake8_executable` will override any
values set for `g:ale_python_flake8_executable`.
*ale-integrations-local-executables*
Some tools will prefer to search for locally-installed executables, unless
configured otherwise. For example, the `eslint` linter will search for
various executable paths in `node_modules`. The `flake8` linter will search
for virtualenv directories.
If you prefer to use global executables for those tools, set the relevant
`_use_global` and `_executable` options for those linters. >
" Use the global executable with a special name for eslint.
let g:ale_javascript_eslint_executable = 'special-eslint'
let g:ale_javascript_eslint_use_global = 1
" Use the global executable with a special name for flake8.
let g:ale_python_flake8_executable = '/foo/bar/flake8'
let g:ale_python_flake8_use_global = 1
<
|g:ale_use_global_executables| can be set to `1` in your vimrc file to make
ALE use global executables for all linters by default.
The option |g:ale_virtualenv_dir_names| controls the local virtualenv paths
ALE will use to search for Python executables.
ada.....................................|ale-ada-options|
gcc...................................|ale-ada-gcc|
ansible.................................|ale-ansible-options|
ansible-lint..........................|ale-ansible-ansible-lint|
asciidoc................................|ale-asciidoc-options|
write-good............................|ale-asciidoc-write-good|
textlint..............................|ale-asciidoc-textlint|
asm.....................................|ale-asm-options|
gcc...................................|ale-asm-gcc|
awk.....................................|ale-awk-options|
gawk..................................|ale-awk-gawk|
bib.....................................|ale-bib-options|
bibclean..............................|ale-bib-bibclean|
c.......................................|ale-c-options|
clang.................................|ale-c-clang|
clangd................................|ale-c-clangd|
clang-format..........................|ale-c-clangformat|
clangtidy.............................|ale-c-clangtidy|
cppcheck..............................|ale-c-cppcheck|
cquery................................|ale-c-cquery|
flawfinder............................|ale-c-flawfinder|
gcc...................................|ale-c-gcc|
uncrustify............................|ale-c-uncrustify|
ccls..................................|ale-c-ccls|
chef....................................|ale-chef-options|
foodcritic............................|ale-chef-foodcritic|
clojure.................................|ale-clojure-options|
joker.................................|ale-clojure-joker|
cloudformation..........................|ale-cloudformation-options|
cfn-python-lint.......................|ale-cloudformation-cfn-python-lint|
cmake...................................|ale-cmake-options|
cmakelint.............................|ale-cmake-cmakelint|
cmake-format..........................|ale-cmake-cmakeformat|
cpp.....................................|ale-cpp-options|
clang.................................|ale-cpp-clang|
clangd................................|ale-cpp-clangd|
clangcheck............................|ale-cpp-clangcheck|
clang-format..........................|ale-cpp-clangformat|
clangtidy.............................|ale-cpp-clangtidy|
clazy.................................|ale-cpp-clazy|
cppcheck..............................|ale-cpp-cppcheck|
cpplint...............................|ale-cpp-cpplint|
cquery................................|ale-cpp-cquery|
flawfinder............................|ale-cpp-flawfinder|
gcc...................................|ale-cpp-gcc|
uncrustify............................|ale-cpp-uncrustify|
ccls..................................|ale-cpp-ccls|
c#......................................|ale-cs-options|
mcs...................................|ale-cs-mcs|
mcsc..................................|ale-cs-mcsc|
uncrustify............................|ale-cs-uncrustify|
css.....................................|ale-css-options|
prettier..............................|ale-css-prettier|
stylelint.............................|ale-css-stylelint|
cuda....................................|ale-cuda-options|
nvcc..................................|ale-cuda-nvcc|
d.......................................|ale-d-options|
dls...................................|ale-d-dls|
uncrustify............................|ale-d-uncrustify|
dart....................................|ale-dart-options|
dartanalyzer..........................|ale-dart-dartanalyzer|
dartfmt...............................|ale-dart-dartfmt|
dockerfile..............................|ale-dockerfile-options|
dockerfile_lint.......................|ale-dockerfile-dockerfile_lint|
hadolint..............................|ale-dockerfile-hadolint|
elixir..................................|ale-elixir-options|
mix...................................|ale-elixir-mix|
mix_format............................|ale-elixir-mix-format|
dialyxir..............................|ale-elixir-dialyxir|
elixir-ls.............................|ale-elixir-elixir-ls|
elm.....................................|ale-elm-options|
elm-format............................|ale-elm-elm-format|
elm-make..............................|ale-elm-elm-make|
erlang..................................|ale-erlang-options|
erlc..................................|ale-erlang-erlc|
syntaxerl.............................|ale-erlang-syntaxerl|
eruby...................................|ale-eruby-options|
ruumba................................|ale-eruby-ruumba|
fish....................................|ale-fish-options|
fortran.................................|ale-fortran-options|
gcc...................................|ale-fortran-gcc|
language_server.......................|ale-fortran-language-server|
fountain................................|ale-fountain-options|
fusionscript............................|ale-fuse-options|
fusion-lint...........................|ale-fuse-fusionlint|
git commit..............................|ale-gitcommit-options|
gitlint...............................|ale-gitcommit-gitlint|
glsl....................................|ale-glsl-options|
glslang...............................|ale-glsl-glslang|
glslls................................|ale-glsl-glslls|
go......................................|ale-go-options|
gobuild...............................|ale-go-gobuild|
gofmt.................................|ale-go-gofmt|
golint................................|ale-go-golint|
govet.................................|ale-go-govet|
gometalinter..........................|ale-go-gometalinter|
staticcheck...........................|ale-go-staticcheck|
golangserver..........................|ale-go-golangserver|
golangci-lint.........................|ale-go-golangci-lint|
bingo.................................|ale-go-bingo|
graphql.................................|ale-graphql-options|
eslint................................|ale-graphql-eslint|
gqlint................................|ale-graphql-gqlint|
prettier..............................|ale-graphql-prettier|
hack....................................|ale-hack-options|
hack..................................|ale-hack-hack|
hackfmt...............................|ale-hack-hackfmt|
hhast.................................|ale-hack-hhast|
handlebars..............................|ale-handlebars-options|
ember-template-lint...................|ale-handlebars-embertemplatelint|
haskell.................................|ale-haskell-options|
brittany..............................|ale-haskell-brittany|
ghc...................................|ale-haskell-ghc|
ghc-mod...............................|ale-haskell-ghc-mod|
cabal-ghc.............................|ale-haskell-cabal-ghc|
hdevtools.............................|ale-haskell-hdevtools|
hfmt..................................|ale-haskell-hfmt|
hlint.................................|ale-haskell-hlint|
stack-build...........................|ale-haskell-stack-build|
stack-ghc.............................|ale-haskell-stack-ghc|
stylish-haskell.......................|ale-haskell-stylish-haskell|
hie...................................|ale-haskell-hie|
hcl.....................................|ale-hcl-options|
terraform-fmt.........................|ale-hcl-terraform-fmt|
html....................................|ale-html-options|
htmlhint..............................|ale-html-htmlhint|
tidy..................................|ale-html-tidy|
prettier..............................|ale-html-prettier|
stylelint.............................|ale-html-stylelint|
write-good............................|ale-html-write-good|
idris...................................|ale-idris-options|
idris.................................|ale-idris-idris|
ispc....................................|ale-ispc-options|
ispc..................................|ale-ispc-ispc|
java....................................|ale-java-options|
checkstyle............................|ale-java-checkstyle|
javac.................................|ale-java-javac|
google-java-format....................|ale-java-google-java-format|
pmd...................................|ale-java-pmd|
javalsp...............................|ale-java-javalsp|
uncrustify............................|ale-java-uncrustify|
javascript..............................|ale-javascript-options|
eslint................................|ale-javascript-eslint|
flow..................................|ale-javascript-flow|
importjs..............................|ale-javascript-importjs|
jscs..................................|ale-javascript-jscs|
jshint................................|ale-javascript-jshint|
prettier..............................|ale-javascript-prettier|
prettier-eslint.......................|ale-javascript-prettier-eslint|
prettier-standard.....................|ale-javascript-prettier-standard|
standard..............................|ale-javascript-standard|
xo....................................|ale-javascript-xo|
json....................................|ale-json-options|
fixjson...............................|ale-json-fixjson|
jsonlint..............................|ale-json-jsonlint|
jq....................................|ale-json-jq|
prettier..............................|ale-json-prettier|
julia...................................|ale-julia-options|
languageserver........................|ale-julia-languageserver|
kotlin..................................|ale-kotlin-options|
kotlinc...............................|ale-kotlin-kotlinc|
ktlint................................|ale-kotlin-ktlint|
languageserver........................|ale-kotlin-languageserver|
latex...................................|ale-latex-options|
write-good............................|ale-latex-write-good|
textlint..............................|ale-latex-textlint|
less....................................|ale-less-options|
lessc.................................|ale-less-lessc|
prettier..............................|ale-less-prettier|
stylelint.............................|ale-less-stylelint|
llvm....................................|ale-llvm-options|
llc...................................|ale-llvm-llc|
lua.....................................|ale-lua-options|
luac..................................|ale-lua-luac|
luacheck..............................|ale-lua-luacheck|
markdown................................|ale-markdown-options|
mdl...................................|ale-markdown-mdl|
prettier..............................|ale-markdown-prettier|
remark-lint...........................|ale-markdown-remark-lint|
textlint..............................|ale-markdown-textlint|
write-good............................|ale-markdown-write-good|
mercury.................................|ale-mercury-options|
mmc...................................|ale-mercury-mmc|
nasm....................................|ale-nasm-options|
nasm..................................|ale-nasm-nasm|
nroff...................................|ale-nroff-options|
write-good............................|ale-nroff-write-good|
objc....................................|ale-objc-options|
clang.................................|ale-objc-clang|
clangd................................|ale-objc-clangd|
uncrustify............................|ale-objc-uncrustify|
ccls..................................|ale-objc-ccls|
objcpp..................................|ale-objcpp-options|
clang.................................|ale-objcpp-clang|
clangd................................|ale-objcpp-clangd|
uncrustify............................|ale-objcpp-uncrustify|
ocaml...................................|ale-ocaml-options|
merlin................................|ale-ocaml-merlin|
ols...................................|ale-ocaml-ols|
ocamlformat...........................|ale-ocaml-ocamlformat|
pawn....................................|ale-pawn-options|
uncrustify............................|ale-pawn-uncrustify|
perl....................................|ale-perl-options|
perl..................................|ale-perl-perl|
perlcritic............................|ale-perl-perlcritic|
perltidy..............................|ale-perl-perltidy|
perl6...................................|ale-perl6-options|
perl6.................................|ale-perl6-perl6|
php.....................................|ale-php-options|
langserver............................|ale-php-langserver|
phan..................................|ale-php-phan|
phpcbf................................|ale-php-phpcbf|
phpcs.................................|ale-php-phpcs|
phpmd.................................|ale-php-phpmd|
phpstan...............................|ale-php-phpstan|
psalm.................................|ale-php-psalm|
php-cs-fixer..........................|ale-php-php-cs-fixer|
php...................................|ale-php-php|
po......................................|ale-po-options|
write-good............................|ale-po-write-good|
pod.....................................|ale-pod-options|
write-good............................|ale-pod-write-good|
pony....................................|ale-pony-options|
ponyc.................................|ale-pony-ponyc|
prolog..................................|ale-prolog-options|
swipl.................................|ale-prolog-swipl|
proto...................................|ale-proto-options|
protoc-gen-lint.......................|ale-proto-protoc-gen-lint|
pug.....................................|ale-pug-options|
puglint...............................|ale-pug-puglint|
puppet..................................|ale-puppet-options|
puppet................................|ale-puppet-puppet|
puppetlint............................|ale-puppet-puppetlint|
puppet-languageserver.................|ale-puppet-languageserver|
pyrex (cython)..........................|ale-pyrex-options|
cython................................|ale-pyrex-cython|
python..................................|ale-python-options|
autopep8..............................|ale-python-autopep8|
bandit................................|ale-python-bandit|
black.................................|ale-python-black|
flake8................................|ale-python-flake8|
isort.................................|ale-python-isort|
mypy..................................|ale-python-mypy|
prospector............................|ale-python-prospector|
pycodestyle...........................|ale-python-pycodestyle|
pydocstyle............................|ale-python-pydocstyle|
pyflakes..............................|ale-python-pyflakes|
pylama................................|ale-python-pylama|
pylint................................|ale-python-pylint|
pyls..................................|ale-python-pyls|
pyre..................................|ale-python-pyre|
vulture...............................|ale-python-vulture|
yapf..................................|ale-python-yapf|
qml.....................................|ale-qml-options|
qmlfmt................................|ale-qml-qmlfmt|
r.......................................|ale-r-options|
lintr.................................|ale-r-lintr|
reasonml................................|ale-reasonml-options|
merlin................................|ale-reasonml-merlin|
ols...................................|ale-reasonml-ols|
refmt.................................|ale-reasonml-refmt|
restructuredtext........................|ale-restructuredtext-options|
textlint..............................|ale-restructuredtext-textlint|
write-good............................|ale-restructuredtext-write-good|
ruby....................................|ale-ruby-options|
brakeman..............................|ale-ruby-brakeman|
rails_best_practices..................|ale-ruby-rails_best_practices|
reek..................................|ale-ruby-reek|
rubocop...............................|ale-ruby-rubocop|
ruby..................................|ale-ruby-ruby|
rufo..................................|ale-ruby-rufo|
solargraph............................|ale-ruby-solargraph|
standardrb............................|ale-ruby-standardrb|
rust....................................|ale-rust-options|
cargo.................................|ale-rust-cargo|
rls...................................|ale-rust-rls|
rustc.................................|ale-rust-rustc|
rustfmt...............................|ale-rust-rustfmt|
sass....................................|ale-sass-options|
sasslint..............................|ale-sass-sasslint|
stylelint.............................|ale-sass-stylelint|
scala...................................|ale-scala-options|
sbtserver.............................|ale-scala-sbtserver|
scalafmt..............................|ale-scala-scalafmt|
scalastyle............................|ale-scala-scalastyle|
scss....................................|ale-scss-options|
prettier..............................|ale-scss-prettier|
sasslint..............................|ale-scss-sasslint|
stylelint.............................|ale-scss-stylelint|
sh......................................|ale-sh-options|
sh-language-server....................|ale-sh-language-server|
shell.................................|ale-sh-shell|
shellcheck............................|ale-sh-shellcheck|
shfmt.................................|ale-sh-shfmt|
sml.....................................|ale-sml-options|
smlnj.................................|ale-sml-smlnj|
solidity................................|ale-solidity-options|
solhint...............................|ale-solidity-solhint|
solium................................|ale-solidity-solium|
spec....................................|ale-spec-options|
rpmlint...............................|ale-spec-rpmlint|
sql.....................................|ale-sql-options|
sqlfmt................................|ale-sql-sqlfmt|
stylus..................................|ale-stylus-options|
stylelint.............................|ale-stylus-stylelint|
sugarss.................................|ale-sugarss-options|
stylelint.............................|ale-sugarss-stylelint|
tcl.....................................|ale-tcl-options|
nagelfar..............................|ale-tcl-nagelfar|
terraform...............................|ale-terraform-options|
fmt...................................|ale-terraform-fmt|
tflint................................|ale-terraform-tflint|
tex.....................................|ale-tex-options|
chktex................................|ale-tex-chktex|
lacheck...............................|ale-tex-lacheck|
texinfo.................................|ale-texinfo-options|
write-good............................|ale-texinfo-write-good|
text....................................|ale-text-options|
textlint..............................|ale-text-textlint|
write-good............................|ale-text-write-good|
thrift..................................|ale-thrift-options|
thrift................................|ale-thrift-thrift|
typescript..............................|ale-typescript-options|
eslint................................|ale-typescript-eslint|
prettier..............................|ale-typescript-prettier|
tslint................................|ale-typescript-tslint|
tsserver..............................|ale-typescript-tsserver|
vala....................................|ale-vala-options|
uncrustify............................|ale-vala-uncrustify|
verilog/systemverilog...................|ale-verilog-options|
iverilog..............................|ale-verilog-iverilog|
verilator.............................|ale-verilog-verilator|
vlog..................................|ale-verilog-vlog|
xvlog.................................|ale-verilog-xvlog|
vhdl....................................|ale-vhdl-options|
ghdl..................................|ale-vhdl-ghdl|
vcom..................................|ale-vhdl-vcom|
xvhdl.................................|ale-vhdl-xvhdl|
vim.....................................|ale-vim-options|
vint..................................|ale-vim-vint|
vim help................................|ale-vim-help-options|
write-good............................|ale-vim-help-write-good|
vue.....................................|ale-vue-options|
prettier..............................|ale-vue-prettier|
vls...................................|ale-vue-vls|
xhtml...................................|ale-xhtml-options|
write-good............................|ale-xhtml-write-good|
xml.....................................|ale-xml-options|
xmllint...............................|ale-xml-xmllint|
yaml....................................|ale-yaml-options|
prettier..............................|ale-yaml-prettier|
swaglint..............................|ale-yaml-swaglint|
yamllint..............................|ale-yaml-yamllint|
yang....................................|ale-yang-options|
yang-lsp..............................|ale-yang-lsp|
===============================================================================

View File

@ -6,19 +6,24 @@ set -u
# This script checks that the table of contents for the supported tools is
# sorted, and that the table matches the files.
toc_start_line="$( \
grep -m1 -n 'Integration Documentation.*|ale-integrations|' doc/ale.txt \
toc_section_start_line="$(
grep -m1 -n '^7\..*\*ale-other-integration-options\*' doc/ale.txt \
| sed 's/\([0-9]*\).*/\1/' \
)"
toc_start_offset="$( \
tail -n +"$toc_section_start_line" doc/ale.txt \
| grep -m1 -n '^ .*\.\.\.' \
| sed 's/\([0-9]*\).*/\1/' \
)"
# shellcheck disable=SC2003
toc_start_line="$(expr "$toc_start_line" + 1)"
toc_start_line="$(expr "$toc_section_start_line" + "$toc_start_offset" - 1)"
toc_section_size="$( \
tail -n +"$toc_start_line" doc/ale.txt \
| grep -m1 -n '^ [0-9]\+\.' \
| grep -m1 -n '^===*$' \
| sed 's/\([0-9]*\).*/\1/' \
)"
# shellcheck disable=SC2003
toc_end_line="$(expr "$toc_start_line" + "$toc_section_size" - 2)"
toc_end_line="$(expr "$toc_start_line" + "$toc_section_size" - 4)"
toc_file="$(mktemp -t table-of-contents.XXXXXXXX)"
heading_file="$(mktemp -t headings.XXXXXXXX)"