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, 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 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 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> <a name="usage-fixing"></a>

View File

@ -20,9 +20,33 @@ CONTENTS *ale-contents*
5.6 Symbol Search.....................|ale-symbol-search| 5.6 Symbol Search.....................|ale-symbol-search|
6. Global Options.......................|ale-options| 6. Global Options.......................|ale-options|
6.1 Highlights........................|ale-highlights| 6.1 Highlights........................|ale-highlights|
6.2 Options for alex Linter...........|ale-alex-options| 7. Linter/Fixer Options.................|ale-integration-options|
6.3 Options for write-good Linter.....|ale-write-good-options| 7.1 Options for alex..................|ale-alex-options|
7. Integration Documentation............|ale-integrations| 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| ada...................................|ale-ada-options|
gcc.................................|ale-ada-gcc| gcc.................................|ale-ada-gcc|
ansible...............................|ale-ansible-options| ansible...............................|ale-ansible-options|
@ -378,29 +402,6 @@ CONTENTS *ale-contents*
yamllint............................|ale-yaml-yamllint| yamllint............................|ale-yaml-yamllint|
yang..................................|ale-yang-options| yang..................................|ale-yang-options|
yang-lsp............................|ale-yang-lsp| 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 ALE can fix problems with files with the |ALEFix| command, using the same job
control functionality used for checking for problems. Try using the 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|. 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 Linter and fixer options are documented below and in individual help files.
have them specified on a per-language basis.
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* g:ale_alex_executable *g:ale_alex_executable*
*b: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 The options for `write-good` are shared between all filetypes, so options can
sense to have them specified on a per-language basis. be configured once.
g:ale_writegood_executable *g:ale_writegood_executable* g:ale_writegood_executable *g:ale_writegood_executable*
*b: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| 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 ALE supports a very wide variety of tools. Other linter or fixer options are
table of contents at |ale-contents|. documented in additional help files.
Every option for programs can be set globally, or individually for each ada.....................................|ale-ada-options|
buffer. For example, `b:ale_python_flake8_executable` will override any gcc...................................|ale-ada-gcc|
values set for `g:ale_python_flake8_executable`. ansible.................................|ale-ansible-options|
ansible-lint..........................|ale-ansible-ansible-lint|
*ale-integrations-local-executables* asciidoc................................|ale-asciidoc-options|
write-good............................|ale-asciidoc-write-good|
Some tools will prefer to search for locally-installed executables, unless textlint..............................|ale-asciidoc-textlint|
configured otherwise. For example, the `eslint` linter will search for asm.....................................|ale-asm-options|
various executable paths in `node_modules`. The `flake8` linter will search gcc...................................|ale-asm-gcc|
for virtualenv directories. awk.....................................|ale-awk-options|
gawk..................................|ale-awk-gawk|
If you prefer to use global executables for those tools, set the relevant bib.....................................|ale-bib-options|
`_use_global` and `_executable` options for those linters. > bibclean..............................|ale-bib-bibclean|
c.......................................|ale-c-options|
" Use the global executable with a special name for eslint. clang.................................|ale-c-clang|
let g:ale_javascript_eslint_executable = 'special-eslint' clangd................................|ale-c-clangd|
let g:ale_javascript_eslint_use_global = 1 clang-format..........................|ale-c-clangformat|
clangtidy.............................|ale-c-clangtidy|
" Use the global executable with a special name for flake8. cppcheck..............................|ale-c-cppcheck|
let g:ale_python_flake8_executable = '/foo/bar/flake8' cquery................................|ale-c-cquery|
let g:ale_python_flake8_use_global = 1 flawfinder............................|ale-c-flawfinder|
< gcc...................................|ale-c-gcc|
uncrustify............................|ale-c-uncrustify|
|g:ale_use_global_executables| can be set to `1` in your vimrc file to make ccls..................................|ale-c-ccls|
ALE use global executables for all linters by default. chef....................................|ale-chef-options|
foodcritic............................|ale-chef-foodcritic|
The option |g:ale_virtualenv_dir_names| controls the local virtualenv paths clojure.................................|ale-clojure-options|
ALE will use to search for Python executables. 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 # This script checks that the table of contents for the supported tools is
# sorted, and that the table matches the files. # sorted, and that the table matches the files.
toc_start_line="$( \ toc_section_start_line="$(
grep -m1 -n 'Integration Documentation.*|ale-integrations|' doc/ale.txt \ 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/' \ | sed 's/\([0-9]*\).*/\1/' \
)" )"
# shellcheck disable=SC2003 # 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="$( \ toc_section_size="$( \
tail -n +"$toc_start_line" doc/ale.txt \ tail -n +"$toc_start_line" doc/ale.txt \
| grep -m1 -n '^ [0-9]\+\.' \ | grep -m1 -n '^===*$' \
| sed 's/\([0-9]*\).*/\1/' \ | sed 's/\([0-9]*\).*/\1/' \
)" )"
# shellcheck disable=SC2003 # 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)" toc_file="$(mktemp -t table-of-contents.XXXXXXXX)"
heading_file="$(mktemp -t headings.XXXXXXXX)" heading_file="$(mktemp -t headings.XXXXXXXX)"